aboutsummaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2008-08-17 03:01:56 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2008-08-29 01:49:58 -0400
commit1aa4ecd95d8d67d21731a00646326a71295dafa3 (patch)
treea79aaa58791408642dc2a817795b7b7008cff5f9 /crypto
parent73d3864a4823abda19ebc4387b6ddcbf416e3a77 (diff)
crypto: cryptomgr - Test ciphers using ECB
As it is we only test ciphers when combined with a mode. That means users that do not invoke a mode of operations may get an untested cipher. This patch tests all ciphers using the ECB mode so that simple cipher users such as ansi-cprng are also protected. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto')
-rw-r--r--crypto/algboss.c5
-rw-r--r--crypto/testmgr.c214
2 files changed, 169 insertions, 50 deletions
diff --git a/crypto/algboss.c b/crypto/algboss.c
index ed9f663c82c6..4601e4267c88 100644
--- a/crypto/algboss.c
+++ b/crypto/algboss.c
@@ -210,10 +210,7 @@ static int cryptomgr_test(void *data)
210 CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV)) 210 CRYPTO_ALG_TYPE_BLKCIPHER_MASK) && !(type & CRYPTO_ALG_GENIV))
211 goto skiptest; 211 goto skiptest;
212 212
213 if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) 213 err = alg_test(param->driver, param->alg, type, CRYPTO_ALG_TESTED);
214 goto skiptest;
215
216 err = alg_test(param->driver, param->alg, 0, CRYPTO_ALG_TESTED);
217 214
218skiptest: 215skiptest:
219 crypto_alg_tested(param->driver, err); 216 crypto_alg_tested(param->driver, err);
diff --git a/crypto/testmgr.c b/crypto/testmgr.c
index e8666b3ead67..b828c6cf1b1d 100644
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
@@ -541,9 +541,74 @@ out:
541 return ret; 541 return ret;
542} 542}
543 543
544static int test_cipher(struct crypto_ablkcipher *tfm, int enc, 544static int test_cipher(struct crypto_cipher *tfm, int enc,
545 struct cipher_testvec *template, unsigned int tcount) 545 struct cipher_testvec *template, unsigned int tcount)
546{ 546{
547 const char *algo = crypto_tfm_alg_driver_name(crypto_cipher_tfm(tfm));
548 unsigned int i, j, k;
549 int ret;
550 char *q;
551 const char *e;
552 void *data;
553
554 if (enc == ENCRYPT)
555 e = "encryption";
556 else
557 e = "decryption";
558
559 j = 0;
560 for (i = 0; i < tcount; i++) {
561 if (template[i].np)
562 continue;
563
564 j++;
565
566 data = xbuf[0];
567 memcpy(data, template[i].input, template[i].ilen);
568
569 crypto_cipher_clear_flags(tfm, ~0);
570 if (template[i].wk)
571 crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY);
572
573 ret = crypto_cipher_setkey(tfm, template[i].key,
574 template[i].klen);
575 if (!ret == template[i].fail) {
576 printk(KERN_ERR "alg: cipher: setkey failed "
577 "on test %d for %s: flags=%x\n", j,
578 algo, crypto_cipher_get_flags(tfm));
579 goto out;
580 } else if (ret)
581 continue;
582
583 for (k = 0; k < template[i].ilen;
584 k += crypto_cipher_blocksize(tfm)) {
585 if (enc)
586 crypto_cipher_encrypt_one(tfm, data + k,
587 data + k);
588 else
589 crypto_cipher_decrypt_one(tfm, data + k,
590 data + k);
591 }
592
593 q = data;
594 if (memcmp(q, template[i].result, template[i].rlen)) {
595 printk(KERN_ERR "alg: cipher: Test %d failed "
596 "on %s for %s\n", j, e, algo);
597 hexdump(q, template[i].rlen);
598 ret = -EINVAL;
599 goto out;
600 }
601 }
602
603 ret = 0;
604
605out:
606 return ret;
607}
608
609static int test_skcipher(struct crypto_ablkcipher *tfm, int enc,
610 struct cipher_testvec *template, unsigned int tcount)
611{
547 const char *algo = 612 const char *algo =
548 crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm)); 613 crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm));
549 unsigned int i, j, k, n, temp; 614 unsigned int i, j, k, n, temp;
@@ -565,8 +630,8 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
565 630
566 req = ablkcipher_request_alloc(tfm, GFP_KERNEL); 631 req = ablkcipher_request_alloc(tfm, GFP_KERNEL);
567 if (!req) { 632 if (!req) {
568 printk(KERN_ERR "alg: cipher: Failed to allocate request for " 633 printk(KERN_ERR "alg: skcipher: Failed to allocate request "
569 "%s\n", algo); 634 "for %s\n", algo);
570 ret = -ENOMEM; 635 ret = -ENOMEM;
571 goto out; 636 goto out;
572 } 637 }
@@ -595,7 +660,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
595 ret = crypto_ablkcipher_setkey(tfm, template[i].key, 660 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
596 template[i].klen); 661 template[i].klen);
597 if (!ret == template[i].fail) { 662 if (!ret == template[i].fail) {
598 printk(KERN_ERR "alg: cipher: setkey failed " 663 printk(KERN_ERR "alg: skcipher: setkey failed "
599 "on test %d for %s: flags=%x\n", j, 664 "on test %d for %s: flags=%x\n", j,
600 algo, crypto_ablkcipher_get_flags(tfm)); 665 algo, crypto_ablkcipher_get_flags(tfm));
601 goto out; 666 goto out;
@@ -623,7 +688,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
623 } 688 }
624 /* fall through */ 689 /* fall through */
625 default: 690 default:
626 printk(KERN_ERR "alg: cipher: %s failed on " 691 printk(KERN_ERR "alg: skcipher: %s failed on "
627 "test %d for %s: ret=%d\n", e, j, algo, 692 "test %d for %s: ret=%d\n", e, j, algo,
628 -ret); 693 -ret);
629 goto out; 694 goto out;
@@ -631,8 +696,8 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
631 696
632 q = data; 697 q = data;
633 if (memcmp(q, template[i].result, template[i].rlen)) { 698 if (memcmp(q, template[i].result, template[i].rlen)) {
634 printk(KERN_ERR "alg: cipher: Test %d failed " 699 printk(KERN_ERR "alg: skcipher: Test %d "
635 "on %s for %s\n", j, e, algo); 700 "failed on %s for %s\n", j, e, algo);
636 hexdump(q, template[i].rlen); 701 hexdump(q, template[i].rlen);
637 ret = -EINVAL; 702 ret = -EINVAL;
638 goto out; 703 goto out;
@@ -659,7 +724,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
659 ret = crypto_ablkcipher_setkey(tfm, template[i].key, 724 ret = crypto_ablkcipher_setkey(tfm, template[i].key,
660 template[i].klen); 725 template[i].klen);
661 if (!ret == template[i].fail) { 726 if (!ret == template[i].fail) {
662 printk(KERN_ERR "alg: cipher: setkey failed " 727 printk(KERN_ERR "alg: skcipher: setkey failed "
663 "on chunk test %d for %s: flags=%x\n", 728 "on chunk test %d for %s: flags=%x\n",
664 j, algo, 729 j, algo,
665 crypto_ablkcipher_get_flags(tfm)); 730 crypto_ablkcipher_get_flags(tfm));
@@ -710,7 +775,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
710 } 775 }
711 /* fall through */ 776 /* fall through */
712 default: 777 default:
713 printk(KERN_ERR "alg: cipher: %s failed on " 778 printk(KERN_ERR "alg: skcipher: %s failed on "
714 "chunk test %d for %s: ret=%d\n", e, j, 779 "chunk test %d for %s: ret=%d\n", e, j,
715 algo, -ret); 780 algo, -ret);
716 goto out; 781 goto out;
@@ -724,7 +789,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
724 789
725 if (memcmp(q, template[i].result + temp, 790 if (memcmp(q, template[i].result + temp,
726 template[i].tap[k])) { 791 template[i].tap[k])) {
727 printk(KERN_ERR "alg: cipher: Chunk " 792 printk(KERN_ERR "alg: skcipher: Chunk "
728 "test %d failed on %s at page " 793 "test %d failed on %s at page "
729 "%u for %s\n", j, e, k, algo); 794 "%u for %s\n", j, e, k, algo);
730 hexdump(q, template[i].tap[k]); 795 hexdump(q, template[i].tap[k]);
@@ -735,7 +800,7 @@ static int test_cipher(struct crypto_ablkcipher *tfm, int enc,
735 for (n = 0; offset_in_page(q + n) && q[n]; n++) 800 for (n = 0; offset_in_page(q + n) && q[n]; n++)
736 ; 801 ;
737 if (n) { 802 if (n) {
738 printk(KERN_ERR "alg: cipher: " 803 printk(KERN_ERR "alg: skcipher: "
739 "Result buffer corruption in " 804 "Result buffer corruption in "
740 "chunk test %d on %s at page " 805 "chunk test %d on %s at page "
741 "%u for %s: %u bytes:\n", j, e, 806 "%u for %s: %u bytes:\n", j, e,
@@ -849,10 +914,10 @@ out:
849static int alg_test_cipher(const struct alg_test_desc *desc, 914static int alg_test_cipher(const struct alg_test_desc *desc,
850 const char *driver, u32 type, u32 mask) 915 const char *driver, u32 type, u32 mask)
851{ 916{
852 struct crypto_ablkcipher *tfm; 917 struct crypto_cipher *tfm;
853 int err = 0; 918 int err = 0;
854 919
855 tfm = crypto_alloc_ablkcipher(driver, type, mask); 920 tfm = crypto_alloc_cipher(driver, type, mask);
856 if (IS_ERR(tfm)) { 921 if (IS_ERR(tfm)) {
857 printk(KERN_ERR "alg: cipher: Failed to load transform for " 922 printk(KERN_ERR "alg: cipher: Failed to load transform for "
858 "%s: %ld\n", driver, PTR_ERR(tfm)); 923 "%s: %ld\n", driver, PTR_ERR(tfm));
@@ -871,6 +936,35 @@ static int alg_test_cipher(const struct alg_test_desc *desc,
871 desc->suite.cipher.dec.count); 936 desc->suite.cipher.dec.count);
872 937
873out: 938out:
939 crypto_free_cipher(tfm);
940 return err;
941}
942
943static int alg_test_skcipher(const struct alg_test_desc *desc,
944 const char *driver, u32 type, u32 mask)
945{
946 struct crypto_ablkcipher *tfm;
947 int err = 0;
948
949 tfm = crypto_alloc_ablkcipher(driver, type, mask);
950 if (IS_ERR(tfm)) {
951 printk(KERN_ERR "alg: skcipher: Failed to load transform for "
952 "%s: %ld\n", driver, PTR_ERR(tfm));
953 return PTR_ERR(tfm);
954 }
955
956 if (desc->suite.cipher.enc.vecs) {
957 err = test_skcipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs,
958 desc->suite.cipher.enc.count);
959 if (err)
960 goto out;
961 }
962
963 if (desc->suite.cipher.dec.vecs)
964 err = test_skcipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs,
965 desc->suite.cipher.dec.count);
966
967out:
874 crypto_free_ablkcipher(tfm); 968 crypto_free_ablkcipher(tfm);
875 return err; 969 return err;
876} 970}
@@ -920,7 +1014,7 @@ static int alg_test_hash(const struct alg_test_desc *desc, const char *driver,
920static const struct alg_test_desc alg_test_descs[] = { 1014static const struct alg_test_desc alg_test_descs[] = {
921 { 1015 {
922 .alg = "cbc(aes)", 1016 .alg = "cbc(aes)",
923 .test = alg_test_cipher, 1017 .test = alg_test_skcipher,
924 .suite = { 1018 .suite = {
925 .cipher = { 1019 .cipher = {
926 .enc = { 1020 .enc = {
@@ -935,7 +1029,7 @@ static const struct alg_test_desc alg_test_descs[] = {
935 } 1029 }
936 }, { 1030 }, {
937 .alg = "cbc(anubis)", 1031 .alg = "cbc(anubis)",
938 .test = alg_test_cipher, 1032 .test = alg_test_skcipher,
939 .suite = { 1033 .suite = {
940 .cipher = { 1034 .cipher = {
941 .enc = { 1035 .enc = {
@@ -950,7 +1044,7 @@ static const struct alg_test_desc alg_test_descs[] = {
950 } 1044 }
951 }, { 1045 }, {
952 .alg = "cbc(blowfish)", 1046 .alg = "cbc(blowfish)",
953 .test = alg_test_cipher, 1047 .test = alg_test_skcipher,
954 .suite = { 1048 .suite = {
955 .cipher = { 1049 .cipher = {
956 .enc = { 1050 .enc = {
@@ -965,7 +1059,7 @@ static const struct alg_test_desc alg_test_descs[] = {
965 } 1059 }
966 }, { 1060 }, {
967 .alg = "cbc(camellia)", 1061 .alg = "cbc(camellia)",
968 .test = alg_test_cipher, 1062 .test = alg_test_skcipher,
969 .suite = { 1063 .suite = {
970 .cipher = { 1064 .cipher = {
971 .enc = { 1065 .enc = {
@@ -980,7 +1074,7 @@ static const struct alg_test_desc alg_test_descs[] = {
980 } 1074 }
981 }, { 1075 }, {
982 .alg = "cbc(des)", 1076 .alg = "cbc(des)",
983 .test = alg_test_cipher, 1077 .test = alg_test_skcipher,
984 .suite = { 1078 .suite = {
985 .cipher = { 1079 .cipher = {
986 .enc = { 1080 .enc = {
@@ -995,7 +1089,7 @@ static const struct alg_test_desc alg_test_descs[] = {
995 } 1089 }
996 }, { 1090 }, {
997 .alg = "cbc(des3_ede)", 1091 .alg = "cbc(des3_ede)",
998 .test = alg_test_cipher, 1092 .test = alg_test_skcipher,
999 .suite = { 1093 .suite = {
1000 .cipher = { 1094 .cipher = {
1001 .enc = { 1095 .enc = {
@@ -1010,7 +1104,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1010 } 1104 }
1011 }, { 1105 }, {
1012 .alg = "cbc(twofish)", 1106 .alg = "cbc(twofish)",
1013 .test = alg_test_cipher, 1107 .test = alg_test_skcipher,
1014 .suite = { 1108 .suite = {
1015 .cipher = { 1109 .cipher = {
1016 .enc = { 1110 .enc = {
@@ -1049,7 +1143,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1049 } 1143 }
1050 }, { 1144 }, {
1051 .alg = "cts(cbc(aes))", 1145 .alg = "cts(cbc(aes))",
1052 .test = alg_test_cipher, 1146 .test = alg_test_skcipher,
1053 .suite = { 1147 .suite = {
1054 .cipher = { 1148 .cipher = {
1055 .enc = { 1149 .enc = {
@@ -1079,7 +1173,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1079 } 1173 }
1080 }, { 1174 }, {
1081 .alg = "ecb(aes)", 1175 .alg = "ecb(aes)",
1082 .test = alg_test_cipher, 1176 .test = alg_test_skcipher,
1083 .suite = { 1177 .suite = {
1084 .cipher = { 1178 .cipher = {
1085 .enc = { 1179 .enc = {
@@ -1094,7 +1188,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1094 } 1188 }
1095 }, { 1189 }, {
1096 .alg = "ecb(anubis)", 1190 .alg = "ecb(anubis)",
1097 .test = alg_test_cipher, 1191 .test = alg_test_skcipher,
1098 .suite = { 1192 .suite = {
1099 .cipher = { 1193 .cipher = {
1100 .enc = { 1194 .enc = {
@@ -1109,7 +1203,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1109 } 1203 }
1110 }, { 1204 }, {
1111 .alg = "ecb(arc4)", 1205 .alg = "ecb(arc4)",
1112 .test = alg_test_cipher, 1206 .test = alg_test_skcipher,
1113 .suite = { 1207 .suite = {
1114 .cipher = { 1208 .cipher = {
1115 .enc = { 1209 .enc = {
@@ -1124,7 +1218,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1124 } 1218 }
1125 }, { 1219 }, {
1126 .alg = "ecb(blowfish)", 1220 .alg = "ecb(blowfish)",
1127 .test = alg_test_cipher, 1221 .test = alg_test_skcipher,
1128 .suite = { 1222 .suite = {
1129 .cipher = { 1223 .cipher = {
1130 .enc = { 1224 .enc = {
@@ -1139,7 +1233,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1139 } 1233 }
1140 }, { 1234 }, {
1141 .alg = "ecb(camellia)", 1235 .alg = "ecb(camellia)",
1142 .test = alg_test_cipher, 1236 .test = alg_test_skcipher,
1143 .suite = { 1237 .suite = {
1144 .cipher = { 1238 .cipher = {
1145 .enc = { 1239 .enc = {
@@ -1154,7 +1248,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1154 } 1248 }
1155 }, { 1249 }, {
1156 .alg = "ecb(cast5)", 1250 .alg = "ecb(cast5)",
1157 .test = alg_test_cipher, 1251 .test = alg_test_skcipher,
1158 .suite = { 1252 .suite = {
1159 .cipher = { 1253 .cipher = {
1160 .enc = { 1254 .enc = {
@@ -1169,7 +1263,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1169 } 1263 }
1170 }, { 1264 }, {
1171 .alg = "ecb(cast6)", 1265 .alg = "ecb(cast6)",
1172 .test = alg_test_cipher, 1266 .test = alg_test_skcipher,
1173 .suite = { 1267 .suite = {
1174 .cipher = { 1268 .cipher = {
1175 .enc = { 1269 .enc = {
@@ -1184,7 +1278,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1184 } 1278 }
1185 }, { 1279 }, {
1186 .alg = "ecb(des)", 1280 .alg = "ecb(des)",
1187 .test = alg_test_cipher, 1281 .test = alg_test_skcipher,
1188 .suite = { 1282 .suite = {
1189 .cipher = { 1283 .cipher = {
1190 .enc = { 1284 .enc = {
@@ -1199,7 +1293,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1199 } 1293 }
1200 }, { 1294 }, {
1201 .alg = "ecb(des3_ede)", 1295 .alg = "ecb(des3_ede)",
1202 .test = alg_test_cipher, 1296 .test = alg_test_skcipher,
1203 .suite = { 1297 .suite = {
1204 .cipher = { 1298 .cipher = {
1205 .enc = { 1299 .enc = {
@@ -1214,7 +1308,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1214 } 1308 }
1215 }, { 1309 }, {
1216 .alg = "ecb(khazad)", 1310 .alg = "ecb(khazad)",
1217 .test = alg_test_cipher, 1311 .test = alg_test_skcipher,
1218 .suite = { 1312 .suite = {
1219 .cipher = { 1313 .cipher = {
1220 .enc = { 1314 .enc = {
@@ -1229,7 +1323,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1229 } 1323 }
1230 }, { 1324 }, {
1231 .alg = "ecb(seed)", 1325 .alg = "ecb(seed)",
1232 .test = alg_test_cipher, 1326 .test = alg_test_skcipher,
1233 .suite = { 1327 .suite = {
1234 .cipher = { 1328 .cipher = {
1235 .enc = { 1329 .enc = {
@@ -1244,7 +1338,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1244 } 1338 }
1245 }, { 1339 }, {
1246 .alg = "ecb(serpent)", 1340 .alg = "ecb(serpent)",
1247 .test = alg_test_cipher, 1341 .test = alg_test_skcipher,
1248 .suite = { 1342 .suite = {
1249 .cipher = { 1343 .cipher = {
1250 .enc = { 1344 .enc = {
@@ -1259,7 +1353,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1259 } 1353 }
1260 }, { 1354 }, {
1261 .alg = "ecb(tea)", 1355 .alg = "ecb(tea)",
1262 .test = alg_test_cipher, 1356 .test = alg_test_skcipher,
1263 .suite = { 1357 .suite = {
1264 .cipher = { 1358 .cipher = {
1265 .enc = { 1359 .enc = {
@@ -1274,7 +1368,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1274 } 1368 }
1275 }, { 1369 }, {
1276 .alg = "ecb(tnepres)", 1370 .alg = "ecb(tnepres)",
1277 .test = alg_test_cipher, 1371 .test = alg_test_skcipher,
1278 .suite = { 1372 .suite = {
1279 .cipher = { 1373 .cipher = {
1280 .enc = { 1374 .enc = {
@@ -1289,7 +1383,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1289 } 1383 }
1290 }, { 1384 }, {
1291 .alg = "ecb(twofish)", 1385 .alg = "ecb(twofish)",
1292 .test = alg_test_cipher, 1386 .test = alg_test_skcipher,
1293 .suite = { 1387 .suite = {
1294 .cipher = { 1388 .cipher = {
1295 .enc = { 1389 .enc = {
@@ -1304,7 +1398,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1304 } 1398 }
1305 }, { 1399 }, {
1306 .alg = "ecb(xeta)", 1400 .alg = "ecb(xeta)",
1307 .test = alg_test_cipher, 1401 .test = alg_test_skcipher,
1308 .suite = { 1402 .suite = {
1309 .cipher = { 1403 .cipher = {
1310 .enc = { 1404 .enc = {
@@ -1319,7 +1413,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1319 } 1413 }
1320 }, { 1414 }, {
1321 .alg = "ecb(xtea)", 1415 .alg = "ecb(xtea)",
1322 .test = alg_test_cipher, 1416 .test = alg_test_skcipher,
1323 .suite = { 1417 .suite = {
1324 .cipher = { 1418 .cipher = {
1325 .enc = { 1419 .enc = {
@@ -1421,7 +1515,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1421 } 1515 }
1422 }, { 1516 }, {
1423 .alg = "lrw(aes)", 1517 .alg = "lrw(aes)",
1424 .test = alg_test_cipher, 1518 .test = alg_test_skcipher,
1425 .suite = { 1519 .suite = {
1426 .cipher = { 1520 .cipher = {
1427 .enc = { 1521 .enc = {
@@ -1478,7 +1572,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1478 } 1572 }
1479 }, { 1573 }, {
1480 .alg = "pcbc(fcrypt)", 1574 .alg = "pcbc(fcrypt)",
1481 .test = alg_test_cipher, 1575 .test = alg_test_skcipher,
1482 .suite = { 1576 .suite = {
1483 .cipher = { 1577 .cipher = {
1484 .enc = { 1578 .enc = {
@@ -1493,7 +1587,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1493 } 1587 }
1494 }, { 1588 }, {
1495 .alg = "rfc3686(ctr(aes))", 1589 .alg = "rfc3686(ctr(aes))",
1496 .test = alg_test_cipher, 1590 .test = alg_test_skcipher,
1497 .suite = { 1591 .suite = {
1498 .cipher = { 1592 .cipher = {
1499 .enc = { 1593 .enc = {
@@ -1544,7 +1638,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1544 } 1638 }
1545 }, { 1639 }, {
1546 .alg = "salsa20", 1640 .alg = "salsa20",
1547 .test = alg_test_cipher, 1641 .test = alg_test_skcipher,
1548 .suite = { 1642 .suite = {
1549 .cipher = { 1643 .cipher = {
1550 .enc = { 1644 .enc = {
@@ -1663,7 +1757,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1663 } 1757 }
1664 }, { 1758 }, {
1665 .alg = "xts(aes)", 1759 .alg = "xts(aes)",
1666 .test = alg_test_cipher, 1760 .test = alg_test_skcipher,
1667 .suite = { 1761 .suite = {
1668 .cipher = { 1762 .cipher = {
1669 .enc = { 1763 .enc = {
@@ -1679,7 +1773,7 @@ static const struct alg_test_desc alg_test_descs[] = {
1679 } 1773 }
1680}; 1774};
1681 1775
1682int alg_test(const char *driver, const char *alg, u32 type, u32 mask) 1776static int alg_find_test(const char *alg)
1683{ 1777{
1684 int start = 0; 1778 int start = 0;
1685 int end = ARRAY_SIZE(alg_test_descs); 1779 int end = ARRAY_SIZE(alg_test_descs);
@@ -1698,10 +1792,38 @@ int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
1698 continue; 1792 continue;
1699 } 1793 }
1700 1794
1701 return alg_test_descs[i].test(alg_test_descs + i, driver, 1795 return i;
1702 type, mask); 1796 }
1797
1798 return -1;
1799}
1800
1801int alg_test(const char *driver, const char *alg, u32 type, u32 mask)
1802{
1803 int i;
1804
1805 if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) {
1806 char nalg[CRYPTO_MAX_ALG_NAME];
1807
1808 if (snprintf(nalg, sizeof(nalg), "ecb(%s)", alg) >=
1809 sizeof(nalg))
1810 return -ENAMETOOLONG;
1811
1812 i = alg_find_test(nalg);
1813 if (i < 0)
1814 goto notest;
1815
1816 return alg_test_cipher(alg_test_descs + i, driver, type, mask);
1703 } 1817 }
1704 1818
1819 i = alg_find_test(alg);
1820 if (i < 0)
1821 goto notest;
1822
1823 return alg_test_descs[i].test(alg_test_descs + i, driver,
1824 type, mask);
1825
1826notest:
1705 printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver); 1827 printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver);
1706 return 0; 1828 return 0;
1707} 1829}