| # |
| # Copyright 2019 NXP |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| |
| # |
| # Preconditions |
| # - |
| # |
| # Postconditions |
| # - A complete set of key files (*.pem) created (existing ones overwritten) |
| # |
| # |
| import os |
| import sys |
| import logging |
| from legacy_openssl_util import * |
| |
| |
| def execute_openssl_cmd(ecc_param_pem, ecc_key_kp, ecc_key_kp_pubonly): |
| cmd_str = "\"%s\" ecparam -in \"%s\" -genkey -noout -out \"%s\"" % (openssl, ecc_param_pem, ecc_key_kp) |
| run(cmd_str) |
| cmd_str = "\"%s\" ec -in \"%s\" -pubout -out \"%s\"" % (openssl, ecc_key_kp, ecc_key_kp_pubonly) |
| run(cmd_str) |
| |
| |
| def main(): |
| key_type = "prime256v1" |
| keys_dir = os.path.join(cur_dir, '..', 'keys', key_type) |
| |
| if not os.path.exists(keys_dir): |
| os.mkdir(keys_dir) |
| |
| ecc_param_pem = keys_dir + os.sep + key_type + ".pem" |
| |
| # ECC keys to be stored in SE050/A71CH |
| # ------------------------------ |
| ecc_key_kp_0 = keys_dir + os.sep + "ecc_key_kp_0.pem" |
| ecc_key_kp_pubonly_0 = keys_dir + os.sep + "ecc_key_kp_pubonly_0.pem" |
| ecc_key_kp_0_ref = keys_dir + os.sep + "ecc_key_kp_0_ref.pem" |
| |
| ecc_key_kp_1 = keys_dir + os.sep + "ecc_key_kp_1.pem" |
| ecc_key_kp_pubonly_1 = keys_dir + os.sep + "ecc_key_kp_pubonly_1.pem" |
| ecc_key_kp_1_ref = keys_dir + os.sep + "ecc_key_kp_1_ref.pem" |
| |
| ecc_key_kp_2 = keys_dir + os.sep + "ecc_key_kp_2.pem" |
| ecc_key_kp_pubonly_2 = keys_dir + os.sep + "ecc_key_kp_pubonly_2.pem" |
| ecc_key_kp_2_ref = keys_dir + os.sep + "ecc_key_kp_2_ref.pem" |
| |
| ecc_key_kp_3 = keys_dir + os.sep + "ecc_key_kp_3.pem" |
| ecc_key_kp_pubonly_3 = keys_dir + os.sep + "ecc_key_kp_pubonly_3.pem" |
| ecc_key_kp_3_ref = keys_dir + os.sep + "ecc_key_kp_3_ref.pem" |
| |
| ecc_key_kp_A = keys_dir + os.sep + "ecc_key_kp_A.pem" |
| ecc_key_kp_pubonly_A = keys_dir + os.sep + "ecc_key_kp_pubonly_A.pem" |
| |
| ecc_key_pub_0 = keys_dir + os.sep + "ecc_key_pub_0.pem" |
| ecc_key_pub_pubonly_0 = keys_dir + os.sep + "ecc_key_pub_pubonly_0.pem" |
| ecc_key_pub_0_ref = keys_dir + os.sep + "ecc_key_pub_0_ref.pem" |
| |
| ecc_key_pub_1 = keys_dir + os.sep + "ecc_key_pub_1.pem" |
| ecc_key_pub_pubonly_1 = keys_dir + os.sep + "ecc_key_pub_pubonly_1.pem" |
| ecc_key_pub_1_ref = keys_dir + os.sep + "ecc_key_pub_1_ref.pem" |
| |
| ecc_key_pub_2 = keys_dir + os.sep + "ecc_key_pub_2.pem" |
| ecc_key_pub_pubonly_2 = keys_dir + os.sep + "ecc_key_pub_pubonly_2.pem" |
| ecc_key_pub_2_ref = keys_dir + os.sep + "ecc_key_pub_2_ref.pem" |
| |
| ecc_key_pub_A = keys_dir + os.sep + "ecc_key_pub_A.pem" |
| ecc_key_pub_pubonly_A = keys_dir + os.sep + "ecc_key_pub_pubonly_A.pem" |
| |
| run("\"%s\" ecparam -name %s -out \"%s\"" % (openssl, key_type, ecc_param_pem,)) |
| |
| execute_openssl_cmd(ecc_param_pem, ecc_key_kp_0, ecc_key_kp_pubonly_0) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_kp_1, ecc_key_kp_pubonly_1) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_kp_2, ecc_key_kp_pubonly_2) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_kp_3, ecc_key_kp_pubonly_3) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_pub_0, ecc_key_pub_pubonly_0) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_pub_1, ecc_key_pub_pubonly_1) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_pub_2, ecc_key_pub_pubonly_2) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_kp_A, ecc_key_kp_pubonly_A) |
| execute_openssl_cmd(ecc_param_pem, ecc_key_pub_A, ecc_key_pub_pubonly_A) |
| |
| subsystem = "a71ch" |
| connection_method = sys.argv[1] |
| connection_data = sys.argv[2] |
| |
| log.info("sys.platform = " + sys.platform) |
| |
| if os.name == 'nt': |
| probeExec= os.path.join(cur_dir, '..', 'bin', 'A71CHConfigTool.exe') + ' ' + connection_data |
| elif "linux" in sys.platform: |
| if connection_method == 'sci2c': |
| probeExec='./../bin/A71CHConfigTool' |
| elif connection_method == 'jrcpv1' or connection_method == 'jrcpv2': |
| probeExec='./../bin/A71CHConfigTool' + ' ' + connection_data |
| else: |
| log.info(" Invalid connection method: " + connection_method) |
| return |
| elif sys.platform == 'cygwin': |
| if connection_method == 'jrcpv1' or connection_method == 'jrcpv2': |
| probeExec='./../bin/A71CHConfigTool' + ' ' + connection_data |
| else: |
| log.info(" Invalid connection method: " + connection_method) |
| return |
| else: |
| log.info(" Platform not supported: " + sys.platform) |
| return |
| |
| run("%s debug reset" % (probeExec)) |
| |
| key_id = 0 |
| run("%s set pair -x %x -k %s" % (probeExec, key_id, ecc_key_kp_0,)) |
| run("%s refpem -c 10 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_kp_0, ecc_key_kp_0_ref)) |
| |
| key_id = 1 |
| run("%s set pair -x %x -k %s" % (probeExec, key_id, ecc_key_kp_1,)) |
| run("%s refpem -c 10 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_kp_1, ecc_key_kp_1_ref)) |
| |
| key_id = 2 |
| run("%s set pair -x %x -k %s" % (probeExec, key_id, ecc_key_kp_2,)) |
| run("%s refpem -c 10 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_kp_2, ecc_key_kp_2_ref)) |
| |
| key_id = 3 |
| run("%s set pair -x %x -k %s" % (probeExec, key_id, ecc_key_kp_3,)) |
| run("%s refpem -c 10 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_kp_3, ecc_key_kp_3_ref)) |
| |
| key_id = 0 |
| run("%s set pub -x %x -k %s" % (probeExec, key_id, ecc_key_pub_pubonly_0,)) |
| run("%s refpem -c 20 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_pub_pubonly_0, ecc_key_pub_0_ref)) |
| |
| key_id = 1 |
| run("%s set pub -x %x -k %s" % (probeExec, key_id, ecc_key_pub_pubonly_1,)) |
| run("%s refpem -c 20 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_pub_pubonly_1, ecc_key_pub_1_ref)) |
| |
| key_id = 2 |
| run("%s set pub -x %x -k %s" % (probeExec, key_id, ecc_key_pub_pubonly_2,)) |
| run("%s refpem -c 20 -x %x -k %s -r %s" % (probeExec, key_id, ecc_key_pub_pubonly_2, ecc_key_pub_2_ref)) |
| |
| |
| log.info("Program completed successfully") |
| |
| |
| def usage(): |
| log.info("Please provide as first argument: connection type - sci2c, vcom, jrcpv1, jrcpv2sci2c") |
| log.info("Please provide as second argument: connection parameter - eg. COM3 , 127.0.0.1:8050, none") |
| log.info("Example invocation") |
| log.info(" jrcpv1 192.168.2.81:8050") |
| log.info(" vcom COM3") |
| log.info(" sci2c none") |
| log.info("Implicitly supported key types:") |
| log.info(" prime256v1 only") |
| |
| |
| if __name__ == '__main__': |
| logging.basicConfig(level=logging.DEBUG) |
| |
| if len(sys.argv) >= 3: |
| main() |
| else: |
| usage() |