Skip to content
Based on cipher-aes, but using a crypto-api interface and providing resulting IVs for each mode
C Haskell
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Benchmark
Crypto/Cipher
Test
cbits
.travis.yml
AUTHORS
LICENSE
README.md
Setup.hs
cipher-aes128.cabal

README.md

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.

You can’t perform that action at this time.