def test_signature_with_wrong_message_returns_false(self): w = Wallet() message = b'howdy' signature = w.sign(message) self.assertFalse(w.verify(b'hello', signature))
def test_signature_with_correct_message_returns_true(self): w = Wallet() message = b'howdy' signature = w.sign(message) self.assertTrue(w.verify(message, signature))
def test_sign_bytes_returns_hex_signature(self): w = Wallet() signature = w.sign(b'hello', as_hex=True) self.assertTrue(isinstance(signature, str)) self.assertEqual(len(signature), 128)
def test_sign_bytes_returns_signature(self): w = Wallet() signature = w.sign(b'hello') self.assertTrue(isinstance(signature, bytes)) self.assertEqual(len(signature), 64)
def test_verify_vk_pepper_wrong_vk_pepper_message(self): wallet = Wallet() vk = wallet.verifying_key() pepper = b'TESTING_PEPPER' pepper_msg = vk + wallet.sign(pepper) self.assertFalse(verify_vk_pepper(pepper_msg, b'WRONG_PEPPER'))
def test_verify_vk_pepper_correct_vk_pepper_message(self): wallet = Wallet() vk = wallet.verifying_key() pepper = b'TESTING_PEPPER' pepper_msg = vk + wallet.sign(pepper) self.assertTrue(verify_vk_pepper(pepper_msg, pepper))
def test_signature_with_wrong_vk_returns_false(self): w = Wallet() message = b'howdy' signature = w.sign(message) a = Wallet() self.assertFalse(a.verify(message, signature))
def get_signed_message_packed(self, wallet: Wallet, msg_type: MessageType, **kwargs): msg_type, msg = self.get_message_packed(msg_type, **kwargs) sig = wallet.sign(msg) signed_msg = self.signed_message_capnp.SignedMessage.new_message( msgType=msg_type, message=msg, signature=sig, signee=wallet.vk.encode(), timestamp=time.time()) return pack(int( MessageType.SIGNED_MESSAGE)), signed_msg.to_bytes_packed()
def subblock_from_txs(txs, idx=0): # Build a subblock. One will do tree = merklize([tx.to_bytes_packed() for tx in txs]) w = Wallet() sig = w.sign(tree[0]) signature = subblock_capnp.Signature.new_message(signer=w.verifying_key(), signature=sig) sb = subblock_capnp.SubBlock.new_message( inputHash=secrets.token_bytes(32), transactions=[tx for tx in txs], merkleLeaves=[t for t in tree], signatures=[signature], subBlockNum=idx, prevBlockHash=b'\x00' * 32, ) return sb
def transaction_list_to_transaction_batch(tx_list, wallet: Wallet): h = hashlib.sha3_256() for tx in tx_list: # Hash it tx_bytes = tx.to_bytes_packed() h.update(tx_bytes) # Add a timestamp timestamp = time.time() h.update('{}'.format(timestamp).encode()) input_hash = h.digest().hex() signature = wallet.sign(bytes.fromhex(input_hash)) msg = Message.get_message( msg_type=MessageType.TRANSACTION_BATCH, transactions=[t for t in tx_list], timestamp=timestamp, signature=signature, inputHash=input_hash, sender=wallet.verifying_key() ) return msg[1]
def test_sign_string_breaks(self): w = Wallet() with self.assertRaises(AssertionError): w.sign('hello')