blob: ceb5cc6fa1ccf53c7143ca0c7fd598f4aea14282 [file] [log] [blame]
Mate Toth-Pal51b61982022-03-17 14:19:30 +01001#!/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 Fossati5ebf4832024-08-26 09:30:05 +00009import argparse
Mate Toth-Pal51b61982022-03-17 14:19:30 +010010
Thomas Fossati5ebf4832024-08-26 09:30:05 +000011from ecdsa import SigningKey, NIST256p, NIST384p
12from pycose.keys import EC2Key, CoseKey
13from ecdsa.curves import curve_by_name
Mate Toth-Pal51b61982022-03-17 14:19:30 +010014
15if __name__ == '__main__':
Thomas Fossati5ebf4832024-08-26 09:30:05 +000016 parser = argparse.ArgumentParser(description='generate an ECDSA key')
Mate Toth-Pal51b61982022-03-17 14:19:30 +010017
Thomas Fossati5ebf4832024-08-26 09:30:05 +000018 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())