Skip to content

Commit

Permalink
Benchmarking ACCP when its bundled with JDK
Browse files Browse the repository at this point in the history
  • Loading branch information
amirhosv committed Feb 21, 2024
1 parent 8f13f2d commit c42d654
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 22 deletions.
9 changes: 9 additions & 0 deletions benchmarks/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,12 @@ Use `-PaccpLocalJar="PATH_TO_LOCAL_JAR"`:
```bash
./gradlew -PaccpLocalJar="../../build/cmake/AmazonCorrettoCryptoProvider.jar" lib:jmh
```

### Benchmarking ACCP that is bundled in JDK

Some customers bundle ACCP directly with their JDKs. To run the benchmarks with such a setup,
one can use the following command:

```bash
./gradlew -PuseBundledAccp -Dorg.gradle.java.home=<PATH_TO_YOUR_CUSTOM_JDK> lib:jmh
```
19 changes: 7 additions & 12 deletions benchmarks/lib/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,16 @@ dependencies {
"2.+"


if (project.hasProperty("accpLocalJar")) {
jmh(files(accpLocalJar))
} else {
jmh("software.amazon.cryptools:${accpArtifactId}:$publishedAccpVersion:${osdetector.classifier}")
if (!project.hasProperty("useBundledAccp")) {
if (project.hasProperty("accpLocalJar")) {
jmh(files(accpLocalJar))
} else {
jmh("software.amazon.cryptools:${accpArtifactId}:$publishedAccpVersion:${osdetector.classifier}")
}
}

}

// Apply a specific Java toolchain to ease working on different environments.
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(11))
}
}

jmh {
if (project.hasProperty("includeBenchmark")) {
includes.add(includeBenchmark)
Expand Down Expand Up @@ -75,4 +70,4 @@ jmhReport {

tasks.jmh {
finalizedBy(tasks.jmhReport)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,10 @@
import java.security.Provider;
import java.security.SecureRandom;
import java.security.Security;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import com.amazon.corretto.crypto.provider.AmazonCorrettoCryptoProvider;
Expand All @@ -16,17 +18,29 @@ class BenchmarkUtils {
private BenchmarkUtils() {}

private static final SecureRandom sr = new SecureRandom();
private static final Set<String> NON_DEFAULT_PROVIDERS =
new HashSet(Arrays.asList("BC", "BCFIPS", "AmazonCorrettoCryptoProvider"));
private static final Provider[] DEFAULT_PROVIDERS;
private static final List<Provider> DEFAULT_PROVIDERS = new ArrayList<>();
private static AmazonCorrettoCryptoProvider accp = null;
private static BouncyCastleProvider bc = null;

static {
DEFAULT_PROVIDERS = Security.getProviders();
for (Provider provider : DEFAULT_PROVIDERS) {
if (NON_DEFAULT_PROVIDERS.contains(provider.getName())) {
throw new RuntimeException("Provider prematurely (statically) registered: " + provider);
// For BC and ACCP, if they are installed statically, we just remove them.
for (Provider provider : Security.getProviders()) {
if ("AmazonCorrettoCryptoProvider".equals(provider.getName())) {
accp = (AmazonCorrettoCryptoProvider) provider;
} else if ("BC".equals(provider.getName())) {
bc = (BouncyCastleProvider) provider;
} else {
DEFAULT_PROVIDERS.add(provider);
}
}
if (accp == null) {
accp = AmazonCorrettoCryptoProvider.INSTANCE;
}
if (bc == null) {
bc = new BouncyCastleProvider();
}
removeAllProviders();
installDefaultProviders();
}

static byte[] getRandBytes(int n) {
Expand All @@ -45,11 +59,11 @@ static void setupProvider(String providerName) {
switch (providerName) {
case "AmazonCorrettoCryptoProvider":
installDefaultProviders();
AmazonCorrettoCryptoProvider.install();
AmazonCorrettoCryptoProvider.INSTANCE.assertHealthy();
Security.insertProviderAt(accp, 1);
accp.assertHealthy();
break;
case "BC":
Security.insertProviderAt(new BouncyCastleProvider(), 1);
Security.insertProviderAt(bc, 1);
break;
case "SUN":
case "SunEC":
Expand Down

0 comments on commit c42d654

Please sign in to comment.