avs_mtk_voice/meta/meta-mediatek-aud/recipes-bsp/lk/files/pbp/toolauth.py

111 lines
3.2 KiB
Python
Raw Normal View History

2022-05-13 08:02:31 +00:00
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()