Exemple #1
0
def handle_verify(args):
    data = json.loads(args.json)
    addr = Address.decode_base58(data['addr'])
    xpub = binascii.unhexlify(data['xpub'])
    pub = xpub[:32]
    msg = data['msg'].encode('utf-8')
    sig = binascii.unhexlify(data['sig'])

    # verify address and pubkey
    if not addr.verify_pubkey(xpub):
        print('address and xpub is mismatched')
        return

    # verify signature and pubkey
    result = verify(pub, msg, sig)
    print('signature is right' if result else 'signature is wrong')
Exemple #2
0
def handle_sign(args):
    passphase = input_passphase()
    cfg = load_wallet_config(args)
    root_xpriv = binascii.unhexlify(cfg['root_key'])
    root_xpub = xpriv_to_xpub(root_xpriv)
    hdpass = derive_hdpassphase(root_xpub)
    addr = Address.decode_base58(args.addr)
    path = addr.get_derive_path(hdpass)
    if path is None:
        print('the address don\'t belong to this wallet')
        return
    xpriv = derive_key(root_xpriv, passphase, path, DERIVATION_V1)
    xpub = xpriv_to_xpub(xpriv)
    if not addr.verify_pubkey(xpub):
        print('the passphase is wrong')
        return
    sig = encrypted_sign(xpriv, passphase, args.message.encode('utf-8'))
    print(
        json.dumps({
            'xpub': binascii.hexlify(xpub).decode(),
            'addr': args.addr,
            'msg': args.message,
            'sig': binascii.hexlify(sig).decode(),
        }))