diff --git a/apps/python/zcash_fpga.py b/apps/python/zcash_fpga.py index 4146003..9b0223a 100644 --- a/apps/python/zcash_fpga.py +++ b/apps/python/zcash_fpga.py @@ -16,9 +16,11 @@ class zcash_fpga: fpga_msg_type_dict = {'FPGA_IGNORE_RPL':int('80000002', 16), 'FPGA_STATUS_RPL':int('80000001', 16), - 'RESET_FPGA_RPL':int('80000000', 16)} + 'RESET_FPGA_RPL':int('80000000', 16), + 'VERIFY_SECP256K1_SIG_RPL':int('80000101', 16)} - fpga_msg_dict = {fpga_msg_type_dict['FPGA_IGNORE_RPL']:{'name':'FPGA_IGNORE_RPL', 'feilds':[(8, 'ignored_header', byt_to_hex)]}, + fpga_msg_dict = {fpga_msg_type_dict['VERIFY_SECP256K1_SIG_RPL']:{'name':'FPGA_IGNORE_RPL', 'feilds':[(8, 'index', byt_to_hex), (1, 'bm', byt_to_hex)]}, + fpga_msg_type_dict['FPGA_IGNORE_RPL']:{'name':'FPGA_IGNORE_RPL', 'feilds':[(8, 'ignored_header', byt_to_hex)]}, fpga_msg_type_dict['FPGA_STATUS_RPL']:{'name':'FPGA_STATUS_RPL', 'feilds':[(4, 'version', byt_to_ver), (8, 'build_date', byt_to_str), (8, 'buid_host', byt_to_str), (8, 'cmd_cap', byt_to_hex)]}, fpga_msg_type_dict['RESET_FPGA_RPL']:{'name':'RESET_FPGA_RPL', 'feilds':[]}} @@ -46,7 +48,20 @@ class zcash_fpga: res = self.s.read(1024) self.print_reply(res) return res - + + def secp256k1_verify_sig(self, index, hsh, r, s, Qx, Qy): + cmd = 'B000000001010000' + cmd += format(index, 'x').ljust(16, '0') + cmd += format(s, 'x').ljust(64, '0') + cmd += format(r, 'x').ljust(64, '0') + cmd += format(hsh, 'x').ljust(64, '0') + cmd += format(Qx, 'x').ljust(64, '0') + cmd += format(Qy, 'x').ljust(64, '0') + self.s.write(self.codecs.decode(cmd, 'hex')) + res = self.get_reply() + if (self.struct.unpack('