I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 32968af3 authored by str4d's avatar str4d
Browse files

Add benchmarks for AES and SHA-256

parent 49ed1703
No related branches found
No related tags found
No related merge requests found
package net.i2p.crypto;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
import net.i2p.I2PAppContext;
import net.i2p.data.DataHelper;
import net.i2p.data.SessionKey;
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@Fork(1)
@State(Scope.Benchmark)
public class AESBenchmarks {
I2PAppContext ctx = I2PAppContext.getGlobalContext();
SessionKey key;
CryptixAESEngine aes;
byte[] iv = new byte[16];
byte[] origPT = new byte[1024];
byte[] origCT = new byte[1024];
byte[] encrypted = new byte[1024];
byte[] decrypted = new byte[1024];
@Param({"512", "768", "1024"})
public int len;
@Setup
public void prepare() {
key = ctx.keyGenerator().generateSessionKey();
ctx.random().nextBytes(iv);
ctx.random().nextBytes(origPT);
aes = new CryptixAESEngine(ctx);
aes.encrypt(origPT, 0, origCT, 0, key, iv, len);
}
@Benchmark
public void encrypt() {
aes.encrypt(origPT, 0, encrypted, 0, key, iv, len);
}
@Benchmark
public void decrypt() {
aes.decrypt(origCT, 0, decrypted, 0, key, iv, len);
}
public static void main(String args[]) throws RunnerException {
Options opt = new OptionsBuilder()
.include(AESBenchmarks.class.getSimpleName())
.build();
new Runner(opt).run();
}
}
package net.i2p.crypto;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import org.openjdk.jmh.annotations.Benchmark;
import org.openjdk.jmh.annotations.BenchmarkMode;
import org.openjdk.jmh.annotations.Fork;
import org.openjdk.jmh.annotations.Measurement;
import org.openjdk.jmh.annotations.Mode;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.Param;
import org.openjdk.jmh.annotations.Scope;
import org.openjdk.jmh.annotations.Setup;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.annotations.Warmup;
import org.openjdk.jmh.runner.Runner;
import org.openjdk.jmh.runner.RunnerException;
import org.openjdk.jmh.runner.options.Options;
import org.openjdk.jmh.runner.options.OptionsBuilder;
/**
* Test the GNU and the JVM's implementations for speed
*
* Old results (2011-05):
* <ul>
* <li>eeepc Atom
* <li>100,000 runs
* <li>MessageDigest.getInstance time was included
* <li>One println included
* <li>Also shows GNU impl time (removed in 0.9.28)
* </ul><pre>
* JVM strlen GNU ms JVM ms
* Oracle 387 3861 3565
* Oracle 40 825 635
* Harmony 387 8082 5158
* Harmony 40 4137 1753
* JamVM 387 36301 34100
* JamVM 40 7022 6016
* gij 387 125833 4342
* gij 40 22417 988
* </pre>
*/
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Warmup(iterations = 5, time = 1, timeUnit = TimeUnit.SECONDS)
@Measurement(iterations = 5, time = 2, timeUnit = TimeUnit.SECONDS)
@Fork(1)
@State(Scope.Benchmark)
public class SHA256Benchmarks {
MessageDigest md;
@Param({"40", "387", "10240"})
public int len;
byte[] data;
@Setup
public void prepare() throws NoSuchAlgorithmException {
md = MessageDigest.getInstance("SHA-256");
data = new byte[len];
Random r = new Random();
r.nextBytes(data);
}
@Benchmark
public byte[] digest() {
md.reset();
return md.digest(data);
}
public static void main(String args[]) throws RunnerException {
Options opt = new OptionsBuilder()
.include(SHA256Benchmarks.class.getSimpleName())
.build();
new Runner(opt).run();
}
}
...@@ -92,63 +92,4 @@ public final class SHA256Generator { ...@@ -92,63 +92,4 @@ public final class SHA256Generator {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
//private static final int RUNS = 100000;
/**
* Test the GNU and the JVM's implementations for speed
*
* Results: 2011-05 eeepc Atom
* <pre>
* JVM strlen GNU ms JVM ms
* Oracle 387 3861 3565
* Oracle 40 825 635
* Harmony 387 8082 5158
* Harmony 40 4137 1753
* JamVM 387 36301 34100
* JamVM 40 7022 6016
* gij 387 125833 4342
* gij 40 22417 988
* </pre>
*/
/****
public static void main(String args[]) {
if (args.length <= 0) {
System.err.println("Usage: SHA256Generator string");
return;
}
byte[] data = args[0].getBytes();
Sha256Standalone gnu = new Sha256Standalone();
long start = System.currentTimeMillis();
for (int i = 0; i < RUNS; i++) {
gnu.update(data, 0, data.length);
byte[] sha = gnu.digest();
if (i == 0)
System.out.println("SHA256 [" + args[0] + "] = [" + Base64.encode(sha) + "]");
gnu.reset();
}
long time = System.currentTimeMillis() - start;
System.out.println("Time for " + RUNS + " SHA-256 computations:");
System.out.println("GNU time (ms): " + time);
start = System.currentTimeMillis();
MessageDigest md;
try {
md = MessageDigest.getInstance("SHA-256");
} catch (NoSuchAlgorithmException e) {
System.err.println("Fatal: " + e);
return;
}
for (int i = 0; i < RUNS; i++) {
md.reset();
byte[] sha = md.digest(data);
if (i == 0)
System.out.println("SHA256 [" + args[0] + "] = [" + Base64.encode(sha) + "]");
}
time = System.currentTimeMillis() - start;
System.out.println("JVM time (ms): " + time);
}
****/
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment