diff --git a/core/java/src/net/i2p/crypto/KeyGenerator.java b/core/java/src/net/i2p/crypto/KeyGenerator.java
index c23a215232f59995d4d1b6834c983727163b8b3f..5e86e2719dc486ed3a359d082b28ae7f7cecfb11 100644
--- a/core/java/src/net/i2p/crypto/KeyGenerator.java
+++ b/core/java/src/net/i2p/crypto/KeyGenerator.java
@@ -347,10 +347,10 @@ public class KeyGenerator {
         try { Thread.sleep(1000); } catch (InterruptedException ie) {}
         int runs = 200; // warmup
         for (int j = 0; j < 2; j++) {
-            for (int i = 0; i <= 100; i++) {
-                SigType type = SigType.getByCode(i);
-                if (type == null)
-                    break;
+            for (SigType type : SigType.values()) {
+                if (!type.isAvailable()) {
+                    System.out.println("Skipping unavailable: " + type);
+                }
                 try {
                     System.out.println("Testing " + type);
                     testSig(type, runs);
@@ -365,9 +365,19 @@ public class KeyGenerator {
 
     private static void testSig(SigType type, int runs) throws GeneralSecurityException {
         byte src[] = new byte[512];
+        double gtime = 0;
         long stime = 0;
         long vtime = 0;
-        SimpleDataStructure keys[] = KeyGenerator.getInstance().generateSigningKeys(type);
+        SimpleDataStructure keys[] = null;
+        long st = System.nanoTime();
+        // RSA super slow, limit to 5
+        int genruns = (type.getBaseAlgorithm() == SigAlgo.RSA) ? Math.min(runs, 5) : runs;
+        for (int i = 0; i < genruns; i++) {
+            keys = KeyGenerator.getInstance().generateSigningKeys(type);
+        }
+        long en = System.nanoTime();
+        gtime = ((en - st) / (1000*1000d)) / genruns;
+        System.out.println(type + " key gen " + genruns + " times: " + gtime + " ms each");
         SigningPublicKey pubkey = (SigningPublicKey) keys[0];
         SigningPrivateKey privkey = (SigningPrivateKey) keys[1];
         SigningPublicKey pubkey2 = getSigningPublicKey(privkey);