Version 1.6 (released 2013-03-20)

* Added modules_install target in Makefile

* Added SHA224. Patch by Yashpal Dutta.

* Asynchronous operations will not be scheduled if zero
copy is disabled.

* Asynchronous operations are disabled by default, unless
-DENABLE_ASYNC is enabled on Makefile.


Version 1.5 (released 2012-08-04)

* Fixes in AEAD support. Patches by Jaren Johnston.

* Simplifications in memory locking. Patch by Phil Sutter.

* Allow empty plaintext and authenticated data in AEAD 
ciphers. Patch by Jaren Johnston.


Version 1.4 (released 2012-03-15)

* Correctly report hw accelerated ciphers.


Version 1.3 (released 2012-02-29)

* Return EBADMSG instead of ECANCELED on tag verification
failure in authenc modes.

* COP_FLAG_RESET can be combined with COP_FLAG_UPDATE for
efficiency.

* Added more test cases.

* Automatically set public permissions for the device


Version 1.2 (released 2012-02-24)

* In kernels that do not distinguish between hw 
accelerated ciphers or not set the SIOP_FLAG_KERNEL_DRIVER_ONLY
flag based on driver name.

* camelia was renamed to camellia.

* Added COP_FLAG_RESET to allow resetting the state
in multi-update.

* Corrected issue in ARM processors with mv_cesa.


Version 1.1 (released 2012-02-20)

* Fixed alignment issue in speed.c

* Defined HASH_MAX_LEN in cryptodev.h

* CIOCGSESSINFO ioctl() sets the SIOP_FLAG_KERNEL_DRIVER_ONLY 
flag if the driver is only available through kernel
driver (and is not just software cipher).

* Added new encryption ioctl, CIOCAUTHCRYPT, which
combines authentication and encryption. Operates
in AEAD, TLS and SRTP modes (the API might change
in later versions).


Version 1.0 (released 2011-04-12)

* Several fixes in the included examples. Based on
patches by Vladimir Zapolskiy.


Version 0.9 (released 2011-02-11)

* Added additional test tools:
  - sha_speed does performance testing of SHA1 and SHA256
  - hashcrypt_speed additionally encrypts with AES128 and AES256

* Allow updating the IV in userspace via the COP_FLAG_WRITE_IV
flag.

* Export the alignmask in an OCF compatible way.

* Fix for kernel crash on passing incorrect session ID.

* Added CIOCGSESSINFO to export additional information
for each session.


Version 0.8 (released 2010-11-06)

* Made cryptodev aware of alignment constraints.

* Added support for CRYPTO_AES_ECB.

* Added asynchronous operation support using
  CIOCASYNCCRYPT, CIOCASYNCFETCH ioctls and poll().


Version 0.7 (released 2010-10-08)

* Added COP_FLAG_FINAL to make multi-update
more efficient.

* Added CRIOGET_NOT_NEEDED definition to allow
users of the API to distinguish from the bare
OpenBSD API that requires the CRIOGET.


Version 0.6 (released 2010-09-16)

* multi-update support for hash calculation using
the new flag COP_FLAG_UPDATE.

* Relicensed under GPLv2.

* Added AES-CTR.

* Corrected fallback to non-zero copy when referenced
pages were not writable.


Version 0.5 (released 2010-07-06)

* Corrected issue with zero copy on multiple pages.

* Fallback to normal operation if user pages cannot be
mapped.


Version 0.4 (released 2010-07-03)

* Internal engine supports operations with zero copy from
user space. 


Version 0.3 (released 2010-06-19)

* Corrected bug when initializing unsupported algorithms.


Version 0.2 (released 2010-06-18)

* Added compat_ioctl() to allow working on systems where userspace is 32bits
and kernel is operating in 64bit mode (Phil Sutter)

* Added several sanity checks to input.

