コード例 #1
0
    def test_prefix_aes_ecb_decryption(self):
        """Challenge 14"""
        prefix = Crypto.gen_random_key(18)
        target = "This is the target"
        quote = lambda text: text
        oracle, _, _ = Crypto.generate_aes_oracle(prefix, target, AES.MODE_ECB,
                                                  quote)
        self.assertEqual(target, Crypto.decrypts_aes_ecb_byte_wise(oracle))

        target = "A" * 16
        oracle, _, _ = Crypto.generate_aes_oracle(prefix, target, AES.MODE_ECB,
                                                  quote)
        self.assertEqual(target, Crypto.decrypts_aes_ecb_byte_wise(oracle))
コード例 #2
0
 def test_aes_ecb_decryption(self):
     """Challenge 12"""
     data = Crypto.get_lines('data/12.txt')[0]
     target = base64.b64decode(data)
     quote = lambda text: text
     oracle, _, _ = Crypto.generate_aes_oracle('', target, AES.MODE_ECB,
                                               quote)
     text = Crypto.decrypts_aes_ecb_byte_wise(oracle)
     self.assertEqual(target, text)
コード例 #3
0
ファイル: set3.py プロジェクト: nemausus/matasano
 def test_break_aes_ctr_fixed_nonce2(self):
     """Challenge 20"""
     block_size = 16
     quote = lambda t: t
     counter = lambda: chr(25)*block_size
     aes_ctr, _ = Crypto.generate_aes_oracle(
         '', '', AES.MODE_CTR, quote, block_size, counter)
     texts = [base64.b64decode(l) for l in open('data/20.txt').readlines()]
     ciphers = [aes_ctr(text) for text in texts]
     expected = FrequencyAnalyzer.get_repeating_xor(
         ciphers[0], texts[0])[:block_size]
     actual = Crypto.break_aes_ctr_with_fixed_nonce(ciphers, block_size)
     self.assertEquals(expected, actual)
コード例 #4
0
    def test_cbc_bit_flipping(self):
        """Challenge 16"""
        prefix = "comment1=cooking%20MCs;userdata="
        suffix = ";comment2=%20like%20a%20pound%20of%20bacon"
        oracle, key, _ = Crypto.generate_aes_oracle(prefix, suffix,
                                                    AES.MODE_CBC, urllib.quote)

        def has_admin(cipher):
            """Checks if cipher has admin."""
            text = Crypto.decrypt_aes(cipher, key, AES.MODE_CBC)
            return text.find(';admin=true;') != -1

        self.assertTrue(Crypto.flip_cipher_to_add_admin(oracle, has_admin))
コード例 #5
0
 def test_break_aes_ctr_fixed_nonce2(self):
     """Challenge 20"""
     block_size = 16
     quote = lambda t: t
     counter = lambda: chr(25) * block_size
     aes_ctr, _ = Crypto.generate_aes_oracle('', '', AES.MODE_CTR, quote,
                                             block_size, counter)
     texts = [base64.b64decode(l) for l in open('data/20.txt').readlines()]
     ciphers = [aes_ctr(text) for text in texts]
     expected = FrequencyAnalyzer.get_repeating_xor(ciphers[0],
                                                    texts[0])[:block_size]
     actual = Crypto.break_aes_ctr_with_fixed_nonce(ciphers, block_size)
     self.assertEquals(expected, actual)
コード例 #6
0
ファイル: set4.py プロジェクト: nemausus/matasano
    def test_ctr_bit_flipping(self):
        """Challenge 26"""
        prefix = "comment1=cooking%20MCs;userdata="
        suffix = ";comment2=%20like%20a%20pound%20of%20bacon"
        counter = Crypto.gen_aes_stream_counter_mt19973(3453243);
        oracle, key = Crypto.generate_aes_oracle(
            prefix, suffix, AES.MODE_CTR, urllib.quote, 16, counter=counter)

        def has_admin(cipher):
            """Checks if cipher has admin."""
            counter = Crypto.gen_aes_stream_counter_mt19973(3453243);
            text = Crypto.decrypt_aes(cipher, key, AES.MODE_CTR, counter=counter)
            return text.find(';admin=true;') != -1

        self.assertTrue(Crypto.flip_cipher_to_add_admin_ctr(oracle, has_admin))
コード例 #7
0
ファイル: set3.py プロジェクト: nemausus/matasano
    def test_break_aes_padding_leak(self):
        """Challenge 17"""
        quote = lambda text: text
        _, key, init_vector = Crypto.generate_aes_oracle(
            '', '', AES.MODE_CBC, quote)

        def has_valid_padding(cipher, init_vector):
            """Checks if cipher has valid padding."""
            try:
                Crypto.decrypt_aes(cipher, key, AES.MODE_CBC, init_vector)
            except ValueError:
                return False
            return True

        lines = [base64.b64decode(l) for l in open('data/17.txt').readlines()]
        for line in lines:
            cipher = Crypto.encrypt_aes(line, key, AES.MODE_CBC, init_vector)
            self.assertEqual(line, Crypto.break_aes_using_padding_leak(
                cipher, init_vector, has_valid_padding))
コード例 #8
0
    def test_break_aes_padding_leak(self):
        """Challenge 17"""
        quote = lambda text: text
        _, key, init_vector = Crypto.generate_aes_oracle(
            '', '', AES.MODE_CBC, quote)

        def has_valid_padding(cipher, init_vector):
            """Checks if cipher has valid padding."""
            try:
                Crypto.decrypt_aes(cipher, key, AES.MODE_CBC, init_vector)
            except ValueError:
                return False
            return True

        lines = [base64.b64decode(l) for l in open('data/17.txt').readlines()]
        for line in lines:
            cipher = Crypto.encrypt_aes(line, key, AES.MODE_CBC, init_vector)
            self.assertEqual(
                line,
                Crypto.break_aes_using_padding_leak(cipher, init_vector,
                                                    has_valid_padding))
コード例 #9
0
    def test_ctr_bit_flipping(self):
        """Challenge 26"""
        prefix = "comment1=cooking%20MCs;userdata="
        suffix = ";comment2=%20like%20a%20pound%20of%20bacon"
        counter = Crypto.gen_aes_stream_counter_mt19973(3453243)
        oracle, key = Crypto.generate_aes_oracle(prefix,
                                                 suffix,
                                                 AES.MODE_CTR,
                                                 urllib.quote,
                                                 16,
                                                 counter=counter)

        def has_admin(cipher):
            """Checks if cipher has admin."""
            counter = Crypto.gen_aes_stream_counter_mt19973(3453243)
            text = Crypto.decrypt_aes(cipher,
                                      key,
                                      AES.MODE_CTR,
                                      counter=counter)
            return text.find(';admin=true;') != -1

        self.assertTrue(Crypto.flip_cipher_to_add_admin_ctr(oracle, has_admin))