Esempio n. 1
0
def single_key(wif_version, is_main, password):
    n = 16384
    p = 1
    r = 8
    seed = secrets.token_bytes(32)
    salt = secrets.token_bytes(8)
    k = CECKey()
    k.set_secretbytes(seed)
    pk = k.get_pubkey()
    wif = k.get_wif(wif_version.to_bytes(1, 'big'))
    address = key_to_p2sh_p2wpkh(pk, is_main)
    iv = secrets.token_bytes(AES.block_size)
    # 这里的salt, key的size以及n, p, r的值跟bitcoinj中的KeyCrypterScrypt定义一致
    key = scrypt.hash(convert_to_byte_array(password.encode("utf-8")), salt,
                      16384, 8, 1, 32)
    obj = AES.new(key, AES.MODE_CBC, iv)
    # 加密数据必须是16位的整数倍,采用pkcs7进行pad,跟PaddedBufferedBlockCipher中的一致
    ciphertext = obj.encrypt(pad(wif.encode('utf-8'), 16))
    key_info = {
        'pubkey': pk.hex(),
        'wif': wif,
        'address': address,
        'salt': salt.hex(),
        'n': n,
        'p': p,
        'r': r,
        'iv': iv.hex(),
        'cipher': ciphertext.hex()
    }
    return key_info
Esempio n. 2
0
def print_wif_address(secret, compress=True):
    k = CECKey()
    k.set_secretbytes(bytes.fromhex(secret))
    k.set_compressed(compress)
    pk = k.get_pubkey()
    print(k.get_wif(b'\x80'), key_to_p2pkh(pk, True))