Hi:

[CRYPTO] tcrypt: Use HMAC template

This patch converts tcrypt to use the new HMAC template rather than the
hard-coded version of HMAC.

Signed-off-by: Herbert Xu <[EMAIL PROTECTED]>

Cheers,
-- 
Visit Openswan at http://www.openswan.org/
Email: Herbert Xu ~{PmV>HI~} <[EMAIL PROTECTED]>
Home Page: http://gondor.apana.org.au/~herbert/
PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt
--
diff --git a/crypto/tcrypt.c b/crypto/tcrypt.c
--- a/crypto/tcrypt.c
+++ b/crypto/tcrypt.c
@@ -117,13 +117,10 @@ static void test_hash(char *algo, struct
 
                sg_set_buf(&sg[0], hash_tv[i].plaintext, hash_tv[i].psize);
 
-               crypto_digest_init(tfm);
-               if (tfm->crt_u.digest.dit_setkey) {
+               if (hash_tv[i].ksize)
                        crypto_digest_setkey(tfm, hash_tv[i].key,
                                             hash_tv[i].ksize);
-               }
-               crypto_digest_update(tfm, sg, 1);
-               crypto_digest_final(tfm, result);
+               crypto_digest_digest(tfm, sg, 1, result);
 
                hexdump(result, crypto_tfm_alg_digestsize(tfm));
                printk("%s\n",
@@ -154,6 +151,9 @@ static void test_hash(char *algo, struct
                                            hash_tv[i].tap[k]);
                        }
 
+                       if (hash_tv[i].ksize)
+                               crypto_digest_setkey(tfm, hash_tv[i].key,
+                                                    hash_tv[i].ksize);
                        crypto_digest_digest(tfm, sg, hash_tv[i].np, result);
 
                        hexdump(result, crypto_tfm_alg_digestsize(tfm));
@@ -167,92 +167,6 @@ static void test_hash(char *algo, struct
        crypto_free_tfm(tfm);
 }
 
-
-#ifdef CONFIG_CRYPTO_HMAC
-
-static void test_hmac(char *algo, struct hmac_testvec *template,
-                     unsigned int tcount)
-{
-       unsigned int i, j, k, temp;
-       struct scatterlist sg[8];
-       char result[64];
-       struct crypto_tfm *tfm;
-       struct hmac_testvec *hmac_tv;
-       unsigned int tsize, klen;
-
-       tfm = crypto_alloc_tfm(algo, 0);
-       if (tfm == NULL) {
-               printk("failed to load transform for %s\n", algo);
-               return;
-       }
-
-       printk("\ntesting hmac_%s\n", algo);
-
-       tsize = sizeof(struct hmac_testvec);
-       tsize *= tcount;
-       if (tsize > TVMEMSIZE) {
-               printk("template (%u) too big for tvmem (%u)\n", tsize,
-                      TVMEMSIZE);
-               goto out;
-       }
-
-       memcpy(tvmem, template, tsize);
-       hmac_tv = (void *)tvmem;
-
-       for (i = 0; i < tcount; i++) {
-               printk("test %u:\n", i + 1);
-               memset(result, 0, sizeof (result));
-
-               klen = hmac_tv[i].ksize;
-               sg_set_buf(&sg[0], hmac_tv[i].plaintext, hmac_tv[i].psize);
-
-               crypto_hmac(tfm, hmac_tv[i].key, &klen, sg, 1, result);
-
-               hexdump(result, crypto_tfm_alg_digestsize(tfm));
-               printk("%s\n",
-                      memcmp(result, hmac_tv[i].digest,
-                             crypto_tfm_alg_digestsize(tfm)) ? "fail" :
-                      "pass");
-       }
-
-       printk("\ntesting hmac_%s across pages\n", algo);
-
-       memset(xbuf, 0, XBUFSIZE);
-
-       j = 0;
-       for (i = 0; i < tcount; i++) {
-               if (hmac_tv[i].np) {
-                       j++;
-                       printk("test %u:\n",j);
-                       memset(result, 0, 64);
-
-                       temp = 0;
-                       klen = hmac_tv[i].ksize;
-                       for (k = 0; k < hmac_tv[i].np; k++) {
-                               memcpy(&xbuf[IDX[k]],
-                                      hmac_tv[i].plaintext + temp,
-                                      hmac_tv[i].tap[k]);
-                               temp += hmac_tv[i].tap[k];
-                               sg_set_buf(&sg[k], &xbuf[IDX[k]],
-                                           hmac_tv[i].tap[k]);
-                       }
-
-                       crypto_hmac(tfm, hmac_tv[i].key, &klen, sg,
-                                   hmac_tv[i].np, result);
-                       hexdump(result, crypto_tfm_alg_digestsize(tfm));
-
-                       printk("%s\n",
-                              memcmp(result, hmac_tv[i].digest,
-                                     crypto_tfm_alg_digestsize(tfm)) ?
-                              "fail" : "pass");
-               }
-       }
-out:
-       crypto_free_tfm(tfm);
-}
-
-#endif /* CONFIG_CRYPTO_HMAC */
-
 static void test_cipher(char *algo, int mode, int enc,
                        struct cipher_testvec *template, unsigned int tcount)
 {
@@ -969,11 +883,12 @@ static void do_test(void)
                test_hash("tgr128", tgr128_tv_template, TGR128_TEST_VECTORS);
                test_deflate();
                test_crc32c();
-#ifdef CONFIG_CRYPTO_HMAC
-               test_hmac("md5", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS);
-               test_hmac("sha1", hmac_sha1_tv_template, 
HMAC_SHA1_TEST_VECTORS);
-               test_hmac("sha256", hmac_sha256_tv_template, 
HMAC_SHA256_TEST_VECTORS);
-#endif
+               test_hash("hmac(md5)", hmac_md5_tv_template,
+                         HMAC_MD5_TEST_VECTORS);
+               test_hash("hmac(sha1)", hmac_sha1_tv_template,
+                         HMAC_SHA1_TEST_VECTORS);
+               test_hash("hmac(sha256)", hmac_sha256_tv_template,
+                         HMAC_SHA256_TEST_VECTORS);
 
                test_hash("michael_mic", michael_mic_tv_template, 
MICHAEL_MIC_TEST_VECTORS);
                break;
@@ -1124,20 +1039,21 @@ static void do_test(void)
                test_cipher ("xeta", MODE_ECB, DECRYPT, xeta_dec_tv_template, 
XETA_DEC_TEST_VECTORS);
                break;
 
-#ifdef CONFIG_CRYPTO_HMAC
        case 100:
-               test_hmac("md5", hmac_md5_tv_template, HMAC_MD5_TEST_VECTORS);
+               test_hash("hmac(md5)", hmac_md5_tv_template,
+                         HMAC_MD5_TEST_VECTORS);
                break;
 
        case 101:
-               test_hmac("sha1", hmac_sha1_tv_template, 
HMAC_SHA1_TEST_VECTORS);
+               test_hash("hmac(sha1)", hmac_sha1_tv_template,
+                         HMAC_SHA1_TEST_VECTORS);
                break;
 
        case 102:
-               test_hmac("sha256", hmac_sha256_tv_template, 
HMAC_SHA256_TEST_VECTORS);
+               test_hash("hmac(sha256)", hmac_sha256_tv_template,
+                         HMAC_SHA256_TEST_VECTORS);
                break;
 
-#endif
 
        case 200:
                test_cipher_speed("aes", MODE_ECB, ENCRYPT, sec, NULL, 0,
diff --git a/crypto/tcrypt.h b/crypto/tcrypt.h
--- a/crypto/tcrypt.h
+++ b/crypto/tcrypt.h
@@ -36,16 +36,6 @@ struct hash_testvec {
        unsigned char ksize;
 };
 
-struct hmac_testvec {
-       char key[128];
-       char plaintext[128];
-       char digest[MAX_DIGEST_SIZE];
-       unsigned char tap[MAX_TAP];
-       unsigned char ksize;
-       unsigned char psize;
-       unsigned char np;
-};
-
 struct cipher_testvec {
        char key[MAX_KEYLEN] __attribute__ ((__aligned__(4)));
        char iv[MAX_IVLEN];
@@ -697,14 +687,13 @@ static struct hash_testvec tgr128_tv_tem
        },
 };
 
-#ifdef CONFIG_CRYPTO_HMAC
 /*
  * HMAC-MD5 test vectors from RFC2202
  * (These need to be fixed to not use strlen).
  */
 #define HMAC_MD5_TEST_VECTORS  7
 
-static struct hmac_testvec hmac_md5_tv_template[] =
+static struct hash_testvec hmac_md5_tv_template[] =
 {
        {
                .key    = { [0 ... 15] =  0x0b },
@@ -768,7 +757,7 @@ static struct hmac_testvec hmac_md5_tv_t
  */
 #define HMAC_SHA1_TEST_VECTORS 7
 
-static struct hmac_testvec hmac_sha1_tv_template[] = {
+static struct hash_testvec hmac_sha1_tv_template[] = {
        {
                .key    = { [0 ... 19] = 0x0b },
                .ksize  = 20,
@@ -833,7 +822,7 @@ static struct hmac_testvec hmac_sha1_tv_
  */
 #define HMAC_SHA256_TEST_VECTORS       10
 
-static struct hmac_testvec hmac_sha256_tv_template[] = {
+static struct hash_testvec hmac_sha256_tv_template[] = {
        {
                .key    = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
                            0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10,
@@ -944,8 +933,6 @@ static struct hmac_testvec hmac_sha256_t
        },
 };
 
-#endif /* CONFIG_CRYPTO_HMAC */
-
 /*
  * DES test vectors.
  */
-
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to