-key_params = GostR34102012PublicKeyParameters((
- ("publicKeyParamSet", ai["publicKeyParamSet"]),
-))
-
-prv_raw = urandom(ai["prv_len"])
-out = stdout if args.out_key is None else open(args.out_key, "w")
-print("-----BEGIN PRIVATE KEY-----", file=out)
-print(pem(PrivateKeyInfo((
- ("version", Integer(0)),
- ("privateKeyAlgorithm", PrivateKeyAlgorithmIdentifier((
- ("algorithm", ai["key_algorithm"]),
- ("parameters", Any(key_params)),
- ))),
- ("privateKey", PrivateKey(OctetString(prv_raw).encode())),
-))), file=out)
-print("-----END PRIVATE KEY-----", file=out)
+if args.reuse_key is not None:
+ with open(args.reuse_key, "rb") as fd:
+ lines = fd.read().decode("ascii").split("-----")
+ idx = lines.index("BEGIN PRIVATE KEY")
+ if idx == -1:
+ raise ValueError("PEM has no PRIVATE KEY")
+ prv_raw = standard_b64decode(lines[idx + 1])
+ pki = PrivateKeyInfo().decod(prv_raw)
+ prv = prv_unmarshal(bytes(OctetString().decod(bytes(pki["privateKey"]))))
+else:
+ prv_raw = urandom(ai["prv_len"])
+ out = stdout if args.out_key is None else open(args.out_key, "w")
+ print("-----BEGIN PRIVATE KEY-----", file=out)
+ print(pem(PrivateKeyInfo((
+ ("version", Integer(0)),
+ ("privateKeyAlgorithm", PrivateKeyAlgorithmIdentifier((
+ ("algorithm", ai["key_algorithm"]),
+ ("parameters", Any(key_params)),
+ ))),
+ ("privateKey", PrivateKey(OctetString(prv_raw).encode())),
+ ))), file=out)
+ print("-----END PRIVATE KEY-----", file=out)
+ if args.only_key:
+ exit()
+ prv = prv_unmarshal(prv_raw)