Example #1
0
    def test_repeat_xor_empty_key_returns_unchanged_bytes(self):
        b = b'Hey'
        expected_bytes = b'Hey'

        actual_bytes = repeat_xor(b, b'')

        self.assertEqual(expected_bytes, actual_bytes)
Example #2
0
    def test_repeat_xor_single_byte_key(self):
        b = b'Hey'
        key = b'A'
        expected_bytes = b'\x09\x24\x38'

        actual_bytes = repeat_xor(b, key)

        self.assertEqual(expected_bytes, actual_bytes)
Example #3
0
def break_repeat_xor(encrypted: bytes, keysize: int) -> list:
    """
    params:
        encrypted: bytes encrypted using repeat-xor
    returns:
        dictionary {'message': bytes, 'key': bytes} with most likely
        decrypted message and key using given `keysize`
    """
    key = b''
    for i in range(keysize):
        key += break_single_xor(build_transposed(encrypted, keysize,
                                                 i))[0]['key']
    return {'message': repeat_xor(encrypted, key), 'key': key}
Example #4
0
    def test_repeat_xor_cryptopals_case(self):
        b = (b"Burning 'em, if you ain't quick and nimble\n"
             b"I go crazy when I hear a cymbal")
        key = b"ICE"
        expected_hex = ("0b3637272a2b2e63622c2e69692a23693a2a3c6324202d623d633"
                        "43c2a26226324272765272"
                        "a282b2f20430a652e2c652a3124333a653e2b2027630c692b2028"
                        "3165286326302e27282f")

        actual_bytes = repeat_xor(b, key)
        actual_hex = actual_bytes.hex()

        self.assertEqual(expected_hex, actual_hex)
Example #5
0
 def test_repeat_xor_none_input_raises_typeerror(self):
     with self.assertRaises(TypeError):
         repeat_xor(None, b'A')
Example #6
0
 def test_repeat_xor_empty_input_returns_empty_bytes(self):
     self.assertEqual(repeat_xor(b'', b'A'), b'')