def signature_verify(msg, sig, addr, istest=False): try: msg = to_bytes(msg) sig = to_bytes(sig) addr = to_bytes(addr) # Recovers public key (and checks signature is valid) Q = ecdsa_recover(msg,sig) if not Q: return False if ecdsa_is_compressed(decode_sig(sig)): Q = encode_pubkey(Q, 'hex_compressed') # Checks given address is equal to address associated to public key return True if pubkey_to_address(Q, pubbyte_prefix(istest)) == addr else False except AssertionError: return False
def signature_verify(msg, sig, addr, istest=False): try: msg = to_bytes(msg) sig = to_bytes(sig) addr = to_bytes(addr) # Recovers public key (and checks signature is valid) Q = ecdsa_recover(msg, sig) if not Q: return False if ecdsa_is_compressed(decode_sig(sig)): Q = encode_pubkey(Q, 'hex_compressed') # Checks given address is equal to address associated to public key return True if pubkey_to_address( Q, pubbyte_prefix(istest)) == addr else False except AssertionError: return False
def generate_nonce(): ''' Generates a random nonce Inspired from random_key() in https://github.com/vbuterin/pybitcointools/blob/master/bitcoin/main.py Credits to https://github.com/vbuterin ''' entropy = str(os.urandom(32)) + str(random.randrange(2**256)) + str( int(time.time())**7) return hashlib.sha256(to_bytes(entropy)).hexdigest()[:NONCE_LEN]
def address_verify(addr, istest=False): try: addr = to_bytes(addr) # Checks checksum leadingzbytes = len(re.match(b'^1*',addr).group(0)) data = b'\x00' * leadingzbytes + changebase(addr,58,256) csum_ok = bin_dbl_sha256(data[:-4])[:4] == data[-4:] # Checks network vb = get_version_byte(addr) ntw_ok = (vb == 0 and not istest) or (vb == 111 and istest) # Result return csum_ok and ntw_ok except AssertionError: return False
def address_verify(addr, istest=False): try: addr = to_bytes(addr) # Checks checksum leadingzbytes = len(re.match(b'^1*', addr).group(0)) data = b'\x00' * leadingzbytes + changebase(addr, 58, 256) csum_ok = bin_dbl_sha256(data[:-4])[:4] == data[-4:] # Checks network vb = get_version_byte(addr) ntw_ok = (vb == 0 and not istest) or (vb == 111 and istest) # Result return csum_ok and ntw_ok except AssertionError: return False