def test_break_rng_stream_cipher(self): """Challenge 24""" seed_str = Crypto.gen_random_key(2) seed = ord(seed_str[0]) << 8 | ord(seed_str[1]) mt_cipher = MT19937Cipher(seed) prefix = Crypto.gen_random_key(23) text = 'A'*14 cipher = mt_cipher.encrypt(prefix + text) self.assertEquals(seed, Crypto.break_rng_stream_cipher(cipher, text))
def test_break_rng_stream_cipher(self): """Challenge 24""" seed_str = Crypto.gen_random_key(2) seed = ord(seed_str[0]) << 8 | ord(seed_str[1]) mt_cipher = MT19937Cipher(seed) prefix = Crypto.gen_random_key(23) text = 'A' * 14 cipher = mt_cipher.encrypt(prefix + text) self.assertEquals(seed, Crypto.break_rng_stream_cipher(cipher, text))
def test_break_if_iv_is_same_as_key(self): """Challenge 27""" key = Crypto.gen_random_key(16) iv = key oracle = lambda c: Crypto.decrypt_aes(c, key, AES.MODE_CBC, iv) cipher = Crypto.encrypt_aes("X" * 48, key, AES.MODE_CBC, iv) self.assertEquals( key, Crypto.extract_key_if_key_is_same_as_key(cipher, oracle))
def test_break_if_iv_is_same_as_key(self): """Challenge 27""" key = Crypto.gen_random_key(16) iv = key oracle = lambda c: Crypto.decrypt_aes(c, key, AES.MODE_CBC, iv) cipher = Crypto.encrypt_aes("X"*48, key, AES.MODE_CBC, iv) self.assertEquals(key, Crypto.extract_key_if_key_is_same_as_key(cipher, oracle))
def test_md4_length_extension(self): """Challenge 30""" orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \ '%20a%20pound%20of%20bacon' # this is not known to attacker. key = Crypto.gen_random_key(43) suffix = ';admin=true;' orig_hash = md4(key + orig_message) forged_message = MD4Hash.pad(key + orig_message) + suffix forged_hash = md4(forged_message) validate = lambda h: h == forged_hash self.assertTrue(extend_md4(orig_hash, orig_message, suffix, validate))
def test_sha_length_extension(self): """Challenge 29""" orig_message = 'comment1=cooking%20MCs;userdata=foo;comment2=%20like' \ '%20a%20pound%20of%20bacon' # this is not known to attacker. key = Crypto.gen_random_key(100) suffix = ';admin=true;' orig_sha = sha1(key + orig_message) forged_message = Sha1Hash.pad(key + orig_message) + suffix forged_sha = sha1(forged_message) validate = lambda sha: sha == forged_sha self.assertTrue(extend_sha1(orig_sha, orig_message, suffix, validate))
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))
def test_aes_ctr_encryption(self): """Challenge 18""" counter = Crypto.gen_aes_stream_counter_simple() key = "YELLOW SUBMARINE" cipher = base64.b64decode("L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLX" +\ "zhPweyyMTJULu/6/kXX0KSvoOLSFQ==") text = "Yo, VIP Let's kick it Ice, Ice, baby Ice, Ice, baby " self.assertEqual(text, Crypto.decrypt_aes( cipher, key, AES.MODE_CTR, counter=counter)) # another test key = Crypto.gen_random_key(16) text = "Let there be light!" counter = Crypto.gen_aes_stream_counter_simple() cipher = Crypto.encrypt_aes(text, key, AES.MODE_CTR, counter=counter) counter = Crypto.gen_aes_stream_counter_simple() self.assertEqual(text, Crypto.decrypt_aes( cipher, key, AES.MODE_CTR, counter=counter))
def test_aes_ctr_encryption(self): """Challenge 18""" counter = Crypto.gen_aes_stream_counter_simple() key = "YELLOW SUBMARINE" cipher = base64.b64decode("L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLX" +\ "zhPweyyMTJULu/6/kXX0KSvoOLSFQ==") text = "Yo, VIP Let's kick it Ice, Ice, baby Ice, Ice, baby " self.assertEqual( text, Crypto.decrypt_aes(cipher, key, AES.MODE_CTR, counter=counter)) # another test key = Crypto.gen_random_key(16) text = "Let there be light!" counter = Crypto.gen_aes_stream_counter_simple() cipher = Crypto.encrypt_aes(text, key, AES.MODE_CTR, counter=counter) counter = Crypto.gen_aes_stream_counter_simple() self.assertEqual( text, Crypto.decrypt_aes(cipher, key, AES.MODE_CTR, counter=counter))