forked from I2P_Developers/i2p.i2p
Remove old benchmarks
This commit is contained in:
@ -1,148 +0,0 @@
|
||||
package net.i2p.crypto;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, TheCrypto
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* - Neither the name of the TheCrypto may be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.SessionKey;
|
||||
|
||||
public class AES256Bench {
|
||||
private static I2PAppContext _context = new I2PAppContext();
|
||||
|
||||
public static void main(String args[]) {
|
||||
char[] cplain = {
|
||||
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
|
||||
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
|
||||
0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
|
||||
0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff
|
||||
};
|
||||
|
||||
byte[] plain = new byte[cplain.length];
|
||||
for (int x = 0; x < cplain.length; x++) {
|
||||
plain[x] = (byte)cplain[x];
|
||||
}
|
||||
char[] ckey = {
|
||||
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
|
||||
0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
|
||||
0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
|
||||
};
|
||||
byte[] bkey = new byte[ckey.length];
|
||||
for (int x = 0; x < ckey.length; x++) {
|
||||
bkey[x] = (byte)ckey[x];
|
||||
}
|
||||
|
||||
SessionKey key = new SessionKey();
|
||||
key.setData(bkey);
|
||||
|
||||
char[] civ = {
|
||||
0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef,
|
||||
0xfe, 0xdc, 0xba, 0x98, 0x67, 0x54, 0x32, 0x10
|
||||
};
|
||||
|
||||
byte[] iv = new byte[civ.length];
|
||||
for (int x = 0; x < iv.length; x++) {
|
||||
iv[x] = (byte)civ[x];
|
||||
}
|
||||
|
||||
byte[] e = new byte[plain.length];
|
||||
_context.aes().encrypt(plain, 0, e, 0, key, iv, plain.length);
|
||||
byte[] d = new byte[e.length];
|
||||
_context.aes().decrypt(e, 0, d, 0, key, iv, d.length);
|
||||
boolean same = true;
|
||||
for (int x = 0; x < d.length; x++) {
|
||||
if (plain[x] != d[x]) {
|
||||
throw new RuntimeException("Failed decrypt at " + x);
|
||||
}
|
||||
}
|
||||
|
||||
System.out.println("Standard test D(E(value)) == value? " + same);
|
||||
if (!same) throw new RuntimeException("moo");
|
||||
|
||||
plain = DataHelper.getASCII("1234567890123456");
|
||||
e = new byte[plain.length];
|
||||
_context.aes().encrypt(plain, 0, e, 0, key, iv, plain.length);
|
||||
d = new byte[e.length];
|
||||
_context.aes().decrypt(e, 0, d, 0, key, iv, d.length);
|
||||
same = DataHelper.eq(plain, d);
|
||||
System.out.println("Different value test D(E(value)) == value? " + same);
|
||||
if (!same) throw new RuntimeException("moo");
|
||||
|
||||
System.out.println();
|
||||
System.out.println();
|
||||
|
||||
long times = 100;
|
||||
long encrypttime = 0;
|
||||
long decrypttime = 0;
|
||||
long maxE = 0;
|
||||
long minE = 0;
|
||||
long maxD = 0;
|
||||
long minD = 0;
|
||||
byte[] message = new byte[2*1024];
|
||||
for (int i = 0; i < message.length; i++)
|
||||
message[i] = (byte)((i%26)+'a');
|
||||
for (int x = 0; x < times; x++) {
|
||||
long startencrypt = System.currentTimeMillis();
|
||||
e = new byte[message.length];
|
||||
d = new byte[e.length];
|
||||
_context.aes().encrypt(message, 0, e, 0, key, iv, message.length);
|
||||
long endencryptstartdecrypt = System.currentTimeMillis();
|
||||
_context.aes().decrypt(e, 0, d, 0, key, iv, d.length);
|
||||
long enddecrypt = System.currentTimeMillis();
|
||||
System.out.print(".");
|
||||
encrypttime += endencryptstartdecrypt - startencrypt;
|
||||
decrypttime += enddecrypt - endencryptstartdecrypt;
|
||||
if (!DataHelper.eq(d, message)) {
|
||||
System.out.println("Lengths: source [" + message.length + "] dest [" + d.length + "]");
|
||||
System.out.println("Data: dest [" + DataHelper.toString(d, d.length) + "]");
|
||||
throw new RuntimeException("Holy crap, decrypted != source message");
|
||||
}
|
||||
|
||||
if ( (minE == 0) && (minD == 0) ) {
|
||||
minE = endencryptstartdecrypt - startencrypt;
|
||||
maxE = endencryptstartdecrypt - startencrypt;
|
||||
minD = enddecrypt - endencryptstartdecrypt;
|
||||
maxD = enddecrypt - endencryptstartdecrypt;
|
||||
} else {
|
||||
if (minE > endencryptstartdecrypt - startencrypt) minE = endencryptstartdecrypt - startencrypt;
|
||||
if (maxE < endencryptstartdecrypt - startencrypt) maxE = endencryptstartdecrypt - startencrypt;
|
||||
if (minD > enddecrypt - endencryptstartdecrypt) minD = enddecrypt - endencryptstartdecrypt;
|
||||
if (maxD < enddecrypt - endencryptstartdecrypt) maxD = enddecrypt - endencryptstartdecrypt;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
System.out.println();
|
||||
System.out.println("Data size : " + message.length);
|
||||
System.out.println("Encryption Time Average : " + (encrypttime/times) + "ms\ttotal: " + encrypttime + "ms\tmin: " + minE + "ms\tmax: " + maxE + "ms\tEncryption Bps: " + (times*message.length*1000)/encrypttime);
|
||||
System.out.println("Decryption Time Average : " + (decrypttime/times) + "ms\ttotal: " + decrypttime + "ms\tmin: " + minD + "ms\tmax: " + maxD + "ms\tDecryption Bps: " + (times*message.length*1000)/decrypttime);
|
||||
}
|
||||
}
|
||||
|
@ -1,98 +0,0 @@
|
||||
package net.i2p.crypto;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, TheCrypto
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* - Neither the name of the TheCrypto may be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import net.i2p.I2PAppContext;
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.PrivateKey;
|
||||
import net.i2p.data.PublicKey;
|
||||
|
||||
public class ElGamalBench {
|
||||
private static I2PAppContext _context = new I2PAppContext();
|
||||
public static void main(String args[]) {
|
||||
int times = 100;
|
||||
long keygentime = 0;
|
||||
long encrypttime = 0;
|
||||
long decrypttime = 0;
|
||||
long maxKey = 0;
|
||||
long minKey = 0;
|
||||
long maxE = 0;
|
||||
long minE = 0;
|
||||
long maxD = 0;
|
||||
long minD = 0;
|
||||
Object[] keys = KeyGenerator.getInstance().generatePKIKeypair();
|
||||
byte[] message = new byte[222];
|
||||
for (int i = 0; i < message.length; i++)
|
||||
message[i] = (byte)((i%26)+'a');
|
||||
for (int x = 0; x < times; x++) {
|
||||
long startkeys = System.currentTimeMillis();
|
||||
keys = KeyGenerator.getInstance().generatePKIKeypair();
|
||||
PublicKey pubkey = (PublicKey)keys[0];
|
||||
PrivateKey privkey = (PrivateKey)keys[1];
|
||||
long endkeys = System.currentTimeMillis();
|
||||
long startencrypt = System.currentTimeMillis();
|
||||
byte[] e = _context.elGamalEngine().encrypt(message, pubkey);
|
||||
long endencryptstartdecrypt = System.currentTimeMillis();
|
||||
byte[] d = _context.elGamalEngine().decrypt(e, privkey);
|
||||
long enddecrypt = System.currentTimeMillis();
|
||||
System.out.print(".");
|
||||
keygentime += endkeys - startkeys;
|
||||
encrypttime += endencryptstartdecrypt - startencrypt;
|
||||
decrypttime += enddecrypt - endencryptstartdecrypt;
|
||||
if (!DataHelper.eq(d, message)) {
|
||||
System.out.println("Lengths: source [" + message.length + "] dest [" + d.length + "]");
|
||||
byte hash1[] = SHA256Generator.getInstance().calculateHash(message).getData();
|
||||
byte hash2[] = SHA256Generator.getInstance().calculateHash(d).getData();
|
||||
System.out.println("Hashes: source [" + DataHelper.toString(hash1, hash1.length) + "] dest [" + DataHelper.toString(hash2, hash2.length) + "]");
|
||||
throw new RuntimeException("Holy crap, decrypted != source message");
|
||||
}
|
||||
if ( (minKey == 0) && (minE == 0) && (minD == 0) ) {
|
||||
minKey = endkeys - startkeys;
|
||||
maxKey = endkeys - startkeys;
|
||||
minE = endencryptstartdecrypt - startencrypt;
|
||||
maxE = endencryptstartdecrypt - startencrypt;
|
||||
minD = enddecrypt - endencryptstartdecrypt;
|
||||
maxD = enddecrypt - endencryptstartdecrypt;
|
||||
} else {
|
||||
if (minKey > endkeys - startkeys) minKey = endkeys - startkeys;
|
||||
if (maxKey < endkeys - startkeys) maxKey = endkeys - startkeys;
|
||||
if (minE > endencryptstartdecrypt - startencrypt) minE = endencryptstartdecrypt - startencrypt;
|
||||
if (maxE < endencryptstartdecrypt - startencrypt) maxE = endencryptstartdecrypt - startencrypt;
|
||||
if (minD > enddecrypt - endencryptstartdecrypt) minD = enddecrypt - endencryptstartdecrypt;
|
||||
if (maxD < enddecrypt - endencryptstartdecrypt) maxD = enddecrypt - endencryptstartdecrypt;
|
||||
}
|
||||
}
|
||||
System.out.println();
|
||||
System.out.println("Key Generation Time Average: " + (keygentime/times) + "\ttotal: " + keygentime + "\tmin: " + minKey + "\tmax: " + maxKey + "\tKeygen/second: " + (keygentime == 0 ? "NaN" : ""+(times*1000)/keygentime));
|
||||
System.out.println("Encryption Time Average : " + (encrypttime/times) + "\ttotal: " + encrypttime + "\tmin: " + minE + "\tmax: " + maxE + "\tEncryption Bps: " + (times*message.length*1000)/encrypttime);
|
||||
System.out.println("Decryption Time Average : " + (decrypttime/times) + "\ttotal: " + decrypttime + "\tmin: " + minD + "\tmax: " + maxD + "\tDecryption Bps: " + (times*message.length*1000)/decrypttime);
|
||||
}
|
||||
}
|
||||
|
@ -1,114 +0,0 @@
|
||||
package net.i2p.crypto;
|
||||
|
||||
/*
|
||||
* Copyright (c) 2003, TheCrypto
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright notice, this
|
||||
* list of conditions and the following disclaimer.
|
||||
* - Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* - Neither the name of the TheCrypto may be used to endorse or promote
|
||||
* products derived from this software without specific prior written
|
||||
* permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
import net.i2p.data.DataHelper;
|
||||
import net.i2p.data.Hash;
|
||||
|
||||
public class SHA256Bench {
|
||||
public static void main(String args[]) {
|
||||
Hash asdfs = SHA256Generator.getInstance().calculateHash(DataHelper.getASCII("qwerty"));
|
||||
|
||||
int times = 100;
|
||||
long shorttime = 0;
|
||||
long medtime = 0;
|
||||
long longtime = 0;
|
||||
long minShort = 0;
|
||||
long maxShort = 0;
|
||||
long minMed = 0;
|
||||
long maxMed = 0;
|
||||
long minLong = 0;
|
||||
long maxLong = 0;
|
||||
|
||||
long shorttime1 = 0;
|
||||
long medtime1 = 0;
|
||||
long longtime1 = 0;
|
||||
long minShort1 = 0;
|
||||
long maxShort1 = 0;
|
||||
long minMed1 = 0;
|
||||
long maxMed1 = 0;
|
||||
long minLong1 = 0;
|
||||
long maxLong1 = 0;
|
||||
|
||||
byte[] smess = DataHelper.getASCII(new String("abc"));
|
||||
StringBuilder buf = new StringBuilder();
|
||||
for (int x = 0; x < 10*1024; x++) {
|
||||
buf.append("a");
|
||||
}
|
||||
byte[] mmess = DataHelper.getASCII(buf.toString()); // new String("abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq").getBytes();
|
||||
buf = new StringBuilder();
|
||||
for (int x = 0; x < 1000000; x++) {
|
||||
buf.append("a");
|
||||
}
|
||||
byte[] lmess = DataHelper.getASCII(buf.toString());
|
||||
|
||||
// warm up the engines
|
||||
SHA256Generator.getInstance().calculateHash(smess);
|
||||
SHA256Generator.getInstance().calculateHash(mmess);
|
||||
SHA256Generator.getInstance().calculateHash(lmess);
|
||||
// now do it
|
||||
for (int x = 0; x < times; x++) {
|
||||
long startshort = System.currentTimeMillis();
|
||||
boolean cacheOnly = false;
|
||||
// no caching
|
||||
Hash s = cacheOnly ? null : SHA256Generator.getInstance().calculateHash(smess);
|
||||
long endshortstartmed = System.currentTimeMillis();
|
||||
Hash m = cacheOnly ? null : SHA256Generator.getInstance().calculateHash(mmess);
|
||||
long endmedstartlong = System.currentTimeMillis();
|
||||
Hash l = cacheOnly ? null : SHA256Generator.getInstance().calculateHash(lmess);
|
||||
long endlong = System.currentTimeMillis();
|
||||
|
||||
shorttime += endshortstartmed - startshort;
|
||||
medtime += endmedstartlong - endshortstartmed;
|
||||
longtime += endlong - endmedstartlong;
|
||||
|
||||
if ((minShort == 0) && (minMed == 0) && (minLong == 0) ) {
|
||||
minShort = endshortstartmed - startshort;
|
||||
maxShort = endshortstartmed - startshort;
|
||||
minMed = endmedstartlong - endshortstartmed;
|
||||
maxMed = endmedstartlong - endshortstartmed;
|
||||
minLong = endlong - endmedstartlong;
|
||||
maxLong = endlong - endmedstartlong;
|
||||
} else {
|
||||
if (minShort > endshortstartmed - startshort) minShort = endshortstartmed - startshort;
|
||||
if (maxShort < endshortstartmed - startshort) maxShort = endshortstartmed - startshort;
|
||||
if (minMed > endmedstartlong - endshortstartmed) minMed = endmedstartlong - endshortstartmed;
|
||||
if (maxMed < endmedstartlong - endshortstartmed) maxMed = endmedstartlong - endshortstartmed;
|
||||
if (minLong > endlong - endmedstartlong) minLong = endlong - endmedstartlong;
|
||||
if (maxLong < endlong - endmedstartlong) maxLong = endlong - endmedstartlong;
|
||||
}
|
||||
}
|
||||
System.out.println();
|
||||
System.out.println("Short Message Time Average : " + (shorttime/times) + "\ttotal: " + shorttime + "\tmin: " + minShort + "\tmax: " + maxShort + "\tBps: " + (shorttime == 0 ? "NaN" : ""+(times*smess.length)/shorttime));
|
||||
System.out.println("Medium Message Time Average : " + (medtime/times) + "\ttotal: " + medtime + "\tmin: " + minMed + "\tmax: " + maxMed + "\tBps: " + (medtime == 0 ? "NaN" : ""+(times*mmess.length*1000)/medtime));
|
||||
System.out.println("Long Message Time Average : " + (longtime/times) + "\ttotal: " + longtime + "\tmin: " + minLong + "\tmax: " + maxLong + "\tBps: " + (longtime == 0 ? "NaN" : "" + (times*lmess.length*1000)/longtime));
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ $javacommand = "$runtime -cp $classpath -Dlogger.shutdownDelay=0";
|
||||
|
||||
print "\nBenchmark Suite #1: i2p/core/java/test/net/i2p/crypto/*\n\n";
|
||||
|
||||
@testclasses = ( "AES256Bench", "DSABench", "ElGamalBench", "SHA256Bench" );
|
||||
@testclasses = ( "DSABench" );
|
||||
|
||||
foreach $testclass (@testclasses) {
|
||||
print "[BENCHMARK] $testclass:\n\n";
|
||||
|
Reference in New Issue
Block a user