patch-2.4.23 linux-2.4.23/crypto/tcrypt.c
Next file: linux-2.4.23/crypto/tcrypt.h
Previous file: linux-2.4.23/crypto/proc.c
Back to the patch index
Back to the overall index
- Lines: 122
- Date:
2003-11-28 10:26:19.000000000 -0800
- Orig file:
linux-2.4.22/crypto/tcrypt.c
- Orig date:
2003-08-25 04:44:40.000000000 -0700
diff -urN linux-2.4.22/crypto/tcrypt.c linux-2.4.23/crypto/tcrypt.c
@@ -2192,6 +2192,102 @@
crypto_free_tfm(tfm);
}
+void
+test_cast5(void)
+{
+ unsigned int ret, i, tsize;
+ u8 *p, *q, *key;
+ struct crypto_tfm *tfm;
+ struct cast5_tv *c5_tv;
+ struct scatterlist sg[1];
+
+ printk("\ntesting cast5 encryption\n");
+
+ tfm = crypto_alloc_tfm("cast5", 0);
+ if (tfm == NULL) {
+ printk("failed to load transform for cast5 (default ecb)\n");
+ return;
+ }
+
+ tsize = sizeof (cast5_enc_tv_template);
+ if (tsize > TVMEMSIZE) {
+ printk("template (%u) too big for tvmem (%u)\n", tsize,
+ TVMEMSIZE);
+ return;
+ }
+
+ memcpy(tvmem, cast5_enc_tv_template, tsize);
+ c5_tv = (void *) tvmem;
+ for (i = 0; i < CAST5_ENC_TEST_VECTORS; i++) {
+ printk("test %u (%d bit key):\n", i + 1, c5_tv[i].keylen * 8);
+ key = c5_tv[i].key;
+
+ ret = crypto_cipher_setkey(tfm, key, c5_tv[i].keylen);
+ if (ret) {
+ printk("setkey() failed flags=%x\n", tfm->crt_flags);
+
+ if (!c5_tv[i].fail)
+ goto out;
+ }
+
+ p = c5_tv[i].plaintext;
+ sg[0].page = virt_to_page(p);
+ sg[0].offset = ((long) p & ~PAGE_MASK);
+ sg[0].length = sizeof(c5_tv[i].plaintext);
+ ret = crypto_cipher_encrypt(tfm, sg, sg, sg[0].length);
+ if (ret) {
+ printk("encrypt() failed flags=%x\n", tfm->crt_flags);
+ goto out;
+ }
+
+ q = kmap(sg[0].page) + sg[0].offset;
+ hexdump(q, sizeof(c5_tv[i].ciphertext));
+
+ printk("%s\n", memcmp(q, c5_tv[i].ciphertext,
+ sizeof(c5_tv[i].ciphertext)) ? "fail" : "pass");
+ }
+
+ tsize = sizeof (cast5_dec_tv_template);
+ if (tsize > TVMEMSIZE) {
+ printk("template (%u) too big for tvmem (%u)\n", tsize,
+ TVMEMSIZE);
+ return;
+ }
+
+ memcpy(tvmem, cast5_dec_tv_template, tsize);
+ c5_tv = (void *) tvmem;
+ for (i = 0; i < CAST5_DEC_TEST_VECTORS; i++) {
+ printk("test %u (%d bit key):\n", i + 1, c5_tv[i].keylen * 8);
+ key = c5_tv[i].key;
+
+ ret = crypto_cipher_setkey(tfm, key, c5_tv[i].keylen);
+ if (ret) {
+ printk("setkey() failed flags=%x\n", tfm->crt_flags);
+
+ if (!c5_tv[i].fail)
+ goto out;
+ }
+
+ p = c5_tv[i].plaintext;
+ sg[0].page = virt_to_page(p);
+ sg[0].offset = ((long) p & ~PAGE_MASK);
+ sg[0].length = sizeof(c5_tv[i].plaintext);
+ ret = crypto_cipher_decrypt(tfm, sg, sg, sg[0].length);
+ if (ret) {
+ printk("decrypt() failed flags=%x\n", tfm->crt_flags);
+ goto out;
+ }
+
+ q = kmap(sg[0].page) + sg[0].offset;
+ hexdump(q, sizeof(c5_tv[i].ciphertext));
+
+ printk("%s\n", memcmp(q, c5_tv[i].ciphertext,
+ sizeof(c5_tv[i].ciphertext)) ? "fail" : "pass");
+ }
+out:
+ crypto_free_tfm (tfm);
+}
+
static void
test_deflate(void)
{
@@ -2304,6 +2400,7 @@
test_sha384();
test_sha512();
test_deflate();
+ test_cast5();
#ifdef CONFIG_CRYPTO_HMAC
test_hmac_md5();
test_hmac_sha1();
@@ -2363,6 +2460,10 @@
test_deflate();
break;
+ case 14:
+ test_cast5();
+ break;
+
#ifdef CONFIG_CRYPTO_HMAC
case 100:
test_hmac_md5();
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)