def testSignAndVerify(self): msg = b'1231232131' keyPair = CryptoUtil.genKeyPair() privKey = CryptoUtil.getPrivateKey(keyPair) pubKey = CryptoUtil.getPublicKey(keyPair) sig = CryptoUtil.signMessage(privKey, msg) self.assertTrue(CryptoUtil.verifySignature(pubKey, msg, sig), 'correct signature not verified')
def testBadSignature(self): msg = b'1231232131' keyPair = CryptoUtil.genKeyPair() privKey = CryptoUtil.getPrivateKey(keyPair) sig = CryptoUtil.signMessage(privKey, msg) keyPair2 = CryptoUtil.genKeyPair() pubKey2 = CryptoUtil.getPublicKey(keyPair2) self.assertFalse(CryptoUtil.verifySignature(pubKey2, msg, sig), 'incorrect signature was verified as correct')
genesis.addOutput(genesisValue, scroogePubK) genesis.finalize() # Make an initial pool initialPool = UTXOPool() utxo = UTXO(genesis.getHash(), 0) initialPool.addUTXO(utxo, genesis.getOutput(0)) # Note this transaction is not valid -- one of its inputs does not exist tx2in2out = Transaction() tx2in2out.addInput(genesis.hash, 0) tx2in2out.addInput(genesis.hash, 1) tx2in2out.addOutput(10.0, scroogePubK) tx2in2out.addOutput(15.0, scroogePubK) raw0 = tx2in2out.getRawDataToSign(0) sig0 = CryptoUtil.signMessage(scroogePrivK, raw0) tx2in2out.addSignature(sig0, 0) raw1 = tx2in2out.getRawDataToSign(1) sig1 = CryptoUtil.signMessage(scroogePrivK, raw1) tx2in2out.addSignature(sig1, 1) tx2in2out.finalize() txValid = Transaction() txValid.addInput(genesis.getHash(), 0) txValid.addOutput(10.0, scroogePubK) sig = CryptoUtil.signMessage(scroogePrivK, txValid.getRawDataToSign(0)) txValid.addSignature(sig, 0) txValid.finalize() txBadInput = Transaction() txBadInput.addInput(genesis.getHash(), 1)
def signInput(tx, privKey, index): tx.addSignature(CryptoUtil.signMessage(privKey, tx.getRawDataToSign(index)), index)