diff options
Diffstat (limited to 'tools/ca')
| -rw-r--r-- | tools/ca/ca/__main__.py | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/tools/ca/ca/__main__.py b/tools/ca/ca/__main__.py index 22dcaeed..b89d91ff 100644 --- a/tools/ca/ca/__main__.py +++ b/tools/ca/ca/__main__.py | |||
| @@ -469,7 +469,7 @@ def new_client(ca_cert, ca_key, key_type, clock_skew, validity, subject, alterna | |||
| 469 | ).public_bytes(serialization.Encoding.PEM) | 469 | ).public_bytes(serialization.Encoding.PEM) |
| 470 | ) | 470 | ) |
| 471 | 471 | ||
| 472 | def to_pkcs12(random_password, filename, output): | 472 | def to_pkcs12(random_password, random_password_length, weak_encryption, filename, output): |
| 473 | key_file = filename.with_suffix('.key') | 473 | key_file = filename.with_suffix('.key') |
| 474 | cert_file = filename.with_suffix('.crt') | 474 | cert_file = filename.with_suffix('.crt') |
| 475 | 475 | ||
| @@ -503,17 +503,17 @@ def to_pkcs12(random_password, filename, output): | |||
| 503 | else: | 503 | else: |
| 504 | from xkcdpass import xkcd_password as xp | 504 | from xkcdpass import xkcd_password as xp |
| 505 | ws = xp.generate_wordlist(wordfile=xp.locate_wordfile()) | 505 | ws = xp.generate_wordlist(wordfile=xp.locate_wordfile()) |
| 506 | pw = xp.generate_xkcdpassword(ws, numwords=12) | 506 | pw = xp.generate_xkcdpassword(ws, numwords=random_password_length) |
| 507 | print(f'Password: {pw}', file=sys.stderr) | 507 | print(f'Password: {pw}', file=sys.stderr) |
| 508 | 508 | ||
| 509 | encryption = None | 509 | encryption = None |
| 510 | if pw: | 510 | if pw: |
| 511 | encryption = PrivateFormat.PKCS12.encryption_builder().kdf_rounds( | 511 | encryption = PrivateFormat.PKCS12.encryption_builder().kdf_rounds( |
| 512 | 500000 | 512 | 500000 if not weak_encryption else 50000 |
| 513 | ).key_cert_algorithm( | 513 | ).key_cert_algorithm( |
| 514 | pkcs12.PBES.PBESv2SHA256AndAES256CBC | 514 | pkcs12.PBES.PBESv2SHA256AndAES256CBC if not weak_encryption else pkcs12.PBES.PBESv1SHA1And3KeyTripleDESCBC |
| 515 | ).hmac_hash( | 515 | ).hmac_hash( |
| 516 | hashes.SHA256() | 516 | hashes.SHA256() if not weak_encryption else hashes.SHA1() |
| 517 | ).build(bytes(pw, 'utf-8')) | 517 | ).build(bytes(pw, 'utf-8')) |
| 518 | fh.write(pkcs12.serialize_key_and_certificates( | 518 | fh.write(pkcs12.serialize_key_and_certificates( |
| 519 | bytes(subject, 'utf-8'), | 519 | bytes(subject, 'utf-8'), |
| @@ -589,6 +589,8 @@ def main(): | |||
| 589 | 589 | ||
| 590 | subparser = subparsers.add_parser('pkcs12', aliases=['p12', 'pfx'], formatter_class=argparse.ArgumentDefaultsHelpFormatter) | 590 | subparser = subparsers.add_parser('pkcs12', aliases=['p12', 'pfx'], formatter_class=argparse.ArgumentDefaultsHelpFormatter) |
| 591 | subparser.add_argument('--random-password', '--no-random-password', action=BooleanAction, default=True) | 591 | subparser.add_argument('--random-password', '--no-random-password', action=BooleanAction, default=True) |
| 592 | subparser.add_argument('--random-password-length', type=int, default=12) | ||
| 593 | subparser.add_argument('--weak-encryption', '--no-weak-encryption', action=BooleanAction, default=False) | ||
| 592 | subparser.add_argument('--output', type=Path) | 594 | subparser.add_argument('--output', type=Path) |
| 593 | subparser.add_argument('filename', metavar='BASENAME', type=Path) | 595 | subparser.add_argument('filename', metavar='BASENAME', type=Path) |
| 594 | subparser.set_defaults(cmd=to_pkcs12) | 596 | subparser.set_defaults(cmd=to_pkcs12) |
