def main(wait_e, keyno, passwd, data_regnual, data_upgrade): l = len(data_regnual) if (l & 0x03) != 0: data_regnual = data_regnual.ljust(l + 4 - (l & 0x03), chr(0)) crc32code = crc32(data_regnual) print("CRC32: %04x\n" % crc32code) data_regnual += pack('<I', crc32code) rsa_key = rsa.read_key_from_file('rsa_example.key') rsa_raw_pubkey = rsa.get_raw_pubkey(rsa_key) gnuk = get_gnuk_device() gnuk.cmd_select_openpgp() # Compute passwd data kdf_data = gnuk.cmd_get_data(0x00, 0xf9).tostring() if kdf_data == b"": passwd_data = passwd.encode('UTF-8') else: algo, subalgo, iters, salt_user, salt_reset, salt_admin, \ hash_user, hash_admin = parse_kdf_data(kdf_data) if salt_admin: salt = salt_admin else: salt = salt_user passwd_data = kdf_calc(passwd, salt, iters) # And authenticate with the passwd data gnuk.cmd_verify(BY_ADMIN, passwd_data) gnuk.cmd_write_binary(1 + keyno, rsa_raw_pubkey, False) gnuk.cmd_select_openpgp() challenge = gnuk.cmd_get_challenge().tostring() digestinfo = binascii.unhexlify(SHA256_OID_PREFIX) + challenge signed = rsa.compute_signature(rsa_key, digestinfo) signed_bytes = rsa.integer_to_bytes_256(signed) gnuk.cmd_external_authenticate(keyno, signed_bytes) gnuk.stop_gnuk() mem_info = gnuk.mem_info() print("%08x:%08x" % mem_info) print("Downloading flash upgrade program...") gnuk.download(mem_info[0], data_regnual) print("Run flash upgrade program...") gnuk.execute(mem_info[0] + len(data_regnual) - 4) # time.sleep(3) gnuk.reset_device() del gnuk gnuk = None # reg = None print("Waiting for device to appear:") while reg == None: print(" Wait %d seconds..." % wait_e) time.sleep(wait_e) for dev in gnuk_devices_by_vidpid(): try: reg = regnual(dev) print("Device: %s" % dev.filename) break except: pass # Then, send upgrade program... mem_info = reg.mem_info() print("%08x:%08x" % mem_info) print("Downloading the program") reg.download(mem_info[0], data_upgrade) print("Protecting device") reg.protect() print("Finish flashing") reg.finish() print("Resetting device") reg.reset_device() print("Update procedure finished") return 0
def ini(sc): if not ftc.token: ftc.token = gnuk.get_gnuk_device() ftc.token.cmd_select_openpgp()
#! /usr/bin/python3 from gnuk_token import get_gnuk_device, gnuk_token from binascii import hexlify import sys if __name__ == '__main__': count = 0 gnuk = get_gnuk_device() gnuk.cmd_select_openpgp() looping = (len(sys.argv) > 1) while True: try: challenge = gnuk.cmd_get_challenge().tostring() except Exception as e: print(count) raise e print(hexlify(challenge)) count = count + 1 if not looping: break
def ini(sc): if not glc.token: glc.token = gnuk.get_gnuk_device() glc.token.cmd_select_openpgp()