Esempio n. 1
0
 def decrypt(self):
     if self.key is None or self.ciphertext is None:
         raise DecryptionError("Tried decryption without a key and ciphertext. Can't do that.")
     try:
         self.payload = symmetric_decrypt(self.key, self.ciphertext)
         return bytearray(self.payload)
     except (ValueError, CryptoError) as _e:
         # TODO: need to handle decryption errors, e.g. fake key or ciphertext
         raise DecryptionError("Decryption failed. Key does not match ciphertext.")
    def test_encrypt_and_store(self):
        payload = bytearray(i for i in range(100))
        sut = EncryptedCache(10, self.ALARM_QUEUE)
        ciphertext, block_hash = sut.encrypt_and_add_payload(payload)

        self.assertEqual(1, len(sut))
        cache_item = sut._cache.get(block_hash)

        self.assertEqual(ciphertext, cache_item.ciphertext)
        self.assertEqual(
            payload, symmetric_decrypt(cache_item.key, cache_item.ciphertext))
Esempio n. 3
0
    def test_propagate_block_to_network_encrypted_block(self):
        self.node.opts.encrypt_blocks = True

        block_message = helpers.generate_bytearray(50)
        connection = MockConnection(
            MockSocketConnection(1, self.node, ip_address=LOCALHOST,
                                 port=9000), self.node)
        self.neutrality_service.propagate_block_to_network(
            block_message, connection)

        self.assertEqual(1, len(self.node.broadcast_messages))
        broadcast_message, connection_types = self.node.broadcast_messages[0]
        self.assertTrue(ConnectionType.RELAY_BLOCK in connection_types[0])

        raw_block_hash = bytes(broadcast_message.block_hash().binary)
        cache_item = self.node.in_progress_blocks._cache.get(raw_block_hash)
        self.assertEqual(
            cache_item.payload,
            crypto.symmetric_decrypt(cache_item.key,
                                     broadcast_message.blob().tobytes()))
        self.assertIn(broadcast_message.block_hash(),
                      self.neutrality_service._receipt_tracker)