The Amazon Corretto Crypto Provider (ACCP) is a collection of high-performance cryptographic implementations exposed via the standard JCA/JCE interfaces. This means that it can be used as a drop in replacement for many different Java applications. Currently algorithms are primarily backed by OpenSSL's implementations (1.1.1d) but this may change in the future.
Please be aware that "Overkill" tests are known to be flakey
Build Name | master branch | develop branch |
---|---|---|
Unit Tests | ||
Integ Tests | ||
Dieharder Tests | ||
Overkill |
MessageDigest algorithms:
- SHA-512
- SHA-384
- SHA-256
- SHA-1
- MD5
Mac algorithms:
- HmacSHA512
- HmacSHA384
- HmacSHA256
- HmacSHA1
- HmacMD5
Cipher algorithms:
- AES/GCM/NoPadding
- RSA/ECB/NoPadding
- RSA/ECB/PKCS1Padding
- RSA/ECB/OAEPWithSHA-1AndMGF1Padding
Signature algorithms:
- SHA1withRSA
- SHA224withRSA
- SHA256withRSA
- SHA384withRSA
- SHA512withRSA
- NONEwithDSA
- SHA1withDSA
- SHA224withDSA
- SHA256withDSA
- SHA384withDSA
- NONEwithECDSA
- SHA1withECDSA
- SHA224withECDSA
- SHA256withECDSA
- SHA384withECDSA
- SHA512withECDSA
KeyPairGenerator algorithms:
- EC
- RSA
KeyAgreement:
- DH
- DiffieHellman (same as DH)
- ECDH
SecureRandom algorithms:
- NIST800-90A/AES-CTR-256 (Used as the default and only enabled if your CPU supports RDRAND)
This library is compatible with:
- OpenJDK 8 or newer (This includes Amazon Corretto)
- OracleJDK 8 or newer
- Linux x86_64
If ACCP is used/installed on a system it does not support, it will disable itself and the JVM will behave as if ACCP weren't installed at all.
- ARM64
Installing via Maven or Gradle is the easiest way to get ACCP and ensure you will always have the most recent version. We strongly recommend you always pull in the latest version for best performance and bug-fixes.
Whether you're using Maven, Gradle, or some other build system that also pulls
packages from Maven Central, it's important to specify linux-x86_64
as the
classifier. You'll get an empty package otherwise.
Add the following to your pom.xml
or wherever you configure your Maven dependencies.
<dependency>
<groupId>software.amazon.cryptools</groupId>
<artifactId>AmazonCorrettoCryptoProvider</artifactId>
<version>LATEST</version>
<classifier>linux-x86_64</classifier>
</dependency>
Add the following to your build.gradle
file. If you already have a
dependencies
block in your build.gradle
, you can add the ACCP line to your
existing block.
dependencies {
implementation 'software.amazon.cryptools:AmazonCorrettoCryptoProvider:1.+:linux-x86_64'
}
Manual installation requires acquiring the provider and adding it to your classpath. You can either download a prebuilt version of the provider or build it yourself. Adding a jar to your classpath is highly application and build-system dependant and we cannot provide specific guidance.
The most recent version of our provider will always be on our official releases page.
Please be aware that if you build the provider yourself then it will NOT work with OracleJDK. The OracleJDK requires that JCA providers be cryptographically signed by a trusted certificate. The JARs we publish via Maven and our official releases are signed by our private key, but yours will not be.
Building this provider requires a 64 bit Linux build system with the following prerequisites installed:
- OpenJDK 10 or newer
- cmake 3.8 or newer
- C++ build chain
- lcov for coverage metrics
- dieharder for entropy tests
- Download the repository through a git clone
- Run
./gradlew release
- The resulting jar is in
build/lib
- clean: Remove all artifacts except OpenSSL dependencies
- deep_clean: Remove the entire
build/
directory including OpenSSL dependencies - build: Build the library
- test: Run unit tests
- test_extra_checks: Run unit tests with extra (slow) cryptographic checks enabled
- test_integration: Run integration tests
- test_integration_extra_checks: Run integration tests with extra (slow) cryptographic checks enabled
- dieharder: Run entropy tests
- dieharder_threads: Run entropy threads specifically checking for leaking state across threads (very slow)
- dieharder_all: Run all dieharder checks (both dieharder and dieharder_threads)
- coverage: Run target
test
and collect both Java and C++ coverage metrics (saved inbuild/reports
) - release: Default target depends on build, test, and coverage
- overkill: Run all tests (no coverage)
There are several ways to configure the ACCP as the highest priority provider in Java.
Run the following method early in program start up: com.amazon.corretto.crypto.provider.AmazonCorrettoCryptoProvider.install()
Add the following Java property to your programs command line: -Djava.security.properties=/path/to/amazon-corretto-crypto-provider.security
where amazon-corretto-crypto-provider.security is downloaded from our repository.
Modify the java.security
file provided by your JVM so that the highest priority provider is the Amazon Corretto Crypto Provider. Look at amazon-corretto-crypto-provider.security for an example of what this change will look like.
If you want to check to verify that ACCP is properly working on your system, you can do any of the following:
- Verify that the highest priority provider actually is ACCP:
if (Cipher.getInstance("AES/GCM/NoPadding").getProvider().getName().equals(AmazonCorrettoCryptoProvider.PROVIDER_NAME)) {
// Successfully installed
}
- Ask ACCP about its health
if (AmazonCorrettoCryptoProvider.INSTANCE.getLoadingError() == null && AmazonCorrettoCryptoProvider.INSTANCE.runSelfTests().equals(SelfTestStatus.PASSED)) {
// Successfully installed
}
- Assert that ACCP is healthy and throw a
RuntimeCryptoException
if it isn't. We generally do not recommend this solution as we believe that gracefully falling back to other providers is usually the better option.
AmazonCorrettoCryptoProvider.INSTANCE.assertHealthy();
This library is licensed under the Apache 2.0 license although portions of this product include software licensed under the dual OpenSSL and SSLeay license. Specifically, this product includes software developed by the OpenSSL Project for use in the OpenSSL Toolkit (http://www.openssl.org) and this product also includes cryptographic software written by Eric Young ([email protected]).