Пример #1
0
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
Пример #2
0
def ini(sc):
    if not ftc.token:
        ftc.token = gnuk.get_gnuk_device()
        ftc.token.cmd_select_openpgp()
Пример #3
0
#! /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
Пример #4
0
def ini(sc):
    if not glc.token:
        glc.token = gnuk.get_gnuk_device()
        glc.token.cmd_select_openpgp()
Пример #5
0
def ini(sc):
    if not glc.token:
        glc.token = gnuk.get_gnuk_device()
        glc.token.cmd_select_openpgp()