def verifyTxnSignature(txn): parsed = parseTxn(txn) signableTxn = getSignableTxn(parsed) hashToSign = hashlib.sha256(hashlib.sha256(signableTxn.decode('hex')).digest()).digest().encode('hex') assert(parsed[1][-2:] == '01') # hashtype sig = keyUtils.derSigToHexSig(parsed[1][:-2]) public_key = parsed[2] vk = ecdsa.VerifyingKey.from_string(public_key[2:].decode('hex'), curve=ecdsa.SECP256k1) assert(vk.verify_digest(sig.decode('hex'), hashToSign.decode('hex')))
def verifyTxnSignature(txn): parsed = parseTxn(txn) signableTxn = getSignableTxn(parsed) hashToSign = hashlib.sha256( hashlib.sha256( signableTxn.decode('hex')).digest()).digest().encode('hex') assert (parsed[1][-2:] == '01') # hashtype sig = keyUtils.derSigToHexSig(parsed[1][:-2]) public_key = parsed[2] vk = ecdsa.VerifyingKey.from_string(public_key[2:].decode('hex'), curve=ecdsa.SECP256k1) assert (vk.verify_digest(sig.decode('hex'), hashToSign.decode('hex'))) print "transaction verified" fo = open("ledger.txt", "wb") fo.write("new transaction added: \n" + txn)
def verifyTxnSignature(txn, compressed='no', pubk = '0'): print('txn:', txn) parsed = parseTxn(txn) print('parsed: ', parsed) compressed=compressed print('compressed vts:', compressed) signableTxn = getSignableTxn(parsed, compressed=compressed) print('SignableTxn:', signableTxn) hashToSign = hashlib.sha256(hashlib.sha256(codecs.decode(signableTxn,'hex')).digest()).digest() assert(parsed[1][-2:] == '01') # hashtype sig = keyUtils.derSigToHexSig(parsed[1][:-2]) if (compressed=='no'): public_key = parsed[2] else: public_key = pubk print('public_key: ', public_key) print('sig :', sig.encode('utf-8')) vk = ecdsa.VerifyingKey.from_string(codecs.decode(public_key[2:].encode('utf-8'),'hex'), curve=ecdsa.SECP256k1) #print(vk.verify_digest(codecs.decode(sig.encode('utf-8'),'hex'), hashToSign )) assert(vk.verify_digest(codecs.decode(sig.encode('utf-8'),'hex'), hashToSign ))
def verifyTxnSignature(txn, compressed='no', pubk='0'): print('txn:', txn) parsed = parseTxn(txn) print('parsed: ', parsed) compressed = compressed print('compressed vts:', compressed) signableTxn = getSignableTxn(parsed, compressed=compressed) print('SignableTxn:', signableTxn) hashToSign = hashlib.sha256( hashlib.sha256(codecs.decode(signableTxn, 'hex')).digest()).digest() assert (parsed[1][-2:] == '01') # hashtype sig = keyUtils.derSigToHexSig(parsed[1][:-2]) if (compressed == 'no'): public_key = parsed[2] else: public_key = pubk print('public_key: ', public_key) print('sig :', sig.encode('utf-8')) vk = ecdsa.VerifyingKey.from_string(codecs.decode( public_key[2:].encode('utf-8'), 'hex'), curve=ecdsa.SECP256k1) #print(vk.verify_digest(codecs.decode(sig.encode('utf-8'),'hex'), hashToSign )) assert (vk.verify_digest(codecs.decode(sig.encode('utf-8'), 'hex'), hashToSign))
import bitcoin import hashlib import txnUtils import keyUtils tx = "01000000013c10dccdd96187ec065a2404a829be91ccb2a80ee7986d4cbbb31cd493f69e5d000000006c493046022100c9f051042467433b2199526db1ba327154d2bcd7c90c40070ba06869c5512194022100b1146f90fac7ed0db71d2f0c91f30c51d11310c508a64719dc424cdf710cb38b012102545d2c25b98ec8827f2d9bee22b7a9fb98091b2008bc45b3b806d44624dc038cffffffff0200c5015a020000001976a914f507b67f6af2dcc993f6958c05855f4861cefe8888acc427e9254f0600001976a914b3dd79fb3460c7b0d0bbb8d2ed93436b88b6d89c88ac00000000" m = txnUtils.parseTxn(tx) e = txnUtils.getSignableTxn(m) z = hashlib.sha256(hashlib.sha256(e.decode('hex')).digest()).digest() z1 = z[::-1].encode('hex_codec') z = z.encode('hex_codec') s = keyUtils.derSigToHexSig(m[1][:-2]) pub = m[2] sigR = s[:64] sigS = s[-64:] sigZ = z print('Signed TX is :', tx) print('Signature (r, s pair) is :', s) print('Public Key is :', pub) print("") print( "#################################################################################################" ) print("") print('Unsigned TX is :', e) print('hash of message (sigZ) is USE This ONE :', z) print('reversed z :', z1) print("") print( "#################################################################################################"