1da7f033dSHerbert Xu /* 2da7f033dSHerbert Xu * Algorithm testing framework and tests. 3da7f033dSHerbert Xu * 4da7f033dSHerbert Xu * Copyright (c) 2002 James Morris <jmorris@intercode.com.au> 5da7f033dSHerbert Xu * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org> 6da7f033dSHerbert Xu * Copyright (c) 2007 Nokia Siemens Networks 7da7f033dSHerbert Xu * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au> 8da7f033dSHerbert Xu * 969435b94SAdrian Hoban * Updated RFC4106 AES-GCM testing. 1069435b94SAdrian Hoban * Authors: Aidan O'Mahony (aidan.o.mahony@intel.com) 1169435b94SAdrian Hoban * Adrian Hoban <adrian.hoban@intel.com> 1269435b94SAdrian Hoban * Gabriele Paoloni <gabriele.paoloni@intel.com> 1369435b94SAdrian Hoban * Tadeusz Struk (tadeusz.struk@intel.com) 1469435b94SAdrian Hoban * Copyright (c) 2010, Intel Corporation. 1569435b94SAdrian Hoban * 16da7f033dSHerbert Xu * This program is free software; you can redistribute it and/or modify it 17da7f033dSHerbert Xu * under the terms of the GNU General Public License as published by the Free 18da7f033dSHerbert Xu * Software Foundation; either version 2 of the License, or (at your option) 19da7f033dSHerbert Xu * any later version. 20da7f033dSHerbert Xu * 21da7f033dSHerbert Xu */ 22da7f033dSHerbert Xu 23da7f033dSHerbert Xu #include <crypto/hash.h> 24da7f033dSHerbert Xu #include <linux/err.h> 25da7f033dSHerbert Xu #include <linux/module.h> 26da7f033dSHerbert Xu #include <linux/scatterlist.h> 27da7f033dSHerbert Xu #include <linux/slab.h> 28da7f033dSHerbert Xu #include <linux/string.h> 297647d6ceSJarod Wilson #include <crypto/rng.h> 30da7f033dSHerbert Xu 31da7f033dSHerbert Xu #include "internal.h" 320b767f96SAlexander Shishkin 33326a6346SHerbert Xu #ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS 340b767f96SAlexander Shishkin 350b767f96SAlexander Shishkin /* a perfect nop */ 360b767f96SAlexander Shishkin int alg_test(const char *driver, const char *alg, u32 type, u32 mask) 370b767f96SAlexander Shishkin { 380b767f96SAlexander Shishkin return 0; 390b767f96SAlexander Shishkin } 400b767f96SAlexander Shishkin 410b767f96SAlexander Shishkin #else 420b767f96SAlexander Shishkin 43da7f033dSHerbert Xu #include "testmgr.h" 44da7f033dSHerbert Xu 45da7f033dSHerbert Xu /* 46da7f033dSHerbert Xu * Need slab memory for testing (size in number of pages). 47da7f033dSHerbert Xu */ 48da7f033dSHerbert Xu #define XBUFSIZE 8 49da7f033dSHerbert Xu 50da7f033dSHerbert Xu /* 51da7f033dSHerbert Xu * Indexes into the xbuf to simulate cross-page access. 52da7f033dSHerbert Xu */ 53da7f033dSHerbert Xu #define IDX1 32 54da7f033dSHerbert Xu #define IDX2 32400 55da7f033dSHerbert Xu #define IDX3 1 56da7f033dSHerbert Xu #define IDX4 8193 57da7f033dSHerbert Xu #define IDX5 22222 58da7f033dSHerbert Xu #define IDX6 17101 59da7f033dSHerbert Xu #define IDX7 27333 60da7f033dSHerbert Xu #define IDX8 3000 61da7f033dSHerbert Xu 62da7f033dSHerbert Xu /* 63da7f033dSHerbert Xu * Used by test_cipher() 64da7f033dSHerbert Xu */ 65da7f033dSHerbert Xu #define ENCRYPT 1 66da7f033dSHerbert Xu #define DECRYPT 0 67da7f033dSHerbert Xu 68da7f033dSHerbert Xu struct tcrypt_result { 69da7f033dSHerbert Xu struct completion completion; 70da7f033dSHerbert Xu int err; 71da7f033dSHerbert Xu }; 72da7f033dSHerbert Xu 73da7f033dSHerbert Xu struct aead_test_suite { 74da7f033dSHerbert Xu struct { 75da7f033dSHerbert Xu struct aead_testvec *vecs; 76da7f033dSHerbert Xu unsigned int count; 77da7f033dSHerbert Xu } enc, dec; 78da7f033dSHerbert Xu }; 79da7f033dSHerbert Xu 80da7f033dSHerbert Xu struct cipher_test_suite { 81da7f033dSHerbert Xu struct { 82da7f033dSHerbert Xu struct cipher_testvec *vecs; 83da7f033dSHerbert Xu unsigned int count; 84da7f033dSHerbert Xu } enc, dec; 85da7f033dSHerbert Xu }; 86da7f033dSHerbert Xu 87da7f033dSHerbert Xu struct comp_test_suite { 88da7f033dSHerbert Xu struct { 89da7f033dSHerbert Xu struct comp_testvec *vecs; 90da7f033dSHerbert Xu unsigned int count; 91da7f033dSHerbert Xu } comp, decomp; 92da7f033dSHerbert Xu }; 93da7f033dSHerbert Xu 948064efb8SGeert Uytterhoeven struct pcomp_test_suite { 958064efb8SGeert Uytterhoeven struct { 968064efb8SGeert Uytterhoeven struct pcomp_testvec *vecs; 978064efb8SGeert Uytterhoeven unsigned int count; 988064efb8SGeert Uytterhoeven } comp, decomp; 998064efb8SGeert Uytterhoeven }; 1008064efb8SGeert Uytterhoeven 101da7f033dSHerbert Xu struct hash_test_suite { 102da7f033dSHerbert Xu struct hash_testvec *vecs; 103da7f033dSHerbert Xu unsigned int count; 104da7f033dSHerbert Xu }; 105da7f033dSHerbert Xu 1067647d6ceSJarod Wilson struct cprng_test_suite { 1077647d6ceSJarod Wilson struct cprng_testvec *vecs; 1087647d6ceSJarod Wilson unsigned int count; 1097647d6ceSJarod Wilson }; 1107647d6ceSJarod Wilson 111da7f033dSHerbert Xu struct alg_test_desc { 112da7f033dSHerbert Xu const char *alg; 113da7f033dSHerbert Xu int (*test)(const struct alg_test_desc *desc, const char *driver, 114da7f033dSHerbert Xu u32 type, u32 mask); 115a1915d51SJarod Wilson int fips_allowed; /* set if alg is allowed in fips mode */ 116da7f033dSHerbert Xu 117da7f033dSHerbert Xu union { 118da7f033dSHerbert Xu struct aead_test_suite aead; 119da7f033dSHerbert Xu struct cipher_test_suite cipher; 120da7f033dSHerbert Xu struct comp_test_suite comp; 1218064efb8SGeert Uytterhoeven struct pcomp_test_suite pcomp; 122da7f033dSHerbert Xu struct hash_test_suite hash; 1237647d6ceSJarod Wilson struct cprng_test_suite cprng; 124da7f033dSHerbert Xu } suite; 125da7f033dSHerbert Xu }; 126da7f033dSHerbert Xu 127da7f033dSHerbert Xu static unsigned int IDX[8] = { IDX1, IDX2, IDX3, IDX4, IDX5, IDX6, IDX7, IDX8 }; 128da7f033dSHerbert Xu 129da7f033dSHerbert Xu static void hexdump(unsigned char *buf, unsigned int len) 130da7f033dSHerbert Xu { 131da7f033dSHerbert Xu print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET, 132da7f033dSHerbert Xu 16, 1, 133da7f033dSHerbert Xu buf, len, false); 134da7f033dSHerbert Xu } 135da7f033dSHerbert Xu 136da7f033dSHerbert Xu static void tcrypt_complete(struct crypto_async_request *req, int err) 137da7f033dSHerbert Xu { 138da7f033dSHerbert Xu struct tcrypt_result *res = req->data; 139da7f033dSHerbert Xu 140da7f033dSHerbert Xu if (err == -EINPROGRESS) 141da7f033dSHerbert Xu return; 142da7f033dSHerbert Xu 143da7f033dSHerbert Xu res->err = err; 144da7f033dSHerbert Xu complete(&res->completion); 145da7f033dSHerbert Xu } 146da7f033dSHerbert Xu 147f8b0d4d0SHerbert Xu static int testmgr_alloc_buf(char *buf[XBUFSIZE]) 148f8b0d4d0SHerbert Xu { 149f8b0d4d0SHerbert Xu int i; 150f8b0d4d0SHerbert Xu 151f8b0d4d0SHerbert Xu for (i = 0; i < XBUFSIZE; i++) { 152f8b0d4d0SHerbert Xu buf[i] = (void *)__get_free_page(GFP_KERNEL); 153f8b0d4d0SHerbert Xu if (!buf[i]) 154f8b0d4d0SHerbert Xu goto err_free_buf; 155f8b0d4d0SHerbert Xu } 156f8b0d4d0SHerbert Xu 157f8b0d4d0SHerbert Xu return 0; 158f8b0d4d0SHerbert Xu 159f8b0d4d0SHerbert Xu err_free_buf: 160f8b0d4d0SHerbert Xu while (i-- > 0) 161f8b0d4d0SHerbert Xu free_page((unsigned long)buf[i]); 162f8b0d4d0SHerbert Xu 163f8b0d4d0SHerbert Xu return -ENOMEM; 164f8b0d4d0SHerbert Xu } 165f8b0d4d0SHerbert Xu 166f8b0d4d0SHerbert Xu static void testmgr_free_buf(char *buf[XBUFSIZE]) 167f8b0d4d0SHerbert Xu { 168f8b0d4d0SHerbert Xu int i; 169f8b0d4d0SHerbert Xu 170f8b0d4d0SHerbert Xu for (i = 0; i < XBUFSIZE; i++) 171f8b0d4d0SHerbert Xu free_page((unsigned long)buf[i]); 172f8b0d4d0SHerbert Xu } 173f8b0d4d0SHerbert Xu 174a8f1a052SDavid S. Miller static int do_one_async_hash_op(struct ahash_request *req, 175a8f1a052SDavid S. Miller struct tcrypt_result *tr, 176a8f1a052SDavid S. Miller int ret) 177a8f1a052SDavid S. Miller { 178a8f1a052SDavid S. Miller if (ret == -EINPROGRESS || ret == -EBUSY) { 179a8f1a052SDavid S. Miller ret = wait_for_completion_interruptible(&tr->completion); 180a8f1a052SDavid S. Miller if (!ret) 181a8f1a052SDavid S. Miller ret = tr->err; 182a8f1a052SDavid S. Miller INIT_COMPLETION(tr->completion); 183a8f1a052SDavid S. Miller } 184a8f1a052SDavid S. Miller return ret; 185a8f1a052SDavid S. Miller } 186a8f1a052SDavid S. Miller 187da7f033dSHerbert Xu static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template, 188a8f1a052SDavid S. Miller unsigned int tcount, bool use_digest) 189da7f033dSHerbert Xu { 190da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm)); 191da7f033dSHerbert Xu unsigned int i, j, k, temp; 192da7f033dSHerbert Xu struct scatterlist sg[8]; 193da7f033dSHerbert Xu char result[64]; 194da7f033dSHerbert Xu struct ahash_request *req; 195da7f033dSHerbert Xu struct tcrypt_result tresult; 196da7f033dSHerbert Xu void *hash_buff; 197f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 198f8b0d4d0SHerbert Xu int ret = -ENOMEM; 199f8b0d4d0SHerbert Xu 200f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 201f8b0d4d0SHerbert Xu goto out_nobuf; 202da7f033dSHerbert Xu 203da7f033dSHerbert Xu init_completion(&tresult.completion); 204da7f033dSHerbert Xu 205da7f033dSHerbert Xu req = ahash_request_alloc(tfm, GFP_KERNEL); 206da7f033dSHerbert Xu if (!req) { 207da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Failed to allocate request for " 208da7f033dSHerbert Xu "%s\n", algo); 209da7f033dSHerbert Xu goto out_noreq; 210da7f033dSHerbert Xu } 211da7f033dSHerbert Xu ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 212da7f033dSHerbert Xu tcrypt_complete, &tresult); 213da7f033dSHerbert Xu 214a0cfae59SHerbert Xu j = 0; 215da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 216a0cfae59SHerbert Xu if (template[i].np) 217a0cfae59SHerbert Xu continue; 218a0cfae59SHerbert Xu 219a0cfae59SHerbert Xu j++; 220da7f033dSHerbert Xu memset(result, 0, 64); 221da7f033dSHerbert Xu 222da7f033dSHerbert Xu hash_buff = xbuf[0]; 223da7f033dSHerbert Xu 224da7f033dSHerbert Xu memcpy(hash_buff, template[i].plaintext, template[i].psize); 225da7f033dSHerbert Xu sg_init_one(&sg[0], hash_buff, template[i].psize); 226da7f033dSHerbert Xu 227da7f033dSHerbert Xu if (template[i].ksize) { 228da7f033dSHerbert Xu crypto_ahash_clear_flags(tfm, ~0); 229da7f033dSHerbert Xu ret = crypto_ahash_setkey(tfm, template[i].key, 230da7f033dSHerbert Xu template[i].ksize); 231da7f033dSHerbert Xu if (ret) { 232da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: setkey failed on " 233a0cfae59SHerbert Xu "test %d for %s: ret=%d\n", j, algo, 234da7f033dSHerbert Xu -ret); 235da7f033dSHerbert Xu goto out; 236da7f033dSHerbert Xu } 237da7f033dSHerbert Xu } 238da7f033dSHerbert Xu 239da7f033dSHerbert Xu ahash_request_set_crypt(req, sg, result, template[i].psize); 240a8f1a052SDavid S. Miller if (use_digest) { 241a8f1a052SDavid S. Miller ret = do_one_async_hash_op(req, &tresult, 242a8f1a052SDavid S. Miller crypto_ahash_digest(req)); 243a8f1a052SDavid S. Miller if (ret) { 244a8f1a052SDavid S. Miller pr_err("alg: hash: digest failed on test %d " 245a0cfae59SHerbert Xu "for %s: ret=%d\n", j, algo, -ret); 246da7f033dSHerbert Xu goto out; 247da7f033dSHerbert Xu } 248a8f1a052SDavid S. Miller } else { 249a8f1a052SDavid S. Miller ret = do_one_async_hash_op(req, &tresult, 250a8f1a052SDavid S. Miller crypto_ahash_init(req)); 251a8f1a052SDavid S. Miller if (ret) { 252a8f1a052SDavid S. Miller pr_err("alt: hash: init failed on test %d " 253a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 254a8f1a052SDavid S. Miller goto out; 255a8f1a052SDavid S. Miller } 256a8f1a052SDavid S. Miller ret = do_one_async_hash_op(req, &tresult, 257a8f1a052SDavid S. Miller crypto_ahash_update(req)); 258a8f1a052SDavid S. Miller if (ret) { 259a8f1a052SDavid S. Miller pr_err("alt: hash: update failed on test %d " 260a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 261a8f1a052SDavid S. Miller goto out; 262a8f1a052SDavid S. Miller } 263a8f1a052SDavid S. Miller ret = do_one_async_hash_op(req, &tresult, 264a8f1a052SDavid S. Miller crypto_ahash_final(req)); 265a8f1a052SDavid S. Miller if (ret) { 266a8f1a052SDavid S. Miller pr_err("alt: hash: final failed on test %d " 267a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 268a8f1a052SDavid S. Miller goto out; 269a8f1a052SDavid S. Miller } 270a8f1a052SDavid S. Miller } 271da7f033dSHerbert Xu 272da7f033dSHerbert Xu if (memcmp(result, template[i].digest, 273da7f033dSHerbert Xu crypto_ahash_digestsize(tfm))) { 274da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Test %d failed for %s\n", 275a0cfae59SHerbert Xu j, algo); 276da7f033dSHerbert Xu hexdump(result, crypto_ahash_digestsize(tfm)); 277da7f033dSHerbert Xu ret = -EINVAL; 278da7f033dSHerbert Xu goto out; 279da7f033dSHerbert Xu } 280da7f033dSHerbert Xu } 281da7f033dSHerbert Xu 282da7f033dSHerbert Xu j = 0; 283da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 284da7f033dSHerbert Xu if (template[i].np) { 285da7f033dSHerbert Xu j++; 286da7f033dSHerbert Xu memset(result, 0, 64); 287da7f033dSHerbert Xu 288da7f033dSHerbert Xu temp = 0; 289da7f033dSHerbert Xu sg_init_table(sg, template[i].np); 290fd57f22aSHerbert Xu ret = -EINVAL; 291da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 292fd57f22aSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 293fd57f22aSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 294fd57f22aSHerbert Xu goto out; 295da7f033dSHerbert Xu sg_set_buf(&sg[k], 296da7f033dSHerbert Xu memcpy(xbuf[IDX[k] >> PAGE_SHIFT] + 297da7f033dSHerbert Xu offset_in_page(IDX[k]), 298da7f033dSHerbert Xu template[i].plaintext + temp, 299da7f033dSHerbert Xu template[i].tap[k]), 300da7f033dSHerbert Xu template[i].tap[k]); 301da7f033dSHerbert Xu temp += template[i].tap[k]; 302da7f033dSHerbert Xu } 303da7f033dSHerbert Xu 304da7f033dSHerbert Xu if (template[i].ksize) { 305da7f033dSHerbert Xu crypto_ahash_clear_flags(tfm, ~0); 306da7f033dSHerbert Xu ret = crypto_ahash_setkey(tfm, template[i].key, 307da7f033dSHerbert Xu template[i].ksize); 308da7f033dSHerbert Xu 309da7f033dSHerbert Xu if (ret) { 310da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: setkey " 311da7f033dSHerbert Xu "failed on chunking test %d " 312da7f033dSHerbert Xu "for %s: ret=%d\n", j, algo, 313da7f033dSHerbert Xu -ret); 314da7f033dSHerbert Xu goto out; 315da7f033dSHerbert Xu } 316da7f033dSHerbert Xu } 317da7f033dSHerbert Xu 318da7f033dSHerbert Xu ahash_request_set_crypt(req, sg, result, 319da7f033dSHerbert Xu template[i].psize); 320da7f033dSHerbert Xu ret = crypto_ahash_digest(req); 321da7f033dSHerbert Xu switch (ret) { 322da7f033dSHerbert Xu case 0: 323da7f033dSHerbert Xu break; 324da7f033dSHerbert Xu case -EINPROGRESS: 325da7f033dSHerbert Xu case -EBUSY: 326da7f033dSHerbert Xu ret = wait_for_completion_interruptible( 327da7f033dSHerbert Xu &tresult.completion); 328da7f033dSHerbert Xu if (!ret && !(ret = tresult.err)) { 329da7f033dSHerbert Xu INIT_COMPLETION(tresult.completion); 330da7f033dSHerbert Xu break; 331da7f033dSHerbert Xu } 332da7f033dSHerbert Xu /* fall through */ 333da7f033dSHerbert Xu default: 334da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: digest failed " 335da7f033dSHerbert Xu "on chunking test %d for %s: " 336da7f033dSHerbert Xu "ret=%d\n", j, algo, -ret); 337da7f033dSHerbert Xu goto out; 338da7f033dSHerbert Xu } 339da7f033dSHerbert Xu 340da7f033dSHerbert Xu if (memcmp(result, template[i].digest, 341da7f033dSHerbert Xu crypto_ahash_digestsize(tfm))) { 342da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Chunking test %d " 343da7f033dSHerbert Xu "failed for %s\n", j, algo); 344da7f033dSHerbert Xu hexdump(result, crypto_ahash_digestsize(tfm)); 345da7f033dSHerbert Xu ret = -EINVAL; 346da7f033dSHerbert Xu goto out; 347da7f033dSHerbert Xu } 348da7f033dSHerbert Xu } 349da7f033dSHerbert Xu } 350da7f033dSHerbert Xu 351da7f033dSHerbert Xu ret = 0; 352da7f033dSHerbert Xu 353da7f033dSHerbert Xu out: 354da7f033dSHerbert Xu ahash_request_free(req); 355da7f033dSHerbert Xu out_noreq: 356f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 357f8b0d4d0SHerbert Xu out_nobuf: 358da7f033dSHerbert Xu return ret; 359da7f033dSHerbert Xu } 360da7f033dSHerbert Xu 361da7f033dSHerbert Xu static int test_aead(struct crypto_aead *tfm, int enc, 362da7f033dSHerbert Xu struct aead_testvec *template, unsigned int tcount) 363da7f033dSHerbert Xu { 364da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)); 365da7f033dSHerbert Xu unsigned int i, j, k, n, temp; 366f8b0d4d0SHerbert Xu int ret = -ENOMEM; 367da7f033dSHerbert Xu char *q; 368da7f033dSHerbert Xu char *key; 369da7f033dSHerbert Xu struct aead_request *req; 370da7f033dSHerbert Xu struct scatterlist sg[8]; 371da7f033dSHerbert Xu struct scatterlist asg[8]; 372da7f033dSHerbert Xu const char *e; 373da7f033dSHerbert Xu struct tcrypt_result result; 374da7f033dSHerbert Xu unsigned int authsize; 375da7f033dSHerbert Xu void *input; 376da7f033dSHerbert Xu void *assoc; 377da7f033dSHerbert Xu char iv[MAX_IVLEN]; 378f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 379f8b0d4d0SHerbert Xu char *axbuf[XBUFSIZE]; 380f8b0d4d0SHerbert Xu 381f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 382f8b0d4d0SHerbert Xu goto out_noxbuf; 383f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(axbuf)) 384f8b0d4d0SHerbert Xu goto out_noaxbuf; 385da7f033dSHerbert Xu 386da7f033dSHerbert Xu if (enc == ENCRYPT) 387da7f033dSHerbert Xu e = "encryption"; 388da7f033dSHerbert Xu else 389da7f033dSHerbert Xu e = "decryption"; 390da7f033dSHerbert Xu 391da7f033dSHerbert Xu init_completion(&result.completion); 392da7f033dSHerbert Xu 393da7f033dSHerbert Xu req = aead_request_alloc(tfm, GFP_KERNEL); 394da7f033dSHerbert Xu if (!req) { 395da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Failed to allocate request for " 396da7f033dSHerbert Xu "%s\n", algo); 397da7f033dSHerbert Xu goto out; 398da7f033dSHerbert Xu } 399da7f033dSHerbert Xu 400da7f033dSHerbert Xu aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 401da7f033dSHerbert Xu tcrypt_complete, &result); 402da7f033dSHerbert Xu 403da7f033dSHerbert Xu for (i = 0, j = 0; i < tcount; i++) { 404da7f033dSHerbert Xu if (!template[i].np) { 405da7f033dSHerbert Xu j++; 406da7f033dSHerbert Xu 407da7f033dSHerbert Xu /* some tepmplates have no input data but they will 408da7f033dSHerbert Xu * touch input 409da7f033dSHerbert Xu */ 410da7f033dSHerbert Xu input = xbuf[0]; 411da7f033dSHerbert Xu assoc = axbuf[0]; 412da7f033dSHerbert Xu 413fd57f22aSHerbert Xu ret = -EINVAL; 414fd57f22aSHerbert Xu if (WARN_ON(template[i].ilen > PAGE_SIZE || 415fd57f22aSHerbert Xu template[i].alen > PAGE_SIZE)) 416fd57f22aSHerbert Xu goto out; 417fd57f22aSHerbert Xu 418da7f033dSHerbert Xu memcpy(input, template[i].input, template[i].ilen); 419da7f033dSHerbert Xu memcpy(assoc, template[i].assoc, template[i].alen); 420da7f033dSHerbert Xu if (template[i].iv) 421da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 422da7f033dSHerbert Xu else 423da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 424da7f033dSHerbert Xu 425da7f033dSHerbert Xu crypto_aead_clear_flags(tfm, ~0); 426da7f033dSHerbert Xu if (template[i].wk) 427da7f033dSHerbert Xu crypto_aead_set_flags( 428da7f033dSHerbert Xu tfm, CRYPTO_TFM_REQ_WEAK_KEY); 429da7f033dSHerbert Xu 430da7f033dSHerbert Xu key = template[i].key; 431da7f033dSHerbert Xu 432da7f033dSHerbert Xu ret = crypto_aead_setkey(tfm, key, 433da7f033dSHerbert Xu template[i].klen); 434da7f033dSHerbert Xu if (!ret == template[i].fail) { 435da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: setkey failed on " 436da7f033dSHerbert Xu "test %d for %s: flags=%x\n", j, algo, 437da7f033dSHerbert Xu crypto_aead_get_flags(tfm)); 438da7f033dSHerbert Xu goto out; 439da7f033dSHerbert Xu } else if (ret) 440da7f033dSHerbert Xu continue; 441da7f033dSHerbert Xu 442da7f033dSHerbert Xu authsize = abs(template[i].rlen - template[i].ilen); 443da7f033dSHerbert Xu ret = crypto_aead_setauthsize(tfm, authsize); 444da7f033dSHerbert Xu if (ret) { 445da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Failed to set " 446da7f033dSHerbert Xu "authsize to %u on test %d for %s\n", 447da7f033dSHerbert Xu authsize, j, algo); 448da7f033dSHerbert Xu goto out; 449da7f033dSHerbert Xu } 450da7f033dSHerbert Xu 451da7f033dSHerbert Xu sg_init_one(&sg[0], input, 452da7f033dSHerbert Xu template[i].ilen + (enc ? authsize : 0)); 453da7f033dSHerbert Xu 454da7f033dSHerbert Xu sg_init_one(&asg[0], assoc, template[i].alen); 455da7f033dSHerbert Xu 456da7f033dSHerbert Xu aead_request_set_crypt(req, sg, sg, 457da7f033dSHerbert Xu template[i].ilen, iv); 458da7f033dSHerbert Xu 459da7f033dSHerbert Xu aead_request_set_assoc(req, asg, template[i].alen); 460da7f033dSHerbert Xu 461da7f033dSHerbert Xu ret = enc ? 462da7f033dSHerbert Xu crypto_aead_encrypt(req) : 463da7f033dSHerbert Xu crypto_aead_decrypt(req); 464da7f033dSHerbert Xu 465da7f033dSHerbert Xu switch (ret) { 466da7f033dSHerbert Xu case 0: 467e44a1b44SJarod Wilson if (template[i].novrfy) { 468e44a1b44SJarod Wilson /* verification was supposed to fail */ 469e44a1b44SJarod Wilson printk(KERN_ERR "alg: aead: %s failed " 470e44a1b44SJarod Wilson "on test %d for %s: ret was 0, " 471e44a1b44SJarod Wilson "expected -EBADMSG\n", 472e44a1b44SJarod Wilson e, j, algo); 473e44a1b44SJarod Wilson /* so really, we got a bad message */ 474e44a1b44SJarod Wilson ret = -EBADMSG; 475e44a1b44SJarod Wilson goto out; 476e44a1b44SJarod Wilson } 477da7f033dSHerbert Xu break; 478da7f033dSHerbert Xu case -EINPROGRESS: 479da7f033dSHerbert Xu case -EBUSY: 480da7f033dSHerbert Xu ret = wait_for_completion_interruptible( 481da7f033dSHerbert Xu &result.completion); 482da7f033dSHerbert Xu if (!ret && !(ret = result.err)) { 483da7f033dSHerbert Xu INIT_COMPLETION(result.completion); 484da7f033dSHerbert Xu break; 485da7f033dSHerbert Xu } 486e44a1b44SJarod Wilson case -EBADMSG: 487e44a1b44SJarod Wilson if (template[i].novrfy) 488e44a1b44SJarod Wilson /* verification failure was expected */ 489e44a1b44SJarod Wilson continue; 490da7f033dSHerbert Xu /* fall through */ 491da7f033dSHerbert Xu default: 492da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: %s failed on test " 493da7f033dSHerbert Xu "%d for %s: ret=%d\n", e, j, algo, -ret); 494da7f033dSHerbert Xu goto out; 495da7f033dSHerbert Xu } 496da7f033dSHerbert Xu 497da7f033dSHerbert Xu q = input; 498da7f033dSHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 499da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Test %d failed on " 500da7f033dSHerbert Xu "%s for %s\n", j, e, algo); 501da7f033dSHerbert Xu hexdump(q, template[i].rlen); 502da7f033dSHerbert Xu ret = -EINVAL; 503da7f033dSHerbert Xu goto out; 504da7f033dSHerbert Xu } 505da7f033dSHerbert Xu } 506da7f033dSHerbert Xu } 507da7f033dSHerbert Xu 508da7f033dSHerbert Xu for (i = 0, j = 0; i < tcount; i++) { 509da7f033dSHerbert Xu if (template[i].np) { 510da7f033dSHerbert Xu j++; 511da7f033dSHerbert Xu 512da7f033dSHerbert Xu if (template[i].iv) 513da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 514da7f033dSHerbert Xu else 515da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 516da7f033dSHerbert Xu 517da7f033dSHerbert Xu crypto_aead_clear_flags(tfm, ~0); 518da7f033dSHerbert Xu if (template[i].wk) 519da7f033dSHerbert Xu crypto_aead_set_flags( 520da7f033dSHerbert Xu tfm, CRYPTO_TFM_REQ_WEAK_KEY); 521da7f033dSHerbert Xu key = template[i].key; 522da7f033dSHerbert Xu 523da7f033dSHerbert Xu ret = crypto_aead_setkey(tfm, key, template[i].klen); 524da7f033dSHerbert Xu if (!ret == template[i].fail) { 525da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: setkey failed on " 526da7f033dSHerbert Xu "chunk test %d for %s: flags=%x\n", j, 527da7f033dSHerbert Xu algo, crypto_aead_get_flags(tfm)); 528da7f033dSHerbert Xu goto out; 529da7f033dSHerbert Xu } else if (ret) 530da7f033dSHerbert Xu continue; 531da7f033dSHerbert Xu 532da7f033dSHerbert Xu authsize = abs(template[i].rlen - template[i].ilen); 533da7f033dSHerbert Xu 534da7f033dSHerbert Xu ret = -EINVAL; 535da7f033dSHerbert Xu sg_init_table(sg, template[i].np); 536da7f033dSHerbert Xu for (k = 0, temp = 0; k < template[i].np; k++) { 537da7f033dSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 538da7f033dSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 539da7f033dSHerbert Xu goto out; 540da7f033dSHerbert Xu 541da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 542da7f033dSHerbert Xu offset_in_page(IDX[k]); 543da7f033dSHerbert Xu 544da7f033dSHerbert Xu memcpy(q, template[i].input + temp, 545da7f033dSHerbert Xu template[i].tap[k]); 546da7f033dSHerbert Xu 547da7f033dSHerbert Xu n = template[i].tap[k]; 548da7f033dSHerbert Xu if (k == template[i].np - 1 && enc) 549da7f033dSHerbert Xu n += authsize; 550da7f033dSHerbert Xu if (offset_in_page(q) + n < PAGE_SIZE) 551da7f033dSHerbert Xu q[n] = 0; 552da7f033dSHerbert Xu 553da7f033dSHerbert Xu sg_set_buf(&sg[k], q, template[i].tap[k]); 554da7f033dSHerbert Xu temp += template[i].tap[k]; 555da7f033dSHerbert Xu } 556da7f033dSHerbert Xu 557da7f033dSHerbert Xu ret = crypto_aead_setauthsize(tfm, authsize); 558da7f033dSHerbert Xu if (ret) { 559da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Failed to set " 560da7f033dSHerbert Xu "authsize to %u on chunk test %d for " 561da7f033dSHerbert Xu "%s\n", authsize, j, algo); 562da7f033dSHerbert Xu goto out; 563da7f033dSHerbert Xu } 564da7f033dSHerbert Xu 565da7f033dSHerbert Xu if (enc) { 566da7f033dSHerbert Xu if (WARN_ON(sg[k - 1].offset + 567da7f033dSHerbert Xu sg[k - 1].length + authsize > 568da7f033dSHerbert Xu PAGE_SIZE)) { 569da7f033dSHerbert Xu ret = -EINVAL; 570da7f033dSHerbert Xu goto out; 571da7f033dSHerbert Xu } 572da7f033dSHerbert Xu 573da7f033dSHerbert Xu sg[k - 1].length += authsize; 574da7f033dSHerbert Xu } 575da7f033dSHerbert Xu 576da7f033dSHerbert Xu sg_init_table(asg, template[i].anp); 577fd57f22aSHerbert Xu ret = -EINVAL; 578da7f033dSHerbert Xu for (k = 0, temp = 0; k < template[i].anp; k++) { 579fd57f22aSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 580fd57f22aSHerbert Xu template[i].atap[k] > PAGE_SIZE)) 581fd57f22aSHerbert Xu goto out; 582da7f033dSHerbert Xu sg_set_buf(&asg[k], 583da7f033dSHerbert Xu memcpy(axbuf[IDX[k] >> PAGE_SHIFT] + 584da7f033dSHerbert Xu offset_in_page(IDX[k]), 585da7f033dSHerbert Xu template[i].assoc + temp, 586da7f033dSHerbert Xu template[i].atap[k]), 587da7f033dSHerbert Xu template[i].atap[k]); 588da7f033dSHerbert Xu temp += template[i].atap[k]; 589da7f033dSHerbert Xu } 590da7f033dSHerbert Xu 591da7f033dSHerbert Xu aead_request_set_crypt(req, sg, sg, 592da7f033dSHerbert Xu template[i].ilen, 593da7f033dSHerbert Xu iv); 594da7f033dSHerbert Xu 595da7f033dSHerbert Xu aead_request_set_assoc(req, asg, template[i].alen); 596da7f033dSHerbert Xu 597da7f033dSHerbert Xu ret = enc ? 598da7f033dSHerbert Xu crypto_aead_encrypt(req) : 599da7f033dSHerbert Xu crypto_aead_decrypt(req); 600da7f033dSHerbert Xu 601da7f033dSHerbert Xu switch (ret) { 602da7f033dSHerbert Xu case 0: 603e44a1b44SJarod Wilson if (template[i].novrfy) { 604e44a1b44SJarod Wilson /* verification was supposed to fail */ 605e44a1b44SJarod Wilson printk(KERN_ERR "alg: aead: %s failed " 606e44a1b44SJarod Wilson "on chunk test %d for %s: ret " 607e44a1b44SJarod Wilson "was 0, expected -EBADMSG\n", 608e44a1b44SJarod Wilson e, j, algo); 609e44a1b44SJarod Wilson /* so really, we got a bad message */ 610e44a1b44SJarod Wilson ret = -EBADMSG; 611e44a1b44SJarod Wilson goto out; 612e44a1b44SJarod Wilson } 613da7f033dSHerbert Xu break; 614da7f033dSHerbert Xu case -EINPROGRESS: 615da7f033dSHerbert Xu case -EBUSY: 616da7f033dSHerbert Xu ret = wait_for_completion_interruptible( 617da7f033dSHerbert Xu &result.completion); 618da7f033dSHerbert Xu if (!ret && !(ret = result.err)) { 619da7f033dSHerbert Xu INIT_COMPLETION(result.completion); 620da7f033dSHerbert Xu break; 621da7f033dSHerbert Xu } 622e44a1b44SJarod Wilson case -EBADMSG: 623e44a1b44SJarod Wilson if (template[i].novrfy) 624e44a1b44SJarod Wilson /* verification failure was expected */ 625e44a1b44SJarod Wilson continue; 626da7f033dSHerbert Xu /* fall through */ 627da7f033dSHerbert Xu default: 628da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: %s failed on " 629da7f033dSHerbert Xu "chunk test %d for %s: ret=%d\n", e, j, 630da7f033dSHerbert Xu algo, -ret); 631da7f033dSHerbert Xu goto out; 632da7f033dSHerbert Xu } 633da7f033dSHerbert Xu 634da7f033dSHerbert Xu ret = -EINVAL; 635da7f033dSHerbert Xu for (k = 0, temp = 0; k < template[i].np; k++) { 636da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 637da7f033dSHerbert Xu offset_in_page(IDX[k]); 638da7f033dSHerbert Xu 639da7f033dSHerbert Xu n = template[i].tap[k]; 640da7f033dSHerbert Xu if (k == template[i].np - 1) 641da7f033dSHerbert Xu n += enc ? authsize : -authsize; 642da7f033dSHerbert Xu 643da7f033dSHerbert Xu if (memcmp(q, template[i].result + temp, n)) { 644da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Chunk " 645da7f033dSHerbert Xu "test %d failed on %s at page " 646da7f033dSHerbert Xu "%u for %s\n", j, e, k, algo); 647da7f033dSHerbert Xu hexdump(q, n); 648da7f033dSHerbert Xu goto out; 649da7f033dSHerbert Xu } 650da7f033dSHerbert Xu 651da7f033dSHerbert Xu q += n; 652da7f033dSHerbert Xu if (k == template[i].np - 1 && !enc) { 653da7f033dSHerbert Xu if (memcmp(q, template[i].input + 654da7f033dSHerbert Xu temp + n, authsize)) 655da7f033dSHerbert Xu n = authsize; 656da7f033dSHerbert Xu else 657da7f033dSHerbert Xu n = 0; 658da7f033dSHerbert Xu } else { 659da7f033dSHerbert Xu for (n = 0; offset_in_page(q + n) && 660da7f033dSHerbert Xu q[n]; n++) 661da7f033dSHerbert Xu ; 662da7f033dSHerbert Xu } 663da7f033dSHerbert Xu if (n) { 664da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Result " 665da7f033dSHerbert Xu "buffer corruption in chunk " 666da7f033dSHerbert Xu "test %d on %s at page %u for " 667da7f033dSHerbert Xu "%s: %u bytes:\n", j, e, k, 668da7f033dSHerbert Xu algo, n); 669da7f033dSHerbert Xu hexdump(q, n); 670da7f033dSHerbert Xu goto out; 671da7f033dSHerbert Xu } 672da7f033dSHerbert Xu 673da7f033dSHerbert Xu temp += template[i].tap[k]; 674da7f033dSHerbert Xu } 675da7f033dSHerbert Xu } 676da7f033dSHerbert Xu } 677da7f033dSHerbert Xu 678da7f033dSHerbert Xu ret = 0; 679da7f033dSHerbert Xu 680da7f033dSHerbert Xu out: 681da7f033dSHerbert Xu aead_request_free(req); 682f8b0d4d0SHerbert Xu testmgr_free_buf(axbuf); 683f8b0d4d0SHerbert Xu out_noaxbuf: 684f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 685f8b0d4d0SHerbert Xu out_noxbuf: 686da7f033dSHerbert Xu return ret; 687da7f033dSHerbert Xu } 688da7f033dSHerbert Xu 6891aa4ecd9SHerbert Xu static int test_cipher(struct crypto_cipher *tfm, int enc, 6901aa4ecd9SHerbert Xu struct cipher_testvec *template, unsigned int tcount) 6911aa4ecd9SHerbert Xu { 6921aa4ecd9SHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_cipher_tfm(tfm)); 6931aa4ecd9SHerbert Xu unsigned int i, j, k; 6941aa4ecd9SHerbert Xu char *q; 6951aa4ecd9SHerbert Xu const char *e; 6961aa4ecd9SHerbert Xu void *data; 697f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 698f8b0d4d0SHerbert Xu int ret = -ENOMEM; 699f8b0d4d0SHerbert Xu 700f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 701f8b0d4d0SHerbert Xu goto out_nobuf; 7021aa4ecd9SHerbert Xu 7031aa4ecd9SHerbert Xu if (enc == ENCRYPT) 7041aa4ecd9SHerbert Xu e = "encryption"; 7051aa4ecd9SHerbert Xu else 7061aa4ecd9SHerbert Xu e = "decryption"; 7071aa4ecd9SHerbert Xu 7081aa4ecd9SHerbert Xu j = 0; 7091aa4ecd9SHerbert Xu for (i = 0; i < tcount; i++) { 7101aa4ecd9SHerbert Xu if (template[i].np) 7111aa4ecd9SHerbert Xu continue; 7121aa4ecd9SHerbert Xu 7131aa4ecd9SHerbert Xu j++; 7141aa4ecd9SHerbert Xu 715fd57f22aSHerbert Xu ret = -EINVAL; 716fd57f22aSHerbert Xu if (WARN_ON(template[i].ilen > PAGE_SIZE)) 717fd57f22aSHerbert Xu goto out; 718fd57f22aSHerbert Xu 7191aa4ecd9SHerbert Xu data = xbuf[0]; 7201aa4ecd9SHerbert Xu memcpy(data, template[i].input, template[i].ilen); 7211aa4ecd9SHerbert Xu 7221aa4ecd9SHerbert Xu crypto_cipher_clear_flags(tfm, ~0); 7231aa4ecd9SHerbert Xu if (template[i].wk) 7241aa4ecd9SHerbert Xu crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 7251aa4ecd9SHerbert Xu 7261aa4ecd9SHerbert Xu ret = crypto_cipher_setkey(tfm, template[i].key, 7271aa4ecd9SHerbert Xu template[i].klen); 7281aa4ecd9SHerbert Xu if (!ret == template[i].fail) { 7291aa4ecd9SHerbert Xu printk(KERN_ERR "alg: cipher: setkey failed " 7301aa4ecd9SHerbert Xu "on test %d for %s: flags=%x\n", j, 7311aa4ecd9SHerbert Xu algo, crypto_cipher_get_flags(tfm)); 7321aa4ecd9SHerbert Xu goto out; 7331aa4ecd9SHerbert Xu } else if (ret) 7341aa4ecd9SHerbert Xu continue; 7351aa4ecd9SHerbert Xu 7361aa4ecd9SHerbert Xu for (k = 0; k < template[i].ilen; 7371aa4ecd9SHerbert Xu k += crypto_cipher_blocksize(tfm)) { 7381aa4ecd9SHerbert Xu if (enc) 7391aa4ecd9SHerbert Xu crypto_cipher_encrypt_one(tfm, data + k, 7401aa4ecd9SHerbert Xu data + k); 7411aa4ecd9SHerbert Xu else 7421aa4ecd9SHerbert Xu crypto_cipher_decrypt_one(tfm, data + k, 7431aa4ecd9SHerbert Xu data + k); 7441aa4ecd9SHerbert Xu } 7451aa4ecd9SHerbert Xu 7461aa4ecd9SHerbert Xu q = data; 7471aa4ecd9SHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 7481aa4ecd9SHerbert Xu printk(KERN_ERR "alg: cipher: Test %d failed " 7491aa4ecd9SHerbert Xu "on %s for %s\n", j, e, algo); 7501aa4ecd9SHerbert Xu hexdump(q, template[i].rlen); 7511aa4ecd9SHerbert Xu ret = -EINVAL; 7521aa4ecd9SHerbert Xu goto out; 7531aa4ecd9SHerbert Xu } 7541aa4ecd9SHerbert Xu } 7551aa4ecd9SHerbert Xu 7561aa4ecd9SHerbert Xu ret = 0; 7571aa4ecd9SHerbert Xu 7581aa4ecd9SHerbert Xu out: 759f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 760f8b0d4d0SHerbert Xu out_nobuf: 7611aa4ecd9SHerbert Xu return ret; 7621aa4ecd9SHerbert Xu } 7631aa4ecd9SHerbert Xu 7641aa4ecd9SHerbert Xu static int test_skcipher(struct crypto_ablkcipher *tfm, int enc, 765da7f033dSHerbert Xu struct cipher_testvec *template, unsigned int tcount) 766da7f033dSHerbert Xu { 767da7f033dSHerbert Xu const char *algo = 768da7f033dSHerbert Xu crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm)); 769da7f033dSHerbert Xu unsigned int i, j, k, n, temp; 770da7f033dSHerbert Xu char *q; 771da7f033dSHerbert Xu struct ablkcipher_request *req; 772da7f033dSHerbert Xu struct scatterlist sg[8]; 773da7f033dSHerbert Xu const char *e; 774da7f033dSHerbert Xu struct tcrypt_result result; 775da7f033dSHerbert Xu void *data; 776da7f033dSHerbert Xu char iv[MAX_IVLEN]; 777f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 778f8b0d4d0SHerbert Xu int ret = -ENOMEM; 779f8b0d4d0SHerbert Xu 780f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 781f8b0d4d0SHerbert Xu goto out_nobuf; 782da7f033dSHerbert Xu 783da7f033dSHerbert Xu if (enc == ENCRYPT) 784da7f033dSHerbert Xu e = "encryption"; 785da7f033dSHerbert Xu else 786da7f033dSHerbert Xu e = "decryption"; 787da7f033dSHerbert Xu 788da7f033dSHerbert Xu init_completion(&result.completion); 789da7f033dSHerbert Xu 790da7f033dSHerbert Xu req = ablkcipher_request_alloc(tfm, GFP_KERNEL); 791da7f033dSHerbert Xu if (!req) { 7921aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: Failed to allocate request " 7931aa4ecd9SHerbert Xu "for %s\n", algo); 794da7f033dSHerbert Xu goto out; 795da7f033dSHerbert Xu } 796da7f033dSHerbert Xu 797da7f033dSHerbert Xu ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 798da7f033dSHerbert Xu tcrypt_complete, &result); 799da7f033dSHerbert Xu 800da7f033dSHerbert Xu j = 0; 801da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 802da7f033dSHerbert Xu if (template[i].iv) 803da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 804da7f033dSHerbert Xu else 805da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 806da7f033dSHerbert Xu 807da7f033dSHerbert Xu if (!(template[i].np)) { 808da7f033dSHerbert Xu j++; 809da7f033dSHerbert Xu 810fd57f22aSHerbert Xu ret = -EINVAL; 811fd57f22aSHerbert Xu if (WARN_ON(template[i].ilen > PAGE_SIZE)) 812fd57f22aSHerbert Xu goto out; 813fd57f22aSHerbert Xu 814da7f033dSHerbert Xu data = xbuf[0]; 815da7f033dSHerbert Xu memcpy(data, template[i].input, template[i].ilen); 816da7f033dSHerbert Xu 817da7f033dSHerbert Xu crypto_ablkcipher_clear_flags(tfm, ~0); 818da7f033dSHerbert Xu if (template[i].wk) 819da7f033dSHerbert Xu crypto_ablkcipher_set_flags( 820da7f033dSHerbert Xu tfm, CRYPTO_TFM_REQ_WEAK_KEY); 821da7f033dSHerbert Xu 822da7f033dSHerbert Xu ret = crypto_ablkcipher_setkey(tfm, template[i].key, 823da7f033dSHerbert Xu template[i].klen); 824da7f033dSHerbert Xu if (!ret == template[i].fail) { 8251aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: setkey failed " 826da7f033dSHerbert Xu "on test %d for %s: flags=%x\n", j, 827da7f033dSHerbert Xu algo, crypto_ablkcipher_get_flags(tfm)); 828da7f033dSHerbert Xu goto out; 829da7f033dSHerbert Xu } else if (ret) 830da7f033dSHerbert Xu continue; 831da7f033dSHerbert Xu 832da7f033dSHerbert Xu sg_init_one(&sg[0], data, template[i].ilen); 833da7f033dSHerbert Xu 834da7f033dSHerbert Xu ablkcipher_request_set_crypt(req, sg, sg, 835da7f033dSHerbert Xu template[i].ilen, iv); 836da7f033dSHerbert Xu ret = enc ? 837da7f033dSHerbert Xu crypto_ablkcipher_encrypt(req) : 838da7f033dSHerbert Xu crypto_ablkcipher_decrypt(req); 839da7f033dSHerbert Xu 840da7f033dSHerbert Xu switch (ret) { 841da7f033dSHerbert Xu case 0: 842da7f033dSHerbert Xu break; 843da7f033dSHerbert Xu case -EINPROGRESS: 844da7f033dSHerbert Xu case -EBUSY: 845da7f033dSHerbert Xu ret = wait_for_completion_interruptible( 846da7f033dSHerbert Xu &result.completion); 847da7f033dSHerbert Xu if (!ret && !((ret = result.err))) { 848da7f033dSHerbert Xu INIT_COMPLETION(result.completion); 849da7f033dSHerbert Xu break; 850da7f033dSHerbert Xu } 851da7f033dSHerbert Xu /* fall through */ 852da7f033dSHerbert Xu default: 8531aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: %s failed on " 854da7f033dSHerbert Xu "test %d for %s: ret=%d\n", e, j, algo, 855da7f033dSHerbert Xu -ret); 856da7f033dSHerbert Xu goto out; 857da7f033dSHerbert Xu } 858da7f033dSHerbert Xu 859da7f033dSHerbert Xu q = data; 860da7f033dSHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 8611aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: Test %d " 8621aa4ecd9SHerbert Xu "failed on %s for %s\n", j, e, algo); 863da7f033dSHerbert Xu hexdump(q, template[i].rlen); 864da7f033dSHerbert Xu ret = -EINVAL; 865da7f033dSHerbert Xu goto out; 866da7f033dSHerbert Xu } 867da7f033dSHerbert Xu } 868da7f033dSHerbert Xu } 869da7f033dSHerbert Xu 870da7f033dSHerbert Xu j = 0; 871da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 872da7f033dSHerbert Xu 873da7f033dSHerbert Xu if (template[i].iv) 874da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 875da7f033dSHerbert Xu else 876da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 877da7f033dSHerbert Xu 878da7f033dSHerbert Xu if (template[i].np) { 879da7f033dSHerbert Xu j++; 880da7f033dSHerbert Xu 881da7f033dSHerbert Xu crypto_ablkcipher_clear_flags(tfm, ~0); 882da7f033dSHerbert Xu if (template[i].wk) 883da7f033dSHerbert Xu crypto_ablkcipher_set_flags( 884da7f033dSHerbert Xu tfm, CRYPTO_TFM_REQ_WEAK_KEY); 885da7f033dSHerbert Xu 886da7f033dSHerbert Xu ret = crypto_ablkcipher_setkey(tfm, template[i].key, 887da7f033dSHerbert Xu template[i].klen); 888da7f033dSHerbert Xu if (!ret == template[i].fail) { 8891aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: setkey failed " 890da7f033dSHerbert Xu "on chunk test %d for %s: flags=%x\n", 891da7f033dSHerbert Xu j, algo, 892da7f033dSHerbert Xu crypto_ablkcipher_get_flags(tfm)); 893da7f033dSHerbert Xu goto out; 894da7f033dSHerbert Xu } else if (ret) 895da7f033dSHerbert Xu continue; 896da7f033dSHerbert Xu 897da7f033dSHerbert Xu temp = 0; 898da7f033dSHerbert Xu ret = -EINVAL; 899da7f033dSHerbert Xu sg_init_table(sg, template[i].np); 900da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 901da7f033dSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 902da7f033dSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 903da7f033dSHerbert Xu goto out; 904da7f033dSHerbert Xu 905da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 906da7f033dSHerbert Xu offset_in_page(IDX[k]); 907da7f033dSHerbert Xu 908da7f033dSHerbert Xu memcpy(q, template[i].input + temp, 909da7f033dSHerbert Xu template[i].tap[k]); 910da7f033dSHerbert Xu 911da7f033dSHerbert Xu if (offset_in_page(q) + template[i].tap[k] < 912da7f033dSHerbert Xu PAGE_SIZE) 913da7f033dSHerbert Xu q[template[i].tap[k]] = 0; 914da7f033dSHerbert Xu 915da7f033dSHerbert Xu sg_set_buf(&sg[k], q, template[i].tap[k]); 916da7f033dSHerbert Xu 917da7f033dSHerbert Xu temp += template[i].tap[k]; 918da7f033dSHerbert Xu } 919da7f033dSHerbert Xu 920da7f033dSHerbert Xu ablkcipher_request_set_crypt(req, sg, sg, 921da7f033dSHerbert Xu template[i].ilen, iv); 922da7f033dSHerbert Xu 923da7f033dSHerbert Xu ret = enc ? 924da7f033dSHerbert Xu crypto_ablkcipher_encrypt(req) : 925da7f033dSHerbert Xu crypto_ablkcipher_decrypt(req); 926da7f033dSHerbert Xu 927da7f033dSHerbert Xu switch (ret) { 928da7f033dSHerbert Xu case 0: 929da7f033dSHerbert Xu break; 930da7f033dSHerbert Xu case -EINPROGRESS: 931da7f033dSHerbert Xu case -EBUSY: 932da7f033dSHerbert Xu ret = wait_for_completion_interruptible( 933da7f033dSHerbert Xu &result.completion); 934da7f033dSHerbert Xu if (!ret && !((ret = result.err))) { 935da7f033dSHerbert Xu INIT_COMPLETION(result.completion); 936da7f033dSHerbert Xu break; 937da7f033dSHerbert Xu } 938da7f033dSHerbert Xu /* fall through */ 939da7f033dSHerbert Xu default: 9401aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: %s failed on " 941da7f033dSHerbert Xu "chunk test %d for %s: ret=%d\n", e, j, 942da7f033dSHerbert Xu algo, -ret); 943da7f033dSHerbert Xu goto out; 944da7f033dSHerbert Xu } 945da7f033dSHerbert Xu 946da7f033dSHerbert Xu temp = 0; 947da7f033dSHerbert Xu ret = -EINVAL; 948da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 949da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 950da7f033dSHerbert Xu offset_in_page(IDX[k]); 951da7f033dSHerbert Xu 952da7f033dSHerbert Xu if (memcmp(q, template[i].result + temp, 953da7f033dSHerbert Xu template[i].tap[k])) { 9541aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: Chunk " 955da7f033dSHerbert Xu "test %d failed on %s at page " 956da7f033dSHerbert Xu "%u for %s\n", j, e, k, algo); 957da7f033dSHerbert Xu hexdump(q, template[i].tap[k]); 958da7f033dSHerbert Xu goto out; 959da7f033dSHerbert Xu } 960da7f033dSHerbert Xu 961da7f033dSHerbert Xu q += template[i].tap[k]; 962da7f033dSHerbert Xu for (n = 0; offset_in_page(q + n) && q[n]; n++) 963da7f033dSHerbert Xu ; 964da7f033dSHerbert Xu if (n) { 9651aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: " 966da7f033dSHerbert Xu "Result buffer corruption in " 967da7f033dSHerbert Xu "chunk test %d on %s at page " 968da7f033dSHerbert Xu "%u for %s: %u bytes:\n", j, e, 969da7f033dSHerbert Xu k, algo, n); 970da7f033dSHerbert Xu hexdump(q, n); 971da7f033dSHerbert Xu goto out; 972da7f033dSHerbert Xu } 973da7f033dSHerbert Xu temp += template[i].tap[k]; 974da7f033dSHerbert Xu } 975da7f033dSHerbert Xu } 976da7f033dSHerbert Xu } 977da7f033dSHerbert Xu 978da7f033dSHerbert Xu ret = 0; 979da7f033dSHerbert Xu 980da7f033dSHerbert Xu out: 981da7f033dSHerbert Xu ablkcipher_request_free(req); 982f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 983f8b0d4d0SHerbert Xu out_nobuf: 984da7f033dSHerbert Xu return ret; 985da7f033dSHerbert Xu } 986da7f033dSHerbert Xu 987da7f033dSHerbert Xu static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate, 988da7f033dSHerbert Xu struct comp_testvec *dtemplate, int ctcount, int dtcount) 989da7f033dSHerbert Xu { 990da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_comp_tfm(tfm)); 991da7f033dSHerbert Xu unsigned int i; 992da7f033dSHerbert Xu char result[COMP_BUF_SIZE]; 993da7f033dSHerbert Xu int ret; 994da7f033dSHerbert Xu 995da7f033dSHerbert Xu for (i = 0; i < ctcount; i++) { 996c79cf910SGeert Uytterhoeven int ilen; 997c79cf910SGeert Uytterhoeven unsigned int dlen = COMP_BUF_SIZE; 998da7f033dSHerbert Xu 999da7f033dSHerbert Xu memset(result, 0, sizeof (result)); 1000da7f033dSHerbert Xu 1001da7f033dSHerbert Xu ilen = ctemplate[i].inlen; 1002da7f033dSHerbert Xu ret = crypto_comp_compress(tfm, ctemplate[i].input, 1003da7f033dSHerbert Xu ilen, result, &dlen); 1004da7f033dSHerbert Xu if (ret) { 1005da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: compression failed " 1006da7f033dSHerbert Xu "on test %d for %s: ret=%d\n", i + 1, algo, 1007da7f033dSHerbert Xu -ret); 1008da7f033dSHerbert Xu goto out; 1009da7f033dSHerbert Xu } 1010da7f033dSHerbert Xu 1011b812eb00SGeert Uytterhoeven if (dlen != ctemplate[i].outlen) { 1012b812eb00SGeert Uytterhoeven printk(KERN_ERR "alg: comp: Compression test %d " 1013b812eb00SGeert Uytterhoeven "failed for %s: output len = %d\n", i + 1, algo, 1014b812eb00SGeert Uytterhoeven dlen); 1015b812eb00SGeert Uytterhoeven ret = -EINVAL; 1016b812eb00SGeert Uytterhoeven goto out; 1017b812eb00SGeert Uytterhoeven } 1018b812eb00SGeert Uytterhoeven 1019da7f033dSHerbert Xu if (memcmp(result, ctemplate[i].output, dlen)) { 1020da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Compression test %d " 1021da7f033dSHerbert Xu "failed for %s\n", i + 1, algo); 1022da7f033dSHerbert Xu hexdump(result, dlen); 1023da7f033dSHerbert Xu ret = -EINVAL; 1024da7f033dSHerbert Xu goto out; 1025da7f033dSHerbert Xu } 1026da7f033dSHerbert Xu } 1027da7f033dSHerbert Xu 1028da7f033dSHerbert Xu for (i = 0; i < dtcount; i++) { 1029c79cf910SGeert Uytterhoeven int ilen; 1030c79cf910SGeert Uytterhoeven unsigned int dlen = COMP_BUF_SIZE; 1031da7f033dSHerbert Xu 1032da7f033dSHerbert Xu memset(result, 0, sizeof (result)); 1033da7f033dSHerbert Xu 1034da7f033dSHerbert Xu ilen = dtemplate[i].inlen; 1035da7f033dSHerbert Xu ret = crypto_comp_decompress(tfm, dtemplate[i].input, 1036da7f033dSHerbert Xu ilen, result, &dlen); 1037da7f033dSHerbert Xu if (ret) { 1038da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: decompression failed " 1039da7f033dSHerbert Xu "on test %d for %s: ret=%d\n", i + 1, algo, 1040da7f033dSHerbert Xu -ret); 1041da7f033dSHerbert Xu goto out; 1042da7f033dSHerbert Xu } 1043da7f033dSHerbert Xu 1044b812eb00SGeert Uytterhoeven if (dlen != dtemplate[i].outlen) { 1045b812eb00SGeert Uytterhoeven printk(KERN_ERR "alg: comp: Decompression test %d " 1046b812eb00SGeert Uytterhoeven "failed for %s: output len = %d\n", i + 1, algo, 1047b812eb00SGeert Uytterhoeven dlen); 1048b812eb00SGeert Uytterhoeven ret = -EINVAL; 1049b812eb00SGeert Uytterhoeven goto out; 1050b812eb00SGeert Uytterhoeven } 1051b812eb00SGeert Uytterhoeven 1052da7f033dSHerbert Xu if (memcmp(result, dtemplate[i].output, dlen)) { 1053da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Decompression test %d " 1054da7f033dSHerbert Xu "failed for %s\n", i + 1, algo); 1055da7f033dSHerbert Xu hexdump(result, dlen); 1056da7f033dSHerbert Xu ret = -EINVAL; 1057da7f033dSHerbert Xu goto out; 1058da7f033dSHerbert Xu } 1059da7f033dSHerbert Xu } 1060da7f033dSHerbert Xu 1061da7f033dSHerbert Xu ret = 0; 1062da7f033dSHerbert Xu 1063da7f033dSHerbert Xu out: 1064da7f033dSHerbert Xu return ret; 1065da7f033dSHerbert Xu } 1066da7f033dSHerbert Xu 10678064efb8SGeert Uytterhoeven static int test_pcomp(struct crypto_pcomp *tfm, 10688064efb8SGeert Uytterhoeven struct pcomp_testvec *ctemplate, 10698064efb8SGeert Uytterhoeven struct pcomp_testvec *dtemplate, int ctcount, 10708064efb8SGeert Uytterhoeven int dtcount) 10718064efb8SGeert Uytterhoeven { 10728064efb8SGeert Uytterhoeven const char *algo = crypto_tfm_alg_driver_name(crypto_pcomp_tfm(tfm)); 10738064efb8SGeert Uytterhoeven unsigned int i; 10748064efb8SGeert Uytterhoeven char result[COMP_BUF_SIZE]; 10753ce858cbSGeert Uytterhoeven int res; 10768064efb8SGeert Uytterhoeven 10778064efb8SGeert Uytterhoeven for (i = 0; i < ctcount; i++) { 10788064efb8SGeert Uytterhoeven struct comp_request req; 10793ce858cbSGeert Uytterhoeven unsigned int produced = 0; 10808064efb8SGeert Uytterhoeven 10813ce858cbSGeert Uytterhoeven res = crypto_compress_setup(tfm, ctemplate[i].params, 10828064efb8SGeert Uytterhoeven ctemplate[i].paramsize); 10833ce858cbSGeert Uytterhoeven if (res) { 10848064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression setup failed on test " 10853ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 10863ce858cbSGeert Uytterhoeven return res; 10878064efb8SGeert Uytterhoeven } 10888064efb8SGeert Uytterhoeven 10893ce858cbSGeert Uytterhoeven res = crypto_compress_init(tfm); 10903ce858cbSGeert Uytterhoeven if (res) { 10918064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression init failed on test " 10923ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 10933ce858cbSGeert Uytterhoeven return res; 10948064efb8SGeert Uytterhoeven } 10958064efb8SGeert Uytterhoeven 10968064efb8SGeert Uytterhoeven memset(result, 0, sizeof(result)); 10978064efb8SGeert Uytterhoeven 10988064efb8SGeert Uytterhoeven req.next_in = ctemplate[i].input; 10998064efb8SGeert Uytterhoeven req.avail_in = ctemplate[i].inlen / 2; 11008064efb8SGeert Uytterhoeven req.next_out = result; 11018064efb8SGeert Uytterhoeven req.avail_out = ctemplate[i].outlen / 2; 11028064efb8SGeert Uytterhoeven 11033ce858cbSGeert Uytterhoeven res = crypto_compress_update(tfm, &req); 11043ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 11058064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression update failed on test " 11063ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 11073ce858cbSGeert Uytterhoeven return res; 11088064efb8SGeert Uytterhoeven } 11093ce858cbSGeert Uytterhoeven if (res > 0) 11103ce858cbSGeert Uytterhoeven produced += res; 11118064efb8SGeert Uytterhoeven 11128064efb8SGeert Uytterhoeven /* Add remaining input data */ 11138064efb8SGeert Uytterhoeven req.avail_in += (ctemplate[i].inlen + 1) / 2; 11148064efb8SGeert Uytterhoeven 11153ce858cbSGeert Uytterhoeven res = crypto_compress_update(tfm, &req); 11163ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 11178064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression update failed on test " 11183ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 11193ce858cbSGeert Uytterhoeven return res; 11208064efb8SGeert Uytterhoeven } 11213ce858cbSGeert Uytterhoeven if (res > 0) 11223ce858cbSGeert Uytterhoeven produced += res; 11238064efb8SGeert Uytterhoeven 11248064efb8SGeert Uytterhoeven /* Provide remaining output space */ 11258064efb8SGeert Uytterhoeven req.avail_out += COMP_BUF_SIZE - ctemplate[i].outlen / 2; 11268064efb8SGeert Uytterhoeven 11273ce858cbSGeert Uytterhoeven res = crypto_compress_final(tfm, &req); 11283ce858cbSGeert Uytterhoeven if (res < 0) { 11298064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression final failed on test " 11303ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 11313ce858cbSGeert Uytterhoeven return res; 11328064efb8SGeert Uytterhoeven } 11333ce858cbSGeert Uytterhoeven produced += res; 11348064efb8SGeert Uytterhoeven 11358064efb8SGeert Uytterhoeven if (COMP_BUF_SIZE - req.avail_out != ctemplate[i].outlen) { 11368064efb8SGeert Uytterhoeven pr_err("alg: comp: Compression test %d failed for %s: " 11378064efb8SGeert Uytterhoeven "output len = %d (expected %d)\n", i + 1, algo, 11388064efb8SGeert Uytterhoeven COMP_BUF_SIZE - req.avail_out, 11398064efb8SGeert Uytterhoeven ctemplate[i].outlen); 11408064efb8SGeert Uytterhoeven return -EINVAL; 11418064efb8SGeert Uytterhoeven } 11428064efb8SGeert Uytterhoeven 11433ce858cbSGeert Uytterhoeven if (produced != ctemplate[i].outlen) { 11443ce858cbSGeert Uytterhoeven pr_err("alg: comp: Compression test %d failed for %s: " 11453ce858cbSGeert Uytterhoeven "returned len = %u (expected %d)\n", i + 1, 11463ce858cbSGeert Uytterhoeven algo, produced, ctemplate[i].outlen); 11473ce858cbSGeert Uytterhoeven return -EINVAL; 11483ce858cbSGeert Uytterhoeven } 11493ce858cbSGeert Uytterhoeven 11508064efb8SGeert Uytterhoeven if (memcmp(result, ctemplate[i].output, ctemplate[i].outlen)) { 11518064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Compression test %d failed for " 11528064efb8SGeert Uytterhoeven "%s\n", i + 1, algo); 11538064efb8SGeert Uytterhoeven hexdump(result, ctemplate[i].outlen); 11548064efb8SGeert Uytterhoeven return -EINVAL; 11558064efb8SGeert Uytterhoeven } 11568064efb8SGeert Uytterhoeven } 11578064efb8SGeert Uytterhoeven 11588064efb8SGeert Uytterhoeven for (i = 0; i < dtcount; i++) { 11598064efb8SGeert Uytterhoeven struct comp_request req; 11603ce858cbSGeert Uytterhoeven unsigned int produced = 0; 11618064efb8SGeert Uytterhoeven 11623ce858cbSGeert Uytterhoeven res = crypto_decompress_setup(tfm, dtemplate[i].params, 11638064efb8SGeert Uytterhoeven dtemplate[i].paramsize); 11643ce858cbSGeert Uytterhoeven if (res) { 11658064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression setup failed on " 11663ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 11673ce858cbSGeert Uytterhoeven return res; 11688064efb8SGeert Uytterhoeven } 11698064efb8SGeert Uytterhoeven 11703ce858cbSGeert Uytterhoeven res = crypto_decompress_init(tfm); 11713ce858cbSGeert Uytterhoeven if (res) { 11728064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression init failed on test " 11733ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 11743ce858cbSGeert Uytterhoeven return res; 11758064efb8SGeert Uytterhoeven } 11768064efb8SGeert Uytterhoeven 11778064efb8SGeert Uytterhoeven memset(result, 0, sizeof(result)); 11788064efb8SGeert Uytterhoeven 11798064efb8SGeert Uytterhoeven req.next_in = dtemplate[i].input; 11808064efb8SGeert Uytterhoeven req.avail_in = dtemplate[i].inlen / 2; 11818064efb8SGeert Uytterhoeven req.next_out = result; 11828064efb8SGeert Uytterhoeven req.avail_out = dtemplate[i].outlen / 2; 11838064efb8SGeert Uytterhoeven 11843ce858cbSGeert Uytterhoeven res = crypto_decompress_update(tfm, &req); 11853ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 11868064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression update failed on " 11873ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 11883ce858cbSGeert Uytterhoeven return res; 11898064efb8SGeert Uytterhoeven } 11903ce858cbSGeert Uytterhoeven if (res > 0) 11913ce858cbSGeert Uytterhoeven produced += res; 11928064efb8SGeert Uytterhoeven 11938064efb8SGeert Uytterhoeven /* Add remaining input data */ 11948064efb8SGeert Uytterhoeven req.avail_in += (dtemplate[i].inlen + 1) / 2; 11958064efb8SGeert Uytterhoeven 11963ce858cbSGeert Uytterhoeven res = crypto_decompress_update(tfm, &req); 11973ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 11988064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression update failed on " 11993ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 12003ce858cbSGeert Uytterhoeven return res; 12018064efb8SGeert Uytterhoeven } 12023ce858cbSGeert Uytterhoeven if (res > 0) 12033ce858cbSGeert Uytterhoeven produced += res; 12048064efb8SGeert Uytterhoeven 12058064efb8SGeert Uytterhoeven /* Provide remaining output space */ 12068064efb8SGeert Uytterhoeven req.avail_out += COMP_BUF_SIZE - dtemplate[i].outlen / 2; 12078064efb8SGeert Uytterhoeven 12083ce858cbSGeert Uytterhoeven res = crypto_decompress_final(tfm, &req); 12093ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 12108064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression final failed on " 12113ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 12123ce858cbSGeert Uytterhoeven return res; 12138064efb8SGeert Uytterhoeven } 12143ce858cbSGeert Uytterhoeven if (res > 0) 12153ce858cbSGeert Uytterhoeven produced += res; 12168064efb8SGeert Uytterhoeven 12178064efb8SGeert Uytterhoeven if (COMP_BUF_SIZE - req.avail_out != dtemplate[i].outlen) { 12188064efb8SGeert Uytterhoeven pr_err("alg: comp: Decompression test %d failed for " 12198064efb8SGeert Uytterhoeven "%s: output len = %d (expected %d)\n", i + 1, 12208064efb8SGeert Uytterhoeven algo, COMP_BUF_SIZE - req.avail_out, 12218064efb8SGeert Uytterhoeven dtemplate[i].outlen); 12228064efb8SGeert Uytterhoeven return -EINVAL; 12238064efb8SGeert Uytterhoeven } 12248064efb8SGeert Uytterhoeven 12253ce858cbSGeert Uytterhoeven if (produced != dtemplate[i].outlen) { 12263ce858cbSGeert Uytterhoeven pr_err("alg: comp: Decompression test %d failed for " 12273ce858cbSGeert Uytterhoeven "%s: returned len = %u (expected %d)\n", i + 1, 12283ce858cbSGeert Uytterhoeven algo, produced, dtemplate[i].outlen); 12293ce858cbSGeert Uytterhoeven return -EINVAL; 12303ce858cbSGeert Uytterhoeven } 12313ce858cbSGeert Uytterhoeven 12328064efb8SGeert Uytterhoeven if (memcmp(result, dtemplate[i].output, dtemplate[i].outlen)) { 12338064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Decompression test %d failed for " 12348064efb8SGeert Uytterhoeven "%s\n", i + 1, algo); 12358064efb8SGeert Uytterhoeven hexdump(result, dtemplate[i].outlen); 12368064efb8SGeert Uytterhoeven return -EINVAL; 12378064efb8SGeert Uytterhoeven } 12388064efb8SGeert Uytterhoeven } 12398064efb8SGeert Uytterhoeven 12408064efb8SGeert Uytterhoeven return 0; 12418064efb8SGeert Uytterhoeven } 12428064efb8SGeert Uytterhoeven 12437647d6ceSJarod Wilson 12447647d6ceSJarod Wilson static int test_cprng(struct crypto_rng *tfm, struct cprng_testvec *template, 12457647d6ceSJarod Wilson unsigned int tcount) 12467647d6ceSJarod Wilson { 12477647d6ceSJarod Wilson const char *algo = crypto_tfm_alg_driver_name(crypto_rng_tfm(tfm)); 1248fa4ef8a6SFelipe Contreras int err = 0, i, j, seedsize; 12497647d6ceSJarod Wilson u8 *seed; 12507647d6ceSJarod Wilson char result[32]; 12517647d6ceSJarod Wilson 12527647d6ceSJarod Wilson seedsize = crypto_rng_seedsize(tfm); 12537647d6ceSJarod Wilson 12547647d6ceSJarod Wilson seed = kmalloc(seedsize, GFP_KERNEL); 12557647d6ceSJarod Wilson if (!seed) { 12567647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to allocate seed space " 12577647d6ceSJarod Wilson "for %s\n", algo); 12587647d6ceSJarod Wilson return -ENOMEM; 12597647d6ceSJarod Wilson } 12607647d6ceSJarod Wilson 12617647d6ceSJarod Wilson for (i = 0; i < tcount; i++) { 12627647d6ceSJarod Wilson memset(result, 0, 32); 12637647d6ceSJarod Wilson 12647647d6ceSJarod Wilson memcpy(seed, template[i].v, template[i].vlen); 12657647d6ceSJarod Wilson memcpy(seed + template[i].vlen, template[i].key, 12667647d6ceSJarod Wilson template[i].klen); 12677647d6ceSJarod Wilson memcpy(seed + template[i].vlen + template[i].klen, 12687647d6ceSJarod Wilson template[i].dt, template[i].dtlen); 12697647d6ceSJarod Wilson 12707647d6ceSJarod Wilson err = crypto_rng_reset(tfm, seed, seedsize); 12717647d6ceSJarod Wilson if (err) { 12727647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to reset rng " 12737647d6ceSJarod Wilson "for %s\n", algo); 12747647d6ceSJarod Wilson goto out; 12757647d6ceSJarod Wilson } 12767647d6ceSJarod Wilson 12777647d6ceSJarod Wilson for (j = 0; j < template[i].loops; j++) { 12787647d6ceSJarod Wilson err = crypto_rng_get_bytes(tfm, result, 12797647d6ceSJarod Wilson template[i].rlen); 12807647d6ceSJarod Wilson if (err != template[i].rlen) { 12817647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to obtain " 12827647d6ceSJarod Wilson "the correct amount of random data for " 12837647d6ceSJarod Wilson "%s (requested %d, got %d)\n", algo, 12847647d6ceSJarod Wilson template[i].rlen, err); 12857647d6ceSJarod Wilson goto out; 12867647d6ceSJarod Wilson } 12877647d6ceSJarod Wilson } 12887647d6ceSJarod Wilson 12897647d6ceSJarod Wilson err = memcmp(result, template[i].result, 12907647d6ceSJarod Wilson template[i].rlen); 12917647d6ceSJarod Wilson if (err) { 12927647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Test %d failed for %s\n", 12937647d6ceSJarod Wilson i, algo); 12947647d6ceSJarod Wilson hexdump(result, template[i].rlen); 12957647d6ceSJarod Wilson err = -EINVAL; 12967647d6ceSJarod Wilson goto out; 12977647d6ceSJarod Wilson } 12987647d6ceSJarod Wilson } 12997647d6ceSJarod Wilson 13007647d6ceSJarod Wilson out: 13017647d6ceSJarod Wilson kfree(seed); 13027647d6ceSJarod Wilson return err; 13037647d6ceSJarod Wilson } 13047647d6ceSJarod Wilson 1305da7f033dSHerbert Xu static int alg_test_aead(const struct alg_test_desc *desc, const char *driver, 1306da7f033dSHerbert Xu u32 type, u32 mask) 1307da7f033dSHerbert Xu { 1308da7f033dSHerbert Xu struct crypto_aead *tfm; 1309da7f033dSHerbert Xu int err = 0; 1310da7f033dSHerbert Xu 1311da7f033dSHerbert Xu tfm = crypto_alloc_aead(driver, type, mask); 1312da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1313da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Failed to load transform for %s: " 1314da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1315da7f033dSHerbert Xu return PTR_ERR(tfm); 1316da7f033dSHerbert Xu } 1317da7f033dSHerbert Xu 1318da7f033dSHerbert Xu if (desc->suite.aead.enc.vecs) { 1319da7f033dSHerbert Xu err = test_aead(tfm, ENCRYPT, desc->suite.aead.enc.vecs, 1320da7f033dSHerbert Xu desc->suite.aead.enc.count); 1321da7f033dSHerbert Xu if (err) 1322da7f033dSHerbert Xu goto out; 1323da7f033dSHerbert Xu } 1324da7f033dSHerbert Xu 1325da7f033dSHerbert Xu if (!err && desc->suite.aead.dec.vecs) 1326da7f033dSHerbert Xu err = test_aead(tfm, DECRYPT, desc->suite.aead.dec.vecs, 1327da7f033dSHerbert Xu desc->suite.aead.dec.count); 1328da7f033dSHerbert Xu 1329da7f033dSHerbert Xu out: 1330da7f033dSHerbert Xu crypto_free_aead(tfm); 1331da7f033dSHerbert Xu return err; 1332da7f033dSHerbert Xu } 1333da7f033dSHerbert Xu 1334da7f033dSHerbert Xu static int alg_test_cipher(const struct alg_test_desc *desc, 1335da7f033dSHerbert Xu const char *driver, u32 type, u32 mask) 1336da7f033dSHerbert Xu { 13371aa4ecd9SHerbert Xu struct crypto_cipher *tfm; 1338da7f033dSHerbert Xu int err = 0; 1339da7f033dSHerbert Xu 13401aa4ecd9SHerbert Xu tfm = crypto_alloc_cipher(driver, type, mask); 1341da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1342da7f033dSHerbert Xu printk(KERN_ERR "alg: cipher: Failed to load transform for " 1343da7f033dSHerbert Xu "%s: %ld\n", driver, PTR_ERR(tfm)); 1344da7f033dSHerbert Xu return PTR_ERR(tfm); 1345da7f033dSHerbert Xu } 1346da7f033dSHerbert Xu 1347da7f033dSHerbert Xu if (desc->suite.cipher.enc.vecs) { 1348da7f033dSHerbert Xu err = test_cipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs, 1349da7f033dSHerbert Xu desc->suite.cipher.enc.count); 1350da7f033dSHerbert Xu if (err) 1351da7f033dSHerbert Xu goto out; 1352da7f033dSHerbert Xu } 1353da7f033dSHerbert Xu 1354da7f033dSHerbert Xu if (desc->suite.cipher.dec.vecs) 1355da7f033dSHerbert Xu err = test_cipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs, 1356da7f033dSHerbert Xu desc->suite.cipher.dec.count); 1357da7f033dSHerbert Xu 1358da7f033dSHerbert Xu out: 13591aa4ecd9SHerbert Xu crypto_free_cipher(tfm); 13601aa4ecd9SHerbert Xu return err; 13611aa4ecd9SHerbert Xu } 13621aa4ecd9SHerbert Xu 13631aa4ecd9SHerbert Xu static int alg_test_skcipher(const struct alg_test_desc *desc, 13641aa4ecd9SHerbert Xu const char *driver, u32 type, u32 mask) 13651aa4ecd9SHerbert Xu { 13661aa4ecd9SHerbert Xu struct crypto_ablkcipher *tfm; 13671aa4ecd9SHerbert Xu int err = 0; 13681aa4ecd9SHerbert Xu 13691aa4ecd9SHerbert Xu tfm = crypto_alloc_ablkcipher(driver, type, mask); 13701aa4ecd9SHerbert Xu if (IS_ERR(tfm)) { 13711aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: Failed to load transform for " 13721aa4ecd9SHerbert Xu "%s: %ld\n", driver, PTR_ERR(tfm)); 13731aa4ecd9SHerbert Xu return PTR_ERR(tfm); 13741aa4ecd9SHerbert Xu } 13751aa4ecd9SHerbert Xu 13761aa4ecd9SHerbert Xu if (desc->suite.cipher.enc.vecs) { 13771aa4ecd9SHerbert Xu err = test_skcipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs, 13781aa4ecd9SHerbert Xu desc->suite.cipher.enc.count); 13791aa4ecd9SHerbert Xu if (err) 13801aa4ecd9SHerbert Xu goto out; 13811aa4ecd9SHerbert Xu } 13821aa4ecd9SHerbert Xu 13831aa4ecd9SHerbert Xu if (desc->suite.cipher.dec.vecs) 13841aa4ecd9SHerbert Xu err = test_skcipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs, 13851aa4ecd9SHerbert Xu desc->suite.cipher.dec.count); 13861aa4ecd9SHerbert Xu 13871aa4ecd9SHerbert Xu out: 1388da7f033dSHerbert Xu crypto_free_ablkcipher(tfm); 1389da7f033dSHerbert Xu return err; 1390da7f033dSHerbert Xu } 1391da7f033dSHerbert Xu 1392da7f033dSHerbert Xu static int alg_test_comp(const struct alg_test_desc *desc, const char *driver, 1393da7f033dSHerbert Xu u32 type, u32 mask) 1394da7f033dSHerbert Xu { 1395da7f033dSHerbert Xu struct crypto_comp *tfm; 1396da7f033dSHerbert Xu int err; 1397da7f033dSHerbert Xu 1398da7f033dSHerbert Xu tfm = crypto_alloc_comp(driver, type, mask); 1399da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1400da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Failed to load transform for %s: " 1401da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1402da7f033dSHerbert Xu return PTR_ERR(tfm); 1403da7f033dSHerbert Xu } 1404da7f033dSHerbert Xu 1405da7f033dSHerbert Xu err = test_comp(tfm, desc->suite.comp.comp.vecs, 1406da7f033dSHerbert Xu desc->suite.comp.decomp.vecs, 1407da7f033dSHerbert Xu desc->suite.comp.comp.count, 1408da7f033dSHerbert Xu desc->suite.comp.decomp.count); 1409da7f033dSHerbert Xu 1410da7f033dSHerbert Xu crypto_free_comp(tfm); 1411da7f033dSHerbert Xu return err; 1412da7f033dSHerbert Xu } 1413da7f033dSHerbert Xu 14148064efb8SGeert Uytterhoeven static int alg_test_pcomp(const struct alg_test_desc *desc, const char *driver, 14158064efb8SGeert Uytterhoeven u32 type, u32 mask) 14168064efb8SGeert Uytterhoeven { 14178064efb8SGeert Uytterhoeven struct crypto_pcomp *tfm; 14188064efb8SGeert Uytterhoeven int err; 14198064efb8SGeert Uytterhoeven 14208064efb8SGeert Uytterhoeven tfm = crypto_alloc_pcomp(driver, type, mask); 14218064efb8SGeert Uytterhoeven if (IS_ERR(tfm)) { 14228064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Failed to load transform for %s: %ld\n", 14238064efb8SGeert Uytterhoeven driver, PTR_ERR(tfm)); 14248064efb8SGeert Uytterhoeven return PTR_ERR(tfm); 14258064efb8SGeert Uytterhoeven } 14268064efb8SGeert Uytterhoeven 14278064efb8SGeert Uytterhoeven err = test_pcomp(tfm, desc->suite.pcomp.comp.vecs, 14288064efb8SGeert Uytterhoeven desc->suite.pcomp.decomp.vecs, 14298064efb8SGeert Uytterhoeven desc->suite.pcomp.comp.count, 14308064efb8SGeert Uytterhoeven desc->suite.pcomp.decomp.count); 14318064efb8SGeert Uytterhoeven 14328064efb8SGeert Uytterhoeven crypto_free_pcomp(tfm); 14338064efb8SGeert Uytterhoeven return err; 14348064efb8SGeert Uytterhoeven } 14358064efb8SGeert Uytterhoeven 1436da7f033dSHerbert Xu static int alg_test_hash(const struct alg_test_desc *desc, const char *driver, 1437da7f033dSHerbert Xu u32 type, u32 mask) 1438da7f033dSHerbert Xu { 1439da7f033dSHerbert Xu struct crypto_ahash *tfm; 1440da7f033dSHerbert Xu int err; 1441da7f033dSHerbert Xu 1442da7f033dSHerbert Xu tfm = crypto_alloc_ahash(driver, type, mask); 1443da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1444da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Failed to load transform for %s: " 1445da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1446da7f033dSHerbert Xu return PTR_ERR(tfm); 1447da7f033dSHerbert Xu } 1448da7f033dSHerbert Xu 1449a8f1a052SDavid S. Miller err = test_hash(tfm, desc->suite.hash.vecs, 1450a8f1a052SDavid S. Miller desc->suite.hash.count, true); 1451a8f1a052SDavid S. Miller if (!err) 1452a8f1a052SDavid S. Miller err = test_hash(tfm, desc->suite.hash.vecs, 1453a8f1a052SDavid S. Miller desc->suite.hash.count, false); 1454da7f033dSHerbert Xu 1455da7f033dSHerbert Xu crypto_free_ahash(tfm); 1456da7f033dSHerbert Xu return err; 1457da7f033dSHerbert Xu } 1458da7f033dSHerbert Xu 14598e3ee85eSHerbert Xu static int alg_test_crc32c(const struct alg_test_desc *desc, 14608e3ee85eSHerbert Xu const char *driver, u32 type, u32 mask) 14618e3ee85eSHerbert Xu { 14628e3ee85eSHerbert Xu struct crypto_shash *tfm; 14638e3ee85eSHerbert Xu u32 val; 14648e3ee85eSHerbert Xu int err; 14658e3ee85eSHerbert Xu 14668e3ee85eSHerbert Xu err = alg_test_hash(desc, driver, type, mask); 14678e3ee85eSHerbert Xu if (err) 14688e3ee85eSHerbert Xu goto out; 14698e3ee85eSHerbert Xu 14708e3ee85eSHerbert Xu tfm = crypto_alloc_shash(driver, type, mask); 14718e3ee85eSHerbert Xu if (IS_ERR(tfm)) { 14728e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Failed to load transform for %s: " 14738e3ee85eSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 14748e3ee85eSHerbert Xu err = PTR_ERR(tfm); 14758e3ee85eSHerbert Xu goto out; 14768e3ee85eSHerbert Xu } 14778e3ee85eSHerbert Xu 14788e3ee85eSHerbert Xu do { 14798e3ee85eSHerbert Xu struct { 14808e3ee85eSHerbert Xu struct shash_desc shash; 14818e3ee85eSHerbert Xu char ctx[crypto_shash_descsize(tfm)]; 14828e3ee85eSHerbert Xu } sdesc; 14838e3ee85eSHerbert Xu 14848e3ee85eSHerbert Xu sdesc.shash.tfm = tfm; 14858e3ee85eSHerbert Xu sdesc.shash.flags = 0; 14868e3ee85eSHerbert Xu 14878e3ee85eSHerbert Xu *(u32 *)sdesc.ctx = le32_to_cpu(420553207); 14888e3ee85eSHerbert Xu err = crypto_shash_final(&sdesc.shash, (u8 *)&val); 14898e3ee85eSHerbert Xu if (err) { 14908e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Operation failed for " 14918e3ee85eSHerbert Xu "%s: %d\n", driver, err); 14928e3ee85eSHerbert Xu break; 14938e3ee85eSHerbert Xu } 14948e3ee85eSHerbert Xu 14958e3ee85eSHerbert Xu if (val != ~420553207) { 14968e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Test failed for %s: " 14978e3ee85eSHerbert Xu "%d\n", driver, val); 14988e3ee85eSHerbert Xu err = -EINVAL; 14998e3ee85eSHerbert Xu } 15008e3ee85eSHerbert Xu } while (0); 15018e3ee85eSHerbert Xu 15028e3ee85eSHerbert Xu crypto_free_shash(tfm); 15038e3ee85eSHerbert Xu 15048e3ee85eSHerbert Xu out: 15058e3ee85eSHerbert Xu return err; 15068e3ee85eSHerbert Xu } 15078e3ee85eSHerbert Xu 15087647d6ceSJarod Wilson static int alg_test_cprng(const struct alg_test_desc *desc, const char *driver, 15097647d6ceSJarod Wilson u32 type, u32 mask) 15107647d6ceSJarod Wilson { 15117647d6ceSJarod Wilson struct crypto_rng *rng; 15127647d6ceSJarod Wilson int err; 15137647d6ceSJarod Wilson 15147647d6ceSJarod Wilson rng = crypto_alloc_rng(driver, type, mask); 15157647d6ceSJarod Wilson if (IS_ERR(rng)) { 15167647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to load transform for %s: " 15177647d6ceSJarod Wilson "%ld\n", driver, PTR_ERR(rng)); 15187647d6ceSJarod Wilson return PTR_ERR(rng); 15197647d6ceSJarod Wilson } 15207647d6ceSJarod Wilson 15217647d6ceSJarod Wilson err = test_cprng(rng, desc->suite.cprng.vecs, desc->suite.cprng.count); 15227647d6ceSJarod Wilson 15237647d6ceSJarod Wilson crypto_free_rng(rng); 15247647d6ceSJarod Wilson 15257647d6ceSJarod Wilson return err; 15267647d6ceSJarod Wilson } 15277647d6ceSJarod Wilson 1528863b557aSYouquan, Song static int alg_test_null(const struct alg_test_desc *desc, 1529863b557aSYouquan, Song const char *driver, u32 type, u32 mask) 1530863b557aSYouquan, Song { 1531863b557aSYouquan, Song return 0; 1532863b557aSYouquan, Song } 1533863b557aSYouquan, Song 1534da7f033dSHerbert Xu /* Please keep this list sorted by algorithm name. */ 1535da7f033dSHerbert Xu static const struct alg_test_desc alg_test_descs[] = { 1536da7f033dSHerbert Xu { 15374d6d6a2cSJohannes Goetzfried .alg = "__cbc-cast5-avx", 15384d6d6a2cSJohannes Goetzfried .test = alg_test_null, 15394d6d6a2cSJohannes Goetzfried .suite = { 15404d6d6a2cSJohannes Goetzfried .cipher = { 15414d6d6a2cSJohannes Goetzfried .enc = { 15424d6d6a2cSJohannes Goetzfried .vecs = NULL, 15434d6d6a2cSJohannes Goetzfried .count = 0 15444d6d6a2cSJohannes Goetzfried }, 15454d6d6a2cSJohannes Goetzfried .dec = { 15464d6d6a2cSJohannes Goetzfried .vecs = NULL, 15474d6d6a2cSJohannes Goetzfried .count = 0 15484d6d6a2cSJohannes Goetzfried } 15494d6d6a2cSJohannes Goetzfried } 15504d6d6a2cSJohannes Goetzfried } 15514d6d6a2cSJohannes Goetzfried }, { 15527efe4076SJohannes Goetzfried .alg = "__cbc-serpent-avx", 15537efe4076SJohannes Goetzfried .test = alg_test_null, 15547efe4076SJohannes Goetzfried .suite = { 15557efe4076SJohannes Goetzfried .cipher = { 15567efe4076SJohannes Goetzfried .enc = { 15577efe4076SJohannes Goetzfried .vecs = NULL, 15587efe4076SJohannes Goetzfried .count = 0 15597efe4076SJohannes Goetzfried }, 15607efe4076SJohannes Goetzfried .dec = { 15617efe4076SJohannes Goetzfried .vecs = NULL, 15627efe4076SJohannes Goetzfried .count = 0 15637efe4076SJohannes Goetzfried } 15647efe4076SJohannes Goetzfried } 15657efe4076SJohannes Goetzfried } 15667efe4076SJohannes Goetzfried }, { 1567937c30d7SJussi Kivilinna .alg = "__cbc-serpent-sse2", 1568937c30d7SJussi Kivilinna .test = alg_test_null, 1569937c30d7SJussi Kivilinna .suite = { 1570937c30d7SJussi Kivilinna .cipher = { 1571937c30d7SJussi Kivilinna .enc = { 1572937c30d7SJussi Kivilinna .vecs = NULL, 1573937c30d7SJussi Kivilinna .count = 0 1574937c30d7SJussi Kivilinna }, 1575937c30d7SJussi Kivilinna .dec = { 1576937c30d7SJussi Kivilinna .vecs = NULL, 1577937c30d7SJussi Kivilinna .count = 0 1578937c30d7SJussi Kivilinna } 1579937c30d7SJussi Kivilinna } 1580937c30d7SJussi Kivilinna } 1581937c30d7SJussi Kivilinna }, { 1582107778b5SJohannes Goetzfried .alg = "__cbc-twofish-avx", 1583107778b5SJohannes Goetzfried .test = alg_test_null, 1584107778b5SJohannes Goetzfried .suite = { 1585107778b5SJohannes Goetzfried .cipher = { 1586107778b5SJohannes Goetzfried .enc = { 1587107778b5SJohannes Goetzfried .vecs = NULL, 1588107778b5SJohannes Goetzfried .count = 0 1589107778b5SJohannes Goetzfried }, 1590107778b5SJohannes Goetzfried .dec = { 1591107778b5SJohannes Goetzfried .vecs = NULL, 1592107778b5SJohannes Goetzfried .count = 0 1593107778b5SJohannes Goetzfried } 1594107778b5SJohannes Goetzfried } 1595107778b5SJohannes Goetzfried } 1596107778b5SJohannes Goetzfried }, { 1597863b557aSYouquan, Song .alg = "__driver-cbc-aes-aesni", 1598863b557aSYouquan, Song .test = alg_test_null, 15996c79294fSMilan Broz .fips_allowed = 1, 1600863b557aSYouquan, Song .suite = { 1601863b557aSYouquan, Song .cipher = { 1602863b557aSYouquan, Song .enc = { 1603863b557aSYouquan, Song .vecs = NULL, 1604863b557aSYouquan, Song .count = 0 1605863b557aSYouquan, Song }, 1606863b557aSYouquan, Song .dec = { 1607863b557aSYouquan, Song .vecs = NULL, 1608863b557aSYouquan, Song .count = 0 1609863b557aSYouquan, Song } 1610863b557aSYouquan, Song } 1611863b557aSYouquan, Song } 1612863b557aSYouquan, Song }, { 16134d6d6a2cSJohannes Goetzfried .alg = "__driver-cbc-cast5-avx", 16144d6d6a2cSJohannes Goetzfried .test = alg_test_null, 16154d6d6a2cSJohannes Goetzfried .suite = { 16164d6d6a2cSJohannes Goetzfried .cipher = { 16174d6d6a2cSJohannes Goetzfried .enc = { 16184d6d6a2cSJohannes Goetzfried .vecs = NULL, 16194d6d6a2cSJohannes Goetzfried .count = 0 16204d6d6a2cSJohannes Goetzfried }, 16214d6d6a2cSJohannes Goetzfried .dec = { 16224d6d6a2cSJohannes Goetzfried .vecs = NULL, 16234d6d6a2cSJohannes Goetzfried .count = 0 16244d6d6a2cSJohannes Goetzfried } 16254d6d6a2cSJohannes Goetzfried } 16264d6d6a2cSJohannes Goetzfried } 16274d6d6a2cSJohannes Goetzfried }, { 16287efe4076SJohannes Goetzfried .alg = "__driver-cbc-serpent-avx", 16297efe4076SJohannes Goetzfried .test = alg_test_null, 16307efe4076SJohannes Goetzfried .suite = { 16317efe4076SJohannes Goetzfried .cipher = { 16327efe4076SJohannes Goetzfried .enc = { 16337efe4076SJohannes Goetzfried .vecs = NULL, 16347efe4076SJohannes Goetzfried .count = 0 16357efe4076SJohannes Goetzfried }, 16367efe4076SJohannes Goetzfried .dec = { 16377efe4076SJohannes Goetzfried .vecs = NULL, 16387efe4076SJohannes Goetzfried .count = 0 16397efe4076SJohannes Goetzfried } 16407efe4076SJohannes Goetzfried } 16417efe4076SJohannes Goetzfried } 16427efe4076SJohannes Goetzfried }, { 1643937c30d7SJussi Kivilinna .alg = "__driver-cbc-serpent-sse2", 1644937c30d7SJussi Kivilinna .test = alg_test_null, 1645937c30d7SJussi Kivilinna .suite = { 1646937c30d7SJussi Kivilinna .cipher = { 1647937c30d7SJussi Kivilinna .enc = { 1648937c30d7SJussi Kivilinna .vecs = NULL, 1649937c30d7SJussi Kivilinna .count = 0 1650937c30d7SJussi Kivilinna }, 1651937c30d7SJussi Kivilinna .dec = { 1652937c30d7SJussi Kivilinna .vecs = NULL, 1653937c30d7SJussi Kivilinna .count = 0 1654937c30d7SJussi Kivilinna } 1655937c30d7SJussi Kivilinna } 1656937c30d7SJussi Kivilinna } 1657937c30d7SJussi Kivilinna }, { 1658107778b5SJohannes Goetzfried .alg = "__driver-cbc-twofish-avx", 1659107778b5SJohannes Goetzfried .test = alg_test_null, 1660107778b5SJohannes Goetzfried .suite = { 1661107778b5SJohannes Goetzfried .cipher = { 1662107778b5SJohannes Goetzfried .enc = { 1663107778b5SJohannes Goetzfried .vecs = NULL, 1664107778b5SJohannes Goetzfried .count = 0 1665107778b5SJohannes Goetzfried }, 1666107778b5SJohannes Goetzfried .dec = { 1667107778b5SJohannes Goetzfried .vecs = NULL, 1668107778b5SJohannes Goetzfried .count = 0 1669107778b5SJohannes Goetzfried } 1670107778b5SJohannes Goetzfried } 1671107778b5SJohannes Goetzfried } 1672107778b5SJohannes Goetzfried }, { 1673863b557aSYouquan, Song .alg = "__driver-ecb-aes-aesni", 1674863b557aSYouquan, Song .test = alg_test_null, 16756c79294fSMilan Broz .fips_allowed = 1, 1676863b557aSYouquan, Song .suite = { 1677863b557aSYouquan, Song .cipher = { 1678863b557aSYouquan, Song .enc = { 1679863b557aSYouquan, Song .vecs = NULL, 1680863b557aSYouquan, Song .count = 0 1681863b557aSYouquan, Song }, 1682863b557aSYouquan, Song .dec = { 1683863b557aSYouquan, Song .vecs = NULL, 1684863b557aSYouquan, Song .count = 0 1685863b557aSYouquan, Song } 1686863b557aSYouquan, Song } 1687863b557aSYouquan, Song } 1688863b557aSYouquan, Song }, { 16894d6d6a2cSJohannes Goetzfried .alg = "__driver-ecb-cast5-avx", 16904d6d6a2cSJohannes Goetzfried .test = alg_test_null, 16914d6d6a2cSJohannes Goetzfried .suite = { 16924d6d6a2cSJohannes Goetzfried .cipher = { 16934d6d6a2cSJohannes Goetzfried .enc = { 16944d6d6a2cSJohannes Goetzfried .vecs = NULL, 16954d6d6a2cSJohannes Goetzfried .count = 0 16964d6d6a2cSJohannes Goetzfried }, 16974d6d6a2cSJohannes Goetzfried .dec = { 16984d6d6a2cSJohannes Goetzfried .vecs = NULL, 16994d6d6a2cSJohannes Goetzfried .count = 0 17004d6d6a2cSJohannes Goetzfried } 17014d6d6a2cSJohannes Goetzfried } 17024d6d6a2cSJohannes Goetzfried } 17034d6d6a2cSJohannes Goetzfried }, { 17047efe4076SJohannes Goetzfried .alg = "__driver-ecb-serpent-avx", 17057efe4076SJohannes Goetzfried .test = alg_test_null, 17067efe4076SJohannes Goetzfried .suite = { 17077efe4076SJohannes Goetzfried .cipher = { 17087efe4076SJohannes Goetzfried .enc = { 17097efe4076SJohannes Goetzfried .vecs = NULL, 17107efe4076SJohannes Goetzfried .count = 0 17117efe4076SJohannes Goetzfried }, 17127efe4076SJohannes Goetzfried .dec = { 17137efe4076SJohannes Goetzfried .vecs = NULL, 17147efe4076SJohannes Goetzfried .count = 0 17157efe4076SJohannes Goetzfried } 17167efe4076SJohannes Goetzfried } 17177efe4076SJohannes Goetzfried } 17187efe4076SJohannes Goetzfried }, { 1719937c30d7SJussi Kivilinna .alg = "__driver-ecb-serpent-sse2", 1720937c30d7SJussi Kivilinna .test = alg_test_null, 1721937c30d7SJussi Kivilinna .suite = { 1722937c30d7SJussi Kivilinna .cipher = { 1723937c30d7SJussi Kivilinna .enc = { 1724937c30d7SJussi Kivilinna .vecs = NULL, 1725937c30d7SJussi Kivilinna .count = 0 1726937c30d7SJussi Kivilinna }, 1727937c30d7SJussi Kivilinna .dec = { 1728937c30d7SJussi Kivilinna .vecs = NULL, 1729937c30d7SJussi Kivilinna .count = 0 1730937c30d7SJussi Kivilinna } 1731937c30d7SJussi Kivilinna } 1732937c30d7SJussi Kivilinna } 1733937c30d7SJussi Kivilinna }, { 1734107778b5SJohannes Goetzfried .alg = "__driver-ecb-twofish-avx", 1735107778b5SJohannes Goetzfried .test = alg_test_null, 1736107778b5SJohannes Goetzfried .suite = { 1737107778b5SJohannes Goetzfried .cipher = { 1738107778b5SJohannes Goetzfried .enc = { 1739107778b5SJohannes Goetzfried .vecs = NULL, 1740107778b5SJohannes Goetzfried .count = 0 1741107778b5SJohannes Goetzfried }, 1742107778b5SJohannes Goetzfried .dec = { 1743107778b5SJohannes Goetzfried .vecs = NULL, 1744107778b5SJohannes Goetzfried .count = 0 1745107778b5SJohannes Goetzfried } 1746107778b5SJohannes Goetzfried } 1747107778b5SJohannes Goetzfried } 1748107778b5SJohannes Goetzfried }, { 1749863b557aSYouquan, Song .alg = "__ghash-pclmulqdqni", 1750863b557aSYouquan, Song .test = alg_test_null, 17516c79294fSMilan Broz .fips_allowed = 1, 1752863b557aSYouquan, Song .suite = { 1753863b557aSYouquan, Song .hash = { 1754863b557aSYouquan, Song .vecs = NULL, 1755863b557aSYouquan, Song .count = 0 1756863b557aSYouquan, Song } 1757863b557aSYouquan, Song } 1758863b557aSYouquan, Song }, { 1759e08ca2daSJarod Wilson .alg = "ansi_cprng", 1760e08ca2daSJarod Wilson .test = alg_test_cprng, 1761a1915d51SJarod Wilson .fips_allowed = 1, 1762e08ca2daSJarod Wilson .suite = { 1763e08ca2daSJarod Wilson .cprng = { 1764e08ca2daSJarod Wilson .vecs = ansi_cprng_aes_tv_template, 1765e08ca2daSJarod Wilson .count = ANSI_CPRNG_AES_TEST_VECTORS 1766e08ca2daSJarod Wilson } 1767e08ca2daSJarod Wilson } 1768e08ca2daSJarod Wilson }, { 1769e46e9a46SHoria Geanta .alg = "authenc(hmac(sha1),cbc(aes))", 1770e46e9a46SHoria Geanta .test = alg_test_aead, 1771e46e9a46SHoria Geanta .fips_allowed = 1, 1772e46e9a46SHoria Geanta .suite = { 1773e46e9a46SHoria Geanta .aead = { 1774e46e9a46SHoria Geanta .enc = { 1775e46e9a46SHoria Geanta .vecs = hmac_sha1_aes_cbc_enc_tv_template, 1776e46e9a46SHoria Geanta .count = HMAC_SHA1_AES_CBC_ENC_TEST_VECTORS 1777e46e9a46SHoria Geanta } 1778e46e9a46SHoria Geanta } 1779e46e9a46SHoria Geanta } 1780e46e9a46SHoria Geanta }, { 1781e46e9a46SHoria Geanta .alg = "authenc(hmac(sha256),cbc(aes))", 1782e46e9a46SHoria Geanta .test = alg_test_aead, 1783e46e9a46SHoria Geanta .fips_allowed = 1, 1784e46e9a46SHoria Geanta .suite = { 1785e46e9a46SHoria Geanta .aead = { 1786e46e9a46SHoria Geanta .enc = { 1787e46e9a46SHoria Geanta .vecs = hmac_sha256_aes_cbc_enc_tv_template, 1788e46e9a46SHoria Geanta .count = HMAC_SHA256_AES_CBC_ENC_TEST_VECTORS 1789e46e9a46SHoria Geanta } 1790e46e9a46SHoria Geanta } 1791e46e9a46SHoria Geanta } 1792e46e9a46SHoria Geanta }, { 1793e46e9a46SHoria Geanta .alg = "authenc(hmac(sha512),cbc(aes))", 1794e46e9a46SHoria Geanta .test = alg_test_aead, 1795e46e9a46SHoria Geanta .fips_allowed = 1, 1796e46e9a46SHoria Geanta .suite = { 1797e46e9a46SHoria Geanta .aead = { 1798e46e9a46SHoria Geanta .enc = { 1799e46e9a46SHoria Geanta .vecs = hmac_sha512_aes_cbc_enc_tv_template, 1800e46e9a46SHoria Geanta .count = HMAC_SHA512_AES_CBC_ENC_TEST_VECTORS 1801e46e9a46SHoria Geanta } 1802e46e9a46SHoria Geanta } 1803e46e9a46SHoria Geanta } 1804e46e9a46SHoria Geanta }, { 1805da7f033dSHerbert Xu .alg = "cbc(aes)", 18061aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1807a1915d51SJarod Wilson .fips_allowed = 1, 1808da7f033dSHerbert Xu .suite = { 1809da7f033dSHerbert Xu .cipher = { 1810da7f033dSHerbert Xu .enc = { 1811da7f033dSHerbert Xu .vecs = aes_cbc_enc_tv_template, 1812da7f033dSHerbert Xu .count = AES_CBC_ENC_TEST_VECTORS 1813da7f033dSHerbert Xu }, 1814da7f033dSHerbert Xu .dec = { 1815da7f033dSHerbert Xu .vecs = aes_cbc_dec_tv_template, 1816da7f033dSHerbert Xu .count = AES_CBC_DEC_TEST_VECTORS 1817da7f033dSHerbert Xu } 1818da7f033dSHerbert Xu } 1819da7f033dSHerbert Xu } 1820da7f033dSHerbert Xu }, { 1821da7f033dSHerbert Xu .alg = "cbc(anubis)", 18221aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1823da7f033dSHerbert Xu .suite = { 1824da7f033dSHerbert Xu .cipher = { 1825da7f033dSHerbert Xu .enc = { 1826da7f033dSHerbert Xu .vecs = anubis_cbc_enc_tv_template, 1827da7f033dSHerbert Xu .count = ANUBIS_CBC_ENC_TEST_VECTORS 1828da7f033dSHerbert Xu }, 1829da7f033dSHerbert Xu .dec = { 1830da7f033dSHerbert Xu .vecs = anubis_cbc_dec_tv_template, 1831da7f033dSHerbert Xu .count = ANUBIS_CBC_DEC_TEST_VECTORS 1832da7f033dSHerbert Xu } 1833da7f033dSHerbert Xu } 1834da7f033dSHerbert Xu } 1835da7f033dSHerbert Xu }, { 1836da7f033dSHerbert Xu .alg = "cbc(blowfish)", 18371aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1838da7f033dSHerbert Xu .suite = { 1839da7f033dSHerbert Xu .cipher = { 1840da7f033dSHerbert Xu .enc = { 1841da7f033dSHerbert Xu .vecs = bf_cbc_enc_tv_template, 1842da7f033dSHerbert Xu .count = BF_CBC_ENC_TEST_VECTORS 1843da7f033dSHerbert Xu }, 1844da7f033dSHerbert Xu .dec = { 1845da7f033dSHerbert Xu .vecs = bf_cbc_dec_tv_template, 1846da7f033dSHerbert Xu .count = BF_CBC_DEC_TEST_VECTORS 1847da7f033dSHerbert Xu } 1848da7f033dSHerbert Xu } 1849da7f033dSHerbert Xu } 1850da7f033dSHerbert Xu }, { 1851da7f033dSHerbert Xu .alg = "cbc(camellia)", 18521aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1853da7f033dSHerbert Xu .suite = { 1854da7f033dSHerbert Xu .cipher = { 1855da7f033dSHerbert Xu .enc = { 1856da7f033dSHerbert Xu .vecs = camellia_cbc_enc_tv_template, 1857da7f033dSHerbert Xu .count = CAMELLIA_CBC_ENC_TEST_VECTORS 1858da7f033dSHerbert Xu }, 1859da7f033dSHerbert Xu .dec = { 1860da7f033dSHerbert Xu .vecs = camellia_cbc_dec_tv_template, 1861da7f033dSHerbert Xu .count = CAMELLIA_CBC_DEC_TEST_VECTORS 1862da7f033dSHerbert Xu } 1863da7f033dSHerbert Xu } 1864da7f033dSHerbert Xu } 1865da7f033dSHerbert Xu }, { 1866a2c58260SJohannes Goetzfried .alg = "cbc(cast5)", 1867a2c58260SJohannes Goetzfried .test = alg_test_skcipher, 1868a2c58260SJohannes Goetzfried .suite = { 1869a2c58260SJohannes Goetzfried .cipher = { 1870a2c58260SJohannes Goetzfried .enc = { 1871a2c58260SJohannes Goetzfried .vecs = cast5_cbc_enc_tv_template, 1872a2c58260SJohannes Goetzfried .count = CAST5_CBC_ENC_TEST_VECTORS 1873a2c58260SJohannes Goetzfried }, 1874a2c58260SJohannes Goetzfried .dec = { 1875a2c58260SJohannes Goetzfried .vecs = cast5_cbc_dec_tv_template, 1876a2c58260SJohannes Goetzfried .count = CAST5_CBC_DEC_TEST_VECTORS 1877a2c58260SJohannes Goetzfried } 1878a2c58260SJohannes Goetzfried } 1879a2c58260SJohannes Goetzfried } 1880a2c58260SJohannes Goetzfried }, { 18819b8b0405SJohannes Goetzfried .alg = "cbc(cast6)", 18829b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 18839b8b0405SJohannes Goetzfried .suite = { 18849b8b0405SJohannes Goetzfried .cipher = { 18859b8b0405SJohannes Goetzfried .enc = { 18869b8b0405SJohannes Goetzfried .vecs = cast6_cbc_enc_tv_template, 18879b8b0405SJohannes Goetzfried .count = CAST6_CBC_ENC_TEST_VECTORS 18889b8b0405SJohannes Goetzfried }, 18899b8b0405SJohannes Goetzfried .dec = { 18909b8b0405SJohannes Goetzfried .vecs = cast6_cbc_dec_tv_template, 18919b8b0405SJohannes Goetzfried .count = CAST6_CBC_DEC_TEST_VECTORS 18929b8b0405SJohannes Goetzfried } 18939b8b0405SJohannes Goetzfried } 18949b8b0405SJohannes Goetzfried } 18959b8b0405SJohannes Goetzfried }, { 1896da7f033dSHerbert Xu .alg = "cbc(des)", 18971aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1898da7f033dSHerbert Xu .suite = { 1899da7f033dSHerbert Xu .cipher = { 1900da7f033dSHerbert Xu .enc = { 1901da7f033dSHerbert Xu .vecs = des_cbc_enc_tv_template, 1902da7f033dSHerbert Xu .count = DES_CBC_ENC_TEST_VECTORS 1903da7f033dSHerbert Xu }, 1904da7f033dSHerbert Xu .dec = { 1905da7f033dSHerbert Xu .vecs = des_cbc_dec_tv_template, 1906da7f033dSHerbert Xu .count = DES_CBC_DEC_TEST_VECTORS 1907da7f033dSHerbert Xu } 1908da7f033dSHerbert Xu } 1909da7f033dSHerbert Xu } 1910da7f033dSHerbert Xu }, { 1911da7f033dSHerbert Xu .alg = "cbc(des3_ede)", 19121aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1913a1915d51SJarod Wilson .fips_allowed = 1, 1914da7f033dSHerbert Xu .suite = { 1915da7f033dSHerbert Xu .cipher = { 1916da7f033dSHerbert Xu .enc = { 1917da7f033dSHerbert Xu .vecs = des3_ede_cbc_enc_tv_template, 1918da7f033dSHerbert Xu .count = DES3_EDE_CBC_ENC_TEST_VECTORS 1919da7f033dSHerbert Xu }, 1920da7f033dSHerbert Xu .dec = { 1921da7f033dSHerbert Xu .vecs = des3_ede_cbc_dec_tv_template, 1922da7f033dSHerbert Xu .count = DES3_EDE_CBC_DEC_TEST_VECTORS 1923da7f033dSHerbert Xu } 1924da7f033dSHerbert Xu } 1925da7f033dSHerbert Xu } 1926da7f033dSHerbert Xu }, { 19279d25917dSJussi Kivilinna .alg = "cbc(serpent)", 19289d25917dSJussi Kivilinna .test = alg_test_skcipher, 19299d25917dSJussi Kivilinna .suite = { 19309d25917dSJussi Kivilinna .cipher = { 19319d25917dSJussi Kivilinna .enc = { 19329d25917dSJussi Kivilinna .vecs = serpent_cbc_enc_tv_template, 19339d25917dSJussi Kivilinna .count = SERPENT_CBC_ENC_TEST_VECTORS 19349d25917dSJussi Kivilinna }, 19359d25917dSJussi Kivilinna .dec = { 19369d25917dSJussi Kivilinna .vecs = serpent_cbc_dec_tv_template, 19379d25917dSJussi Kivilinna .count = SERPENT_CBC_DEC_TEST_VECTORS 19389d25917dSJussi Kivilinna } 19399d25917dSJussi Kivilinna } 19409d25917dSJussi Kivilinna } 19419d25917dSJussi Kivilinna }, { 1942da7f033dSHerbert Xu .alg = "cbc(twofish)", 19431aa4ecd9SHerbert Xu .test = alg_test_skcipher, 1944da7f033dSHerbert Xu .suite = { 1945da7f033dSHerbert Xu .cipher = { 1946da7f033dSHerbert Xu .enc = { 1947da7f033dSHerbert Xu .vecs = tf_cbc_enc_tv_template, 1948da7f033dSHerbert Xu .count = TF_CBC_ENC_TEST_VECTORS 1949da7f033dSHerbert Xu }, 1950da7f033dSHerbert Xu .dec = { 1951da7f033dSHerbert Xu .vecs = tf_cbc_dec_tv_template, 1952da7f033dSHerbert Xu .count = TF_CBC_DEC_TEST_VECTORS 1953da7f033dSHerbert Xu } 1954da7f033dSHerbert Xu } 1955da7f033dSHerbert Xu } 1956da7f033dSHerbert Xu }, { 1957da7f033dSHerbert Xu .alg = "ccm(aes)", 1958da7f033dSHerbert Xu .test = alg_test_aead, 1959a1915d51SJarod Wilson .fips_allowed = 1, 1960da7f033dSHerbert Xu .suite = { 1961da7f033dSHerbert Xu .aead = { 1962da7f033dSHerbert Xu .enc = { 1963da7f033dSHerbert Xu .vecs = aes_ccm_enc_tv_template, 1964da7f033dSHerbert Xu .count = AES_CCM_ENC_TEST_VECTORS 1965da7f033dSHerbert Xu }, 1966da7f033dSHerbert Xu .dec = { 1967da7f033dSHerbert Xu .vecs = aes_ccm_dec_tv_template, 1968da7f033dSHerbert Xu .count = AES_CCM_DEC_TEST_VECTORS 1969da7f033dSHerbert Xu } 1970da7f033dSHerbert Xu } 1971da7f033dSHerbert Xu } 1972da7f033dSHerbert Xu }, { 1973da7f033dSHerbert Xu .alg = "crc32c", 19748e3ee85eSHerbert Xu .test = alg_test_crc32c, 1975a1915d51SJarod Wilson .fips_allowed = 1, 1976da7f033dSHerbert Xu .suite = { 1977da7f033dSHerbert Xu .hash = { 1978da7f033dSHerbert Xu .vecs = crc32c_tv_template, 1979da7f033dSHerbert Xu .count = CRC32C_TEST_VECTORS 1980da7f033dSHerbert Xu } 1981da7f033dSHerbert Xu } 1982da7f033dSHerbert Xu }, { 19836c79294fSMilan Broz .alg = "cryptd(__driver-cbc-aes-aesni)", 19846c79294fSMilan Broz .test = alg_test_null, 19856c79294fSMilan Broz .fips_allowed = 1, 19866c79294fSMilan Broz .suite = { 19876c79294fSMilan Broz .cipher = { 19886c79294fSMilan Broz .enc = { 19896c79294fSMilan Broz .vecs = NULL, 19906c79294fSMilan Broz .count = 0 19916c79294fSMilan Broz }, 19926c79294fSMilan Broz .dec = { 19936c79294fSMilan Broz .vecs = NULL, 19946c79294fSMilan Broz .count = 0 19956c79294fSMilan Broz } 19966c79294fSMilan Broz } 19976c79294fSMilan Broz } 19986c79294fSMilan Broz }, { 1999863b557aSYouquan, Song .alg = "cryptd(__driver-ecb-aes-aesni)", 2000863b557aSYouquan, Song .test = alg_test_null, 20016c79294fSMilan Broz .fips_allowed = 1, 2002863b557aSYouquan, Song .suite = { 2003863b557aSYouquan, Song .cipher = { 2004863b557aSYouquan, Song .enc = { 2005863b557aSYouquan, Song .vecs = NULL, 2006863b557aSYouquan, Song .count = 0 2007863b557aSYouquan, Song }, 2008863b557aSYouquan, Song .dec = { 2009863b557aSYouquan, Song .vecs = NULL, 2010863b557aSYouquan, Song .count = 0 2011863b557aSYouquan, Song } 2012863b557aSYouquan, Song } 2013863b557aSYouquan, Song } 2014863b557aSYouquan, Song }, { 20154d6d6a2cSJohannes Goetzfried .alg = "cryptd(__driver-ecb-cast5-avx)", 20164d6d6a2cSJohannes Goetzfried .test = alg_test_null, 20174d6d6a2cSJohannes Goetzfried .suite = { 20184d6d6a2cSJohannes Goetzfried .cipher = { 20194d6d6a2cSJohannes Goetzfried .enc = { 20204d6d6a2cSJohannes Goetzfried .vecs = NULL, 20214d6d6a2cSJohannes Goetzfried .count = 0 20224d6d6a2cSJohannes Goetzfried }, 20234d6d6a2cSJohannes Goetzfried .dec = { 20244d6d6a2cSJohannes Goetzfried .vecs = NULL, 20254d6d6a2cSJohannes Goetzfried .count = 0 20264d6d6a2cSJohannes Goetzfried } 20274d6d6a2cSJohannes Goetzfried } 20284d6d6a2cSJohannes Goetzfried } 20294d6d6a2cSJohannes Goetzfried }, { 20307efe4076SJohannes Goetzfried .alg = "cryptd(__driver-ecb-serpent-avx)", 20317efe4076SJohannes Goetzfried .test = alg_test_null, 20327efe4076SJohannes Goetzfried .suite = { 20337efe4076SJohannes Goetzfried .cipher = { 20347efe4076SJohannes Goetzfried .enc = { 20357efe4076SJohannes Goetzfried .vecs = NULL, 20367efe4076SJohannes Goetzfried .count = 0 20377efe4076SJohannes Goetzfried }, 20387efe4076SJohannes Goetzfried .dec = { 20397efe4076SJohannes Goetzfried .vecs = NULL, 20407efe4076SJohannes Goetzfried .count = 0 20417efe4076SJohannes Goetzfried } 20427efe4076SJohannes Goetzfried } 20437efe4076SJohannes Goetzfried } 20447efe4076SJohannes Goetzfried }, { 2045937c30d7SJussi Kivilinna .alg = "cryptd(__driver-ecb-serpent-sse2)", 2046937c30d7SJussi Kivilinna .test = alg_test_null, 2047937c30d7SJussi Kivilinna .suite = { 2048937c30d7SJussi Kivilinna .cipher = { 2049937c30d7SJussi Kivilinna .enc = { 2050937c30d7SJussi Kivilinna .vecs = NULL, 2051937c30d7SJussi Kivilinna .count = 0 2052937c30d7SJussi Kivilinna }, 2053937c30d7SJussi Kivilinna .dec = { 2054937c30d7SJussi Kivilinna .vecs = NULL, 2055937c30d7SJussi Kivilinna .count = 0 2056937c30d7SJussi Kivilinna } 2057937c30d7SJussi Kivilinna } 2058937c30d7SJussi Kivilinna } 2059937c30d7SJussi Kivilinna }, { 2060107778b5SJohannes Goetzfried .alg = "cryptd(__driver-ecb-twofish-avx)", 2061107778b5SJohannes Goetzfried .test = alg_test_null, 2062107778b5SJohannes Goetzfried .suite = { 2063107778b5SJohannes Goetzfried .cipher = { 2064107778b5SJohannes Goetzfried .enc = { 2065107778b5SJohannes Goetzfried .vecs = NULL, 2066107778b5SJohannes Goetzfried .count = 0 2067107778b5SJohannes Goetzfried }, 2068107778b5SJohannes Goetzfried .dec = { 2069107778b5SJohannes Goetzfried .vecs = NULL, 2070107778b5SJohannes Goetzfried .count = 0 2071107778b5SJohannes Goetzfried } 2072107778b5SJohannes Goetzfried } 2073107778b5SJohannes Goetzfried } 2074107778b5SJohannes Goetzfried }, { 20756c79294fSMilan Broz .alg = "cryptd(__driver-gcm-aes-aesni)", 20766c79294fSMilan Broz .test = alg_test_null, 20776c79294fSMilan Broz .fips_allowed = 1, 20786c79294fSMilan Broz .suite = { 20796c79294fSMilan Broz .cipher = { 20806c79294fSMilan Broz .enc = { 20816c79294fSMilan Broz .vecs = NULL, 20826c79294fSMilan Broz .count = 0 20836c79294fSMilan Broz }, 20846c79294fSMilan Broz .dec = { 20856c79294fSMilan Broz .vecs = NULL, 20866c79294fSMilan Broz .count = 0 20876c79294fSMilan Broz } 20886c79294fSMilan Broz } 20896c79294fSMilan Broz } 20906c79294fSMilan Broz }, { 2091863b557aSYouquan, Song .alg = "cryptd(__ghash-pclmulqdqni)", 2092863b557aSYouquan, Song .test = alg_test_null, 20936c79294fSMilan Broz .fips_allowed = 1, 2094863b557aSYouquan, Song .suite = { 2095863b557aSYouquan, Song .hash = { 2096863b557aSYouquan, Song .vecs = NULL, 2097863b557aSYouquan, Song .count = 0 2098863b557aSYouquan, Song } 2099863b557aSYouquan, Song } 2100863b557aSYouquan, Song }, { 2101f7cb80f2SJarod Wilson .alg = "ctr(aes)", 2102f7cb80f2SJarod Wilson .test = alg_test_skcipher, 2103a1915d51SJarod Wilson .fips_allowed = 1, 2104f7cb80f2SJarod Wilson .suite = { 2105f7cb80f2SJarod Wilson .cipher = { 2106f7cb80f2SJarod Wilson .enc = { 2107f7cb80f2SJarod Wilson .vecs = aes_ctr_enc_tv_template, 2108f7cb80f2SJarod Wilson .count = AES_CTR_ENC_TEST_VECTORS 2109f7cb80f2SJarod Wilson }, 2110f7cb80f2SJarod Wilson .dec = { 2111f7cb80f2SJarod Wilson .vecs = aes_ctr_dec_tv_template, 2112f7cb80f2SJarod Wilson .count = AES_CTR_DEC_TEST_VECTORS 2113f7cb80f2SJarod Wilson } 2114f7cb80f2SJarod Wilson } 2115f7cb80f2SJarod Wilson } 2116f7cb80f2SJarod Wilson }, { 211785b63e34SJussi Kivilinna .alg = "ctr(blowfish)", 211885b63e34SJussi Kivilinna .test = alg_test_skcipher, 211985b63e34SJussi Kivilinna .suite = { 212085b63e34SJussi Kivilinna .cipher = { 212185b63e34SJussi Kivilinna .enc = { 212285b63e34SJussi Kivilinna .vecs = bf_ctr_enc_tv_template, 212385b63e34SJussi Kivilinna .count = BF_CTR_ENC_TEST_VECTORS 212485b63e34SJussi Kivilinna }, 212585b63e34SJussi Kivilinna .dec = { 212685b63e34SJussi Kivilinna .vecs = bf_ctr_dec_tv_template, 212785b63e34SJussi Kivilinna .count = BF_CTR_DEC_TEST_VECTORS 212885b63e34SJussi Kivilinna } 212985b63e34SJussi Kivilinna } 213085b63e34SJussi Kivilinna } 213185b63e34SJussi Kivilinna }, { 21320840605eSJussi Kivilinna .alg = "ctr(camellia)", 21330840605eSJussi Kivilinna .test = alg_test_skcipher, 21340840605eSJussi Kivilinna .suite = { 21350840605eSJussi Kivilinna .cipher = { 21360840605eSJussi Kivilinna .enc = { 21370840605eSJussi Kivilinna .vecs = camellia_ctr_enc_tv_template, 21380840605eSJussi Kivilinna .count = CAMELLIA_CTR_ENC_TEST_VECTORS 21390840605eSJussi Kivilinna }, 21400840605eSJussi Kivilinna .dec = { 21410840605eSJussi Kivilinna .vecs = camellia_ctr_dec_tv_template, 21420840605eSJussi Kivilinna .count = CAMELLIA_CTR_DEC_TEST_VECTORS 21430840605eSJussi Kivilinna } 21440840605eSJussi Kivilinna } 21450840605eSJussi Kivilinna } 21460840605eSJussi Kivilinna }, { 2147a2c58260SJohannes Goetzfried .alg = "ctr(cast5)", 2148a2c58260SJohannes Goetzfried .test = alg_test_skcipher, 2149a2c58260SJohannes Goetzfried .suite = { 2150a2c58260SJohannes Goetzfried .cipher = { 2151a2c58260SJohannes Goetzfried .enc = { 2152a2c58260SJohannes Goetzfried .vecs = cast5_ctr_enc_tv_template, 2153a2c58260SJohannes Goetzfried .count = CAST5_CTR_ENC_TEST_VECTORS 2154a2c58260SJohannes Goetzfried }, 2155a2c58260SJohannes Goetzfried .dec = { 2156a2c58260SJohannes Goetzfried .vecs = cast5_ctr_dec_tv_template, 2157a2c58260SJohannes Goetzfried .count = CAST5_CTR_DEC_TEST_VECTORS 2158a2c58260SJohannes Goetzfried } 2159a2c58260SJohannes Goetzfried } 2160a2c58260SJohannes Goetzfried } 2161a2c58260SJohannes Goetzfried }, { 21629b8b0405SJohannes Goetzfried .alg = "ctr(cast6)", 21639b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 21649b8b0405SJohannes Goetzfried .suite = { 21659b8b0405SJohannes Goetzfried .cipher = { 21669b8b0405SJohannes Goetzfried .enc = { 21679b8b0405SJohannes Goetzfried .vecs = cast6_ctr_enc_tv_template, 21689b8b0405SJohannes Goetzfried .count = CAST6_CTR_ENC_TEST_VECTORS 21699b8b0405SJohannes Goetzfried }, 21709b8b0405SJohannes Goetzfried .dec = { 21719b8b0405SJohannes Goetzfried .vecs = cast6_ctr_dec_tv_template, 21729b8b0405SJohannes Goetzfried .count = CAST6_CTR_DEC_TEST_VECTORS 21739b8b0405SJohannes Goetzfried } 21749b8b0405SJohannes Goetzfried } 21759b8b0405SJohannes Goetzfried } 21769b8b0405SJohannes Goetzfried }, { 21779d25917dSJussi Kivilinna .alg = "ctr(serpent)", 21789d25917dSJussi Kivilinna .test = alg_test_skcipher, 21799d25917dSJussi Kivilinna .suite = { 21809d25917dSJussi Kivilinna .cipher = { 21819d25917dSJussi Kivilinna .enc = { 21829d25917dSJussi Kivilinna .vecs = serpent_ctr_enc_tv_template, 21839d25917dSJussi Kivilinna .count = SERPENT_CTR_ENC_TEST_VECTORS 21849d25917dSJussi Kivilinna }, 21859d25917dSJussi Kivilinna .dec = { 21869d25917dSJussi Kivilinna .vecs = serpent_ctr_dec_tv_template, 21879d25917dSJussi Kivilinna .count = SERPENT_CTR_DEC_TEST_VECTORS 21889d25917dSJussi Kivilinna } 21899d25917dSJussi Kivilinna } 21909d25917dSJussi Kivilinna } 21919d25917dSJussi Kivilinna }, { 2192573da620SJussi Kivilinna .alg = "ctr(twofish)", 2193573da620SJussi Kivilinna .test = alg_test_skcipher, 2194573da620SJussi Kivilinna .suite = { 2195573da620SJussi Kivilinna .cipher = { 2196573da620SJussi Kivilinna .enc = { 2197573da620SJussi Kivilinna .vecs = tf_ctr_enc_tv_template, 2198573da620SJussi Kivilinna .count = TF_CTR_ENC_TEST_VECTORS 2199573da620SJussi Kivilinna }, 2200573da620SJussi Kivilinna .dec = { 2201573da620SJussi Kivilinna .vecs = tf_ctr_dec_tv_template, 2202573da620SJussi Kivilinna .count = TF_CTR_DEC_TEST_VECTORS 2203573da620SJussi Kivilinna } 2204573da620SJussi Kivilinna } 2205573da620SJussi Kivilinna } 2206573da620SJussi Kivilinna }, { 2207da7f033dSHerbert Xu .alg = "cts(cbc(aes))", 22081aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2209da7f033dSHerbert Xu .suite = { 2210da7f033dSHerbert Xu .cipher = { 2211da7f033dSHerbert Xu .enc = { 2212da7f033dSHerbert Xu .vecs = cts_mode_enc_tv_template, 2213da7f033dSHerbert Xu .count = CTS_MODE_ENC_TEST_VECTORS 2214da7f033dSHerbert Xu }, 2215da7f033dSHerbert Xu .dec = { 2216da7f033dSHerbert Xu .vecs = cts_mode_dec_tv_template, 2217da7f033dSHerbert Xu .count = CTS_MODE_DEC_TEST_VECTORS 2218da7f033dSHerbert Xu } 2219da7f033dSHerbert Xu } 2220da7f033dSHerbert Xu } 2221da7f033dSHerbert Xu }, { 2222da7f033dSHerbert Xu .alg = "deflate", 2223da7f033dSHerbert Xu .test = alg_test_comp, 2224da7f033dSHerbert Xu .suite = { 2225da7f033dSHerbert Xu .comp = { 2226da7f033dSHerbert Xu .comp = { 2227da7f033dSHerbert Xu .vecs = deflate_comp_tv_template, 2228da7f033dSHerbert Xu .count = DEFLATE_COMP_TEST_VECTORS 2229da7f033dSHerbert Xu }, 2230da7f033dSHerbert Xu .decomp = { 2231da7f033dSHerbert Xu .vecs = deflate_decomp_tv_template, 2232da7f033dSHerbert Xu .count = DEFLATE_DECOMP_TEST_VECTORS 2233da7f033dSHerbert Xu } 2234da7f033dSHerbert Xu } 2235da7f033dSHerbert Xu } 2236da7f033dSHerbert Xu }, { 2237863b557aSYouquan, Song .alg = "ecb(__aes-aesni)", 2238863b557aSYouquan, Song .test = alg_test_null, 22396c79294fSMilan Broz .fips_allowed = 1, 2240863b557aSYouquan, Song .suite = { 2241863b557aSYouquan, Song .cipher = { 2242863b557aSYouquan, Song .enc = { 2243863b557aSYouquan, Song .vecs = NULL, 2244863b557aSYouquan, Song .count = 0 2245863b557aSYouquan, Song }, 2246863b557aSYouquan, Song .dec = { 2247863b557aSYouquan, Song .vecs = NULL, 2248863b557aSYouquan, Song .count = 0 2249863b557aSYouquan, Song } 2250863b557aSYouquan, Song } 2251863b557aSYouquan, Song } 2252863b557aSYouquan, Song }, { 2253da7f033dSHerbert Xu .alg = "ecb(aes)", 22541aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2255a1915d51SJarod Wilson .fips_allowed = 1, 2256da7f033dSHerbert Xu .suite = { 2257da7f033dSHerbert Xu .cipher = { 2258da7f033dSHerbert Xu .enc = { 2259da7f033dSHerbert Xu .vecs = aes_enc_tv_template, 2260da7f033dSHerbert Xu .count = AES_ENC_TEST_VECTORS 2261da7f033dSHerbert Xu }, 2262da7f033dSHerbert Xu .dec = { 2263da7f033dSHerbert Xu .vecs = aes_dec_tv_template, 2264da7f033dSHerbert Xu .count = AES_DEC_TEST_VECTORS 2265da7f033dSHerbert Xu } 2266da7f033dSHerbert Xu } 2267da7f033dSHerbert Xu } 2268da7f033dSHerbert Xu }, { 2269da7f033dSHerbert Xu .alg = "ecb(anubis)", 22701aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2271da7f033dSHerbert Xu .suite = { 2272da7f033dSHerbert Xu .cipher = { 2273da7f033dSHerbert Xu .enc = { 2274da7f033dSHerbert Xu .vecs = anubis_enc_tv_template, 2275da7f033dSHerbert Xu .count = ANUBIS_ENC_TEST_VECTORS 2276da7f033dSHerbert Xu }, 2277da7f033dSHerbert Xu .dec = { 2278da7f033dSHerbert Xu .vecs = anubis_dec_tv_template, 2279da7f033dSHerbert Xu .count = ANUBIS_DEC_TEST_VECTORS 2280da7f033dSHerbert Xu } 2281da7f033dSHerbert Xu } 2282da7f033dSHerbert Xu } 2283da7f033dSHerbert Xu }, { 2284da7f033dSHerbert Xu .alg = "ecb(arc4)", 22851aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2286da7f033dSHerbert Xu .suite = { 2287da7f033dSHerbert Xu .cipher = { 2288da7f033dSHerbert Xu .enc = { 2289da7f033dSHerbert Xu .vecs = arc4_enc_tv_template, 2290da7f033dSHerbert Xu .count = ARC4_ENC_TEST_VECTORS 2291da7f033dSHerbert Xu }, 2292da7f033dSHerbert Xu .dec = { 2293da7f033dSHerbert Xu .vecs = arc4_dec_tv_template, 2294da7f033dSHerbert Xu .count = ARC4_DEC_TEST_VECTORS 2295da7f033dSHerbert Xu } 2296da7f033dSHerbert Xu } 2297da7f033dSHerbert Xu } 2298da7f033dSHerbert Xu }, { 2299da7f033dSHerbert Xu .alg = "ecb(blowfish)", 23001aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2301da7f033dSHerbert Xu .suite = { 2302da7f033dSHerbert Xu .cipher = { 2303da7f033dSHerbert Xu .enc = { 2304da7f033dSHerbert Xu .vecs = bf_enc_tv_template, 2305da7f033dSHerbert Xu .count = BF_ENC_TEST_VECTORS 2306da7f033dSHerbert Xu }, 2307da7f033dSHerbert Xu .dec = { 2308da7f033dSHerbert Xu .vecs = bf_dec_tv_template, 2309da7f033dSHerbert Xu .count = BF_DEC_TEST_VECTORS 2310da7f033dSHerbert Xu } 2311da7f033dSHerbert Xu } 2312da7f033dSHerbert Xu } 2313da7f033dSHerbert Xu }, { 2314da7f033dSHerbert Xu .alg = "ecb(camellia)", 23151aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2316da7f033dSHerbert Xu .suite = { 2317da7f033dSHerbert Xu .cipher = { 2318da7f033dSHerbert Xu .enc = { 2319da7f033dSHerbert Xu .vecs = camellia_enc_tv_template, 2320da7f033dSHerbert Xu .count = CAMELLIA_ENC_TEST_VECTORS 2321da7f033dSHerbert Xu }, 2322da7f033dSHerbert Xu .dec = { 2323da7f033dSHerbert Xu .vecs = camellia_dec_tv_template, 2324da7f033dSHerbert Xu .count = CAMELLIA_DEC_TEST_VECTORS 2325da7f033dSHerbert Xu } 2326da7f033dSHerbert Xu } 2327da7f033dSHerbert Xu } 2328da7f033dSHerbert Xu }, { 2329da7f033dSHerbert Xu .alg = "ecb(cast5)", 23301aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2331da7f033dSHerbert Xu .suite = { 2332da7f033dSHerbert Xu .cipher = { 2333da7f033dSHerbert Xu .enc = { 2334da7f033dSHerbert Xu .vecs = cast5_enc_tv_template, 2335da7f033dSHerbert Xu .count = CAST5_ENC_TEST_VECTORS 2336da7f033dSHerbert Xu }, 2337da7f033dSHerbert Xu .dec = { 2338da7f033dSHerbert Xu .vecs = cast5_dec_tv_template, 2339da7f033dSHerbert Xu .count = CAST5_DEC_TEST_VECTORS 2340da7f033dSHerbert Xu } 2341da7f033dSHerbert Xu } 2342da7f033dSHerbert Xu } 2343da7f033dSHerbert Xu }, { 2344da7f033dSHerbert Xu .alg = "ecb(cast6)", 23451aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2346da7f033dSHerbert Xu .suite = { 2347da7f033dSHerbert Xu .cipher = { 2348da7f033dSHerbert Xu .enc = { 2349da7f033dSHerbert Xu .vecs = cast6_enc_tv_template, 2350da7f033dSHerbert Xu .count = CAST6_ENC_TEST_VECTORS 2351da7f033dSHerbert Xu }, 2352da7f033dSHerbert Xu .dec = { 2353da7f033dSHerbert Xu .vecs = cast6_dec_tv_template, 2354da7f033dSHerbert Xu .count = CAST6_DEC_TEST_VECTORS 2355da7f033dSHerbert Xu } 2356da7f033dSHerbert Xu } 2357da7f033dSHerbert Xu } 2358da7f033dSHerbert Xu }, { 2359da7f033dSHerbert Xu .alg = "ecb(des)", 23601aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2361a1915d51SJarod Wilson .fips_allowed = 1, 2362da7f033dSHerbert Xu .suite = { 2363da7f033dSHerbert Xu .cipher = { 2364da7f033dSHerbert Xu .enc = { 2365da7f033dSHerbert Xu .vecs = des_enc_tv_template, 2366da7f033dSHerbert Xu .count = DES_ENC_TEST_VECTORS 2367da7f033dSHerbert Xu }, 2368da7f033dSHerbert Xu .dec = { 2369da7f033dSHerbert Xu .vecs = des_dec_tv_template, 2370da7f033dSHerbert Xu .count = DES_DEC_TEST_VECTORS 2371da7f033dSHerbert Xu } 2372da7f033dSHerbert Xu } 2373da7f033dSHerbert Xu } 2374da7f033dSHerbert Xu }, { 2375da7f033dSHerbert Xu .alg = "ecb(des3_ede)", 23761aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2377a1915d51SJarod Wilson .fips_allowed = 1, 2378da7f033dSHerbert Xu .suite = { 2379da7f033dSHerbert Xu .cipher = { 2380da7f033dSHerbert Xu .enc = { 2381da7f033dSHerbert Xu .vecs = des3_ede_enc_tv_template, 2382da7f033dSHerbert Xu .count = DES3_EDE_ENC_TEST_VECTORS 2383da7f033dSHerbert Xu }, 2384da7f033dSHerbert Xu .dec = { 2385da7f033dSHerbert Xu .vecs = des3_ede_dec_tv_template, 2386da7f033dSHerbert Xu .count = DES3_EDE_DEC_TEST_VECTORS 2387da7f033dSHerbert Xu } 2388da7f033dSHerbert Xu } 2389da7f033dSHerbert Xu } 2390da7f033dSHerbert Xu }, { 2391da7f033dSHerbert Xu .alg = "ecb(khazad)", 23921aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2393da7f033dSHerbert Xu .suite = { 2394da7f033dSHerbert Xu .cipher = { 2395da7f033dSHerbert Xu .enc = { 2396da7f033dSHerbert Xu .vecs = khazad_enc_tv_template, 2397da7f033dSHerbert Xu .count = KHAZAD_ENC_TEST_VECTORS 2398da7f033dSHerbert Xu }, 2399da7f033dSHerbert Xu .dec = { 2400da7f033dSHerbert Xu .vecs = khazad_dec_tv_template, 2401da7f033dSHerbert Xu .count = KHAZAD_DEC_TEST_VECTORS 2402da7f033dSHerbert Xu } 2403da7f033dSHerbert Xu } 2404da7f033dSHerbert Xu } 2405da7f033dSHerbert Xu }, { 2406da7f033dSHerbert Xu .alg = "ecb(seed)", 24071aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2408da7f033dSHerbert Xu .suite = { 2409da7f033dSHerbert Xu .cipher = { 2410da7f033dSHerbert Xu .enc = { 2411da7f033dSHerbert Xu .vecs = seed_enc_tv_template, 2412da7f033dSHerbert Xu .count = SEED_ENC_TEST_VECTORS 2413da7f033dSHerbert Xu }, 2414da7f033dSHerbert Xu .dec = { 2415da7f033dSHerbert Xu .vecs = seed_dec_tv_template, 2416da7f033dSHerbert Xu .count = SEED_DEC_TEST_VECTORS 2417da7f033dSHerbert Xu } 2418da7f033dSHerbert Xu } 2419da7f033dSHerbert Xu } 2420da7f033dSHerbert Xu }, { 2421da7f033dSHerbert Xu .alg = "ecb(serpent)", 24221aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2423da7f033dSHerbert Xu .suite = { 2424da7f033dSHerbert Xu .cipher = { 2425da7f033dSHerbert Xu .enc = { 2426da7f033dSHerbert Xu .vecs = serpent_enc_tv_template, 2427da7f033dSHerbert Xu .count = SERPENT_ENC_TEST_VECTORS 2428da7f033dSHerbert Xu }, 2429da7f033dSHerbert Xu .dec = { 2430da7f033dSHerbert Xu .vecs = serpent_dec_tv_template, 2431da7f033dSHerbert Xu .count = SERPENT_DEC_TEST_VECTORS 2432da7f033dSHerbert Xu } 2433da7f033dSHerbert Xu } 2434da7f033dSHerbert Xu } 2435da7f033dSHerbert Xu }, { 2436da7f033dSHerbert Xu .alg = "ecb(tea)", 24371aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2438da7f033dSHerbert Xu .suite = { 2439da7f033dSHerbert Xu .cipher = { 2440da7f033dSHerbert Xu .enc = { 2441da7f033dSHerbert Xu .vecs = tea_enc_tv_template, 2442da7f033dSHerbert Xu .count = TEA_ENC_TEST_VECTORS 2443da7f033dSHerbert Xu }, 2444da7f033dSHerbert Xu .dec = { 2445da7f033dSHerbert Xu .vecs = tea_dec_tv_template, 2446da7f033dSHerbert Xu .count = TEA_DEC_TEST_VECTORS 2447da7f033dSHerbert Xu } 2448da7f033dSHerbert Xu } 2449da7f033dSHerbert Xu } 2450da7f033dSHerbert Xu }, { 2451da7f033dSHerbert Xu .alg = "ecb(tnepres)", 24521aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2453da7f033dSHerbert Xu .suite = { 2454da7f033dSHerbert Xu .cipher = { 2455da7f033dSHerbert Xu .enc = { 2456da7f033dSHerbert Xu .vecs = tnepres_enc_tv_template, 2457da7f033dSHerbert Xu .count = TNEPRES_ENC_TEST_VECTORS 2458da7f033dSHerbert Xu }, 2459da7f033dSHerbert Xu .dec = { 2460da7f033dSHerbert Xu .vecs = tnepres_dec_tv_template, 2461da7f033dSHerbert Xu .count = TNEPRES_DEC_TEST_VECTORS 2462da7f033dSHerbert Xu } 2463da7f033dSHerbert Xu } 2464da7f033dSHerbert Xu } 2465da7f033dSHerbert Xu }, { 2466da7f033dSHerbert Xu .alg = "ecb(twofish)", 24671aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2468da7f033dSHerbert Xu .suite = { 2469da7f033dSHerbert Xu .cipher = { 2470da7f033dSHerbert Xu .enc = { 2471da7f033dSHerbert Xu .vecs = tf_enc_tv_template, 2472da7f033dSHerbert Xu .count = TF_ENC_TEST_VECTORS 2473da7f033dSHerbert Xu }, 2474da7f033dSHerbert Xu .dec = { 2475da7f033dSHerbert Xu .vecs = tf_dec_tv_template, 2476da7f033dSHerbert Xu .count = TF_DEC_TEST_VECTORS 2477da7f033dSHerbert Xu } 2478da7f033dSHerbert Xu } 2479da7f033dSHerbert Xu } 2480da7f033dSHerbert Xu }, { 2481da7f033dSHerbert Xu .alg = "ecb(xeta)", 24821aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2483da7f033dSHerbert Xu .suite = { 2484da7f033dSHerbert Xu .cipher = { 2485da7f033dSHerbert Xu .enc = { 2486da7f033dSHerbert Xu .vecs = xeta_enc_tv_template, 2487da7f033dSHerbert Xu .count = XETA_ENC_TEST_VECTORS 2488da7f033dSHerbert Xu }, 2489da7f033dSHerbert Xu .dec = { 2490da7f033dSHerbert Xu .vecs = xeta_dec_tv_template, 2491da7f033dSHerbert Xu .count = XETA_DEC_TEST_VECTORS 2492da7f033dSHerbert Xu } 2493da7f033dSHerbert Xu } 2494da7f033dSHerbert Xu } 2495da7f033dSHerbert Xu }, { 2496da7f033dSHerbert Xu .alg = "ecb(xtea)", 24971aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2498da7f033dSHerbert Xu .suite = { 2499da7f033dSHerbert Xu .cipher = { 2500da7f033dSHerbert Xu .enc = { 2501da7f033dSHerbert Xu .vecs = xtea_enc_tv_template, 2502da7f033dSHerbert Xu .count = XTEA_ENC_TEST_VECTORS 2503da7f033dSHerbert Xu }, 2504da7f033dSHerbert Xu .dec = { 2505da7f033dSHerbert Xu .vecs = xtea_dec_tv_template, 2506da7f033dSHerbert Xu .count = XTEA_DEC_TEST_VECTORS 2507da7f033dSHerbert Xu } 2508da7f033dSHerbert Xu } 2509da7f033dSHerbert Xu } 2510da7f033dSHerbert Xu }, { 2511da7f033dSHerbert Xu .alg = "gcm(aes)", 2512da7f033dSHerbert Xu .test = alg_test_aead, 2513a1915d51SJarod Wilson .fips_allowed = 1, 2514da7f033dSHerbert Xu .suite = { 2515da7f033dSHerbert Xu .aead = { 2516da7f033dSHerbert Xu .enc = { 2517da7f033dSHerbert Xu .vecs = aes_gcm_enc_tv_template, 2518da7f033dSHerbert Xu .count = AES_GCM_ENC_TEST_VECTORS 2519da7f033dSHerbert Xu }, 2520da7f033dSHerbert Xu .dec = { 2521da7f033dSHerbert Xu .vecs = aes_gcm_dec_tv_template, 2522da7f033dSHerbert Xu .count = AES_GCM_DEC_TEST_VECTORS 2523da7f033dSHerbert Xu } 2524da7f033dSHerbert Xu } 2525da7f033dSHerbert Xu } 2526da7f033dSHerbert Xu }, { 2527507069c9SYouquan, Song .alg = "ghash", 2528507069c9SYouquan, Song .test = alg_test_hash, 252918c0ebd2SJarod Wilson .fips_allowed = 1, 2530507069c9SYouquan, Song .suite = { 2531507069c9SYouquan, Song .hash = { 2532507069c9SYouquan, Song .vecs = ghash_tv_template, 2533507069c9SYouquan, Song .count = GHASH_TEST_VECTORS 2534507069c9SYouquan, Song } 2535507069c9SYouquan, Song } 2536507069c9SYouquan, Song }, { 2537a482b081SSonic Zhang .alg = "hmac(crc32)", 2538a482b081SSonic Zhang .test = alg_test_hash, 2539a482b081SSonic Zhang .suite = { 2540a482b081SSonic Zhang .hash = { 2541a482b081SSonic Zhang .vecs = bfin_crc_tv_template, 2542a482b081SSonic Zhang .count = BFIN_CRC_TEST_VECTORS 2543a482b081SSonic Zhang } 2544a482b081SSonic Zhang } 2545a482b081SSonic Zhang }, { 2546da7f033dSHerbert Xu .alg = "hmac(md5)", 2547da7f033dSHerbert Xu .test = alg_test_hash, 2548da7f033dSHerbert Xu .suite = { 2549da7f033dSHerbert Xu .hash = { 2550da7f033dSHerbert Xu .vecs = hmac_md5_tv_template, 2551da7f033dSHerbert Xu .count = HMAC_MD5_TEST_VECTORS 2552da7f033dSHerbert Xu } 2553da7f033dSHerbert Xu } 2554da7f033dSHerbert Xu }, { 2555da7f033dSHerbert Xu .alg = "hmac(rmd128)", 2556da7f033dSHerbert Xu .test = alg_test_hash, 2557da7f033dSHerbert Xu .suite = { 2558da7f033dSHerbert Xu .hash = { 2559da7f033dSHerbert Xu .vecs = hmac_rmd128_tv_template, 2560da7f033dSHerbert Xu .count = HMAC_RMD128_TEST_VECTORS 2561da7f033dSHerbert Xu } 2562da7f033dSHerbert Xu } 2563da7f033dSHerbert Xu }, { 2564da7f033dSHerbert Xu .alg = "hmac(rmd160)", 2565da7f033dSHerbert Xu .test = alg_test_hash, 2566da7f033dSHerbert Xu .suite = { 2567da7f033dSHerbert Xu .hash = { 2568da7f033dSHerbert Xu .vecs = hmac_rmd160_tv_template, 2569da7f033dSHerbert Xu .count = HMAC_RMD160_TEST_VECTORS 2570da7f033dSHerbert Xu } 2571da7f033dSHerbert Xu } 2572da7f033dSHerbert Xu }, { 2573da7f033dSHerbert Xu .alg = "hmac(sha1)", 2574da7f033dSHerbert Xu .test = alg_test_hash, 2575a1915d51SJarod Wilson .fips_allowed = 1, 2576da7f033dSHerbert Xu .suite = { 2577da7f033dSHerbert Xu .hash = { 2578da7f033dSHerbert Xu .vecs = hmac_sha1_tv_template, 2579da7f033dSHerbert Xu .count = HMAC_SHA1_TEST_VECTORS 2580da7f033dSHerbert Xu } 2581da7f033dSHerbert Xu } 2582da7f033dSHerbert Xu }, { 2583da7f033dSHerbert Xu .alg = "hmac(sha224)", 2584da7f033dSHerbert Xu .test = alg_test_hash, 2585a1915d51SJarod Wilson .fips_allowed = 1, 2586da7f033dSHerbert Xu .suite = { 2587da7f033dSHerbert Xu .hash = { 2588da7f033dSHerbert Xu .vecs = hmac_sha224_tv_template, 2589da7f033dSHerbert Xu .count = HMAC_SHA224_TEST_VECTORS 2590da7f033dSHerbert Xu } 2591da7f033dSHerbert Xu } 2592da7f033dSHerbert Xu }, { 2593da7f033dSHerbert Xu .alg = "hmac(sha256)", 2594da7f033dSHerbert Xu .test = alg_test_hash, 2595a1915d51SJarod Wilson .fips_allowed = 1, 2596da7f033dSHerbert Xu .suite = { 2597da7f033dSHerbert Xu .hash = { 2598da7f033dSHerbert Xu .vecs = hmac_sha256_tv_template, 2599da7f033dSHerbert Xu .count = HMAC_SHA256_TEST_VECTORS 2600da7f033dSHerbert Xu } 2601da7f033dSHerbert Xu } 2602da7f033dSHerbert Xu }, { 2603da7f033dSHerbert Xu .alg = "hmac(sha384)", 2604da7f033dSHerbert Xu .test = alg_test_hash, 2605a1915d51SJarod Wilson .fips_allowed = 1, 2606da7f033dSHerbert Xu .suite = { 2607da7f033dSHerbert Xu .hash = { 2608da7f033dSHerbert Xu .vecs = hmac_sha384_tv_template, 2609da7f033dSHerbert Xu .count = HMAC_SHA384_TEST_VECTORS 2610da7f033dSHerbert Xu } 2611da7f033dSHerbert Xu } 2612da7f033dSHerbert Xu }, { 2613da7f033dSHerbert Xu .alg = "hmac(sha512)", 2614da7f033dSHerbert Xu .test = alg_test_hash, 2615a1915d51SJarod Wilson .fips_allowed = 1, 2616da7f033dSHerbert Xu .suite = { 2617da7f033dSHerbert Xu .hash = { 2618da7f033dSHerbert Xu .vecs = hmac_sha512_tv_template, 2619da7f033dSHerbert Xu .count = HMAC_SHA512_TEST_VECTORS 2620da7f033dSHerbert Xu } 2621da7f033dSHerbert Xu } 2622da7f033dSHerbert Xu }, { 2623da7f033dSHerbert Xu .alg = "lrw(aes)", 26241aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2625da7f033dSHerbert Xu .suite = { 2626da7f033dSHerbert Xu .cipher = { 2627da7f033dSHerbert Xu .enc = { 2628da7f033dSHerbert Xu .vecs = aes_lrw_enc_tv_template, 2629da7f033dSHerbert Xu .count = AES_LRW_ENC_TEST_VECTORS 2630da7f033dSHerbert Xu }, 2631da7f033dSHerbert Xu .dec = { 2632da7f033dSHerbert Xu .vecs = aes_lrw_dec_tv_template, 2633da7f033dSHerbert Xu .count = AES_LRW_DEC_TEST_VECTORS 2634da7f033dSHerbert Xu } 2635da7f033dSHerbert Xu } 2636da7f033dSHerbert Xu } 2637da7f033dSHerbert Xu }, { 26380840605eSJussi Kivilinna .alg = "lrw(camellia)", 26390840605eSJussi Kivilinna .test = alg_test_skcipher, 26400840605eSJussi Kivilinna .suite = { 26410840605eSJussi Kivilinna .cipher = { 26420840605eSJussi Kivilinna .enc = { 26430840605eSJussi Kivilinna .vecs = camellia_lrw_enc_tv_template, 26440840605eSJussi Kivilinna .count = CAMELLIA_LRW_ENC_TEST_VECTORS 26450840605eSJussi Kivilinna }, 26460840605eSJussi Kivilinna .dec = { 26470840605eSJussi Kivilinna .vecs = camellia_lrw_dec_tv_template, 26480840605eSJussi Kivilinna .count = CAMELLIA_LRW_DEC_TEST_VECTORS 26490840605eSJussi Kivilinna } 26500840605eSJussi Kivilinna } 26510840605eSJussi Kivilinna } 26520840605eSJussi Kivilinna }, { 26539b8b0405SJohannes Goetzfried .alg = "lrw(cast6)", 26549b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 26559b8b0405SJohannes Goetzfried .suite = { 26569b8b0405SJohannes Goetzfried .cipher = { 26579b8b0405SJohannes Goetzfried .enc = { 26589b8b0405SJohannes Goetzfried .vecs = cast6_lrw_enc_tv_template, 26599b8b0405SJohannes Goetzfried .count = CAST6_LRW_ENC_TEST_VECTORS 26609b8b0405SJohannes Goetzfried }, 26619b8b0405SJohannes Goetzfried .dec = { 26629b8b0405SJohannes Goetzfried .vecs = cast6_lrw_dec_tv_template, 26639b8b0405SJohannes Goetzfried .count = CAST6_LRW_DEC_TEST_VECTORS 26649b8b0405SJohannes Goetzfried } 26659b8b0405SJohannes Goetzfried } 26669b8b0405SJohannes Goetzfried } 26679b8b0405SJohannes Goetzfried }, { 2668d7bfc0faSJussi Kivilinna .alg = "lrw(serpent)", 2669d7bfc0faSJussi Kivilinna .test = alg_test_skcipher, 2670d7bfc0faSJussi Kivilinna .suite = { 2671d7bfc0faSJussi Kivilinna .cipher = { 2672d7bfc0faSJussi Kivilinna .enc = { 2673d7bfc0faSJussi Kivilinna .vecs = serpent_lrw_enc_tv_template, 2674d7bfc0faSJussi Kivilinna .count = SERPENT_LRW_ENC_TEST_VECTORS 2675d7bfc0faSJussi Kivilinna }, 2676d7bfc0faSJussi Kivilinna .dec = { 2677d7bfc0faSJussi Kivilinna .vecs = serpent_lrw_dec_tv_template, 2678d7bfc0faSJussi Kivilinna .count = SERPENT_LRW_DEC_TEST_VECTORS 2679d7bfc0faSJussi Kivilinna } 2680d7bfc0faSJussi Kivilinna } 2681d7bfc0faSJussi Kivilinna } 2682d7bfc0faSJussi Kivilinna }, { 26830b2a1551SJussi Kivilinna .alg = "lrw(twofish)", 26840b2a1551SJussi Kivilinna .test = alg_test_skcipher, 26850b2a1551SJussi Kivilinna .suite = { 26860b2a1551SJussi Kivilinna .cipher = { 26870b2a1551SJussi Kivilinna .enc = { 26880b2a1551SJussi Kivilinna .vecs = tf_lrw_enc_tv_template, 26890b2a1551SJussi Kivilinna .count = TF_LRW_ENC_TEST_VECTORS 26900b2a1551SJussi Kivilinna }, 26910b2a1551SJussi Kivilinna .dec = { 26920b2a1551SJussi Kivilinna .vecs = tf_lrw_dec_tv_template, 26930b2a1551SJussi Kivilinna .count = TF_LRW_DEC_TEST_VECTORS 26940b2a1551SJussi Kivilinna } 26950b2a1551SJussi Kivilinna } 26960b2a1551SJussi Kivilinna } 26970b2a1551SJussi Kivilinna }, { 2698da7f033dSHerbert Xu .alg = "lzo", 2699da7f033dSHerbert Xu .test = alg_test_comp, 2700da7f033dSHerbert Xu .suite = { 2701da7f033dSHerbert Xu .comp = { 2702da7f033dSHerbert Xu .comp = { 2703da7f033dSHerbert Xu .vecs = lzo_comp_tv_template, 2704da7f033dSHerbert Xu .count = LZO_COMP_TEST_VECTORS 2705da7f033dSHerbert Xu }, 2706da7f033dSHerbert Xu .decomp = { 2707da7f033dSHerbert Xu .vecs = lzo_decomp_tv_template, 2708da7f033dSHerbert Xu .count = LZO_DECOMP_TEST_VECTORS 2709da7f033dSHerbert Xu } 2710da7f033dSHerbert Xu } 2711da7f033dSHerbert Xu } 2712da7f033dSHerbert Xu }, { 2713da7f033dSHerbert Xu .alg = "md4", 2714da7f033dSHerbert Xu .test = alg_test_hash, 2715da7f033dSHerbert Xu .suite = { 2716da7f033dSHerbert Xu .hash = { 2717da7f033dSHerbert Xu .vecs = md4_tv_template, 2718da7f033dSHerbert Xu .count = MD4_TEST_VECTORS 2719da7f033dSHerbert Xu } 2720da7f033dSHerbert Xu } 2721da7f033dSHerbert Xu }, { 2722da7f033dSHerbert Xu .alg = "md5", 2723da7f033dSHerbert Xu .test = alg_test_hash, 2724da7f033dSHerbert Xu .suite = { 2725da7f033dSHerbert Xu .hash = { 2726da7f033dSHerbert Xu .vecs = md5_tv_template, 2727da7f033dSHerbert Xu .count = MD5_TEST_VECTORS 2728da7f033dSHerbert Xu } 2729da7f033dSHerbert Xu } 2730da7f033dSHerbert Xu }, { 2731da7f033dSHerbert Xu .alg = "michael_mic", 2732da7f033dSHerbert Xu .test = alg_test_hash, 2733da7f033dSHerbert Xu .suite = { 2734da7f033dSHerbert Xu .hash = { 2735da7f033dSHerbert Xu .vecs = michael_mic_tv_template, 2736da7f033dSHerbert Xu .count = MICHAEL_MIC_TEST_VECTORS 2737da7f033dSHerbert Xu } 2738da7f033dSHerbert Xu } 2739da7f033dSHerbert Xu }, { 2740ba0e14acSPuneet Saxena .alg = "ofb(aes)", 2741ba0e14acSPuneet Saxena .test = alg_test_skcipher, 2742ba0e14acSPuneet Saxena .fips_allowed = 1, 2743ba0e14acSPuneet Saxena .suite = { 2744ba0e14acSPuneet Saxena .cipher = { 2745ba0e14acSPuneet Saxena .enc = { 2746ba0e14acSPuneet Saxena .vecs = aes_ofb_enc_tv_template, 2747ba0e14acSPuneet Saxena .count = AES_OFB_ENC_TEST_VECTORS 2748ba0e14acSPuneet Saxena }, 2749ba0e14acSPuneet Saxena .dec = { 2750ba0e14acSPuneet Saxena .vecs = aes_ofb_dec_tv_template, 2751ba0e14acSPuneet Saxena .count = AES_OFB_DEC_TEST_VECTORS 2752ba0e14acSPuneet Saxena } 2753ba0e14acSPuneet Saxena } 2754ba0e14acSPuneet Saxena } 2755ba0e14acSPuneet Saxena }, { 2756da7f033dSHerbert Xu .alg = "pcbc(fcrypt)", 27571aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2758da7f033dSHerbert Xu .suite = { 2759da7f033dSHerbert Xu .cipher = { 2760da7f033dSHerbert Xu .enc = { 2761da7f033dSHerbert Xu .vecs = fcrypt_pcbc_enc_tv_template, 2762da7f033dSHerbert Xu .count = FCRYPT_ENC_TEST_VECTORS 2763da7f033dSHerbert Xu }, 2764da7f033dSHerbert Xu .dec = { 2765da7f033dSHerbert Xu .vecs = fcrypt_pcbc_dec_tv_template, 2766da7f033dSHerbert Xu .count = FCRYPT_DEC_TEST_VECTORS 2767da7f033dSHerbert Xu } 2768da7f033dSHerbert Xu } 2769da7f033dSHerbert Xu } 2770da7f033dSHerbert Xu }, { 2771da7f033dSHerbert Xu .alg = "rfc3686(ctr(aes))", 27721aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2773a1915d51SJarod Wilson .fips_allowed = 1, 2774da7f033dSHerbert Xu .suite = { 2775da7f033dSHerbert Xu .cipher = { 2776da7f033dSHerbert Xu .enc = { 2777f7cb80f2SJarod Wilson .vecs = aes_ctr_rfc3686_enc_tv_template, 2778f7cb80f2SJarod Wilson .count = AES_CTR_3686_ENC_TEST_VECTORS 2779da7f033dSHerbert Xu }, 2780da7f033dSHerbert Xu .dec = { 2781f7cb80f2SJarod Wilson .vecs = aes_ctr_rfc3686_dec_tv_template, 2782f7cb80f2SJarod Wilson .count = AES_CTR_3686_DEC_TEST_VECTORS 2783da7f033dSHerbert Xu } 2784da7f033dSHerbert Xu } 2785da7f033dSHerbert Xu } 2786da7f033dSHerbert Xu }, { 278769435b94SAdrian Hoban .alg = "rfc4106(gcm(aes))", 278869435b94SAdrian Hoban .test = alg_test_aead, 278969435b94SAdrian Hoban .suite = { 279069435b94SAdrian Hoban .aead = { 279169435b94SAdrian Hoban .enc = { 279269435b94SAdrian Hoban .vecs = aes_gcm_rfc4106_enc_tv_template, 279369435b94SAdrian Hoban .count = AES_GCM_4106_ENC_TEST_VECTORS 279469435b94SAdrian Hoban }, 279569435b94SAdrian Hoban .dec = { 279669435b94SAdrian Hoban .vecs = aes_gcm_rfc4106_dec_tv_template, 279769435b94SAdrian Hoban .count = AES_GCM_4106_DEC_TEST_VECTORS 279869435b94SAdrian Hoban } 279969435b94SAdrian Hoban } 280069435b94SAdrian Hoban } 280169435b94SAdrian Hoban }, { 280269435b94SAdrian Hoban 280369435b94SAdrian Hoban 28045d667322SJarod Wilson .alg = "rfc4309(ccm(aes))", 28055d667322SJarod Wilson .test = alg_test_aead, 2806a1915d51SJarod Wilson .fips_allowed = 1, 28075d667322SJarod Wilson .suite = { 28085d667322SJarod Wilson .aead = { 28095d667322SJarod Wilson .enc = { 28105d667322SJarod Wilson .vecs = aes_ccm_rfc4309_enc_tv_template, 28115d667322SJarod Wilson .count = AES_CCM_4309_ENC_TEST_VECTORS 28125d667322SJarod Wilson }, 28135d667322SJarod Wilson .dec = { 28145d667322SJarod Wilson .vecs = aes_ccm_rfc4309_dec_tv_template, 28155d667322SJarod Wilson .count = AES_CCM_4309_DEC_TEST_VECTORS 28165d667322SJarod Wilson } 28175d667322SJarod Wilson } 28185d667322SJarod Wilson } 28195d667322SJarod Wilson }, { 2820da7f033dSHerbert Xu .alg = "rmd128", 2821da7f033dSHerbert Xu .test = alg_test_hash, 2822da7f033dSHerbert Xu .suite = { 2823da7f033dSHerbert Xu .hash = { 2824da7f033dSHerbert Xu .vecs = rmd128_tv_template, 2825da7f033dSHerbert Xu .count = RMD128_TEST_VECTORS 2826da7f033dSHerbert Xu } 2827da7f033dSHerbert Xu } 2828da7f033dSHerbert Xu }, { 2829da7f033dSHerbert Xu .alg = "rmd160", 2830da7f033dSHerbert Xu .test = alg_test_hash, 2831da7f033dSHerbert Xu .suite = { 2832da7f033dSHerbert Xu .hash = { 2833da7f033dSHerbert Xu .vecs = rmd160_tv_template, 2834da7f033dSHerbert Xu .count = RMD160_TEST_VECTORS 2835da7f033dSHerbert Xu } 2836da7f033dSHerbert Xu } 2837da7f033dSHerbert Xu }, { 2838da7f033dSHerbert Xu .alg = "rmd256", 2839da7f033dSHerbert Xu .test = alg_test_hash, 2840da7f033dSHerbert Xu .suite = { 2841da7f033dSHerbert Xu .hash = { 2842da7f033dSHerbert Xu .vecs = rmd256_tv_template, 2843da7f033dSHerbert Xu .count = RMD256_TEST_VECTORS 2844da7f033dSHerbert Xu } 2845da7f033dSHerbert Xu } 2846da7f033dSHerbert Xu }, { 2847da7f033dSHerbert Xu .alg = "rmd320", 2848da7f033dSHerbert Xu .test = alg_test_hash, 2849da7f033dSHerbert Xu .suite = { 2850da7f033dSHerbert Xu .hash = { 2851da7f033dSHerbert Xu .vecs = rmd320_tv_template, 2852da7f033dSHerbert Xu .count = RMD320_TEST_VECTORS 2853da7f033dSHerbert Xu } 2854da7f033dSHerbert Xu } 2855da7f033dSHerbert Xu }, { 2856da7f033dSHerbert Xu .alg = "salsa20", 28571aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2858da7f033dSHerbert Xu .suite = { 2859da7f033dSHerbert Xu .cipher = { 2860da7f033dSHerbert Xu .enc = { 2861da7f033dSHerbert Xu .vecs = salsa20_stream_enc_tv_template, 2862da7f033dSHerbert Xu .count = SALSA20_STREAM_ENC_TEST_VECTORS 2863da7f033dSHerbert Xu } 2864da7f033dSHerbert Xu } 2865da7f033dSHerbert Xu } 2866da7f033dSHerbert Xu }, { 2867da7f033dSHerbert Xu .alg = "sha1", 2868da7f033dSHerbert Xu .test = alg_test_hash, 2869a1915d51SJarod Wilson .fips_allowed = 1, 2870da7f033dSHerbert Xu .suite = { 2871da7f033dSHerbert Xu .hash = { 2872da7f033dSHerbert Xu .vecs = sha1_tv_template, 2873da7f033dSHerbert Xu .count = SHA1_TEST_VECTORS 2874da7f033dSHerbert Xu } 2875da7f033dSHerbert Xu } 2876da7f033dSHerbert Xu }, { 2877da7f033dSHerbert Xu .alg = "sha224", 2878da7f033dSHerbert Xu .test = alg_test_hash, 2879a1915d51SJarod Wilson .fips_allowed = 1, 2880da7f033dSHerbert Xu .suite = { 2881da7f033dSHerbert Xu .hash = { 2882da7f033dSHerbert Xu .vecs = sha224_tv_template, 2883da7f033dSHerbert Xu .count = SHA224_TEST_VECTORS 2884da7f033dSHerbert Xu } 2885da7f033dSHerbert Xu } 2886da7f033dSHerbert Xu }, { 2887da7f033dSHerbert Xu .alg = "sha256", 2888da7f033dSHerbert Xu .test = alg_test_hash, 2889a1915d51SJarod Wilson .fips_allowed = 1, 2890da7f033dSHerbert Xu .suite = { 2891da7f033dSHerbert Xu .hash = { 2892da7f033dSHerbert Xu .vecs = sha256_tv_template, 2893da7f033dSHerbert Xu .count = SHA256_TEST_VECTORS 2894da7f033dSHerbert Xu } 2895da7f033dSHerbert Xu } 2896da7f033dSHerbert Xu }, { 2897da7f033dSHerbert Xu .alg = "sha384", 2898da7f033dSHerbert Xu .test = alg_test_hash, 2899a1915d51SJarod Wilson .fips_allowed = 1, 2900da7f033dSHerbert Xu .suite = { 2901da7f033dSHerbert Xu .hash = { 2902da7f033dSHerbert Xu .vecs = sha384_tv_template, 2903da7f033dSHerbert Xu .count = SHA384_TEST_VECTORS 2904da7f033dSHerbert Xu } 2905da7f033dSHerbert Xu } 2906da7f033dSHerbert Xu }, { 2907da7f033dSHerbert Xu .alg = "sha512", 2908da7f033dSHerbert Xu .test = alg_test_hash, 2909a1915d51SJarod Wilson .fips_allowed = 1, 2910da7f033dSHerbert Xu .suite = { 2911da7f033dSHerbert Xu .hash = { 2912da7f033dSHerbert Xu .vecs = sha512_tv_template, 2913da7f033dSHerbert Xu .count = SHA512_TEST_VECTORS 2914da7f033dSHerbert Xu } 2915da7f033dSHerbert Xu } 2916da7f033dSHerbert Xu }, { 2917da7f033dSHerbert Xu .alg = "tgr128", 2918da7f033dSHerbert Xu .test = alg_test_hash, 2919da7f033dSHerbert Xu .suite = { 2920da7f033dSHerbert Xu .hash = { 2921da7f033dSHerbert Xu .vecs = tgr128_tv_template, 2922da7f033dSHerbert Xu .count = TGR128_TEST_VECTORS 2923da7f033dSHerbert Xu } 2924da7f033dSHerbert Xu } 2925da7f033dSHerbert Xu }, { 2926da7f033dSHerbert Xu .alg = "tgr160", 2927da7f033dSHerbert Xu .test = alg_test_hash, 2928da7f033dSHerbert Xu .suite = { 2929da7f033dSHerbert Xu .hash = { 2930da7f033dSHerbert Xu .vecs = tgr160_tv_template, 2931da7f033dSHerbert Xu .count = TGR160_TEST_VECTORS 2932da7f033dSHerbert Xu } 2933da7f033dSHerbert Xu } 2934da7f033dSHerbert Xu }, { 2935da7f033dSHerbert Xu .alg = "tgr192", 2936da7f033dSHerbert Xu .test = alg_test_hash, 2937da7f033dSHerbert Xu .suite = { 2938da7f033dSHerbert Xu .hash = { 2939da7f033dSHerbert Xu .vecs = tgr192_tv_template, 2940da7f033dSHerbert Xu .count = TGR192_TEST_VECTORS 2941da7f033dSHerbert Xu } 2942da7f033dSHerbert Xu } 2943da7f033dSHerbert Xu }, { 2944f1939f7cSShane Wang .alg = "vmac(aes)", 2945f1939f7cSShane Wang .test = alg_test_hash, 2946f1939f7cSShane Wang .suite = { 2947f1939f7cSShane Wang .hash = { 2948f1939f7cSShane Wang .vecs = aes_vmac128_tv_template, 2949f1939f7cSShane Wang .count = VMAC_AES_TEST_VECTORS 2950f1939f7cSShane Wang } 2951f1939f7cSShane Wang } 2952f1939f7cSShane Wang }, { 2953da7f033dSHerbert Xu .alg = "wp256", 2954da7f033dSHerbert Xu .test = alg_test_hash, 2955da7f033dSHerbert Xu .suite = { 2956da7f033dSHerbert Xu .hash = { 2957da7f033dSHerbert Xu .vecs = wp256_tv_template, 2958da7f033dSHerbert Xu .count = WP256_TEST_VECTORS 2959da7f033dSHerbert Xu } 2960da7f033dSHerbert Xu } 2961da7f033dSHerbert Xu }, { 2962da7f033dSHerbert Xu .alg = "wp384", 2963da7f033dSHerbert Xu .test = alg_test_hash, 2964da7f033dSHerbert Xu .suite = { 2965da7f033dSHerbert Xu .hash = { 2966da7f033dSHerbert Xu .vecs = wp384_tv_template, 2967da7f033dSHerbert Xu .count = WP384_TEST_VECTORS 2968da7f033dSHerbert Xu } 2969da7f033dSHerbert Xu } 2970da7f033dSHerbert Xu }, { 2971da7f033dSHerbert Xu .alg = "wp512", 2972da7f033dSHerbert Xu .test = alg_test_hash, 2973da7f033dSHerbert Xu .suite = { 2974da7f033dSHerbert Xu .hash = { 2975da7f033dSHerbert Xu .vecs = wp512_tv_template, 2976da7f033dSHerbert Xu .count = WP512_TEST_VECTORS 2977da7f033dSHerbert Xu } 2978da7f033dSHerbert Xu } 2979da7f033dSHerbert Xu }, { 2980da7f033dSHerbert Xu .alg = "xcbc(aes)", 2981da7f033dSHerbert Xu .test = alg_test_hash, 2982da7f033dSHerbert Xu .suite = { 2983da7f033dSHerbert Xu .hash = { 2984da7f033dSHerbert Xu .vecs = aes_xcbc128_tv_template, 2985da7f033dSHerbert Xu .count = XCBC_AES_TEST_VECTORS 2986da7f033dSHerbert Xu } 2987da7f033dSHerbert Xu } 2988da7f033dSHerbert Xu }, { 2989da7f033dSHerbert Xu .alg = "xts(aes)", 29901aa4ecd9SHerbert Xu .test = alg_test_skcipher, 29912918aa8dSJarod Wilson .fips_allowed = 1, 2992da7f033dSHerbert Xu .suite = { 2993da7f033dSHerbert Xu .cipher = { 2994da7f033dSHerbert Xu .enc = { 2995da7f033dSHerbert Xu .vecs = aes_xts_enc_tv_template, 2996da7f033dSHerbert Xu .count = AES_XTS_ENC_TEST_VECTORS 2997da7f033dSHerbert Xu }, 2998da7f033dSHerbert Xu .dec = { 2999da7f033dSHerbert Xu .vecs = aes_xts_dec_tv_template, 3000da7f033dSHerbert Xu .count = AES_XTS_DEC_TEST_VECTORS 3001da7f033dSHerbert Xu } 3002da7f033dSHerbert Xu } 3003da7f033dSHerbert Xu } 30040c01aed5SGeert Uytterhoeven }, { 30050840605eSJussi Kivilinna .alg = "xts(camellia)", 30060840605eSJussi Kivilinna .test = alg_test_skcipher, 30070840605eSJussi Kivilinna .suite = { 30080840605eSJussi Kivilinna .cipher = { 30090840605eSJussi Kivilinna .enc = { 30100840605eSJussi Kivilinna .vecs = camellia_xts_enc_tv_template, 30110840605eSJussi Kivilinna .count = CAMELLIA_XTS_ENC_TEST_VECTORS 30120840605eSJussi Kivilinna }, 30130840605eSJussi Kivilinna .dec = { 30140840605eSJussi Kivilinna .vecs = camellia_xts_dec_tv_template, 30150840605eSJussi Kivilinna .count = CAMELLIA_XTS_DEC_TEST_VECTORS 30160840605eSJussi Kivilinna } 30170840605eSJussi Kivilinna } 30180840605eSJussi Kivilinna } 30190840605eSJussi Kivilinna }, { 30209b8b0405SJohannes Goetzfried .alg = "xts(cast6)", 30219b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 30229b8b0405SJohannes Goetzfried .suite = { 30239b8b0405SJohannes Goetzfried .cipher = { 30249b8b0405SJohannes Goetzfried .enc = { 30259b8b0405SJohannes Goetzfried .vecs = cast6_xts_enc_tv_template, 30269b8b0405SJohannes Goetzfried .count = CAST6_XTS_ENC_TEST_VECTORS 30279b8b0405SJohannes Goetzfried }, 30289b8b0405SJohannes Goetzfried .dec = { 30299b8b0405SJohannes Goetzfried .vecs = cast6_xts_dec_tv_template, 30309b8b0405SJohannes Goetzfried .count = CAST6_XTS_DEC_TEST_VECTORS 30319b8b0405SJohannes Goetzfried } 30329b8b0405SJohannes Goetzfried } 30339b8b0405SJohannes Goetzfried } 30349b8b0405SJohannes Goetzfried }, { 303518be20b9SJussi Kivilinna .alg = "xts(serpent)", 303618be20b9SJussi Kivilinna .test = alg_test_skcipher, 303718be20b9SJussi Kivilinna .suite = { 303818be20b9SJussi Kivilinna .cipher = { 303918be20b9SJussi Kivilinna .enc = { 304018be20b9SJussi Kivilinna .vecs = serpent_xts_enc_tv_template, 304118be20b9SJussi Kivilinna .count = SERPENT_XTS_ENC_TEST_VECTORS 304218be20b9SJussi Kivilinna }, 304318be20b9SJussi Kivilinna .dec = { 304418be20b9SJussi Kivilinna .vecs = serpent_xts_dec_tv_template, 304518be20b9SJussi Kivilinna .count = SERPENT_XTS_DEC_TEST_VECTORS 304618be20b9SJussi Kivilinna } 304718be20b9SJussi Kivilinna } 304818be20b9SJussi Kivilinna } 304918be20b9SJussi Kivilinna }, { 3050aed265b9SJussi Kivilinna .alg = "xts(twofish)", 3051aed265b9SJussi Kivilinna .test = alg_test_skcipher, 3052aed265b9SJussi Kivilinna .suite = { 3053aed265b9SJussi Kivilinna .cipher = { 3054aed265b9SJussi Kivilinna .enc = { 3055aed265b9SJussi Kivilinna .vecs = tf_xts_enc_tv_template, 3056aed265b9SJussi Kivilinna .count = TF_XTS_ENC_TEST_VECTORS 3057aed265b9SJussi Kivilinna }, 3058aed265b9SJussi Kivilinna .dec = { 3059aed265b9SJussi Kivilinna .vecs = tf_xts_dec_tv_template, 3060aed265b9SJussi Kivilinna .count = TF_XTS_DEC_TEST_VECTORS 3061aed265b9SJussi Kivilinna } 3062aed265b9SJussi Kivilinna } 3063aed265b9SJussi Kivilinna } 3064aed265b9SJussi Kivilinna }, { 30650c01aed5SGeert Uytterhoeven .alg = "zlib", 30660c01aed5SGeert Uytterhoeven .test = alg_test_pcomp, 30670c01aed5SGeert Uytterhoeven .suite = { 30680c01aed5SGeert Uytterhoeven .pcomp = { 30690c01aed5SGeert Uytterhoeven .comp = { 30700c01aed5SGeert Uytterhoeven .vecs = zlib_comp_tv_template, 30710c01aed5SGeert Uytterhoeven .count = ZLIB_COMP_TEST_VECTORS 30720c01aed5SGeert Uytterhoeven }, 30730c01aed5SGeert Uytterhoeven .decomp = { 30740c01aed5SGeert Uytterhoeven .vecs = zlib_decomp_tv_template, 30750c01aed5SGeert Uytterhoeven .count = ZLIB_DECOMP_TEST_VECTORS 30760c01aed5SGeert Uytterhoeven } 30770c01aed5SGeert Uytterhoeven } 30780c01aed5SGeert Uytterhoeven } 3079da7f033dSHerbert Xu } 3080da7f033dSHerbert Xu }; 3081da7f033dSHerbert Xu 30821aa4ecd9SHerbert Xu static int alg_find_test(const char *alg) 3083da7f033dSHerbert Xu { 3084da7f033dSHerbert Xu int start = 0; 3085da7f033dSHerbert Xu int end = ARRAY_SIZE(alg_test_descs); 3086da7f033dSHerbert Xu 3087da7f033dSHerbert Xu while (start < end) { 3088da7f033dSHerbert Xu int i = (start + end) / 2; 3089da7f033dSHerbert Xu int diff = strcmp(alg_test_descs[i].alg, alg); 3090da7f033dSHerbert Xu 3091da7f033dSHerbert Xu if (diff > 0) { 3092da7f033dSHerbert Xu end = i; 3093da7f033dSHerbert Xu continue; 3094da7f033dSHerbert Xu } 3095da7f033dSHerbert Xu 3096da7f033dSHerbert Xu if (diff < 0) { 3097da7f033dSHerbert Xu start = i + 1; 3098da7f033dSHerbert Xu continue; 3099da7f033dSHerbert Xu } 3100da7f033dSHerbert Xu 31011aa4ecd9SHerbert Xu return i; 3102da7f033dSHerbert Xu } 3103da7f033dSHerbert Xu 31041aa4ecd9SHerbert Xu return -1; 31051aa4ecd9SHerbert Xu } 31061aa4ecd9SHerbert Xu 31071aa4ecd9SHerbert Xu int alg_test(const char *driver, const char *alg, u32 type, u32 mask) 31081aa4ecd9SHerbert Xu { 31091aa4ecd9SHerbert Xu int i; 3110a68f6610SHerbert Xu int j; 3111d12d6b6dSNeil Horman int rc; 31121aa4ecd9SHerbert Xu 31131aa4ecd9SHerbert Xu if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) { 31141aa4ecd9SHerbert Xu char nalg[CRYPTO_MAX_ALG_NAME]; 31151aa4ecd9SHerbert Xu 31161aa4ecd9SHerbert Xu if (snprintf(nalg, sizeof(nalg), "ecb(%s)", alg) >= 31171aa4ecd9SHerbert Xu sizeof(nalg)) 31181aa4ecd9SHerbert Xu return -ENAMETOOLONG; 31191aa4ecd9SHerbert Xu 31201aa4ecd9SHerbert Xu i = alg_find_test(nalg); 31211aa4ecd9SHerbert Xu if (i < 0) 31221aa4ecd9SHerbert Xu goto notest; 31231aa4ecd9SHerbert Xu 3124a3bef3a3SJarod Wilson if (fips_enabled && !alg_test_descs[i].fips_allowed) 3125a3bef3a3SJarod Wilson goto non_fips_alg; 3126a3bef3a3SJarod Wilson 3127941fb328SJarod Wilson rc = alg_test_cipher(alg_test_descs + i, driver, type, mask); 3128941fb328SJarod Wilson goto test_done; 31291aa4ecd9SHerbert Xu } 31301aa4ecd9SHerbert Xu 31311aa4ecd9SHerbert Xu i = alg_find_test(alg); 3132a68f6610SHerbert Xu j = alg_find_test(driver); 3133a68f6610SHerbert Xu if (i < 0 && j < 0) 31341aa4ecd9SHerbert Xu goto notest; 31351aa4ecd9SHerbert Xu 3136a68f6610SHerbert Xu if (fips_enabled && ((i >= 0 && !alg_test_descs[i].fips_allowed) || 3137a68f6610SHerbert Xu (j >= 0 && !alg_test_descs[j].fips_allowed))) 3138a3bef3a3SJarod Wilson goto non_fips_alg; 3139a3bef3a3SJarod Wilson 3140a68f6610SHerbert Xu rc = 0; 3141a68f6610SHerbert Xu if (i >= 0) 3142a68f6610SHerbert Xu rc |= alg_test_descs[i].test(alg_test_descs + i, driver, 31431aa4ecd9SHerbert Xu type, mask); 3144a68f6610SHerbert Xu if (j >= 0) 3145a68f6610SHerbert Xu rc |= alg_test_descs[j].test(alg_test_descs + j, driver, 3146a68f6610SHerbert Xu type, mask); 3147a68f6610SHerbert Xu 3148941fb328SJarod Wilson test_done: 3149d12d6b6dSNeil Horman if (fips_enabled && rc) 3150d12d6b6dSNeil Horman panic("%s: %s alg self test failed in fips mode!\n", driver, alg); 3151d12d6b6dSNeil Horman 315229ecd4abSJarod Wilson if (fips_enabled && !rc) 315329ecd4abSJarod Wilson printk(KERN_INFO "alg: self-tests for %s (%s) passed\n", 315429ecd4abSJarod Wilson driver, alg); 315529ecd4abSJarod Wilson 3156d12d6b6dSNeil Horman return rc; 31571aa4ecd9SHerbert Xu 31581aa4ecd9SHerbert Xu notest: 3159da7f033dSHerbert Xu printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver); 3160da7f033dSHerbert Xu return 0; 3161a3bef3a3SJarod Wilson non_fips_alg: 3162a3bef3a3SJarod Wilson return -EINVAL; 3163da7f033dSHerbert Xu } 31640b767f96SAlexander Shishkin 3165326a6346SHerbert Xu #endif /* CONFIG_CRYPTO_MANAGER_DISABLE_TESTS */ 31660b767f96SAlexander Shishkin 3167da7f033dSHerbert Xu EXPORT_SYMBOL_GPL(alg_test); 3168