              Apache Commons Crypto 1.0.0
                  RELEASE NOTES

The Apache Commons Crypto team is pleased to announce the release of Apache Commons Crypto 1.0.0

Apache Commons Crypto is a cryptographic library optimized with AES-NI (Advanced Encryption
Standard New Instructions). It provides Java API for both cipher level and Java stream level.
Developers can use it to implement high performance AES encryption/decryption with the minimum
code and effort. Please note that Crypto doesn't implement the cryptographic algorithm such as
AES directly. It wraps to Openssl or JCE which implement the algorithms.

Features
--------

1. Cipher API for low level cryptographic operations.
2. Java stream API (CryptoInputStream/CryptoOutputStream) for high level stream encryption/decryption.
3. Both optimized with high performance AES encryption/decryption. (1400 MB/s - 1700 MB/s throughput in modern Xeon processors).
4. JNI-based implementation to achieve comparable performance to the native C/C++ version based on OpenSsl.
5. Portable across various operating systems (currently only Linux/MacOSX/Windows);
Apache Commons Crypto loads the library according to your machine environment (it checks system properties, `os.name` and `os.arch`).
6. Simple usage. Add the commons-crypto-(version).jar file to your classpath.


Export restrictions
-------------------

This distribution includes cryptographic software.
The country in which you currently reside may have restrictions
on the import, possession, use, and/or re-export to another country,
of encryption software. BEFORE using any encryption software,
please check your country's laws, regulations and policies
concerning the import, possession, or use, and re-export of
encryption software, to see if this is permitted.
See <http://www.wassenaar.org/> for more information.

The U.S. Government Department of Commerce, Bureau of Industry and Security (BIS),
has classified this software as Export Commodity Control Number (ECCN) 5D002.C.1,
which includes information security software using or performing
cryptographic functions with asymmetric algorithms.
The form and manner of this Apache Software Foundation distribution makes
it eligible for export under the License Exception
ENC Technology Software Unrestricted (TSU) exception
(see the BIS Export Administration Regulations, Section 740.13)
for both object code and source code.

The following provides more details on the included cryptographic software:

* Commons Crypto use [Java Cryptography Extension](http://docs.oracle.com/javase/8/docs/technotes/guides/security/crypto/CryptoSpec.html) provided by Java
* Commons Crypto link to and use [OpenSSL](https://www.openssl.org/) ciphers

Initial release
===============
The initial release is known to build on Linux, MacOS/X and Windows (using MinGW).
It may build on other systems.
Please note that the JNA interface to OpenSSL is a preliminary release.
It is relatively slow, but may be of use on systems which aren't yet supported by the JNI code.

Changes in this version include:

New features:
o CRYPTO-68:   Enable common code quality reports.
o CRYPTO-11:   User guide documentation . Thanks to Ke Jia, Jerry Chen.
o CRYPTO-12:   Rename CryptoInputStream to CipherInputStream and CryptoOutputStream to CipherOutputStream . Thanks to Xianda Ke.
o CRYPTO-13:   The API differences between apache.commons.crypto and JCE . Thanks to Xianda Ke.
o CRYPTO-40:   Remove the full qualified package name for shadowed classes . Thanks to Xianda Ke, Jerry Chen.
o CRYPTO-42:   Remove the header files required for cross platform compilation . Thanks to Dian Fu, Jerry Chen.
o CRYPTO-45:   Document how to build Commons Crypto . Thanks to Dian Fu, Benedikt Ritter.
o CRYPTO-48:   Setup site build as defined in commons-parent pom . Thanks to Benedikt Ritter, Dapeng Sun.

Fixed Bugs:
o CRYPTO-65:   Warnings compiling on MacOSX - JNIEXPORT redefined. Thanks to sebb.
o CRYPTO-29:   Make sure Cipher.ENCRYPT_MODE is consistent with JDK . Thanks to Dian Fu, Sebb.
o CRYPTO-30:   Mutable fields should be private . Thanks to Ferdinand Xu, Sebb.
o CRYPTO-34:   JavaSecureRandom should throw Exception if it cannot create the instance . Thanks to Dapeng Sun, Sebb.
o CRYPTO-47:   Fix build of MAC_OS . Thanks to Dapeng Sun.
o CRYPTO-49:   CRYPTO-1 Fix build of X86 . Thanks to Dapeng Sun.
o CRYPTO-57:   Fix build on Mac OS Thanks to Benedikt Ritter.
o CRYPTO-61:   Fix possible NPE in OpensslCryptoRandom Thanks to Hendrik Saly.
o CRYPTO-54:   US Export classification and ECCN registration for encryption Thanks to Stian Soiland-Reyes, Jerry Chen, Benedikt Ritter, Gary Gregory.

Changes:
o CRYPTO-26:   Utility classes should not have public constructors . Thanks to Dapeng Sun.
o CRYPTO-28:   Update the README.md of Apache Commons Crypto . Thanks to Ferdinand Xu, Ke Jia.
o CRYPTO-3:    Change default cipher as OpensslCipher . Thanks to ferdinand xu.
o CRYPTO-31:   Make fields final wherever possible . Thanks to Ferdinand Xu, Sebb.
o CRYPTO-33:   SecureRandom shadows JVM class . Thanks to Xianda Ke, Sebb.
o CRYPTO-38:   Always use blocks . Thanks to Dapeng Sun, Gary Gregory.
o CRYPTO-7:    Rename source code in Chimera to Apache name space . Thanks to ferdinand xu.
o CRYPTO-62:   Add multithreaded related tests Thanks to Hendrik Saly.


Historical list of changes: https://commons.apache.org/proper/commons-crypto/changes-report.html

For complete information on Apache Commons Crypto, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Apache Commons Crypto website:

https://commons.apache.org/proper/commons-crypto/
