diff --git a/benchmarks/java/src/net/i2p/crypto/ElGamalBenchmarks.java b/benchmarks/java/src/net/i2p/crypto/ElGamalBenchmarks.java new file mode 100644 index 0000000000000000000000000000000000000000..c44f30f5da1167567ff35e39a6396ae7af257322 --- /dev/null +++ b/benchmarks/java/src/net/i2p/crypto/ElGamalBenchmarks.java @@ -0,0 +1,70 @@ +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.PrivateKey; +import net.i2p.data.PublicKey; + +@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 ElGamalBenchmarks { + I2PAppContext ctx = I2PAppContext.getGlobalContext(); + PublicKey pubkey; + PrivateKey privkey; + byte[] origPT; + byte[] origCT; + + @Setup + public void prepare() { + Object pair[] = KeyGenerator.getInstance().generatePKIKeypair(); + pubkey = (PublicKey) pair[0]; + privkey = (PrivateKey) pair[1]; + origPT = new byte[222]; + ctx.random().nextBytes(origPT); + origCT = ctx.elGamalEngine().encrypt(origPT, pubkey); + } + + @Benchmark + public Object[] keygen() { + return KeyGenerator.getInstance().generatePKIKeypair(); + } + + @Benchmark + public byte[] encrypt() { + return ctx.elGamalEngine().encrypt(origPT, pubkey); + } + + @Benchmark + public byte[] decrypt() { + return ctx.elGamalEngine().decrypt(origCT, privkey); + } + + public static void main(String args[]) throws RunnerException { + Options opt = new OptionsBuilder() + .include(ElGamalBenchmarks.class.getSimpleName()) + .build(); + + new Runner(opt).run(); + } +} diff --git a/core/java/src/net/i2p/crypto/ElGamalEngine.java b/core/java/src/net/i2p/crypto/ElGamalEngine.java index 5480cc635c6338175901c56768e9c9059215ce9e..5bbf92751ee2d3518e53eff1be42424b8d4c17f3 100644 --- a/core/java/src/net/i2p/crypto/ElGamalEngine.java +++ b/core/java/src/net/i2p/crypto/ElGamalEngine.java @@ -250,63 +250,4 @@ public final class ElGamalEngine { + Base64.encode(rv), new Exception("Doesn't match")); return null; } - -/**** - public static void main(String args[]) { - long eTime = 0; - long dTime = 0; - long gTime = 0; - int numRuns = 100; - if (args.length > 0) try { - numRuns = Integer.parseInt(args[0]); - } catch (NumberFormatException nfe) { // nop - } - - try { - Thread.sleep(30 * 1000); - } catch (InterruptedException ie) { // nop - } - - RandomSource.getInstance().nextBoolean(); - I2PAppContext context = new I2PAppContext(); - - System.out.println("Running " + numRuns + " times"); - - for (int i = 0; i < numRuns; i++) { - long startG = Clock.getInstance().now(); - Object pair[] = KeyGenerator.getInstance().generatePKIKeypair(); - long endG = Clock.getInstance().now(); - - PublicKey pubkey = (PublicKey) pair[0]; - PrivateKey privkey = (PrivateKey) pair[1]; - byte buf[] = new byte[128]; - RandomSource.getInstance().nextBytes(buf); - long startE = Clock.getInstance().now(); - byte encr[] = context.elGamalEngine().encrypt(buf, pubkey); - long endE = Clock.getInstance().now(); - byte decr[] = context.elGamalEngine().decrypt(encr, privkey); - long endD = Clock.getInstance().now(); - eTime += endE - startE; - dTime += endD - endE; - gTime += endG - startG; - - if (!DataHelper.eq(decr, buf)) { - System.out.println("PublicKey : " + DataHelper.toString(pubkey.getData(), pubkey.getData().length)); - System.out.println("PrivateKey : " + DataHelper.toString(privkey.getData(), privkey.getData().length)); - System.out.println("orig : " + DataHelper.toString(buf, buf.length)); - System.out.println("d(e(orig) : " + DataHelper.toString(decr, decr.length)); - System.out.println("orig.len : " + buf.length); - System.out.println("d(e(orig).len : " + decr.length); - System.out.println("Not equal!"); - System.exit(0); - } else { - System.out.println("*Run " + i + " is successful, with encr.length = " + encr.length + " [E: " - + (endE - startE) + " D: " + (endD - endE) + " G: " + (endG - startG) + "]\n"); - } - } - System.out.println("\n\nAll " + numRuns + " tests successful, average encryption time: " + (eTime / numRuns) - + " average decryption time: " + (dTime / numRuns) + " average key generation time: " - + (gTime / numRuns)); - } -****/ }