Mercurial > hgrepos > Python > apps > py-cutils
comparison cutils/genpwd.py @ 248:4796e5da04ee
genpwd: Rename "--repertoire" to "--algorithm"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 08 Feb 2025 12:57:14 +0100 |
| parents | 435687f4e071 |
| children | f161448d673e |
comparison
equal
deleted
inserted
replaced
| 247:435687f4e071 | 248:4796e5da04ee |
|---|---|
| 72 fromfile_prefix_chars='@') | 72 fromfile_prefix_chars='@') |
| 73 aparser.add_argument( | 73 aparser.add_argument( |
| 74 "--version", "-v", action="version", | 74 "--version", "-v", action="version", |
| 75 version="%s (rv:%s)" % (__version__, __revision__)) | 75 version="%s (rv:%s)" % (__version__, __revision__)) |
| 76 aparser.add_argument( | 76 aparser.add_argument( |
| 77 "-E", dest="use_bin_length", action="store_true", | 77 "--algorithm", "-a", |
| 78 help="For some repertoires make OUTPUT-LENGTH the number of bytes" | |
| 79 " that is to be read from random sources instead of output bytes") | |
| 80 aparser.add_argument( | |
| 81 "--repertoire", "--type", "-t", | |
| 82 choices=("web", "safe-web", "safe-web-2", | 78 choices=("web", "safe-web", "safe-web-2", |
| 83 "uri", "safe-uri", "safe-uri-2", | 79 "uri", "safe-uri", "safe-uri-2", |
| 84 "ascii", "safe-ascii", | 80 "ascii", "safe-ascii", |
| 85 "alnum", "safe-alnum", | 81 "alnum", "safe-alnum", |
| 86 "bin-base64", "bin-urlsafe-base64", "bin-base32", "bin-hex", | 82 "bin-base64", "bin-urlsafe-base64", "bin-base32", "bin-hex", |
| 87 "bin-ascii85",), | 83 "bin-ascii85",), |
| 88 default="safe-ascii", | 84 default="safe-ascii", |
| 89 help=""" | 85 help=""" |
| 90 Select from a character repertoire. | 86 Select an algorithm and (implicitly) a character repertoire. |
| 91 All repertoires that start with "bin-" just encode the output of | 87 All repertoires that start with `bin-' just encode the output of |
| 92 "os.urandom()" with the selected encoder. | 88 "os.urandom()" with the selected encoder. |
| 89 All repertoires that end with `-safe' or `safe-2' do not contain visually | |
| 90 similar characters (currently `0O' or `Il1'). | |
| 91 All repertoires that end with `-2' are variants with a bias to punctuation | |
| 92 characters. | |
| 93 Default: safe-ascii | 93 Default: safe-ascii |
| 94 """) | 94 """) |
| 95 aparser.add_argument( | |
| 96 "-E", dest="use_bin_length", action="store_true", | |
| 97 help="For some repertoires make OUTPUT-LENGTH the number of bytes" | |
| 98 " that is to be read from random sources instead of output bytes") | |
| 95 aparser.add_argument( | 99 aparser.add_argument( |
| 96 "req_length", metavar="OUTPUT-LENGTH", type=int, | 100 "req_length", metavar="OUTPUT-LENGTH", type=int, |
| 97 help="The required length of the generated output") | 101 help="The required length of the generated output") |
| 98 | 102 |
| 99 opts = aparser.parse_args(args=argv) | 103 opts = aparser.parse_args(args=argv) |
| 100 | 104 |
| 101 if opts.repertoire == "web": | 105 if opts.algorithm == "web": |
| 102 pwd = gen_from_repertoire(opts.req_length, WEB_CHARS) | 106 pwd = gen_from_repertoire(opts.req_length, WEB_CHARS) |
| 103 elif opts.repertoire == "safe-web": | 107 elif opts.algorithm == "safe-web": |
| 104 pwd = gen_from_repertoire(opts.req_length, SAFE_WEB_CHARS) | 108 pwd = gen_from_repertoire(opts.req_length, SAFE_WEB_CHARS) |
| 105 elif opts.repertoire == "safe-web-2": | 109 elif opts.algorithm == "safe-web-2": |
| 106 pwd = gen_from_repertoire(opts.req_length, SAFE_WEB_CHARS_2) | 110 pwd = gen_from_repertoire(opts.req_length, SAFE_WEB_CHARS_2) |
| 107 elif opts.repertoire == "uri": | 111 elif opts.algorithm == "uri": |
| 108 pwd = gen_from_repertoire(opts.req_length, URI_CHARS) | 112 pwd = gen_from_repertoire(opts.req_length, URI_CHARS) |
| 109 elif opts.repertoire == "safe-uri": | 113 elif opts.algorithm == "safe-uri": |
| 110 pwd = gen_from_repertoire(opts.req_length, SAFE_URI_CHARS) | 114 pwd = gen_from_repertoire(opts.req_length, SAFE_URI_CHARS) |
| 111 elif opts.repertoire == "safe-uri-2": | 115 elif opts.algorithm == "safe-uri-2": |
| 112 pwd = gen_from_repertoire(opts.req_length, SAFE_URI_CHARS_2) | 116 pwd = gen_from_repertoire(opts.req_length, SAFE_URI_CHARS_2) |
| 113 elif opts.repertoire == "ascii": | 117 elif opts.algorithm == "ascii": |
| 114 pwd = gen_from_repertoire(opts.req_length, FULL_ASCII) | 118 pwd = gen_from_repertoire(opts.req_length, FULL_ASCII) |
| 115 elif opts.repertoire == "safe-ascii": | 119 elif opts.algorithm == "safe-ascii": |
| 116 pwd = gen_from_repertoire(opts.req_length, SAFE_ASCII) | 120 pwd = gen_from_repertoire(opts.req_length, SAFE_ASCII) |
| 117 elif opts.repertoire == "alnum": | 121 elif opts.algorithm == "alnum": |
| 118 pwd = gen_from_repertoire(opts.req_length, ALNUM) | 122 pwd = gen_from_repertoire(opts.req_length, ALNUM) |
| 119 elif opts.repertoire == "safe-alnum": | 123 elif opts.algorithm == "safe-alnum": |
| 120 pwd = gen_from_repertoire(opts.req_length, SAFE_ALNUM) | 124 pwd = gen_from_repertoire(opts.req_length, SAFE_ALNUM) |
| 121 elif opts.repertoire == "bin-base64": | 125 elif opts.algorithm == "bin-base64": |
| 122 encoder = base64.b64encode | 126 encoder = base64.b64encode |
| 123 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, | 127 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, |
| 124 rstrip_chars=b"=") | 128 rstrip_chars=b"=") |
| 125 elif opts.repertoire == "bin-urlsafe-base64": | 129 elif opts.algorithm == "bin-urlsafe-base64": |
| 126 encoder = base64.urlsafe_b64encode | 130 encoder = base64.urlsafe_b64encode |
| 127 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, | 131 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, |
| 128 rstrip_chars=b"=") | 132 rstrip_chars=b"=") |
| 129 elif opts.repertoire == "bin-base32": | 133 elif opts.algorithm == "bin-base32": |
| 130 encoder = base64.b32encode | 134 encoder = base64.b32encode |
| 131 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, | 135 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, |
| 132 rstrip_chars=b"=") | 136 rstrip_chars=b"=") |
| 133 elif opts.repertoire == "bin-ascii85": | 137 elif opts.algorithm == "bin-ascii85": |
| 134 encoder = base64.a85encode | 138 encoder = base64.a85encode |
| 135 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder) | 139 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder) |
| 136 elif opts.repertoire == "bin-hex": | 140 elif opts.algorithm == "bin-hex": |
| 137 encoder = binascii.hexlify | 141 encoder = binascii.hexlify |
| 138 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder) | 142 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder) |
| 139 else: | 143 else: |
| 140 raise NotImplementedError("type not yet implemented: %s" | 144 raise NotImplementedError("algorithm not yet implemented: %s" |
| 141 % opts.repertoire) | 145 % opts.algorithm) |
| 142 if opts.use_bin_length: | 146 if opts.use_bin_length: |
| 143 if len(pwd) < opts.req_length: | 147 if len(pwd) < opts.req_length: |
| 144 raise AssertionError("internal length mismatch") | 148 raise AssertionError("internal length mismatch") |
| 145 else: | 149 else: |
| 146 if len(pwd) != opts.req_length: | 150 if len(pwd) != opts.req_length: |
