comparison cutils/genpwd.py @ 241:d4501acb0a7c

Implement a "bin-hex" password selection/repertoire
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 08 Feb 2025 09:41:44 +0100
parents 32616df2732e
children ae9bc3006efc
comparison
equal deleted inserted replaced
240:32616df2732e 241:d4501acb0a7c
18 18
19 from __future__ import (division, absolute_import, print_function) 19 from __future__ import (division, absolute_import, print_function)
20 20
21 import argparse 21 import argparse
22 import base64 22 import base64
23 import binascii
23 import os 24 import os
24 import sys 25 import sys
25 26
26 from . import (__version__, __revision__) 27 from . import (__version__, __revision__)
27 28
49 " that is to be read from random sources instead of output bytes") 50 " that is to be read from random sources instead of output bytes")
50 aparser.add_argument( 51 aparser.add_argument(
51 "--repertoire", "--type", "-t", 52 "--repertoire", "--type", "-t",
52 choices=("web", "web-safe", "web-safe2", 53 choices=("web", "web-safe", "web-safe2",
53 "bin-base64", "bin-urlsafe-base64", "bin-base32", 54 "bin-base64", "bin-urlsafe-base64", "bin-base32",
54 "bin-ascii85", ), 55 "bin-ascii85", "bin-hex", ),
55 default="web-safe2", 56 default="web-safe2",
56 help="Select the character repertoire. Default: web-safe2") 57 help="Select the character repertoire. Default: web-safe2")
57 aparser.add_argument( 58 aparser.add_argument(
58 "req_length", metavar="OUTPUT-LENGTH", type=int, 59 "req_length", metavar="OUTPUT-LENGTH", type=int,
59 help="The required length of the generated output") 60 help="The required length of the generated output")
78 encoder = base64.b32encode 79 encoder = base64.b32encode
79 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder, 80 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder,
80 rstrip_chars=b"=") 81 rstrip_chars=b"=")
81 elif opts.repertoire == "bin-ascii85": 82 elif opts.repertoire == "bin-ascii85":
82 encoder = base64.a85encode 83 encoder = base64.a85encode
84 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder)
85 elif opts.repertoire == "bin-hex":
86 encoder = binascii.hexlify
83 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder) 87 pwd = gen_bin(opts.req_length, opts.use_bin_length, encoder)
84 else: 88 else:
85 raise NotImplementedError("type not yet implemented: %s" 89 raise NotImplementedError("type not yet implemented: %s"
86 % opts.repertoire) 90 % opts.repertoire)
87 if opts.use_bin_length: 91 if opts.use_bin_length: