blob: 6b8fa365180453bf836c1d12b25cba74601d558a [file] [log] [blame]
Jens Wiklanderbc420742015-05-05 14:59:15 +02001#!/usr/bin/env python
Jerome Forissier1bb92982017-12-15 14:27:02 +01002# SPDX-License-Identifier: BSD-2-Clause
Jens Wiklanderbc420742015-05-05 14:59:15 +02003#
4# Copyright (c) 2015, Linaro Limited
Jens Wiklanderbc420742015-05-05 14:59:15 +02005#
Jens Wiklanderbc420742015-05-05 14:59:15 +02006
7def get_args():
8 import argparse
9
10 parser = argparse.ArgumentParser()
11 parser.add_argument('--prefix', required=True, \
12 help='Prefix for the public key exponent and modulus in c file')
13
14 parser.add_argument('--out', required=True, \
15 help='Name of c file for the public key')
16
17 parser.add_argument('--key', required=True, help='Name of key file')
18
19 return parser.parse_args()
20
21def main():
22 import array
23 from Crypto.PublicKey import RSA
24 from Crypto.Util.number import long_to_bytes
25
26 args = get_args();
27
28 f = open(args.key, 'r')
29 key = RSA.importKey(f.read())
30 f.close
31
32 f = open(args.out, 'w')
33
34 f.write("#include <stdint.h>\n");
35 f.write("#include <stddef.h>\n\n");
36
37 f.write("const uint32_t " + args.prefix + "_exponent = " +
38 str(key.publickey().e) + ";\n\n")
39
40 f.write("const uint8_t " + args.prefix + "_modulus[] = {\n")
41 i = 0;
42 for x in array.array("B", long_to_bytes(key.publickey().n)):
43 f.write("0x" + '{0:02x}'.format(x) + ",")
44 i = i + 1;
45 if i % 8 == 0:
46 f.write("\n");
47 else:
48 f.write(" ");
49 f.write("};\n");
50
51 f.write("const size_t " + args.prefix + "_modulus_size = sizeof(" + \
52 args.prefix + "_modulus);\n")
53
54 f.close()
55
56if __name__ == "__main__":
57 main()