Skip to content

Based on cipher-aes, but using a crypto-api interface and providing resulting IVs for each mode

License

Notifications You must be signed in to change notification settings

tracsis/cipher-aes128

 
 

Repository files navigation

TravisCI

AES and various modes

This package, available on hackage, implements AES and various modes of operation. Despite the name, it provides AES-192 and 256 as well.

While it original started as a fork of the cipher-aes package to test a performance improvement, this package continues to be maintained due to my preference for the API (for example, also this) and the idea that faster C code will eventually be adopted.

Use

Most users will want the crypto-api interface to generate keys and encrypt/decrypt data:

{-# LANGUAGE OverloadedStrings #-}
import Data.ByteString
import Crypto.Cipher.AES128 (AESKey128)
import Crypto.Classes (buildKeyIO, ctr, unCtr, zeroIV)

main =
 do k <- buildKeyIO :: IO AESKey128
    let myMessage            = "Some message or another"
        (ciphertext,_nextIV) = ctr k zeroIV myMessage
        (myMessage',_nextIV) = unCtr k zeroIV ciphertext
    print (unpack myMessage)
    print (unpack ciphertext)
    print $ myMessage == myMessage'

Unless you need GCM in which case, as of writing, you'll need to use makeGCMCtx, encryptGCM and decryptGCM.

About

Based on cipher-aes, but using a crypto-api interface and providing resulting IVs for each mode

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C 75.9%
  • Haskell 24.1%