Mate Toth-Pal | 51b6198 | 2022-03-17 14:19:30 +0100 | [diff] [blame] | 1 | #!/usr/bin/env python3 |
| 2 | # ----------------------------------------------------------------------------- |
| 3 | # Copyright (c) 2019, Arm Limited. All rights reserved. |
| 4 | # |
| 5 | # SPDX-License-Identifier: BSD-3-Clause |
| 6 | # |
| 7 | # ----------------------------------------------------------------------------- |
| 8 | |
Thomas Fossati | 5ebf483 | 2024-08-26 09:30:05 +0000 | [diff] [blame^] | 9 | import argparse |
Mate Toth-Pal | 51b6198 | 2022-03-17 14:19:30 +0100 | [diff] [blame] | 10 | |
Thomas Fossati | 5ebf483 | 2024-08-26 09:30:05 +0000 | [diff] [blame^] | 11 | from ecdsa import SigningKey, NIST256p, NIST384p |
| 12 | from pycose.keys import EC2Key, CoseKey |
| 13 | from ecdsa.curves import curve_by_name |
Mate Toth-Pal | 51b6198 | 2022-03-17 14:19:30 +0100 | [diff] [blame] | 14 | |
| 15 | if __name__ == '__main__': |
Thomas Fossati | 5ebf483 | 2024-08-26 09:30:05 +0000 | [diff] [blame^] | 16 | parser = argparse.ArgumentParser(description='generate an ECDSA key') |
Mate Toth-Pal | 51b6198 | 2022-03-17 14:19:30 +0100 | [diff] [blame] | 17 | |
Thomas Fossati | 5ebf483 | 2024-08-26 09:30:05 +0000 | [diff] [blame^] | 18 | parser.add_argument('outfile', type=str, help='output file') |
| 19 | parser.add_argument('--crv', type=str, help='ECDSA curve', |
| 20 | choices=[NIST256p.name, NIST384p.name], default='NIST256p') |
| 21 | parser.add_argument('--fmt', type=str, help='key format', |
| 22 | choices=['PEM', 'COSE'], default='PEM') |
| 23 | |
| 24 | args = parser.parse_args() |
| 25 | |
| 26 | sk = SigningKey.generate(curve_by_name(args.crv)) |
| 27 | |
| 28 | pem_key = sk.to_pem().decode('utf-8') |
| 29 | |
| 30 | if args.fmt == 'PEM': |
| 31 | o = pem_key |
| 32 | elif args.fmt == 'COSE': |
| 33 | o = CoseKey.from_pem_private_key(pem_key) |
| 34 | |
| 35 | with open(args.outfile, 'wb') as wfh: |
| 36 | wfh.write(o.encode()) |