blob: 14270e06038b572e0c8a9a257d69310e1860add3 [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
Valerio Setti5f37b252024-05-03 15:34:06 +020016import scripts_path # pylint: disable=unused-import
David Horstmanncd84bb22024-05-03 14:36:12 +010017from mbedtls_framework.build_tree import guess_project_root
Jerry Yu58118692023-05-23 16:14:47 +080018
Valerio Setti5f37b252024-05-03 15:34:06 +020019TEST_DIR = os.path.join(guess_project_root(), 'tests')
20DATA_FILES_PATH = os.path.join(TEST_DIR, 'data_files')
Jerry Yu58118692023-05-23 16:14:47 +080021
Valerio Setti455fb4e2024-04-15 06:30:18 +020022INPUT_ARGS = [
Valerio Settif27d4072024-04-16 16:17:45 +020023 ("string", "TEST_CA_CRT_EC_PEM", DATA_FILES_PATH + "/test-ca2.crt"),
24 ("binary", "TEST_CA_CRT_EC_DER", DATA_FILES_PATH + "/test-ca2.crt.der"),
25 ("string", "TEST_CA_KEY_EC_PEM", DATA_FILES_PATH + "/test-ca2.key.enc"),
Valerio Setti455fb4e2024-04-15 06:30:18 +020026 ("password", "TEST_CA_PWD_EC_PEM", "PolarSSLTest"),
Valerio Settif27d4072024-04-16 16:17:45 +020027 ("binary", "TEST_CA_KEY_EC_DER", DATA_FILES_PATH + "/test-ca2.key.der"),
28 ("string", "TEST_CA_CRT_RSA_SHA256_PEM", DATA_FILES_PATH + "/test-ca-sha256.crt"),
29 ("binary", "TEST_CA_CRT_RSA_SHA256_DER", DATA_FILES_PATH + "/test-ca-sha256.crt.der"),
30 ("string", "TEST_CA_CRT_RSA_SHA1_PEM", DATA_FILES_PATH + "/test-ca-sha1.crt"),
31 ("binary", "TEST_CA_CRT_RSA_SHA1_DER", DATA_FILES_PATH + "/test-ca-sha1.crt.der"),
32 ("string", "TEST_CA_KEY_RSA_PEM", DATA_FILES_PATH + "/test-ca.key"),
Valerio Setti455fb4e2024-04-15 06:30:18 +020033 ("password", "TEST_CA_PWD_RSA_PEM", "PolarSSLTest"),
Valerio Settif27d4072024-04-16 16:17:45 +020034 ("binary", "TEST_CA_KEY_RSA_DER", DATA_FILES_PATH + "/test-ca.key.der"),
35 ("string", "TEST_SRV_CRT_EC_PEM", DATA_FILES_PATH + "/server5.crt"),
36 ("binary", "TEST_SRV_CRT_EC_DER", DATA_FILES_PATH + "/server5.crt.der"),
37 ("string", "TEST_SRV_KEY_EC_PEM", DATA_FILES_PATH + "/server5.key"),
38 ("binary", "TEST_SRV_KEY_EC_DER", DATA_FILES_PATH + "/server5.key.der"),
39 ("string", "TEST_SRV_CRT_RSA_SHA256_PEM", DATA_FILES_PATH + "/server2-sha256.crt"),
40 ("binary", "TEST_SRV_CRT_RSA_SHA256_DER", DATA_FILES_PATH + "/server2-sha256.crt.der"),
41 ("string", "TEST_SRV_CRT_RSA_SHA1_PEM", DATA_FILES_PATH + "/server2.crt"),
42 ("binary", "TEST_SRV_CRT_RSA_SHA1_DER", DATA_FILES_PATH + "/server2.crt.der"),
43 ("string", "TEST_SRV_KEY_RSA_PEM", DATA_FILES_PATH + "/server2.key"),
44 ("binary", "TEST_SRV_KEY_RSA_DER", DATA_FILES_PATH + "/server2.key.der"),
45 ("string", "TEST_CLI_CRT_EC_PEM", DATA_FILES_PATH + "/cli2.crt"),
46 ("binary", "TEST_CLI_CRT_EC_DER", DATA_FILES_PATH + "/cli2.crt.der"),
47 ("string", "TEST_CLI_KEY_EC_PEM", DATA_FILES_PATH + "/cli2.key"),
48 ("binary", "TEST_CLI_KEY_EC_DER", DATA_FILES_PATH + "/cli2.key.der"),
49 ("string", "TEST_CLI_CRT_RSA_PEM", DATA_FILES_PATH + "/cli-rsa-sha256.crt"),
50 ("binary", "TEST_CLI_CRT_RSA_DER", DATA_FILES_PATH + "/cli-rsa-sha256.crt.der"),
51 ("string", "TEST_CLI_KEY_RSA_PEM", DATA_FILES_PATH + "/cli-rsa.key"),
52 ("binary", "TEST_CLI_KEY_RSA_DER", DATA_FILES_PATH + "/cli-rsa.key.der"),
Valerio Setti455fb4e2024-04-15 06:30:18 +020053]
Jerry Yu58118692023-05-23 16:14:47 +080054
55def main():
56 parser = argparse.ArgumentParser()
Valerio Setti5f37b252024-05-03 15:34:06 +020057 default_output_path = os.path.join(TEST_DIR, 'src', 'test_certs.h')
Valerio Setti455fb4e2024-04-15 06:30:18 +020058 parser.add_argument('--output', type=str, default=default_output_path)
59 parser.add_argument('--list-dependencies', action='store_true')
Jerry Yu58118692023-05-23 16:14:47 +080060 args = parser.parse_args()
Valerio Setti455fb4e2024-04-15 06:30:18 +020061
Valerio Setti5f37b252024-05-03 15:34:06 +020062 if args.list_dependencies:
Valerio Setti455fb4e2024-04-15 06:30:18 +020063 files_list = [arg[2] for arg in INPUT_ARGS]
64 print(" ".join(files_list))
65 return
66
Valerio Settif27d4072024-04-16 16:17:45 +020067 generate(INPUT_ARGS, output=args.output)
Jerry Yu58118692023-05-23 16:14:47 +080068
Jerry Yu99a82dd2023-05-24 15:02:11 +080069#pylint: disable=dangerous-default-value, unused-argument
Valerio Setti455fb4e2024-04-15 06:30:18 +020070def generate(values=[], output=None):
Jerry Yu99a82dd2023-05-24 15:02:11 +080071 """Generate C header file.
72 """
Valerio Settif27d4072024-04-16 16:17:45 +020073 template_loader = jinja2.FileSystemLoader(DATA_FILES_PATH)
Jerry Yu58118692023-05-23 16:14:47 +080074 template_env = jinja2.Environment(
Valerio Setti3fcaf6c2024-05-06 14:37:25 +020075 loader=template_loader, lstrip_blocks=True, trim_blocks=True,
76 keep_trailing_newline=True)
Jerry Yu58118692023-05-23 16:14:47 +080077
78 def read_as_c_array(filename):
79 with open(filename, 'rb') as f:
80 data = f.read(12)
81 while data:
82 yield ', '.join(['{:#04x}'.format(b) for b in data])
83 data = f.read(12)
84
85 def read_lines(filename):
86 with open(filename) as f:
87 try:
88 for line in f:
89 yield line.strip()
90 except:
91 print(filename)
92 raise
93
94 def put_to_column(value, position=0):
95 return ' '*position + value
96
97 template_env.filters['read_as_c_array'] = read_as_c_array
98 template_env.filters['read_lines'] = read_lines
99 template_env.filters['put_to_column'] = put_to_column
100
101 template = template_env.get_template('test_certs.h.jinja2')
102
103 with open(output, 'w') as f:
104 f.write(template.render(macros=values))
105
106
107if __name__ == '__main__':
108 sys.exit(main())