def test_break_encrypted(): """ Set 2, Challenge 13 """ key = os.urandom(16) aes_ecb = AESOracle(key=key, mode=AesMode.ECB, prepend='', append='', encode_fn=profile_for, decode_fn=key_value_parser) # Make sure our test setup is working assert aes_ecb.decrypt(aes_ecb.encrypt('*****@*****.**')) == {'email': '*****@*****.**', 'uid': '10', 'role': 'user'} # Run the real test assert aes_ecb.decrypt(set2.break_encrypted_profile(aes_ecb.encrypt)) == {'email': '*****@*****.**', 'uid': '10', 'role': 'admin'}
def test_aes_ctr(): """ Set 3, Challenge 18 """ test_string = "L77na/nrFsKvynd6HzOoG7GHTLXsTVu9qvY/2syLXzhPweyyMTJULu/6/kXX0KSvoOLSFQ==".decode('base64') ctr_oracle = AESOracle(mode=AesMode.CTR, key='YELLOW SUBMARINE', prepend='', append='') assert ctr_oracle.decrypt(test_string, simple_nonce_generator()) == "Yo, VIP Let's kick it Ice, Ice, baby Ice, Ice, baby " my_test = 'A' * 22 assert ctr_oracle.decrypt(ctr_oracle.encrypt(my_test, simple_nonce_generator()), simple_nonce_generator()) == my_test
def test_cbc_bitflipping_attack(): """ Set 2, Challenge 16 """ def parse_by_semi(text): print text print text.split(';') return [key_value_parser(s) for s in text.split(';')] aes_cbc = AESOracle(key=os.urandom(16), mode=AesMode.CBC, prepend='comment1=cooking%20MCs;userdata=', append=';comment2=%20like%20a%20pound%20of%20bacon', encode_fn=quote, decode_fn=parse_by_semi) ciphertext, iv = set2.cbc_bitflipping_attack(aes_cbc.encrypt) assert {'admin': 'true'} in aes_cbc.decrypt(ciphertext, iv)