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))
예제 #8
0
    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()
예제 #9
0
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')