úÎ!x˜     0 !"#$%&BModes ECB and CBC can only handle full 16-byte frames. This means D the length of every strict bytestring passed in must be a multiple ) of 16; when using lazy bytestrings, its  component strict $ bytestrings must all satisfy this. =Other modes can handle bytestrings of any length, by storing E overflow for later. However, the total length of bytestrings passed B in must still be a multiple of 16, or the overflow will be lost. @In addition to the existing modes, a small amount of extra code  could add support for CTR '()*+Must be 16, 24 or 32 bytes ,Create an encryption/#decryption context for incremental  encryption/ decryption CYou may create an ECB context this way, in which case you may pass  undefined for the IV A 16, 24 or 32-byte AES key  A 16-byte IV - %Create a context for ECB, which doesn' t need an IV A 16, 24 or 32-byte AES key ./ Incrementally encrypt/decrypt bytestrings (crypt is definitely not thread-safe. Don't even think about  it. 01234567      &A class of things that can be crypted :The crypt function returns incremental results as well as * appending them to the result bytestring. =Before you use this, recall that AES uses the lazy ST monad. @Compute an AES computation, returning the ST return value along  with the crypted data !The AES key - 16, 24 or 32 bytes The IV, 16 bytes ;Compute an AES computation, discarding the ST return value !The AES key - 16, 24 or 32 bytes The IV, 16 bytes       Encryption/ decryption for lazy bytestrings !The AES key - 16, 24 or 32 bytes The IV, 16 bytes Bytestring to encrypt/decrypt  Encryption/"decryption for strict bytestrings !The AES key - 16, 24 or 32 bytes The IV, 16 bytes Bytestring to encrypt/decrypt  8      !"#$%&'(())*+,-./0123456 AES-0.0.1Codec.Crypto.AES.IOCodec.Crypto.AES.STCodec.Crypto.AESAESCtxModeCFBCBCECB DirectionDecryptEncryptnewCtx newECBCtxcrypt CryptableAESliftSTrunAESexecAEScrypt'_aes_decrypt_key_aes_encrypt_key_aes_cfb_decrypt_aes_cfb_encrypt_aes_cbc_decrypt_aes_cbc_encrypt_aes_ecb_decrypt_aes_ecb_encryptDecryptCtxStructEncryptCtxStruct DecryptCtxP EncryptCtxPDirectionalCtx DecryptCtx EncryptCtxContextCFBCtxCBCCtxECBCtxIVAESKeytoKeytoIVnewCtx' newECBCtx'wrapCtrcallcallivaddivwrapensure encryptCtx decryptCtx