optee中通过scripts中的sign.py 来对tee签名
#
def get_args():
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('--key', required=True, help='Name of key file')
parser.add_argument('--in', required=True, dest='inf', \
help='Name of in file')
parser.add_argument('--out', required=True, help='Name of out file')
return parser.parse_args()
def main():
//首先导入需要用到的库
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
import struct
//从输入参数中拿到key,需要加密的文件,和加密后输出的文件名
args = get_args()
//拿到key
f = open(args.key, 'rb')
key = RSA.importKey(f.read())
f.close()
//拿到需要加密的文件
f = open(args.inf, 'rb')
img = f.read()
f.close()
//得到rsa的结构体
signer = PKCS1_v1_5.new(key)
//拿到sha256的结构体
h = SHA256.new()
digest_len = h.digest_size
sig_len = len(signer.sign(h))
img_size = len(img)
//加密后文件的header
magic = 0x4f545348 # SHDR_MAGIC
img_type = 0 # SHDR_TA
algo = 0x70004830 # TEE_ALG_RSASSA_PKCS1_V1_5_SHA256
shdr = struct.pack('<IIIIHH', \
magic, img_type, img_size, algo, digest_len, sig_len)
h.update(shdr)
h.update(img)
//通过signer.sign(h) 加密
sig = signer.sign(h)
f = open(args.out, 'wb')
//写入header
f.write(shdr)
//通过h.digest()得到sha256的结果
f.write(h.digest())
//下如rsa的结果
f.write(sig)
//下如源文件
f.write(img)
f.close()
if __name__ == "__main__":
main()
原来对TA的加密就是通过计算源文件的sha256值和计算问文件加上特定header后的rsa的值后,将这两部分作为header写入到输入文件的前面作为输出文件.
#
def get_args():
from argparse import ArgumentParser
parser = ArgumentParser()
parser.add_argument('--key', required=True, help='Name of key file')
parser.add_argument('--in', required=True, dest='inf', \
help='Name of in file')
parser.add_argument('--out', required=True, help='Name of out file')
return parser.parse_args()
def main():
//首先导入需要用到的库
from Crypto.Signature import PKCS1_v1_5
from Crypto.Hash import SHA256
from Crypto.PublicKey import RSA
import struct
//从输入参数中拿到key,需要加密的文件,和加密后输出的文件名
args = get_args()
//拿到key
f = open(args.key, 'rb')
key = RSA.importKey(f.read())
f.close()
//拿到需要加密的文件
f = open(args.inf, 'rb')
img = f.read()
f.close()
//得到rsa的结构体
signer = PKCS1_v1_5.new(key)
//拿到sha256的结构体
h = SHA256.new()
digest_len = h.digest_size
sig_len = len(signer.sign(h))
img_size = len(img)
//加密后文件的header
magic = 0x4f545348 # SHDR_MAGIC
img_type = 0 # SHDR_TA
algo = 0x70004830 # TEE_ALG_RSASSA_PKCS1_V1_5_SHA256
shdr = struct.pack('<IIIIHH', \
magic, img_type, img_size, algo, digest_len, sig_len)
h.update(shdr)
h.update(img)
//通过signer.sign(h) 加密
sig = signer.sign(h)
f = open(args.out, 'wb')
//写入header
f.write(shdr)
//通过h.digest()得到sha256的结果
f.write(h.digest())
//下如rsa的结果
f.write(sig)
//下如源文件
f.write(img)
f.close()
if __name__ == "__main__":
main()
原来对TA的加密就是通过计算源文件的sha256值和计算问文件加上特定header后的rsa的值后,将这两部分作为header写入到输入文件的前面作为输出文件.