blob: e612f626b92be417f63922a65db8b9a84be3dc0b [file] [log] [blame]
Jerry Yu58118692023-05-23 16:14:47 +08001#!/usr/bin/env python3
2
3"""
4Generate `tests/src/test_certs.h` which includes certficaties/keys/certificate list for testing.
5"""
6
7#
8# Copyright The Mbed TLS Contributors
Dave Rodgman16799db2023-11-02 19:47:20 +00009# SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
Jerry Yu58118692023-05-23 16:14:47 +080010
11
12import os
13import sys
14import argparse
15import jinja2
16
Valerio Setti455fb4e2024-04-15 06:30:18 +020017this_dir = os.path.dirname(os.path.abspath(__file__))
18data_files_path = os.path.join(this_dir, '..', 'data_files')
Jerry Yu58118692023-05-23 16:14:47 +080019
Valerio Setti455fb4e2024-04-15 06:30:18 +020020INPUT_ARGS = [
21 ("string", "TEST_CA_CRT_EC_PEM", data_files_path + "/test-ca2.crt"),
22 ("binary", "TEST_CA_CRT_EC_DER", data_files_path + "/test-ca2.crt.der"),
23 ("string", "TEST_CA_KEY_EC_PEM", data_files_path + "/test-ca2.key.enc"),
24 ("password", "TEST_CA_PWD_EC_PEM", "PolarSSLTest"),
25 ("binary", "TEST_CA_KEY_EC_DER", data_files_path + "/test-ca2.key.der"),
26 ("string", "TEST_CA_CRT_RSA_SHA256_PEM", data_files_path + "/test-ca-sha256.crt"),
27 ("binary", "TEST_CA_CRT_RSA_SHA256_DER", data_files_path + "/test-ca-sha256.crt.der"),
28 ("string", "TEST_CA_CRT_RSA_SHA1_PEM", data_files_path + "/test-ca-sha1.crt"),
29 ("binary", "TEST_CA_CRT_RSA_SHA1_DER", data_files_path + "/test-ca-sha1.crt.der"),
30 ("string", "TEST_CA_KEY_RSA_PEM", data_files_path + "/test-ca.key"),
31 ("password", "TEST_CA_PWD_RSA_PEM", "PolarSSLTest"),
32 ("binary", "TEST_CA_KEY_RSA_DER", data_files_path + "/test-ca.key.der"),
33 ("string", "TEST_SRV_CRT_EC_PEM", data_files_path + "/server5.crt"),
34 ("binary", "TEST_SRV_CRT_EC_DER", data_files_path + "/server5.crt.der"),
35 ("string", "TEST_SRV_KEY_EC_PEM", data_files_path + "/server5.key"),
36 ("binary", "TEST_SRV_KEY_EC_DER", data_files_path + "/server5.key.der"),
37 ("string", "TEST_SRV_CRT_RSA_SHA256_PEM", data_files_path + "/server2-sha256.crt"),
38 ("binary", "TEST_SRV_CRT_RSA_SHA256_DER", data_files_path + "/server2-sha256.crt.der"),
39 ("string", "TEST_SRV_CRT_RSA_SHA1_PEM", data_files_path + "/server2.crt"),
40 ("binary", "TEST_SRV_CRT_RSA_SHA1_DER", data_files_path + "/server2.crt.der"),
41 ("string", "TEST_SRV_KEY_RSA_PEM", data_files_path + "/server2.key"),
42 ("binary", "TEST_SRV_KEY_RSA_DER", data_files_path + "/server2.key.der"),
43 ("string", "TEST_CLI_CRT_EC_PEM", data_files_path + "/cli2.crt"),
44 ("binary", "TEST_CLI_CRT_EC_DER", data_files_path + "/cli2.crt.der"),
45 ("string", "TEST_CLI_KEY_EC_PEM", data_files_path + "/cli2.key"),
46 ("binary", "TEST_CLI_KEY_EC_DER", data_files_path + "/cli2.key.der"),
47 ("string", "TEST_CLI_CRT_RSA_PEM", data_files_path + "/cli-rsa-sha256.crt"),
48 ("binary", "TEST_CLI_CRT_RSA_DER", data_files_path + "/cli-rsa-sha256.crt.der"),
49 ("string", "TEST_CLI_KEY_RSA_PEM", data_files_path + "/cli-rsa.key"),
50 ("binary", "TEST_CLI_KEY_RSA_DER", data_files_path + "/cli-rsa.key.der"),
51]
Jerry Yu58118692023-05-23 16:14:47 +080052
53def main():
54 parser = argparse.ArgumentParser()
Valerio Setti455fb4e2024-04-15 06:30:18 +020055 default_output_path = os.path.join(this_dir, '..', 'test_certs.h')
56 parser.add_argument('--output', type=str, default=default_output_path)
57 parser.add_argument('--list-dependencies', action='store_true')
Jerry Yu58118692023-05-23 16:14:47 +080058 args = parser.parse_args()
Valerio Setti455fb4e2024-04-15 06:30:18 +020059
60 if (args.list_dependencies is True):
61 files_list = [arg[2] for arg in INPUT_ARGS]
62 print(" ".join(files_list))
63 return
64
65 return generate(INPUT_ARGS, output=args.output)
Jerry Yu58118692023-05-23 16:14:47 +080066
Jerry Yu99a82dd2023-05-24 15:02:11 +080067#pylint: disable=dangerous-default-value, unused-argument
Valerio Setti455fb4e2024-04-15 06:30:18 +020068def generate(values=[], output=None):
Jerry Yu99a82dd2023-05-24 15:02:11 +080069 """Generate C header file.
70 """
Valerio Setti455fb4e2024-04-15 06:30:18 +020071 template_loader = jinja2.FileSystemLoader(data_files_path)
Jerry Yu58118692023-05-23 16:14:47 +080072 template_env = jinja2.Environment(
73 loader=template_loader, lstrip_blocks=True, trim_blocks=True)
74
75 def read_as_c_array(filename):
76 with open(filename, 'rb') as f:
77 data = f.read(12)
78 while data:
79 yield ', '.join(['{:#04x}'.format(b) for b in data])
80 data = f.read(12)
81
82 def read_lines(filename):
83 with open(filename) as f:
84 try:
85 for line in f:
86 yield line.strip()
87 except:
88 print(filename)
89 raise
90
91 def put_to_column(value, position=0):
92 return ' '*position + value
93
94 template_env.filters['read_as_c_array'] = read_as_c_array
95 template_env.filters['read_lines'] = read_lines
96 template_env.filters['put_to_column'] = put_to_column
97
98 template = template_env.get_template('test_certs.h.jinja2')
99
100 with open(output, 'w') as f:
101 f.write(template.render(macros=values))
102
103
104if __name__ == '__main__':
105 sys.exit(main())