| import filecmp |
| import os |
| |
| g_key_table = None |
| |
| class hsm_param: |
| def __init__(self): |
| #you can add parameter required by your HSM here |
| self.m_ref_key_path = "" |
| self.m_key_id = 0 |
| self.m_attr1 = 0 |
| self.m_attr2 = 0 |
| self.m_padding_dict = {"raw": 0, "pss": 1} |
| self.m_padding = 0 #default: raw |
| |
| def create_key_table(): |
| global g_key_table |
| if None == g_key_table: |
| #create key table |
| #here is reference design, please customize |
| #this part according to your HSM spec. |
| script_folder, script_name = os.path.split(os.path.realpath(__file__)) |
| key_folder = os.path.join(script_folder, "keys") |
| key_folder = os.path.join(key_folder, "hsm") |
| g_key_table = list() |
| #key1 parameter |
| key1_param = hsm_param() |
| key1_param.m_ref_key_path = os.path.join(key_folder, 'pubk1.pem') |
| key1_param.m_key_id = 0 |
| key1_param.m_attr1 = 1 |
| key1_param.m_attr2 = 1 |
| g_key_table.append(key1_param) |
| #key2 parameter |
| key2_param = hsm_param() |
| key2_param.m_ref_key_path = os.path.join(key_folder, 'pubk2.pem') |
| key2_param.m_key_id = 1 |
| key2_param.m_attr1 = 2 |
| key2_param.m_attr2 = 2 |
| g_key_table.append(key2_param) |
| return |
| |
| def query_key_table(key): |
| global g_key_table |
| create_key_table() |
| for key_table_entry in g_key_table: |
| if filecmp.cmp(key, key_table_entry.m_ref_key_path): |
| print "key index: " + hex(key_table_entry.m_key_id) |
| return key_table_entry |
| print "no valid key entry found in table" |
| return None |
| |
| def hsm_rsa_sign(data, key, padding, sig): |
| hsm_param_obj = None |
| |
| #note that key is pubk actually, use it as index for |
| #HSM parameters such as key selection |
| hsm_param_obj = query_key_table(key) |
| if None == hsm_param_obj: |
| return -1 |
| hsm_param_obj.m_padding = hsm_param_obj.m_padding_dict[padding] |
| |
| print "========================" |
| print "HSM parameter:" |
| print " m_key_id = " + hex(hsm_param_obj.m_key_id) |
| print " m_padding = " + hex(hsm_param_obj.m_padding) |
| print " m_attr1 = " + hex(hsm_param_obj.m_attr1) |
| print " m_attr2 = " + hex(hsm_param_obj.m_attr2) |
| print "========================" |
| |
| #place hsm request here -- start |
| #create dummy sig for now |
| sig_file = open(sig, 'wb') |
| for i in range(0, 256): |
| sig_file.write(chr(0)) |
| sig_file.close() |
| #place hsm request here -- end |
| return 0 |
| |