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')
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(), }))