[CRYPTO]: Use template keys for speed tests if possible
[linux-2.6.git] / crypto / tcrypt.c
index 414ef5e..401d25a 100644 (file)
@@ -427,9 +427,10 @@ out:
 }
 
 static void test_cipher_speed(char *algo, int mode, int enc, unsigned int sec,
-                             struct cipher_speed *speed)
+                             struct cipher_testvec *template,
+                             unsigned int tcount, struct cipher_speed *speed)
 {
-       unsigned int ret, i, iv_len;
+       unsigned int ret, i, j, iv_len;
        unsigned char *key, *p, iv[128];
        struct crypto_tfm *tfm;
        struct scatterlist sg[8];
@@ -471,6 +472,12 @@ static void test_cipher_speed(char *algo, int mode, int enc, unsigned int sec,
 
                /* set key, plain text and IV */
                key = (unsigned char *)tvmem;
+               for (j = 0; j < tcount; j++) {
+                       if (template[j].klen == speed[i].klen) {
+                               key = template[j].key;
+                               break;
+                       }
+               }
                p = (unsigned char *)tvmem + speed[i].klen;
 
                ret = crypto_cipher_setkey(tfm, key, speed[i].klen);
@@ -953,38 +960,66 @@ static void do_test(void)
 #endif
 
        case 200:
-               test_cipher_speed("aes", MODE_ECB, ENCRYPT, sec, aes_speed_template);
-               test_cipher_speed("aes", MODE_ECB, DECRYPT, sec, aes_speed_template);
-               test_cipher_speed("aes", MODE_CBC, ENCRYPT, sec, aes_speed_template);
-               test_cipher_speed("aes", MODE_CBC, DECRYPT, sec, aes_speed_template);
+               test_cipher_speed("aes", MODE_ECB, ENCRYPT, sec, NULL, 0,
+                                 aes_speed_template);
+               test_cipher_speed("aes", MODE_ECB, DECRYPT, sec, NULL, 0,
+                                 aes_speed_template);
+               test_cipher_speed("aes", MODE_CBC, ENCRYPT, sec, NULL, 0,
+                                 aes_speed_template);
+               test_cipher_speed("aes", MODE_CBC, DECRYPT, sec, NULL, 0,
+                                 aes_speed_template);
                break;
 
        case 201:
-               test_cipher_speed("des3_ede", MODE_ECB, ENCRYPT, sec, des3_ede_speed_template);
-               test_cipher_speed("des3_ede", MODE_ECB, DECRYPT, sec, des3_ede_speed_template);
-               test_cipher_speed("des3_ede", MODE_CBC, ENCRYPT, sec, des3_ede_speed_template);
-               test_cipher_speed("des3_ede", MODE_CBC, DECRYPT, sec, des3_ede_speed_template);
+               test_cipher_speed("des3_ede", MODE_ECB, ENCRYPT, sec,
+                                 des3_ede_enc_tv_template,
+                                 DES3_EDE_ENC_TEST_VECTORS,
+                                 des3_ede_speed_template);
+               test_cipher_speed("des3_ede", MODE_ECB, DECRYPT, sec,
+                                 des3_ede_dec_tv_template,
+                                 DES3_EDE_DEC_TEST_VECTORS,
+                                 des3_ede_speed_template);
+               test_cipher_speed("des3_ede", MODE_CBC, ENCRYPT, sec,
+                                 des3_ede_enc_tv_template,
+                                 DES3_EDE_ENC_TEST_VECTORS,
+                                 des3_ede_speed_template);
+               test_cipher_speed("des3_ede", MODE_CBC, DECRYPT, sec,
+                                 des3_ede_dec_tv_template,
+                                 DES3_EDE_DEC_TEST_VECTORS,
+                                 des3_ede_speed_template);
                break;
 
        case 202:
-               test_cipher_speed("twofish", MODE_ECB, ENCRYPT, sec, twofish_speed_template);
-               test_cipher_speed("twofish", MODE_ECB, DECRYPT, sec, twofish_speed_template);
-               test_cipher_speed("twofish", MODE_CBC, ENCRYPT, sec, twofish_speed_template);
-               test_cipher_speed("twofish", MODE_CBC, DECRYPT, sec, twofish_speed_template);
+               test_cipher_speed("twofish", MODE_ECB, ENCRYPT, sec, NULL, 0,
+                                 twofish_speed_template);
+               test_cipher_speed("twofish", MODE_ECB, DECRYPT, sec, NULL, 0,
+                                 twofish_speed_template);
+               test_cipher_speed("twofish", MODE_CBC, ENCRYPT, sec, NULL, 0,
+                                 twofish_speed_template);
+               test_cipher_speed("twofish", MODE_CBC, DECRYPT, sec, NULL, 0,
+                                 twofish_speed_template);
                break;
 
        case 203:
-               test_cipher_speed("blowfish", MODE_ECB, ENCRYPT, sec, blowfish_speed_template);
-               test_cipher_speed("blowfish", MODE_ECB, DECRYPT, sec, blowfish_speed_template);
-               test_cipher_speed("blowfish", MODE_CBC, ENCRYPT, sec, blowfish_speed_template);
-               test_cipher_speed("blowfish", MODE_CBC, DECRYPT, sec, blowfish_speed_template);
+               test_cipher_speed("blowfish", MODE_ECB, ENCRYPT, sec, NULL, 0,
+                                 blowfish_speed_template);
+               test_cipher_speed("blowfish", MODE_ECB, DECRYPT, sec, NULL, 0,
+                                 blowfish_speed_template);
+               test_cipher_speed("blowfish", MODE_CBC, ENCRYPT, sec, NULL, 0,
+                                 blowfish_speed_template);
+               test_cipher_speed("blowfish", MODE_CBC, DECRYPT, sec, NULL, 0,
+                                 blowfish_speed_template);
                break;
 
        case 204:
-               test_cipher_speed("des", MODE_ECB, ENCRYPT, sec, des_speed_template);
-               test_cipher_speed("des", MODE_ECB, DECRYPT, sec, des_speed_template);
-               test_cipher_speed("des", MODE_CBC, ENCRYPT, sec, des_speed_template);
-               test_cipher_speed("des", MODE_CBC, DECRYPT, sec, des_speed_template);
+               test_cipher_speed("des", MODE_ECB, ENCRYPT, sec, NULL, 0,
+                                 des_speed_template);
+               test_cipher_speed("des", MODE_ECB, DECRYPT, sec, NULL, 0,
+                                 des_speed_template);
+               test_cipher_speed("des", MODE_CBC, ENCRYPT, sec, NULL, 0,
+                                 des_speed_template);
+               test_cipher_speed("des", MODE_CBC, DECRYPT, sec, NULL, 0,
+                                 des_speed_template);
                break;
 
        case 1000: