<s> from Crypto . Cipher import AES <EOL> from prob8 import chunks <EOL> from prob7 import aes_ecb_dec <EOL> from prob2 import hex_xor ; <EOL> from prob1 import rawToHex , hexToRaw , base64toRaw <EOL> def aes_ecb_enc ( rawCipher , rawKey ) : <EOL> aes = AES . new ( rawKey , AES . MODE_ECB ) ; <EOL> return aes . encrypt ( rawCipher ) ; <EOL> def aes_cbc_enc ( rawPlain , rawKey , rawIV ) : <EOL> plainBlocks = chunks ( rawPlain , <NUM_LIT:16> ) ; <EOL> cipher = b'<STR_LIT>' ; <EOL> for block in plainBlocks : <EOL> blockIn = hexToRaw ( hex_xor ( rawToHex ( block ) , rawToHex ( rawIV ) ) ) ; <EOL> blockOut = aes_ecb_enc ( blockIn , rawKey ) ; <EOL> rawIV = blockOut ; <EOL> cipher += blockOut ; <EOL> return cipher ; <EOL> def aes_cbc_dec ( rawCipher , rawKey , rawIV ) : <EOL> cipherBlocks = chunks ( rawCipher , <NUM_LIT:16> ) ; <EOL> plain = b'<STR_LIT>' ; <EOL> for block in cipherBlocks : <EOL> ecbOut = aes_ecb_dec ( block , rawKey ) ; <EOL> cbcOut = hexToRaw ( hex_xor ( rawToHex ( ecbOut ) , rawToHex ( rawIV ) ) ) ; <EOL> rawIV = block ; <EOL> plain += cbcOut ; <EOL> return plain ; <EOL> testInput = b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' + b'<STR_LIT>' ; <EOL> def test10 ( ) : <EOL> rawInput = base64toRaw ( testInput ) ; <EOL> rawOutput = aes_cbc_dec ( rawInput , b'<STR_LIT>' , b'<STR_LIT>' ) <EOL> print ( str ( rawOutput ) ) ; <EOL> if __name__ == "<STR_LIT:__main__>" : <EOL> test10 ( ) ; </s>
