úΤ¿    portableStable%Michael Snoyman <michael@snoyman.com>None =The initialization vector used by AES. Should be exactly 16  bytes long. =The keys used to store the cookies. We have an AES key used ? to encrypt the cookie and a Skein-MAC-512-256 key used verify @ the authencity and integrity of the cookie. The AES key needs = to have exactly 32 bytes (256 bits) while Skein-MAC-512-256 " should have 64 bytes (512 bits).  See also  and . *Construct an initialization vector from a  .  Fails if there isn't exactly 16 bytes. 7Randomly construct a fresh initialization vector. You   should not reuse initialization vectors. The default key file.  Simply calls  . $Get a key from the given text file. =If the file does not exist or is corrupted a random key will ' be generated and stored in that file. Generate a random . Besides the , the   ByteString passed to  is returned so that it can be  saved for later use. Initializes a  from a random   . Fails if  there isn'2t exactly 96 bytes (256 bits for AES and 512 bits  for Skein-MAC-512-512). Same as  !, however randomly generates the  initialization vector for you. 8Encrypt (AES-CTR), authenticate (Skein-MAC-512-256) and ; encode (Base64) the given cookie data. The returned byte 2 string is ready to be used in a response header. 7Decode (Base64), verify the integrity and authenticity = (Skein-MAC-512-256) and decrypt (AES-CTR) the given encoded < cookie data. Returns the original serialized cookie data. ! Fails if the data is corrupted. Dummy  instance. File name where key is stored. The actual key.  Key of the server. 'New, random initialization vector (see ). Serialized cookie data. #Encoded cookie data to be given to  the client browser. Key of the server. *Encoded cookie data given by the browser. Serialized cookie data.          clientsession-0.8.0Web.ClientSessionIVKeymkIVrandomIVdefaultKeyFile getDefaultKeygetKey randomKeyinitKey encryptIOencryptdecryptbytestring-0.9.2.1Data.ByteString.Internal ByteString $fShowKeybaseGHC.ShowShow$fSerializeKey$fEqKey