Crypto takes 17 seconds to wind up for the throw...
Ian Grigg
iang at systemics.com
Tue Oct 26 15:17:51 PDT 2004
It seems that a call into javax.crypto.Cipher.getInstance()
takes about 17 seconds to come back with the trivial object
of a cipher. See follow-on test program and results.
Now, getting a Cipher should be a matter of milliseconds.
It's just an object that feeds some blocks into a bunch of
spinning rotors. So there's definately a blockage in there
somewhere.
I'm pretty sure the blockage is deep within the SUN JCE code.
I'm pretty sure it's for a really dumb reason. While I keep
looking, has anyone come across this? Or got any clues?
iang
galland$ /usr/local/jdk1.4.2/bin/javac CipherSlowTest.java && CLASSPATH=::$CLASSPATH $JAVA CipherSlowTest
....................default provider: SUN
MessDig SHA-1: 126
....................default crypto provider: SunJCE
Cipher DES: 17025
....................addProvider(CryptixCrypto): 12
MessDig SHA-1: 16
Cipher DES: 349
Cipher Null: 5
Cipher AES: 30
Wfgalland$ /usr/local/jdk1.4.2/bin/javac CipherSlowTest.java && CLASSPATH=::$CLASSPATH $JAVA CipherSlowTest
.......................................default provider: SUN
MessDig SHA-1: 129
.......................................default crypto provider: SunJCE
Cipher DES: 17034
.......................................addProvider(CryptixCrypto): 11
MessDig SHA-1: 19
Cipher DES: 355
Cipher Null: 5
Cipher AES: 31
galland$
import javax.crypto.*;
import java.security.*;
/**
* JDK 1.4.2
* java version "1.4.2-p6"
* Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2-p6-toor_21_jul_2004_13_48)
* Java HotSpot(TM) Client VM (build 1.4.2-p6-toor_21_jul_2004_13_48, mixed mode)
*
* FreeBSD galland 4.9-RC FreeBSD 4.9-RC #7: Tue Sep 30 03:21:16 EDT 2003
*
*/
public class CipherSlowTest
{
public static void main(String[] args)
throws Exception
{
long t1 = System.currentTimeMillis();
long t2;
String provider;
String line = ".......................................";
provider = "SUN";
System.out.println(line+"default provider: " + provider);
MessageDigest.getInstance("SHA-1", provider);
t2 = System.currentTimeMillis();
System.out.println("MessDig SHA-1: "+(t2-t1)); t1 = t2;
provider = "SunJCE";
System.out.println(line+"default crypto provider: " + provider);
Cipher.getInstance("DES", provider);
t2 = System.currentTimeMillis();
System.out.println("Cipher DES: "+(t2-t1)); t1 = t2;
provider = "CryptixCrypto";
Security.addProvider(new cryptix.jce.provider.CryptixCrypto());
t2 = System.currentTimeMillis();
System.out.println(line+"addProvider("+provider+"): "+(t2-t1)); t1 = t2;
MessageDigest.getInstance("SHA-1", provider);
t2 = System.currentTimeMillis();
System.out.println("MessDig SHA-1: "+(t2-t1)); t1 = t2;
Cipher.getInstance("DES", provider);
t2 = System.currentTimeMillis();
System.out.println("Cipher DES: "+(t2-t1)); t1 = t2;
Cipher.getInstance("null", provider);
t2 = System.currentTimeMillis();
System.out.println("Cipher Null: "+(t2-t1)); t1 = t2;
Cipher.getInstance("Rijndael/ECB/NoPadding", provider);
t2 = System.currentTimeMillis();
System.out.println("Cipher AES: "+(t2-t1)); t1 = t2;
}
}
More information about the freebsd-java
mailing list