| import sys |
| import os |
| import struct |
| script_folder, script_name = os.path.split(os.path.realpath(__file__)) |
| sys.path.append(os.path.join(script_folder, "lib")) |
| import gfh |
| import cert |
| |
| def get_file_sizeb(file_path): |
| if not os.path.isfile(file_path): |
| return 0 |
| file_handle = open(file_path, "rb") |
| file_handle.seek(0, 2) |
| file_size = file_handle.tell() |
| file_handle.close() |
| return file_size |
| |
| def concatb(file1_path, file2_path): |
| file1_size = get_file_sizeb(file1_path) |
| file2_size = get_file_sizeb(file2_path) |
| file1 = open(file1_path, "ab+") |
| file2 = open(file2_path, "rb") |
| file1.write(file2.read(file2_size)) |
| file2.close() |
| file1.close() |
| |
| class tool_auth: |
| def __init__(self, out_path, tool_auth_path): |
| self.m_out_path = out_path |
| if not os.path.exists(self.m_out_path): |
| os.makedirs(self.m_out_path) |
| self.m_tool_auth_path = tool_auth_path |
| self.m_gfh = gfh.image_gfh() |
| self.m_sig_handler = None |
| def create_gfh(self, gfh_config): |
| self.m_gfh.load_ini(gfh_config) |
| return |
| def sign(self, key_ini_path): |
| #tool auth contains only gfh and signature, no extra content |
| self.m_gfh.finalize(0, key_ini_path) |
| #write tbs_tool_auth |
| tbs_toolauth_file_path = os.path.join(self.m_out_path, "tbs_toolauth.bin") |
| tbs_tool_auth_file = open(tbs_toolauth_file_path, "wb") |
| tbs_tool_auth_file.write(self.m_gfh.pack()) |
| tbs_tool_auth_file.close() |
| print "===tool_auth signing===" |
| if self.m_gfh.get_sig_type() == "SINGLE": |
| self.m_sig_handler = cert.sig_single(self.m_gfh.get_pad_type()) |
| self.m_sig_handler.set_out_path(self.m_out_path) |
| self.m_sig_handler.create(key_ini_path, tbs_toolauth_file_path) |
| self.m_sig_handler.sign() |
| sig_name = "toolauth.sig" |
| sig_file_path = os.path.join(self.m_out_path, sig_name) |
| self.m_sig_handler.output(self.m_out_path, sig_name) |
| #create final toolauth file |
| if os.path.isfile(self.m_tool_auth_path): |
| os.remove(self.m_tool_auth_path) |
| concatb(self.m_tool_auth_path, tbs_toolauth_file_path) |
| concatb(self.m_tool_auth_path, sig_file_path) |
| else: |
| print "unknown signature type" |
| #clean up |
| os.remove(tbs_toolauth_file_path) |
| os.remove(sig_file_path) |
| return |
| |
| def main(): |
| #parameter parsing |
| idx = 1 |
| key_ini_path = "" |
| gfh_config_ini_path = "" |
| while idx < len(sys.argv): |
| if sys.argv[idx][0] == '-': |
| if sys.argv[idx][1] == 'i': |
| print "key: " + sys.argv[idx + 1] |
| key_ini_path = sys.argv[idx + 1] |
| idx += 2 |
| elif sys.argv[idx][1] == 'g': |
| print "gfh: " + sys.argv[idx + 1] |
| gfh_config_ini_path = sys.argv[idx + 1] |
| idx += 2 |
| else: |
| print "unknown input" |
| idx += 2 |
| else: |
| tool_auth_path = sys.argv[idx] |
| print "tool_auth_path: " + tool_auth_path |
| idx += 1 |
| |
| if not key_ini_path: |
| print "key path is not given!" |
| return -1 |
| if not gfh_config_ini_path: |
| print "gfh config path is not given!" |
| return -1 |
| if not tool_auth_path: |
| print "tool_auth path is not given!" |
| return -1 |
| |
| out_path = os.path.dirname(os.path.abspath(tool_auth_path)) |
| |
| tool_auth_obj = tool_auth(out_path, tool_auth_path) |
| tool_auth_obj.create_gfh(gfh_config_ini_path) |
| tool_auth_obj.sign(key_ini_path) |
| |
| return |
| |
| if __name__ == '__main__': |
| main() |
| |