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 231ce33115SHerbert Xu #include <crypto/aead.h> 24da7f033dSHerbert Xu #include <crypto/hash.h> 25da7f033dSHerbert Xu #include <linux/err.h> 261c41b882SHerbert Xu #include <linux/fips.h> 27da7f033dSHerbert Xu #include <linux/module.h> 28da7f033dSHerbert Xu #include <linux/scatterlist.h> 29da7f033dSHerbert Xu #include <linux/slab.h> 30da7f033dSHerbert Xu #include <linux/string.h> 317647d6ceSJarod Wilson #include <crypto/rng.h> 3264d1cdfbSStephan Mueller #include <crypto/drbg.h> 33da7f033dSHerbert Xu 34da7f033dSHerbert Xu #include "internal.h" 350b767f96SAlexander Shishkin 36326a6346SHerbert Xu #ifdef CONFIG_CRYPTO_MANAGER_DISABLE_TESTS 370b767f96SAlexander Shishkin 380b767f96SAlexander Shishkin /* a perfect nop */ 390b767f96SAlexander Shishkin int alg_test(const char *driver, const char *alg, u32 type, u32 mask) 400b767f96SAlexander Shishkin { 410b767f96SAlexander Shishkin return 0; 420b767f96SAlexander Shishkin } 430b767f96SAlexander Shishkin 440b767f96SAlexander Shishkin #else 450b767f96SAlexander Shishkin 46da7f033dSHerbert Xu #include "testmgr.h" 47da7f033dSHerbert Xu 48da7f033dSHerbert Xu /* 49da7f033dSHerbert Xu * Need slab memory for testing (size in number of pages). 50da7f033dSHerbert Xu */ 51da7f033dSHerbert Xu #define XBUFSIZE 8 52da7f033dSHerbert Xu 53da7f033dSHerbert Xu /* 54da7f033dSHerbert Xu * Indexes into the xbuf to simulate cross-page access. 55da7f033dSHerbert Xu */ 56da7f033dSHerbert Xu #define IDX1 32 57da7f033dSHerbert Xu #define IDX2 32400 58da7f033dSHerbert Xu #define IDX3 1 59da7f033dSHerbert Xu #define IDX4 8193 60da7f033dSHerbert Xu #define IDX5 22222 61da7f033dSHerbert Xu #define IDX6 17101 62da7f033dSHerbert Xu #define IDX7 27333 63da7f033dSHerbert Xu #define IDX8 3000 64da7f033dSHerbert Xu 65da7f033dSHerbert Xu /* 66da7f033dSHerbert Xu * Used by test_cipher() 67da7f033dSHerbert Xu */ 68da7f033dSHerbert Xu #define ENCRYPT 1 69da7f033dSHerbert Xu #define DECRYPT 0 70da7f033dSHerbert Xu 71da7f033dSHerbert Xu struct tcrypt_result { 72da7f033dSHerbert Xu struct completion completion; 73da7f033dSHerbert Xu int err; 74da7f033dSHerbert Xu }; 75da7f033dSHerbert Xu 76da7f033dSHerbert Xu struct aead_test_suite { 77da7f033dSHerbert Xu struct { 78da7f033dSHerbert Xu struct aead_testvec *vecs; 79da7f033dSHerbert Xu unsigned int count; 80da7f033dSHerbert Xu } enc, dec; 81da7f033dSHerbert Xu }; 82da7f033dSHerbert Xu 83da7f033dSHerbert Xu struct cipher_test_suite { 84da7f033dSHerbert Xu struct { 85da7f033dSHerbert Xu struct cipher_testvec *vecs; 86da7f033dSHerbert Xu unsigned int count; 87da7f033dSHerbert Xu } enc, dec; 88da7f033dSHerbert Xu }; 89da7f033dSHerbert Xu 90da7f033dSHerbert Xu struct comp_test_suite { 91da7f033dSHerbert Xu struct { 92da7f033dSHerbert Xu struct comp_testvec *vecs; 93da7f033dSHerbert Xu unsigned int count; 94da7f033dSHerbert Xu } comp, decomp; 95da7f033dSHerbert Xu }; 96da7f033dSHerbert Xu 978064efb8SGeert Uytterhoeven struct pcomp_test_suite { 988064efb8SGeert Uytterhoeven struct { 998064efb8SGeert Uytterhoeven struct pcomp_testvec *vecs; 1008064efb8SGeert Uytterhoeven unsigned int count; 1018064efb8SGeert Uytterhoeven } comp, decomp; 1028064efb8SGeert Uytterhoeven }; 1038064efb8SGeert Uytterhoeven 104da7f033dSHerbert Xu struct hash_test_suite { 105da7f033dSHerbert Xu struct hash_testvec *vecs; 106da7f033dSHerbert Xu unsigned int count; 107da7f033dSHerbert Xu }; 108da7f033dSHerbert Xu 1097647d6ceSJarod Wilson struct cprng_test_suite { 1107647d6ceSJarod Wilson struct cprng_testvec *vecs; 1117647d6ceSJarod Wilson unsigned int count; 1127647d6ceSJarod Wilson }; 1137647d6ceSJarod Wilson 11464d1cdfbSStephan Mueller struct drbg_test_suite { 11564d1cdfbSStephan Mueller struct drbg_testvec *vecs; 11664d1cdfbSStephan Mueller unsigned int count; 11764d1cdfbSStephan Mueller }; 11864d1cdfbSStephan Mueller 119da7f033dSHerbert Xu struct alg_test_desc { 120da7f033dSHerbert Xu const char *alg; 121da7f033dSHerbert Xu int (*test)(const struct alg_test_desc *desc, const char *driver, 122da7f033dSHerbert Xu u32 type, u32 mask); 123a1915d51SJarod Wilson int fips_allowed; /* set if alg is allowed in fips mode */ 124da7f033dSHerbert Xu 125da7f033dSHerbert Xu union { 126da7f033dSHerbert Xu struct aead_test_suite aead; 127da7f033dSHerbert Xu struct cipher_test_suite cipher; 128da7f033dSHerbert Xu struct comp_test_suite comp; 1298064efb8SGeert Uytterhoeven struct pcomp_test_suite pcomp; 130da7f033dSHerbert Xu struct hash_test_suite hash; 1317647d6ceSJarod Wilson struct cprng_test_suite cprng; 13264d1cdfbSStephan Mueller struct drbg_test_suite drbg; 133da7f033dSHerbert Xu } suite; 134da7f033dSHerbert Xu }; 135da7f033dSHerbert Xu 136da7f033dSHerbert Xu static unsigned int IDX[8] = { IDX1, IDX2, IDX3, IDX4, IDX5, IDX6, IDX7, IDX8 }; 137da7f033dSHerbert Xu 138da7f033dSHerbert Xu static void hexdump(unsigned char *buf, unsigned int len) 139da7f033dSHerbert Xu { 140da7f033dSHerbert Xu print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET, 141da7f033dSHerbert Xu 16, 1, 142da7f033dSHerbert Xu buf, len, false); 143da7f033dSHerbert Xu } 144da7f033dSHerbert Xu 145da7f033dSHerbert Xu static void tcrypt_complete(struct crypto_async_request *req, int err) 146da7f033dSHerbert Xu { 147da7f033dSHerbert Xu struct tcrypt_result *res = req->data; 148da7f033dSHerbert Xu 149da7f033dSHerbert Xu if (err == -EINPROGRESS) 150da7f033dSHerbert Xu return; 151da7f033dSHerbert Xu 152da7f033dSHerbert Xu res->err = err; 153da7f033dSHerbert Xu complete(&res->completion); 154da7f033dSHerbert Xu } 155da7f033dSHerbert Xu 156f8b0d4d0SHerbert Xu static int testmgr_alloc_buf(char *buf[XBUFSIZE]) 157f8b0d4d0SHerbert Xu { 158f8b0d4d0SHerbert Xu int i; 159f8b0d4d0SHerbert Xu 160f8b0d4d0SHerbert Xu for (i = 0; i < XBUFSIZE; i++) { 161f8b0d4d0SHerbert Xu buf[i] = (void *)__get_free_page(GFP_KERNEL); 162f8b0d4d0SHerbert Xu if (!buf[i]) 163f8b0d4d0SHerbert Xu goto err_free_buf; 164f8b0d4d0SHerbert Xu } 165f8b0d4d0SHerbert Xu 166f8b0d4d0SHerbert Xu return 0; 167f8b0d4d0SHerbert Xu 168f8b0d4d0SHerbert Xu err_free_buf: 169f8b0d4d0SHerbert Xu while (i-- > 0) 170f8b0d4d0SHerbert Xu free_page((unsigned long)buf[i]); 171f8b0d4d0SHerbert Xu 172f8b0d4d0SHerbert Xu return -ENOMEM; 173f8b0d4d0SHerbert Xu } 174f8b0d4d0SHerbert Xu 175f8b0d4d0SHerbert Xu static void testmgr_free_buf(char *buf[XBUFSIZE]) 176f8b0d4d0SHerbert Xu { 177f8b0d4d0SHerbert Xu int i; 178f8b0d4d0SHerbert Xu 179f8b0d4d0SHerbert Xu for (i = 0; i < XBUFSIZE; i++) 180f8b0d4d0SHerbert Xu free_page((unsigned long)buf[i]); 181f8b0d4d0SHerbert Xu } 182f8b0d4d0SHerbert Xu 183d4c85f9bSCristian Stoica static int wait_async_op(struct tcrypt_result *tr, int ret) 184a8f1a052SDavid S. Miller { 185a8f1a052SDavid S. Miller if (ret == -EINPROGRESS || ret == -EBUSY) { 1868a45ac12SRabin Vincent wait_for_completion(&tr->completion); 18716735d02SWolfram Sang reinit_completion(&tr->completion); 1888a45ac12SRabin Vincent ret = tr->err; 189a8f1a052SDavid S. Miller } 190a8f1a052SDavid S. Miller return ret; 191a8f1a052SDavid S. Miller } 192a8f1a052SDavid S. Miller 193da5ffe11SJussi Kivilinna static int __test_hash(struct crypto_ahash *tfm, struct hash_testvec *template, 194da5ffe11SJussi Kivilinna unsigned int tcount, bool use_digest, 195da5ffe11SJussi Kivilinna const int align_offset) 196da7f033dSHerbert Xu { 197da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_ahash_tfm(tfm)); 198da7f033dSHerbert Xu unsigned int i, j, k, temp; 199da7f033dSHerbert Xu struct scatterlist sg[8]; 20029b77e5dSHoria Geanta char *result; 20129b77e5dSHoria Geanta char *key; 202da7f033dSHerbert Xu struct ahash_request *req; 203da7f033dSHerbert Xu struct tcrypt_result tresult; 204da7f033dSHerbert Xu void *hash_buff; 205f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 206f8b0d4d0SHerbert Xu int ret = -ENOMEM; 207f8b0d4d0SHerbert Xu 20829b77e5dSHoria Geanta result = kmalloc(MAX_DIGEST_SIZE, GFP_KERNEL); 20929b77e5dSHoria Geanta if (!result) 21029b77e5dSHoria Geanta return ret; 21129b77e5dSHoria Geanta key = kmalloc(MAX_KEYLEN, GFP_KERNEL); 21229b77e5dSHoria Geanta if (!key) 21329b77e5dSHoria Geanta goto out_nobuf; 214f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 215f8b0d4d0SHerbert Xu goto out_nobuf; 216da7f033dSHerbert Xu 217da7f033dSHerbert Xu init_completion(&tresult.completion); 218da7f033dSHerbert Xu 219da7f033dSHerbert Xu req = ahash_request_alloc(tfm, GFP_KERNEL); 220da7f033dSHerbert Xu if (!req) { 221da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Failed to allocate request for " 222da7f033dSHerbert Xu "%s\n", algo); 223da7f033dSHerbert Xu goto out_noreq; 224da7f033dSHerbert Xu } 225da7f033dSHerbert Xu ahash_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 226da7f033dSHerbert Xu tcrypt_complete, &tresult); 227da7f033dSHerbert Xu 228a0cfae59SHerbert Xu j = 0; 229da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 230a0cfae59SHerbert Xu if (template[i].np) 231a0cfae59SHerbert Xu continue; 232a0cfae59SHerbert Xu 233da5ffe11SJussi Kivilinna ret = -EINVAL; 234da5ffe11SJussi Kivilinna if (WARN_ON(align_offset + template[i].psize > PAGE_SIZE)) 235da5ffe11SJussi Kivilinna goto out; 236da5ffe11SJussi Kivilinna 237a0cfae59SHerbert Xu j++; 23829b77e5dSHoria Geanta memset(result, 0, MAX_DIGEST_SIZE); 239da7f033dSHerbert Xu 240da7f033dSHerbert Xu hash_buff = xbuf[0]; 241da5ffe11SJussi Kivilinna hash_buff += align_offset; 242da7f033dSHerbert Xu 243da7f033dSHerbert Xu memcpy(hash_buff, template[i].plaintext, template[i].psize); 244da7f033dSHerbert Xu sg_init_one(&sg[0], hash_buff, template[i].psize); 245da7f033dSHerbert Xu 246da7f033dSHerbert Xu if (template[i].ksize) { 247da7f033dSHerbert Xu crypto_ahash_clear_flags(tfm, ~0); 24829b77e5dSHoria Geanta if (template[i].ksize > MAX_KEYLEN) { 24929b77e5dSHoria Geanta pr_err("alg: hash: setkey failed on test %d for %s: key size %d > %d\n", 25029b77e5dSHoria Geanta j, algo, template[i].ksize, MAX_KEYLEN); 25129b77e5dSHoria Geanta ret = -EINVAL; 25229b77e5dSHoria Geanta goto out; 25329b77e5dSHoria Geanta } 25429b77e5dSHoria Geanta memcpy(key, template[i].key, template[i].ksize); 25529b77e5dSHoria Geanta ret = crypto_ahash_setkey(tfm, key, template[i].ksize); 256da7f033dSHerbert Xu if (ret) { 257da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: setkey failed on " 258a0cfae59SHerbert Xu "test %d for %s: ret=%d\n", j, algo, 259da7f033dSHerbert Xu -ret); 260da7f033dSHerbert Xu goto out; 261da7f033dSHerbert Xu } 262da7f033dSHerbert Xu } 263da7f033dSHerbert Xu 264da7f033dSHerbert Xu ahash_request_set_crypt(req, sg, result, template[i].psize); 265a8f1a052SDavid S. Miller if (use_digest) { 266d4c85f9bSCristian Stoica ret = wait_async_op(&tresult, crypto_ahash_digest(req)); 267a8f1a052SDavid S. Miller if (ret) { 268a8f1a052SDavid S. Miller pr_err("alg: hash: digest failed on test %d " 269a0cfae59SHerbert Xu "for %s: ret=%d\n", j, algo, -ret); 270da7f033dSHerbert Xu goto out; 271da7f033dSHerbert Xu } 272a8f1a052SDavid S. Miller } else { 273d4c85f9bSCristian Stoica ret = wait_async_op(&tresult, crypto_ahash_init(req)); 274a8f1a052SDavid S. Miller if (ret) { 275a8f1a052SDavid S. Miller pr_err("alt: hash: init failed on test %d " 276a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 277a8f1a052SDavid S. Miller goto out; 278a8f1a052SDavid S. Miller } 279d4c85f9bSCristian Stoica ret = wait_async_op(&tresult, crypto_ahash_update(req)); 280a8f1a052SDavid S. Miller if (ret) { 281a8f1a052SDavid S. Miller pr_err("alt: hash: update failed on test %d " 282a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 283a8f1a052SDavid S. Miller goto out; 284a8f1a052SDavid S. Miller } 285d4c85f9bSCristian Stoica ret = wait_async_op(&tresult, crypto_ahash_final(req)); 286a8f1a052SDavid S. Miller if (ret) { 287a8f1a052SDavid S. Miller pr_err("alt: hash: final failed on test %d " 288a8f1a052SDavid S. Miller "for %s: ret=%d\n", j, algo, -ret); 289a8f1a052SDavid S. Miller goto out; 290a8f1a052SDavid S. Miller } 291a8f1a052SDavid S. Miller } 292da7f033dSHerbert Xu 293da7f033dSHerbert Xu if (memcmp(result, template[i].digest, 294da7f033dSHerbert Xu crypto_ahash_digestsize(tfm))) { 295da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Test %d failed for %s\n", 296a0cfae59SHerbert Xu j, algo); 297da7f033dSHerbert Xu hexdump(result, crypto_ahash_digestsize(tfm)); 298da7f033dSHerbert Xu ret = -EINVAL; 299da7f033dSHerbert Xu goto out; 300da7f033dSHerbert Xu } 301da7f033dSHerbert Xu } 302da7f033dSHerbert Xu 303da7f033dSHerbert Xu j = 0; 304da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 305da5ffe11SJussi Kivilinna /* alignment tests are only done with continuous buffers */ 306da5ffe11SJussi Kivilinna if (align_offset != 0) 307da5ffe11SJussi Kivilinna break; 308da5ffe11SJussi Kivilinna 3095f2b424eSCristian Stoica if (!template[i].np) 3105f2b424eSCristian Stoica continue; 3115f2b424eSCristian Stoica 312da7f033dSHerbert Xu j++; 31329b77e5dSHoria Geanta memset(result, 0, MAX_DIGEST_SIZE); 314da7f033dSHerbert Xu 315da7f033dSHerbert Xu temp = 0; 316da7f033dSHerbert Xu sg_init_table(sg, template[i].np); 317fd57f22aSHerbert Xu ret = -EINVAL; 318da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 319fd57f22aSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 320fd57f22aSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 321fd57f22aSHerbert Xu goto out; 322da7f033dSHerbert Xu sg_set_buf(&sg[k], 323da7f033dSHerbert Xu memcpy(xbuf[IDX[k] >> PAGE_SHIFT] + 324da7f033dSHerbert Xu offset_in_page(IDX[k]), 325da7f033dSHerbert Xu template[i].plaintext + temp, 326da7f033dSHerbert Xu template[i].tap[k]), 327da7f033dSHerbert Xu template[i].tap[k]); 328da7f033dSHerbert Xu temp += template[i].tap[k]; 329da7f033dSHerbert Xu } 330da7f033dSHerbert Xu 331da7f033dSHerbert Xu if (template[i].ksize) { 33229b77e5dSHoria Geanta if (template[i].ksize > MAX_KEYLEN) { 33329b77e5dSHoria Geanta pr_err("alg: hash: setkey failed on test %d for %s: key size %d > %d\n", 3345f2b424eSCristian Stoica j, algo, template[i].ksize, MAX_KEYLEN); 33529b77e5dSHoria Geanta ret = -EINVAL; 33629b77e5dSHoria Geanta goto out; 33729b77e5dSHoria Geanta } 338da7f033dSHerbert Xu crypto_ahash_clear_flags(tfm, ~0); 33929b77e5dSHoria Geanta memcpy(key, template[i].key, template[i].ksize); 3405f2b424eSCristian Stoica ret = crypto_ahash_setkey(tfm, key, template[i].ksize); 341da7f033dSHerbert Xu 342da7f033dSHerbert Xu if (ret) { 343da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: setkey " 344da7f033dSHerbert Xu "failed on chunking test %d " 3455f2b424eSCristian Stoica "for %s: ret=%d\n", j, algo, -ret); 346da7f033dSHerbert Xu goto out; 347da7f033dSHerbert Xu } 348da7f033dSHerbert Xu } 349da7f033dSHerbert Xu 3505f2b424eSCristian Stoica ahash_request_set_crypt(req, sg, result, template[i].psize); 351da7f033dSHerbert Xu ret = crypto_ahash_digest(req); 352da7f033dSHerbert Xu switch (ret) { 353da7f033dSHerbert Xu case 0: 354da7f033dSHerbert Xu break; 355da7f033dSHerbert Xu case -EINPROGRESS: 356da7f033dSHerbert Xu case -EBUSY: 3578a45ac12SRabin Vincent wait_for_completion(&tresult.completion); 35816735d02SWolfram Sang reinit_completion(&tresult.completion); 3598a45ac12SRabin Vincent ret = tresult.err; 3608a45ac12SRabin Vincent if (!ret) 361da7f033dSHerbert Xu break; 362da7f033dSHerbert Xu /* fall through */ 363da7f033dSHerbert Xu default: 364da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: digest failed " 365da7f033dSHerbert Xu "on chunking test %d for %s: " 366da7f033dSHerbert Xu "ret=%d\n", j, algo, -ret); 367da7f033dSHerbert Xu goto out; 368da7f033dSHerbert Xu } 369da7f033dSHerbert Xu 370da7f033dSHerbert Xu if (memcmp(result, template[i].digest, 371da7f033dSHerbert Xu crypto_ahash_digestsize(tfm))) { 372da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Chunking test %d " 373da7f033dSHerbert Xu "failed for %s\n", j, algo); 374da7f033dSHerbert Xu hexdump(result, crypto_ahash_digestsize(tfm)); 375da7f033dSHerbert Xu ret = -EINVAL; 376da7f033dSHerbert Xu goto out; 377da7f033dSHerbert Xu } 378da7f033dSHerbert Xu } 379da7f033dSHerbert Xu 380da7f033dSHerbert Xu ret = 0; 381da7f033dSHerbert Xu 382da7f033dSHerbert Xu out: 383da7f033dSHerbert Xu ahash_request_free(req); 384da7f033dSHerbert Xu out_noreq: 385f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 386f8b0d4d0SHerbert Xu out_nobuf: 38729b77e5dSHoria Geanta kfree(key); 38829b77e5dSHoria Geanta kfree(result); 389da7f033dSHerbert Xu return ret; 390da7f033dSHerbert Xu } 391da7f033dSHerbert Xu 392da5ffe11SJussi Kivilinna static int test_hash(struct crypto_ahash *tfm, struct hash_testvec *template, 393da5ffe11SJussi Kivilinna unsigned int tcount, bool use_digest) 394da5ffe11SJussi Kivilinna { 395da5ffe11SJussi Kivilinna unsigned int alignmask; 396da5ffe11SJussi Kivilinna int ret; 397da5ffe11SJussi Kivilinna 398da5ffe11SJussi Kivilinna ret = __test_hash(tfm, template, tcount, use_digest, 0); 399da5ffe11SJussi Kivilinna if (ret) 400da5ffe11SJussi Kivilinna return ret; 401da5ffe11SJussi Kivilinna 402da5ffe11SJussi Kivilinna /* test unaligned buffers, check with one byte offset */ 403da5ffe11SJussi Kivilinna ret = __test_hash(tfm, template, tcount, use_digest, 1); 404da5ffe11SJussi Kivilinna if (ret) 405da5ffe11SJussi Kivilinna return ret; 406da5ffe11SJussi Kivilinna 407da5ffe11SJussi Kivilinna alignmask = crypto_tfm_alg_alignmask(&tfm->base); 408da5ffe11SJussi Kivilinna if (alignmask) { 409da5ffe11SJussi Kivilinna /* Check if alignment mask for tfm is correctly set. */ 410da5ffe11SJussi Kivilinna ret = __test_hash(tfm, template, tcount, use_digest, 411da5ffe11SJussi Kivilinna alignmask + 1); 412da5ffe11SJussi Kivilinna if (ret) 413da5ffe11SJussi Kivilinna return ret; 414da5ffe11SJussi Kivilinna } 415da5ffe11SJussi Kivilinna 416da5ffe11SJussi Kivilinna return 0; 417da5ffe11SJussi Kivilinna } 418da5ffe11SJussi Kivilinna 419d8a32ac2SJussi Kivilinna static int __test_aead(struct crypto_aead *tfm, int enc, 420d8a32ac2SJussi Kivilinna struct aead_testvec *template, unsigned int tcount, 42158dcf548SJussi Kivilinna const bool diff_dst, const int align_offset) 422da7f033dSHerbert Xu { 423da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_aead_tfm(tfm)); 424da7f033dSHerbert Xu unsigned int i, j, k, n, temp; 425f8b0d4d0SHerbert Xu int ret = -ENOMEM; 426da7f033dSHerbert Xu char *q; 427da7f033dSHerbert Xu char *key; 428da7f033dSHerbert Xu struct aead_request *req; 429d8a32ac2SJussi Kivilinna struct scatterlist *sg; 430d8a32ac2SJussi Kivilinna struct scatterlist *sgout; 431d8a32ac2SJussi Kivilinna const char *e, *d; 432da7f033dSHerbert Xu struct tcrypt_result result; 433424a5da6SCristian Stoica unsigned int authsize, iv_len; 434da7f033dSHerbert Xu void *input; 435d8a32ac2SJussi Kivilinna void *output; 436da7f033dSHerbert Xu void *assoc; 4379bac019dSTadeusz Struk char *iv; 438f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 439d8a32ac2SJussi Kivilinna char *xoutbuf[XBUFSIZE]; 440f8b0d4d0SHerbert Xu char *axbuf[XBUFSIZE]; 441f8b0d4d0SHerbert Xu 4429bac019dSTadeusz Struk iv = kzalloc(MAX_IVLEN, GFP_KERNEL); 4439bac019dSTadeusz Struk if (!iv) 4449bac019dSTadeusz Struk return ret; 44529b77e5dSHoria Geanta key = kmalloc(MAX_KEYLEN, GFP_KERNEL); 44629b77e5dSHoria Geanta if (!key) 44729b77e5dSHoria Geanta goto out_noxbuf; 448f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 449f8b0d4d0SHerbert Xu goto out_noxbuf; 450f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(axbuf)) 451f8b0d4d0SHerbert Xu goto out_noaxbuf; 452d8a32ac2SJussi Kivilinna if (diff_dst && testmgr_alloc_buf(xoutbuf)) 453d8a32ac2SJussi Kivilinna goto out_nooutbuf; 454d8a32ac2SJussi Kivilinna 455d8a32ac2SJussi Kivilinna /* avoid "the frame size is larger than 1024 bytes" compiler warning */ 4568a525fcdSHerbert Xu sg = kmalloc(sizeof(*sg) * 8 * (diff_dst ? 4 : 2), GFP_KERNEL); 457d8a32ac2SJussi Kivilinna if (!sg) 458d8a32ac2SJussi Kivilinna goto out_nosg; 4598a525fcdSHerbert Xu sgout = &sg[16]; 460d8a32ac2SJussi Kivilinna 461d8a32ac2SJussi Kivilinna if (diff_dst) 462d8a32ac2SJussi Kivilinna d = "-ddst"; 463d8a32ac2SJussi Kivilinna else 464d8a32ac2SJussi Kivilinna d = ""; 465d8a32ac2SJussi Kivilinna 466da7f033dSHerbert Xu if (enc == ENCRYPT) 467da7f033dSHerbert Xu e = "encryption"; 468da7f033dSHerbert Xu else 469da7f033dSHerbert Xu e = "decryption"; 470da7f033dSHerbert Xu 471da7f033dSHerbert Xu init_completion(&result.completion); 472da7f033dSHerbert Xu 473da7f033dSHerbert Xu req = aead_request_alloc(tfm, GFP_KERNEL); 474da7f033dSHerbert Xu if (!req) { 475d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Failed to allocate request for %s\n", 476d8a32ac2SJussi Kivilinna d, algo); 477da7f033dSHerbert Xu goto out; 478da7f033dSHerbert Xu } 479da7f033dSHerbert Xu 480da7f033dSHerbert Xu aead_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 481da7f033dSHerbert Xu tcrypt_complete, &result); 482da7f033dSHerbert Xu 483da7f033dSHerbert Xu for (i = 0, j = 0; i < tcount; i++) { 48405b1d338SCristian Stoica if (template[i].np) 48505b1d338SCristian Stoica continue; 48605b1d338SCristian Stoica 487da7f033dSHerbert Xu j++; 488da7f033dSHerbert Xu 48958dcf548SJussi Kivilinna /* some templates have no input data but they will 490da7f033dSHerbert Xu * touch input 491da7f033dSHerbert Xu */ 492da7f033dSHerbert Xu input = xbuf[0]; 49358dcf548SJussi Kivilinna input += align_offset; 494da7f033dSHerbert Xu assoc = axbuf[0]; 495da7f033dSHerbert Xu 496fd57f22aSHerbert Xu ret = -EINVAL; 49758dcf548SJussi Kivilinna if (WARN_ON(align_offset + template[i].ilen > 49858dcf548SJussi Kivilinna PAGE_SIZE || template[i].alen > PAGE_SIZE)) 499fd57f22aSHerbert Xu goto out; 500fd57f22aSHerbert Xu 501da7f033dSHerbert Xu memcpy(input, template[i].input, template[i].ilen); 502da7f033dSHerbert Xu memcpy(assoc, template[i].assoc, template[i].alen); 503424a5da6SCristian Stoica iv_len = crypto_aead_ivsize(tfm); 504da7f033dSHerbert Xu if (template[i].iv) 505424a5da6SCristian Stoica memcpy(iv, template[i].iv, iv_len); 506da7f033dSHerbert Xu else 507424a5da6SCristian Stoica memset(iv, 0, iv_len); 508da7f033dSHerbert Xu 509da7f033dSHerbert Xu crypto_aead_clear_flags(tfm, ~0); 510da7f033dSHerbert Xu if (template[i].wk) 51105b1d338SCristian Stoica crypto_aead_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 512da7f033dSHerbert Xu 51329b77e5dSHoria Geanta if (template[i].klen > MAX_KEYLEN) { 51429b77e5dSHoria Geanta pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n", 51529b77e5dSHoria Geanta d, j, algo, template[i].klen, 51629b77e5dSHoria Geanta MAX_KEYLEN); 51729b77e5dSHoria Geanta ret = -EINVAL; 51829b77e5dSHoria Geanta goto out; 51929b77e5dSHoria Geanta } 52029b77e5dSHoria Geanta memcpy(key, template[i].key, template[i].klen); 521da7f033dSHerbert Xu 52205b1d338SCristian Stoica ret = crypto_aead_setkey(tfm, key, template[i].klen); 523da7f033dSHerbert Xu if (!ret == template[i].fail) { 524d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: setkey failed on test %d for %s: flags=%x\n", 525d8a32ac2SJussi Kivilinna d, j, algo, crypto_aead_get_flags(tfm)); 526da7f033dSHerbert Xu goto out; 527da7f033dSHerbert Xu } else if (ret) 528da7f033dSHerbert Xu continue; 529da7f033dSHerbert Xu 530da7f033dSHerbert Xu authsize = abs(template[i].rlen - template[i].ilen); 531da7f033dSHerbert Xu ret = crypto_aead_setauthsize(tfm, authsize); 532da7f033dSHerbert Xu if (ret) { 533d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Failed to set authsize to %u on test %d for %s\n", 534d8a32ac2SJussi Kivilinna d, authsize, j, algo); 535da7f033dSHerbert Xu goto out; 536da7f033dSHerbert Xu } 537da7f033dSHerbert Xu 5388a525fcdSHerbert Xu k = !!template[i].alen; 5398a525fcdSHerbert Xu sg_init_table(sg, k + 1); 5408a525fcdSHerbert Xu sg_set_buf(&sg[0], assoc, template[i].alen); 5418a525fcdSHerbert Xu sg_set_buf(&sg[k], input, 54205b1d338SCristian Stoica template[i].ilen + (enc ? authsize : 0)); 543d8a32ac2SJussi Kivilinna output = input; 544d8a32ac2SJussi Kivilinna 5458a525fcdSHerbert Xu if (diff_dst) { 5468a525fcdSHerbert Xu sg_init_table(sgout, k + 1); 5478a525fcdSHerbert Xu sg_set_buf(&sgout[0], assoc, template[i].alen); 5488a525fcdSHerbert Xu 5498a525fcdSHerbert Xu output = xoutbuf[0]; 5508a525fcdSHerbert Xu output += align_offset; 5518a525fcdSHerbert Xu sg_set_buf(&sgout[k], output, 5528a525fcdSHerbert Xu template[i].rlen + (enc ? 0 : authsize)); 5538a525fcdSHerbert Xu } 554da7f033dSHerbert Xu 555d8a32ac2SJussi Kivilinna aead_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, 556da7f033dSHerbert Xu template[i].ilen, iv); 557da7f033dSHerbert Xu 5588a525fcdSHerbert Xu aead_request_set_ad(req, template[i].alen); 559da7f033dSHerbert Xu 56005b1d338SCristian Stoica ret = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req); 561da7f033dSHerbert Xu 562da7f033dSHerbert Xu switch (ret) { 563da7f033dSHerbert Xu case 0: 564e44a1b44SJarod Wilson if (template[i].novrfy) { 565e44a1b44SJarod Wilson /* verification was supposed to fail */ 566d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: %s failed on test %d for %s: ret was 0, expected -EBADMSG\n", 567d8a32ac2SJussi Kivilinna d, e, j, algo); 568e44a1b44SJarod Wilson /* so really, we got a bad message */ 569e44a1b44SJarod Wilson ret = -EBADMSG; 570e44a1b44SJarod Wilson goto out; 571e44a1b44SJarod Wilson } 572da7f033dSHerbert Xu break; 573da7f033dSHerbert Xu case -EINPROGRESS: 574da7f033dSHerbert Xu case -EBUSY: 5758a45ac12SRabin Vincent wait_for_completion(&result.completion); 57616735d02SWolfram Sang reinit_completion(&result.completion); 5778a45ac12SRabin Vincent ret = result.err; 5788a45ac12SRabin Vincent if (!ret) 579da7f033dSHerbert Xu break; 580e44a1b44SJarod Wilson case -EBADMSG: 581e44a1b44SJarod Wilson if (template[i].novrfy) 582e44a1b44SJarod Wilson /* verification failure was expected */ 583e44a1b44SJarod Wilson continue; 584da7f033dSHerbert Xu /* fall through */ 585da7f033dSHerbert Xu default: 586d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: %s failed on test %d for %s: ret=%d\n", 587d8a32ac2SJussi Kivilinna d, e, j, algo, -ret); 588da7f033dSHerbert Xu goto out; 589da7f033dSHerbert Xu } 590da7f033dSHerbert Xu 591d8a32ac2SJussi Kivilinna q = output; 592da7f033dSHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 593d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Test %d failed on %s for %s\n", 594d8a32ac2SJussi Kivilinna d, j, e, algo); 595da7f033dSHerbert Xu hexdump(q, template[i].rlen); 596da7f033dSHerbert Xu ret = -EINVAL; 597da7f033dSHerbert Xu goto out; 598da7f033dSHerbert Xu } 599da7f033dSHerbert Xu } 600da7f033dSHerbert Xu 601da7f033dSHerbert Xu for (i = 0, j = 0; i < tcount; i++) { 60258dcf548SJussi Kivilinna /* alignment tests are only done with continuous buffers */ 60358dcf548SJussi Kivilinna if (align_offset != 0) 60458dcf548SJussi Kivilinna break; 60558dcf548SJussi Kivilinna 60605b1d338SCristian Stoica if (!template[i].np) 60705b1d338SCristian Stoica continue; 60805b1d338SCristian Stoica 609da7f033dSHerbert Xu j++; 610da7f033dSHerbert Xu 611da7f033dSHerbert Xu if (template[i].iv) 612da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 613da7f033dSHerbert Xu else 614da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 615da7f033dSHerbert Xu 616da7f033dSHerbert Xu crypto_aead_clear_flags(tfm, ~0); 617da7f033dSHerbert Xu if (template[i].wk) 61805b1d338SCristian Stoica crypto_aead_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 61929b77e5dSHoria Geanta if (template[i].klen > MAX_KEYLEN) { 62029b77e5dSHoria Geanta pr_err("alg: aead%s: setkey failed on test %d for %s: key size %d > %d\n", 62105b1d338SCristian Stoica d, j, algo, template[i].klen, MAX_KEYLEN); 62229b77e5dSHoria Geanta ret = -EINVAL; 62329b77e5dSHoria Geanta goto out; 62429b77e5dSHoria Geanta } 62529b77e5dSHoria Geanta memcpy(key, template[i].key, template[i].klen); 626da7f033dSHerbert Xu 627da7f033dSHerbert Xu ret = crypto_aead_setkey(tfm, key, template[i].klen); 628da7f033dSHerbert Xu if (!ret == template[i].fail) { 629d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: setkey failed on chunk test %d for %s: flags=%x\n", 630d8a32ac2SJussi Kivilinna d, j, algo, crypto_aead_get_flags(tfm)); 631da7f033dSHerbert Xu goto out; 632da7f033dSHerbert Xu } else if (ret) 633da7f033dSHerbert Xu continue; 634da7f033dSHerbert Xu 635da7f033dSHerbert Xu authsize = abs(template[i].rlen - template[i].ilen); 636da7f033dSHerbert Xu 637da7f033dSHerbert Xu ret = -EINVAL; 6388a525fcdSHerbert Xu sg_init_table(sg, template[i].anp + template[i].np); 639d8a32ac2SJussi Kivilinna if (diff_dst) 6408a525fcdSHerbert Xu sg_init_table(sgout, template[i].anp + template[i].np); 6418a525fcdSHerbert Xu 6428a525fcdSHerbert Xu ret = -EINVAL; 6438a525fcdSHerbert Xu for (k = 0, temp = 0; k < template[i].anp; k++) { 6448a525fcdSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 6458a525fcdSHerbert Xu template[i].atap[k] > PAGE_SIZE)) 6468a525fcdSHerbert Xu goto out; 6478a525fcdSHerbert Xu sg_set_buf(&sg[k], 6488a525fcdSHerbert Xu memcpy(axbuf[IDX[k] >> PAGE_SHIFT] + 6498a525fcdSHerbert Xu offset_in_page(IDX[k]), 6508a525fcdSHerbert Xu template[i].assoc + temp, 6518a525fcdSHerbert Xu template[i].atap[k]), 6528a525fcdSHerbert Xu template[i].atap[k]); 6538a525fcdSHerbert Xu if (diff_dst) 6548a525fcdSHerbert Xu sg_set_buf(&sgout[k], 6558a525fcdSHerbert Xu axbuf[IDX[k] >> PAGE_SHIFT] + 6568a525fcdSHerbert Xu offset_in_page(IDX[k]), 6578a525fcdSHerbert Xu template[i].atap[k]); 6588a525fcdSHerbert Xu temp += template[i].atap[k]; 6598a525fcdSHerbert Xu } 6608a525fcdSHerbert Xu 661da7f033dSHerbert Xu for (k = 0, temp = 0; k < template[i].np; k++) { 662da7f033dSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 663da7f033dSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 664da7f033dSHerbert Xu goto out; 665da7f033dSHerbert Xu 66605b1d338SCristian Stoica q = xbuf[IDX[k] >> PAGE_SHIFT] + offset_in_page(IDX[k]); 66705b1d338SCristian Stoica memcpy(q, template[i].input + temp, template[i].tap[k]); 6688a525fcdSHerbert Xu sg_set_buf(&sg[template[i].anp + k], 6698a525fcdSHerbert Xu q, template[i].tap[k]); 670d8a32ac2SJussi Kivilinna 671d8a32ac2SJussi Kivilinna if (diff_dst) { 672d8a32ac2SJussi Kivilinna q = xoutbuf[IDX[k] >> PAGE_SHIFT] + 673d8a32ac2SJussi Kivilinna offset_in_page(IDX[k]); 674d8a32ac2SJussi Kivilinna 675d8a32ac2SJussi Kivilinna memset(q, 0, template[i].tap[k]); 676d8a32ac2SJussi Kivilinna 6778a525fcdSHerbert Xu sg_set_buf(&sgout[template[i].anp + k], 6788a525fcdSHerbert Xu q, template[i].tap[k]); 679d8a32ac2SJussi Kivilinna } 680d8a32ac2SJussi Kivilinna 6818ec25c51SHoria Geanta n = template[i].tap[k]; 6828ec25c51SHoria Geanta if (k == template[i].np - 1 && enc) 6838ec25c51SHoria Geanta n += authsize; 6848ec25c51SHoria Geanta if (offset_in_page(q) + n < PAGE_SIZE) 6858ec25c51SHoria Geanta q[n] = 0; 6868ec25c51SHoria Geanta 687da7f033dSHerbert Xu temp += template[i].tap[k]; 688da7f033dSHerbert Xu } 689da7f033dSHerbert Xu 690da7f033dSHerbert Xu ret = crypto_aead_setauthsize(tfm, authsize); 691da7f033dSHerbert Xu if (ret) { 692d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Failed to set authsize to %u on chunk test %d for %s\n", 693d8a32ac2SJussi Kivilinna d, authsize, j, algo); 694da7f033dSHerbert Xu goto out; 695da7f033dSHerbert Xu } 696da7f033dSHerbert Xu 697da7f033dSHerbert Xu if (enc) { 6988a525fcdSHerbert Xu if (WARN_ON(sg[template[i].anp + k - 1].offset + 6998a525fcdSHerbert Xu sg[template[i].anp + k - 1].length + 7008a525fcdSHerbert Xu authsize > PAGE_SIZE)) { 701da7f033dSHerbert Xu ret = -EINVAL; 702da7f033dSHerbert Xu goto out; 703da7f033dSHerbert Xu } 704da7f033dSHerbert Xu 705d8a32ac2SJussi Kivilinna if (diff_dst) 7068a525fcdSHerbert Xu sgout[template[i].anp + k - 1].length += 7078a525fcdSHerbert Xu authsize; 7088a525fcdSHerbert Xu sg[template[i].anp + k - 1].length += authsize; 709da7f033dSHerbert Xu } 710da7f033dSHerbert Xu 711d8a32ac2SJussi Kivilinna aead_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, 712da7f033dSHerbert Xu template[i].ilen, 713da7f033dSHerbert Xu iv); 714da7f033dSHerbert Xu 7158a525fcdSHerbert Xu aead_request_set_ad(req, template[i].alen); 716da7f033dSHerbert Xu 71705b1d338SCristian Stoica ret = enc ? crypto_aead_encrypt(req) : crypto_aead_decrypt(req); 718da7f033dSHerbert Xu 719da7f033dSHerbert Xu switch (ret) { 720da7f033dSHerbert Xu case 0: 721e44a1b44SJarod Wilson if (template[i].novrfy) { 722e44a1b44SJarod Wilson /* verification was supposed to fail */ 723d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: %s failed on chunk test %d for %s: ret was 0, expected -EBADMSG\n", 724d8a32ac2SJussi Kivilinna d, e, j, algo); 725e44a1b44SJarod Wilson /* so really, we got a bad message */ 726e44a1b44SJarod Wilson ret = -EBADMSG; 727e44a1b44SJarod Wilson goto out; 728e44a1b44SJarod Wilson } 729da7f033dSHerbert Xu break; 730da7f033dSHerbert Xu case -EINPROGRESS: 731da7f033dSHerbert Xu case -EBUSY: 7328a45ac12SRabin Vincent wait_for_completion(&result.completion); 73316735d02SWolfram Sang reinit_completion(&result.completion); 7348a45ac12SRabin Vincent ret = result.err; 7358a45ac12SRabin Vincent if (!ret) 736da7f033dSHerbert Xu break; 737e44a1b44SJarod Wilson case -EBADMSG: 738e44a1b44SJarod Wilson if (template[i].novrfy) 739e44a1b44SJarod Wilson /* verification failure was expected */ 740e44a1b44SJarod Wilson continue; 741da7f033dSHerbert Xu /* fall through */ 742da7f033dSHerbert Xu default: 743d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: %s failed on chunk test %d for %s: ret=%d\n", 744d8a32ac2SJussi Kivilinna d, e, j, algo, -ret); 745da7f033dSHerbert Xu goto out; 746da7f033dSHerbert Xu } 747da7f033dSHerbert Xu 748da7f033dSHerbert Xu ret = -EINVAL; 749da7f033dSHerbert Xu for (k = 0, temp = 0; k < template[i].np; k++) { 750d8a32ac2SJussi Kivilinna if (diff_dst) 751d8a32ac2SJussi Kivilinna q = xoutbuf[IDX[k] >> PAGE_SHIFT] + 752d8a32ac2SJussi Kivilinna offset_in_page(IDX[k]); 753d8a32ac2SJussi Kivilinna else 754da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 755da7f033dSHerbert Xu offset_in_page(IDX[k]); 756da7f033dSHerbert Xu 757da7f033dSHerbert Xu n = template[i].tap[k]; 758da7f033dSHerbert Xu if (k == template[i].np - 1) 759da7f033dSHerbert Xu n += enc ? authsize : -authsize; 760da7f033dSHerbert Xu 761da7f033dSHerbert Xu if (memcmp(q, template[i].result + temp, n)) { 762d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Chunk test %d failed on %s at page %u for %s\n", 763d8a32ac2SJussi Kivilinna d, j, e, k, algo); 764da7f033dSHerbert Xu hexdump(q, n); 765da7f033dSHerbert Xu goto out; 766da7f033dSHerbert Xu } 767da7f033dSHerbert Xu 768da7f033dSHerbert Xu q += n; 769da7f033dSHerbert Xu if (k == template[i].np - 1 && !enc) { 770d8a32ac2SJussi Kivilinna if (!diff_dst && 771d8a32ac2SJussi Kivilinna memcmp(q, template[i].input + 772da7f033dSHerbert Xu temp + n, authsize)) 773da7f033dSHerbert Xu n = authsize; 774da7f033dSHerbert Xu else 775da7f033dSHerbert Xu n = 0; 776da7f033dSHerbert Xu } else { 77705b1d338SCristian Stoica for (n = 0; offset_in_page(q + n) && q[n]; n++) 778da7f033dSHerbert Xu ; 779da7f033dSHerbert Xu } 780da7f033dSHerbert Xu if (n) { 781d8a32ac2SJussi Kivilinna pr_err("alg: aead%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n", 782d8a32ac2SJussi Kivilinna d, j, e, k, algo, n); 783da7f033dSHerbert Xu hexdump(q, n); 784da7f033dSHerbert Xu goto out; 785da7f033dSHerbert Xu } 786da7f033dSHerbert Xu 787da7f033dSHerbert Xu temp += template[i].tap[k]; 788da7f033dSHerbert Xu } 789da7f033dSHerbert Xu } 790da7f033dSHerbert Xu 791da7f033dSHerbert Xu ret = 0; 792da7f033dSHerbert Xu 793da7f033dSHerbert Xu out: 794da7f033dSHerbert Xu aead_request_free(req); 795d8a32ac2SJussi Kivilinna kfree(sg); 796d8a32ac2SJussi Kivilinna out_nosg: 797d8a32ac2SJussi Kivilinna if (diff_dst) 798d8a32ac2SJussi Kivilinna testmgr_free_buf(xoutbuf); 799d8a32ac2SJussi Kivilinna out_nooutbuf: 800f8b0d4d0SHerbert Xu testmgr_free_buf(axbuf); 801f8b0d4d0SHerbert Xu out_noaxbuf: 802f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 803f8b0d4d0SHerbert Xu out_noxbuf: 80429b77e5dSHoria Geanta kfree(key); 8059bac019dSTadeusz Struk kfree(iv); 806da7f033dSHerbert Xu return ret; 807da7f033dSHerbert Xu } 808da7f033dSHerbert Xu 809d8a32ac2SJussi Kivilinna static int test_aead(struct crypto_aead *tfm, int enc, 810d8a32ac2SJussi Kivilinna struct aead_testvec *template, unsigned int tcount) 811d8a32ac2SJussi Kivilinna { 81258dcf548SJussi Kivilinna unsigned int alignmask; 813d8a32ac2SJussi Kivilinna int ret; 814d8a32ac2SJussi Kivilinna 815d8a32ac2SJussi Kivilinna /* test 'dst == src' case */ 81658dcf548SJussi Kivilinna ret = __test_aead(tfm, enc, template, tcount, false, 0); 817d8a32ac2SJussi Kivilinna if (ret) 818d8a32ac2SJussi Kivilinna return ret; 819d8a32ac2SJussi Kivilinna 820d8a32ac2SJussi Kivilinna /* test 'dst != src' case */ 82158dcf548SJussi Kivilinna ret = __test_aead(tfm, enc, template, tcount, true, 0); 82258dcf548SJussi Kivilinna if (ret) 82358dcf548SJussi Kivilinna return ret; 82458dcf548SJussi Kivilinna 82558dcf548SJussi Kivilinna /* test unaligned buffers, check with one byte offset */ 82658dcf548SJussi Kivilinna ret = __test_aead(tfm, enc, template, tcount, true, 1); 82758dcf548SJussi Kivilinna if (ret) 82858dcf548SJussi Kivilinna return ret; 82958dcf548SJussi Kivilinna 83058dcf548SJussi Kivilinna alignmask = crypto_tfm_alg_alignmask(&tfm->base); 83158dcf548SJussi Kivilinna if (alignmask) { 83258dcf548SJussi Kivilinna /* Check if alignment mask for tfm is correctly set. */ 83358dcf548SJussi Kivilinna ret = __test_aead(tfm, enc, template, tcount, true, 83458dcf548SJussi Kivilinna alignmask + 1); 83558dcf548SJussi Kivilinna if (ret) 83658dcf548SJussi Kivilinna return ret; 83758dcf548SJussi Kivilinna } 83858dcf548SJussi Kivilinna 83958dcf548SJussi Kivilinna return 0; 840d8a32ac2SJussi Kivilinna } 841d8a32ac2SJussi Kivilinna 8421aa4ecd9SHerbert Xu static int test_cipher(struct crypto_cipher *tfm, int enc, 8431aa4ecd9SHerbert Xu struct cipher_testvec *template, unsigned int tcount) 8441aa4ecd9SHerbert Xu { 8451aa4ecd9SHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_cipher_tfm(tfm)); 8461aa4ecd9SHerbert Xu unsigned int i, j, k; 8471aa4ecd9SHerbert Xu char *q; 8481aa4ecd9SHerbert Xu const char *e; 8491aa4ecd9SHerbert Xu void *data; 850f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 851f8b0d4d0SHerbert Xu int ret = -ENOMEM; 852f8b0d4d0SHerbert Xu 853f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 854f8b0d4d0SHerbert Xu goto out_nobuf; 8551aa4ecd9SHerbert Xu 8561aa4ecd9SHerbert Xu if (enc == ENCRYPT) 8571aa4ecd9SHerbert Xu e = "encryption"; 8581aa4ecd9SHerbert Xu else 8591aa4ecd9SHerbert Xu e = "decryption"; 8601aa4ecd9SHerbert Xu 8611aa4ecd9SHerbert Xu j = 0; 8621aa4ecd9SHerbert Xu for (i = 0; i < tcount; i++) { 8631aa4ecd9SHerbert Xu if (template[i].np) 8641aa4ecd9SHerbert Xu continue; 8651aa4ecd9SHerbert Xu 8661aa4ecd9SHerbert Xu j++; 8671aa4ecd9SHerbert Xu 868fd57f22aSHerbert Xu ret = -EINVAL; 869fd57f22aSHerbert Xu if (WARN_ON(template[i].ilen > PAGE_SIZE)) 870fd57f22aSHerbert Xu goto out; 871fd57f22aSHerbert Xu 8721aa4ecd9SHerbert Xu data = xbuf[0]; 8731aa4ecd9SHerbert Xu memcpy(data, template[i].input, template[i].ilen); 8741aa4ecd9SHerbert Xu 8751aa4ecd9SHerbert Xu crypto_cipher_clear_flags(tfm, ~0); 8761aa4ecd9SHerbert Xu if (template[i].wk) 8771aa4ecd9SHerbert Xu crypto_cipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 8781aa4ecd9SHerbert Xu 8791aa4ecd9SHerbert Xu ret = crypto_cipher_setkey(tfm, template[i].key, 8801aa4ecd9SHerbert Xu template[i].klen); 8811aa4ecd9SHerbert Xu if (!ret == template[i].fail) { 8821aa4ecd9SHerbert Xu printk(KERN_ERR "alg: cipher: setkey failed " 8831aa4ecd9SHerbert Xu "on test %d for %s: flags=%x\n", j, 8841aa4ecd9SHerbert Xu algo, crypto_cipher_get_flags(tfm)); 8851aa4ecd9SHerbert Xu goto out; 8861aa4ecd9SHerbert Xu } else if (ret) 8871aa4ecd9SHerbert Xu continue; 8881aa4ecd9SHerbert Xu 8891aa4ecd9SHerbert Xu for (k = 0; k < template[i].ilen; 8901aa4ecd9SHerbert Xu k += crypto_cipher_blocksize(tfm)) { 8911aa4ecd9SHerbert Xu if (enc) 8921aa4ecd9SHerbert Xu crypto_cipher_encrypt_one(tfm, data + k, 8931aa4ecd9SHerbert Xu data + k); 8941aa4ecd9SHerbert Xu else 8951aa4ecd9SHerbert Xu crypto_cipher_decrypt_one(tfm, data + k, 8961aa4ecd9SHerbert Xu data + k); 8971aa4ecd9SHerbert Xu } 8981aa4ecd9SHerbert Xu 8991aa4ecd9SHerbert Xu q = data; 9001aa4ecd9SHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 9011aa4ecd9SHerbert Xu printk(KERN_ERR "alg: cipher: Test %d failed " 9021aa4ecd9SHerbert Xu "on %s for %s\n", j, e, algo); 9031aa4ecd9SHerbert Xu hexdump(q, template[i].rlen); 9041aa4ecd9SHerbert Xu ret = -EINVAL; 9051aa4ecd9SHerbert Xu goto out; 9061aa4ecd9SHerbert Xu } 9071aa4ecd9SHerbert Xu } 9081aa4ecd9SHerbert Xu 9091aa4ecd9SHerbert Xu ret = 0; 9101aa4ecd9SHerbert Xu 9111aa4ecd9SHerbert Xu out: 912f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 913f8b0d4d0SHerbert Xu out_nobuf: 9141aa4ecd9SHerbert Xu return ret; 9151aa4ecd9SHerbert Xu } 9161aa4ecd9SHerbert Xu 91708d6af8cSJussi Kivilinna static int __test_skcipher(struct crypto_ablkcipher *tfm, int enc, 91808d6af8cSJussi Kivilinna struct cipher_testvec *template, unsigned int tcount, 9193a338f20SJussi Kivilinna const bool diff_dst, const int align_offset) 920da7f033dSHerbert Xu { 921da7f033dSHerbert Xu const char *algo = 922da7f033dSHerbert Xu crypto_tfm_alg_driver_name(crypto_ablkcipher_tfm(tfm)); 923da7f033dSHerbert Xu unsigned int i, j, k, n, temp; 924da7f033dSHerbert Xu char *q; 925da7f033dSHerbert Xu struct ablkcipher_request *req; 926da7f033dSHerbert Xu struct scatterlist sg[8]; 92708d6af8cSJussi Kivilinna struct scatterlist sgout[8]; 92808d6af8cSJussi Kivilinna const char *e, *d; 929da7f033dSHerbert Xu struct tcrypt_result result; 930da7f033dSHerbert Xu void *data; 931da7f033dSHerbert Xu char iv[MAX_IVLEN]; 932f8b0d4d0SHerbert Xu char *xbuf[XBUFSIZE]; 93308d6af8cSJussi Kivilinna char *xoutbuf[XBUFSIZE]; 934f8b0d4d0SHerbert Xu int ret = -ENOMEM; 935f8b0d4d0SHerbert Xu 936f8b0d4d0SHerbert Xu if (testmgr_alloc_buf(xbuf)) 937f8b0d4d0SHerbert Xu goto out_nobuf; 938da7f033dSHerbert Xu 93908d6af8cSJussi Kivilinna if (diff_dst && testmgr_alloc_buf(xoutbuf)) 94008d6af8cSJussi Kivilinna goto out_nooutbuf; 94108d6af8cSJussi Kivilinna 94208d6af8cSJussi Kivilinna if (diff_dst) 94308d6af8cSJussi Kivilinna d = "-ddst"; 94408d6af8cSJussi Kivilinna else 94508d6af8cSJussi Kivilinna d = ""; 94608d6af8cSJussi Kivilinna 947da7f033dSHerbert Xu if (enc == ENCRYPT) 948da7f033dSHerbert Xu e = "encryption"; 949da7f033dSHerbert Xu else 950da7f033dSHerbert Xu e = "decryption"; 951da7f033dSHerbert Xu 952da7f033dSHerbert Xu init_completion(&result.completion); 953da7f033dSHerbert Xu 954da7f033dSHerbert Xu req = ablkcipher_request_alloc(tfm, GFP_KERNEL); 955da7f033dSHerbert Xu if (!req) { 95608d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: Failed to allocate request for %s\n", 95708d6af8cSJussi Kivilinna d, algo); 958da7f033dSHerbert Xu goto out; 959da7f033dSHerbert Xu } 960da7f033dSHerbert Xu 961da7f033dSHerbert Xu ablkcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, 962da7f033dSHerbert Xu tcrypt_complete, &result); 963da7f033dSHerbert Xu 964da7f033dSHerbert Xu j = 0; 965da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 966bbb9a7ddSCristian Stoica if (template[i].np && !template[i].also_non_np) 967bbb9a7ddSCristian Stoica continue; 968bbb9a7ddSCristian Stoica 969da7f033dSHerbert Xu if (template[i].iv) 970da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 971da7f033dSHerbert Xu else 972da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 973da7f033dSHerbert Xu 974da7f033dSHerbert Xu j++; 975fd57f22aSHerbert Xu ret = -EINVAL; 976a1aa44a2SCristian Stoica if (WARN_ON(align_offset + template[i].ilen > PAGE_SIZE)) 977fd57f22aSHerbert Xu goto out; 978fd57f22aSHerbert Xu 979da7f033dSHerbert Xu data = xbuf[0]; 9803a338f20SJussi Kivilinna data += align_offset; 981da7f033dSHerbert Xu memcpy(data, template[i].input, template[i].ilen); 982da7f033dSHerbert Xu 983da7f033dSHerbert Xu crypto_ablkcipher_clear_flags(tfm, ~0); 984da7f033dSHerbert Xu if (template[i].wk) 985a1aa44a2SCristian Stoica crypto_ablkcipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 986da7f033dSHerbert Xu 987da7f033dSHerbert Xu ret = crypto_ablkcipher_setkey(tfm, template[i].key, 988da7f033dSHerbert Xu template[i].klen); 989da7f033dSHerbert Xu if (!ret == template[i].fail) { 99008d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: setkey failed on test %d for %s: flags=%x\n", 991a1aa44a2SCristian Stoica d, j, algo, crypto_ablkcipher_get_flags(tfm)); 992da7f033dSHerbert Xu goto out; 993da7f033dSHerbert Xu } else if (ret) 994da7f033dSHerbert Xu continue; 995da7f033dSHerbert Xu 996da7f033dSHerbert Xu sg_init_one(&sg[0], data, template[i].ilen); 99708d6af8cSJussi Kivilinna if (diff_dst) { 99808d6af8cSJussi Kivilinna data = xoutbuf[0]; 9993a338f20SJussi Kivilinna data += align_offset; 100008d6af8cSJussi Kivilinna sg_init_one(&sgout[0], data, template[i].ilen); 100108d6af8cSJussi Kivilinna } 1002da7f033dSHerbert Xu 1003a1aa44a2SCristian Stoica ablkcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, 1004da7f033dSHerbert Xu template[i].ilen, iv); 1005a1aa44a2SCristian Stoica ret = enc ? crypto_ablkcipher_encrypt(req) : 1006da7f033dSHerbert Xu crypto_ablkcipher_decrypt(req); 1007da7f033dSHerbert Xu 1008da7f033dSHerbert Xu switch (ret) { 1009da7f033dSHerbert Xu case 0: 1010da7f033dSHerbert Xu break; 1011da7f033dSHerbert Xu case -EINPROGRESS: 1012da7f033dSHerbert Xu case -EBUSY: 10138a45ac12SRabin Vincent wait_for_completion(&result.completion); 101416735d02SWolfram Sang reinit_completion(&result.completion); 10158a45ac12SRabin Vincent ret = result.err; 10168a45ac12SRabin Vincent if (!ret) 1017da7f033dSHerbert Xu break; 1018da7f033dSHerbert Xu /* fall through */ 1019da7f033dSHerbert Xu default: 102008d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: %s failed on test %d for %s: ret=%d\n", 102108d6af8cSJussi Kivilinna d, e, j, algo, -ret); 1022da7f033dSHerbert Xu goto out; 1023da7f033dSHerbert Xu } 1024da7f033dSHerbert Xu 1025da7f033dSHerbert Xu q = data; 1026da7f033dSHerbert Xu if (memcmp(q, template[i].result, template[i].rlen)) { 102708d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: Test %d failed on %s for %s\n", 102808d6af8cSJussi Kivilinna d, j, e, algo); 1029da7f033dSHerbert Xu hexdump(q, template[i].rlen); 1030da7f033dSHerbert Xu ret = -EINVAL; 1031da7f033dSHerbert Xu goto out; 1032da7f033dSHerbert Xu } 1033da7f033dSHerbert Xu } 1034da7f033dSHerbert Xu 1035da7f033dSHerbert Xu j = 0; 1036da7f033dSHerbert Xu for (i = 0; i < tcount; i++) { 10373a338f20SJussi Kivilinna /* alignment tests are only done with continuous buffers */ 10383a338f20SJussi Kivilinna if (align_offset != 0) 10393a338f20SJussi Kivilinna break; 1040da7f033dSHerbert Xu 1041bbb9a7ddSCristian Stoica if (!template[i].np) 1042bbb9a7ddSCristian Stoica continue; 1043bbb9a7ddSCristian Stoica 1044da7f033dSHerbert Xu if (template[i].iv) 1045da7f033dSHerbert Xu memcpy(iv, template[i].iv, MAX_IVLEN); 1046da7f033dSHerbert Xu else 1047da7f033dSHerbert Xu memset(iv, 0, MAX_IVLEN); 1048da7f033dSHerbert Xu 1049da7f033dSHerbert Xu j++; 1050da7f033dSHerbert Xu crypto_ablkcipher_clear_flags(tfm, ~0); 1051da7f033dSHerbert Xu if (template[i].wk) 1052a1aa44a2SCristian Stoica crypto_ablkcipher_set_flags(tfm, CRYPTO_TFM_REQ_WEAK_KEY); 1053da7f033dSHerbert Xu 1054da7f033dSHerbert Xu ret = crypto_ablkcipher_setkey(tfm, template[i].key, 1055da7f033dSHerbert Xu template[i].klen); 1056da7f033dSHerbert Xu if (!ret == template[i].fail) { 105708d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: setkey failed on chunk test %d for %s: flags=%x\n", 1058a1aa44a2SCristian Stoica d, j, algo, crypto_ablkcipher_get_flags(tfm)); 1059da7f033dSHerbert Xu goto out; 1060da7f033dSHerbert Xu } else if (ret) 1061da7f033dSHerbert Xu continue; 1062da7f033dSHerbert Xu 1063da7f033dSHerbert Xu temp = 0; 1064da7f033dSHerbert Xu ret = -EINVAL; 1065da7f033dSHerbert Xu sg_init_table(sg, template[i].np); 106608d6af8cSJussi Kivilinna if (diff_dst) 106708d6af8cSJussi Kivilinna sg_init_table(sgout, template[i].np); 1068da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 1069da7f033dSHerbert Xu if (WARN_ON(offset_in_page(IDX[k]) + 1070da7f033dSHerbert Xu template[i].tap[k] > PAGE_SIZE)) 1071da7f033dSHerbert Xu goto out; 1072da7f033dSHerbert Xu 1073a1aa44a2SCristian Stoica q = xbuf[IDX[k] >> PAGE_SHIFT] + offset_in_page(IDX[k]); 1074da7f033dSHerbert Xu 1075a1aa44a2SCristian Stoica memcpy(q, template[i].input + temp, template[i].tap[k]); 1076da7f033dSHerbert Xu 1077a1aa44a2SCristian Stoica if (offset_in_page(q) + template[i].tap[k] < PAGE_SIZE) 1078da7f033dSHerbert Xu q[template[i].tap[k]] = 0; 1079da7f033dSHerbert Xu 1080da7f033dSHerbert Xu sg_set_buf(&sg[k], q, template[i].tap[k]); 108108d6af8cSJussi Kivilinna if (diff_dst) { 108208d6af8cSJussi Kivilinna q = xoutbuf[IDX[k] >> PAGE_SHIFT] + 108308d6af8cSJussi Kivilinna offset_in_page(IDX[k]); 108408d6af8cSJussi Kivilinna 1085a1aa44a2SCristian Stoica sg_set_buf(&sgout[k], q, template[i].tap[k]); 108608d6af8cSJussi Kivilinna 108708d6af8cSJussi Kivilinna memset(q, 0, template[i].tap[k]); 108808d6af8cSJussi Kivilinna if (offset_in_page(q) + 108908d6af8cSJussi Kivilinna template[i].tap[k] < PAGE_SIZE) 109008d6af8cSJussi Kivilinna q[template[i].tap[k]] = 0; 109108d6af8cSJussi Kivilinna } 1092da7f033dSHerbert Xu 1093da7f033dSHerbert Xu temp += template[i].tap[k]; 1094da7f033dSHerbert Xu } 1095da7f033dSHerbert Xu 1096a1aa44a2SCristian Stoica ablkcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, 1097da7f033dSHerbert Xu template[i].ilen, iv); 1098da7f033dSHerbert Xu 1099a1aa44a2SCristian Stoica ret = enc ? crypto_ablkcipher_encrypt(req) : 1100da7f033dSHerbert Xu crypto_ablkcipher_decrypt(req); 1101da7f033dSHerbert Xu 1102da7f033dSHerbert Xu switch (ret) { 1103da7f033dSHerbert Xu case 0: 1104da7f033dSHerbert Xu break; 1105da7f033dSHerbert Xu case -EINPROGRESS: 1106da7f033dSHerbert Xu case -EBUSY: 11078a45ac12SRabin Vincent wait_for_completion(&result.completion); 110816735d02SWolfram Sang reinit_completion(&result.completion); 11098a45ac12SRabin Vincent ret = result.err; 11108a45ac12SRabin Vincent if (!ret) 1111da7f033dSHerbert Xu break; 1112da7f033dSHerbert Xu /* fall through */ 1113da7f033dSHerbert Xu default: 111408d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: %s failed on chunk test %d for %s: ret=%d\n", 111508d6af8cSJussi Kivilinna d, e, j, algo, -ret); 1116da7f033dSHerbert Xu goto out; 1117da7f033dSHerbert Xu } 1118da7f033dSHerbert Xu 1119da7f033dSHerbert Xu temp = 0; 1120da7f033dSHerbert Xu ret = -EINVAL; 1121da7f033dSHerbert Xu for (k = 0; k < template[i].np; k++) { 112208d6af8cSJussi Kivilinna if (diff_dst) 112308d6af8cSJussi Kivilinna q = xoutbuf[IDX[k] >> PAGE_SHIFT] + 112408d6af8cSJussi Kivilinna offset_in_page(IDX[k]); 112508d6af8cSJussi Kivilinna else 1126da7f033dSHerbert Xu q = xbuf[IDX[k] >> PAGE_SHIFT] + 1127da7f033dSHerbert Xu offset_in_page(IDX[k]); 1128da7f033dSHerbert Xu 1129da7f033dSHerbert Xu if (memcmp(q, template[i].result + temp, 1130da7f033dSHerbert Xu template[i].tap[k])) { 113108d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: Chunk test %d failed on %s at page %u for %s\n", 113208d6af8cSJussi Kivilinna d, j, e, k, algo); 1133da7f033dSHerbert Xu hexdump(q, template[i].tap[k]); 1134da7f033dSHerbert Xu goto out; 1135da7f033dSHerbert Xu } 1136da7f033dSHerbert Xu 1137da7f033dSHerbert Xu q += template[i].tap[k]; 1138da7f033dSHerbert Xu for (n = 0; offset_in_page(q + n) && q[n]; n++) 1139da7f033dSHerbert Xu ; 1140da7f033dSHerbert Xu if (n) { 114108d6af8cSJussi Kivilinna pr_err("alg: skcipher%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n", 114208d6af8cSJussi Kivilinna d, j, e, k, algo, n); 1143da7f033dSHerbert Xu hexdump(q, n); 1144da7f033dSHerbert Xu goto out; 1145da7f033dSHerbert Xu } 1146da7f033dSHerbert Xu temp += template[i].tap[k]; 1147da7f033dSHerbert Xu } 1148da7f033dSHerbert Xu } 1149da7f033dSHerbert Xu 1150da7f033dSHerbert Xu ret = 0; 1151da7f033dSHerbert Xu 1152da7f033dSHerbert Xu out: 1153da7f033dSHerbert Xu ablkcipher_request_free(req); 115408d6af8cSJussi Kivilinna if (diff_dst) 115508d6af8cSJussi Kivilinna testmgr_free_buf(xoutbuf); 115608d6af8cSJussi Kivilinna out_nooutbuf: 1157f8b0d4d0SHerbert Xu testmgr_free_buf(xbuf); 1158f8b0d4d0SHerbert Xu out_nobuf: 1159da7f033dSHerbert Xu return ret; 1160da7f033dSHerbert Xu } 1161da7f033dSHerbert Xu 116208d6af8cSJussi Kivilinna static int test_skcipher(struct crypto_ablkcipher *tfm, int enc, 116308d6af8cSJussi Kivilinna struct cipher_testvec *template, unsigned int tcount) 116408d6af8cSJussi Kivilinna { 11653a338f20SJussi Kivilinna unsigned int alignmask; 116608d6af8cSJussi Kivilinna int ret; 116708d6af8cSJussi Kivilinna 116808d6af8cSJussi Kivilinna /* test 'dst == src' case */ 11693a338f20SJussi Kivilinna ret = __test_skcipher(tfm, enc, template, tcount, false, 0); 117008d6af8cSJussi Kivilinna if (ret) 117108d6af8cSJussi Kivilinna return ret; 117208d6af8cSJussi Kivilinna 117308d6af8cSJussi Kivilinna /* test 'dst != src' case */ 11743a338f20SJussi Kivilinna ret = __test_skcipher(tfm, enc, template, tcount, true, 0); 11753a338f20SJussi Kivilinna if (ret) 11763a338f20SJussi Kivilinna return ret; 11773a338f20SJussi Kivilinna 11783a338f20SJussi Kivilinna /* test unaligned buffers, check with one byte offset */ 11793a338f20SJussi Kivilinna ret = __test_skcipher(tfm, enc, template, tcount, true, 1); 11803a338f20SJussi Kivilinna if (ret) 11813a338f20SJussi Kivilinna return ret; 11823a338f20SJussi Kivilinna 11833a338f20SJussi Kivilinna alignmask = crypto_tfm_alg_alignmask(&tfm->base); 11843a338f20SJussi Kivilinna if (alignmask) { 11853a338f20SJussi Kivilinna /* Check if alignment mask for tfm is correctly set. */ 11863a338f20SJussi Kivilinna ret = __test_skcipher(tfm, enc, template, tcount, true, 11873a338f20SJussi Kivilinna alignmask + 1); 11883a338f20SJussi Kivilinna if (ret) 11893a338f20SJussi Kivilinna return ret; 11903a338f20SJussi Kivilinna } 11913a338f20SJussi Kivilinna 11923a338f20SJussi Kivilinna return 0; 119308d6af8cSJussi Kivilinna } 119408d6af8cSJussi Kivilinna 1195da7f033dSHerbert Xu static int test_comp(struct crypto_comp *tfm, struct comp_testvec *ctemplate, 1196da7f033dSHerbert Xu struct comp_testvec *dtemplate, int ctcount, int dtcount) 1197da7f033dSHerbert Xu { 1198da7f033dSHerbert Xu const char *algo = crypto_tfm_alg_driver_name(crypto_comp_tfm(tfm)); 1199da7f033dSHerbert Xu unsigned int i; 1200da7f033dSHerbert Xu char result[COMP_BUF_SIZE]; 1201da7f033dSHerbert Xu int ret; 1202da7f033dSHerbert Xu 1203da7f033dSHerbert Xu for (i = 0; i < ctcount; i++) { 1204c79cf910SGeert Uytterhoeven int ilen; 1205c79cf910SGeert Uytterhoeven unsigned int dlen = COMP_BUF_SIZE; 1206da7f033dSHerbert Xu 1207da7f033dSHerbert Xu memset(result, 0, sizeof (result)); 1208da7f033dSHerbert Xu 1209da7f033dSHerbert Xu ilen = ctemplate[i].inlen; 1210da7f033dSHerbert Xu ret = crypto_comp_compress(tfm, ctemplate[i].input, 1211da7f033dSHerbert Xu ilen, result, &dlen); 1212da7f033dSHerbert Xu if (ret) { 1213da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: compression failed " 1214da7f033dSHerbert Xu "on test %d for %s: ret=%d\n", i + 1, algo, 1215da7f033dSHerbert Xu -ret); 1216da7f033dSHerbert Xu goto out; 1217da7f033dSHerbert Xu } 1218da7f033dSHerbert Xu 1219b812eb00SGeert Uytterhoeven if (dlen != ctemplate[i].outlen) { 1220b812eb00SGeert Uytterhoeven printk(KERN_ERR "alg: comp: Compression test %d " 1221b812eb00SGeert Uytterhoeven "failed for %s: output len = %d\n", i + 1, algo, 1222b812eb00SGeert Uytterhoeven dlen); 1223b812eb00SGeert Uytterhoeven ret = -EINVAL; 1224b812eb00SGeert Uytterhoeven goto out; 1225b812eb00SGeert Uytterhoeven } 1226b812eb00SGeert Uytterhoeven 1227da7f033dSHerbert Xu if (memcmp(result, ctemplate[i].output, dlen)) { 1228da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Compression test %d " 1229da7f033dSHerbert Xu "failed for %s\n", i + 1, algo); 1230da7f033dSHerbert Xu hexdump(result, dlen); 1231da7f033dSHerbert Xu ret = -EINVAL; 1232da7f033dSHerbert Xu goto out; 1233da7f033dSHerbert Xu } 1234da7f033dSHerbert Xu } 1235da7f033dSHerbert Xu 1236da7f033dSHerbert Xu for (i = 0; i < dtcount; i++) { 1237c79cf910SGeert Uytterhoeven int ilen; 1238c79cf910SGeert Uytterhoeven unsigned int dlen = COMP_BUF_SIZE; 1239da7f033dSHerbert Xu 1240da7f033dSHerbert Xu memset(result, 0, sizeof (result)); 1241da7f033dSHerbert Xu 1242da7f033dSHerbert Xu ilen = dtemplate[i].inlen; 1243da7f033dSHerbert Xu ret = crypto_comp_decompress(tfm, dtemplate[i].input, 1244da7f033dSHerbert Xu ilen, result, &dlen); 1245da7f033dSHerbert Xu if (ret) { 1246da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: decompression failed " 1247da7f033dSHerbert Xu "on test %d for %s: ret=%d\n", i + 1, algo, 1248da7f033dSHerbert Xu -ret); 1249da7f033dSHerbert Xu goto out; 1250da7f033dSHerbert Xu } 1251da7f033dSHerbert Xu 1252b812eb00SGeert Uytterhoeven if (dlen != dtemplate[i].outlen) { 1253b812eb00SGeert Uytterhoeven printk(KERN_ERR "alg: comp: Decompression test %d " 1254b812eb00SGeert Uytterhoeven "failed for %s: output len = %d\n", i + 1, algo, 1255b812eb00SGeert Uytterhoeven dlen); 1256b812eb00SGeert Uytterhoeven ret = -EINVAL; 1257b812eb00SGeert Uytterhoeven goto out; 1258b812eb00SGeert Uytterhoeven } 1259b812eb00SGeert Uytterhoeven 1260da7f033dSHerbert Xu if (memcmp(result, dtemplate[i].output, dlen)) { 1261da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Decompression test %d " 1262da7f033dSHerbert Xu "failed for %s\n", i + 1, algo); 1263da7f033dSHerbert Xu hexdump(result, dlen); 1264da7f033dSHerbert Xu ret = -EINVAL; 1265da7f033dSHerbert Xu goto out; 1266da7f033dSHerbert Xu } 1267da7f033dSHerbert Xu } 1268da7f033dSHerbert Xu 1269da7f033dSHerbert Xu ret = 0; 1270da7f033dSHerbert Xu 1271da7f033dSHerbert Xu out: 1272da7f033dSHerbert Xu return ret; 1273da7f033dSHerbert Xu } 1274da7f033dSHerbert Xu 12758064efb8SGeert Uytterhoeven static int test_pcomp(struct crypto_pcomp *tfm, 12768064efb8SGeert Uytterhoeven struct pcomp_testvec *ctemplate, 12778064efb8SGeert Uytterhoeven struct pcomp_testvec *dtemplate, int ctcount, 12788064efb8SGeert Uytterhoeven int dtcount) 12798064efb8SGeert Uytterhoeven { 12808064efb8SGeert Uytterhoeven const char *algo = crypto_tfm_alg_driver_name(crypto_pcomp_tfm(tfm)); 12818064efb8SGeert Uytterhoeven unsigned int i; 12828064efb8SGeert Uytterhoeven char result[COMP_BUF_SIZE]; 12833ce858cbSGeert Uytterhoeven int res; 12848064efb8SGeert Uytterhoeven 12858064efb8SGeert Uytterhoeven for (i = 0; i < ctcount; i++) { 12868064efb8SGeert Uytterhoeven struct comp_request req; 12873ce858cbSGeert Uytterhoeven unsigned int produced = 0; 12888064efb8SGeert Uytterhoeven 12893ce858cbSGeert Uytterhoeven res = crypto_compress_setup(tfm, ctemplate[i].params, 12908064efb8SGeert Uytterhoeven ctemplate[i].paramsize); 12913ce858cbSGeert Uytterhoeven if (res) { 12928064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression setup failed on test " 12933ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 12943ce858cbSGeert Uytterhoeven return res; 12958064efb8SGeert Uytterhoeven } 12968064efb8SGeert Uytterhoeven 12973ce858cbSGeert Uytterhoeven res = crypto_compress_init(tfm); 12983ce858cbSGeert Uytterhoeven if (res) { 12998064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression init failed on test " 13003ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 13013ce858cbSGeert Uytterhoeven return res; 13028064efb8SGeert Uytterhoeven } 13038064efb8SGeert Uytterhoeven 13048064efb8SGeert Uytterhoeven memset(result, 0, sizeof(result)); 13058064efb8SGeert Uytterhoeven 13068064efb8SGeert Uytterhoeven req.next_in = ctemplate[i].input; 13078064efb8SGeert Uytterhoeven req.avail_in = ctemplate[i].inlen / 2; 13088064efb8SGeert Uytterhoeven req.next_out = result; 13098064efb8SGeert Uytterhoeven req.avail_out = ctemplate[i].outlen / 2; 13108064efb8SGeert Uytterhoeven 13113ce858cbSGeert Uytterhoeven res = crypto_compress_update(tfm, &req); 13123ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 13138064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression update failed on test " 13143ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 13153ce858cbSGeert Uytterhoeven return res; 13168064efb8SGeert Uytterhoeven } 13173ce858cbSGeert Uytterhoeven if (res > 0) 13183ce858cbSGeert Uytterhoeven produced += res; 13198064efb8SGeert Uytterhoeven 13208064efb8SGeert Uytterhoeven /* Add remaining input data */ 13218064efb8SGeert Uytterhoeven req.avail_in += (ctemplate[i].inlen + 1) / 2; 13228064efb8SGeert Uytterhoeven 13233ce858cbSGeert Uytterhoeven res = crypto_compress_update(tfm, &req); 13243ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 13258064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression update failed on test " 13263ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 13273ce858cbSGeert Uytterhoeven return res; 13288064efb8SGeert Uytterhoeven } 13293ce858cbSGeert Uytterhoeven if (res > 0) 13303ce858cbSGeert Uytterhoeven produced += res; 13318064efb8SGeert Uytterhoeven 13328064efb8SGeert Uytterhoeven /* Provide remaining output space */ 13338064efb8SGeert Uytterhoeven req.avail_out += COMP_BUF_SIZE - ctemplate[i].outlen / 2; 13348064efb8SGeert Uytterhoeven 13353ce858cbSGeert Uytterhoeven res = crypto_compress_final(tfm, &req); 13363ce858cbSGeert Uytterhoeven if (res < 0) { 13378064efb8SGeert Uytterhoeven pr_err("alg: pcomp: compression final failed on test " 13383ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 13393ce858cbSGeert Uytterhoeven return res; 13408064efb8SGeert Uytterhoeven } 13413ce858cbSGeert Uytterhoeven produced += res; 13428064efb8SGeert Uytterhoeven 13438064efb8SGeert Uytterhoeven if (COMP_BUF_SIZE - req.avail_out != ctemplate[i].outlen) { 13448064efb8SGeert Uytterhoeven pr_err("alg: comp: Compression test %d failed for %s: " 13458064efb8SGeert Uytterhoeven "output len = %d (expected %d)\n", i + 1, algo, 13468064efb8SGeert Uytterhoeven COMP_BUF_SIZE - req.avail_out, 13478064efb8SGeert Uytterhoeven ctemplate[i].outlen); 13488064efb8SGeert Uytterhoeven return -EINVAL; 13498064efb8SGeert Uytterhoeven } 13508064efb8SGeert Uytterhoeven 13513ce858cbSGeert Uytterhoeven if (produced != ctemplate[i].outlen) { 13523ce858cbSGeert Uytterhoeven pr_err("alg: comp: Compression test %d failed for %s: " 13533ce858cbSGeert Uytterhoeven "returned len = %u (expected %d)\n", i + 1, 13543ce858cbSGeert Uytterhoeven algo, produced, ctemplate[i].outlen); 13553ce858cbSGeert Uytterhoeven return -EINVAL; 13563ce858cbSGeert Uytterhoeven } 13573ce858cbSGeert Uytterhoeven 13588064efb8SGeert Uytterhoeven if (memcmp(result, ctemplate[i].output, ctemplate[i].outlen)) { 13598064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Compression test %d failed for " 13608064efb8SGeert Uytterhoeven "%s\n", i + 1, algo); 13618064efb8SGeert Uytterhoeven hexdump(result, ctemplate[i].outlen); 13628064efb8SGeert Uytterhoeven return -EINVAL; 13638064efb8SGeert Uytterhoeven } 13648064efb8SGeert Uytterhoeven } 13658064efb8SGeert Uytterhoeven 13668064efb8SGeert Uytterhoeven for (i = 0; i < dtcount; i++) { 13678064efb8SGeert Uytterhoeven struct comp_request req; 13683ce858cbSGeert Uytterhoeven unsigned int produced = 0; 13698064efb8SGeert Uytterhoeven 13703ce858cbSGeert Uytterhoeven res = crypto_decompress_setup(tfm, dtemplate[i].params, 13718064efb8SGeert Uytterhoeven dtemplate[i].paramsize); 13723ce858cbSGeert Uytterhoeven if (res) { 13738064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression setup failed on " 13743ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 13753ce858cbSGeert Uytterhoeven return res; 13768064efb8SGeert Uytterhoeven } 13778064efb8SGeert Uytterhoeven 13783ce858cbSGeert Uytterhoeven res = crypto_decompress_init(tfm); 13793ce858cbSGeert Uytterhoeven if (res) { 13808064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression init failed on test " 13813ce858cbSGeert Uytterhoeven "%d for %s: error=%d\n", i + 1, algo, res); 13823ce858cbSGeert Uytterhoeven return res; 13838064efb8SGeert Uytterhoeven } 13848064efb8SGeert Uytterhoeven 13858064efb8SGeert Uytterhoeven memset(result, 0, sizeof(result)); 13868064efb8SGeert Uytterhoeven 13878064efb8SGeert Uytterhoeven req.next_in = dtemplate[i].input; 13888064efb8SGeert Uytterhoeven req.avail_in = dtemplate[i].inlen / 2; 13898064efb8SGeert Uytterhoeven req.next_out = result; 13908064efb8SGeert Uytterhoeven req.avail_out = dtemplate[i].outlen / 2; 13918064efb8SGeert Uytterhoeven 13923ce858cbSGeert Uytterhoeven res = crypto_decompress_update(tfm, &req); 13933ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 13948064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression update failed on " 13953ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 13963ce858cbSGeert Uytterhoeven return res; 13978064efb8SGeert Uytterhoeven } 13983ce858cbSGeert Uytterhoeven if (res > 0) 13993ce858cbSGeert Uytterhoeven produced += res; 14008064efb8SGeert Uytterhoeven 14018064efb8SGeert Uytterhoeven /* Add remaining input data */ 14028064efb8SGeert Uytterhoeven req.avail_in += (dtemplate[i].inlen + 1) / 2; 14038064efb8SGeert Uytterhoeven 14043ce858cbSGeert Uytterhoeven res = crypto_decompress_update(tfm, &req); 14053ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 14068064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression update failed on " 14073ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 14083ce858cbSGeert Uytterhoeven return res; 14098064efb8SGeert Uytterhoeven } 14103ce858cbSGeert Uytterhoeven if (res > 0) 14113ce858cbSGeert Uytterhoeven produced += res; 14128064efb8SGeert Uytterhoeven 14138064efb8SGeert Uytterhoeven /* Provide remaining output space */ 14148064efb8SGeert Uytterhoeven req.avail_out += COMP_BUF_SIZE - dtemplate[i].outlen / 2; 14158064efb8SGeert Uytterhoeven 14163ce858cbSGeert Uytterhoeven res = crypto_decompress_final(tfm, &req); 14173ce858cbSGeert Uytterhoeven if (res < 0 && (res != -EAGAIN || req.avail_in)) { 14188064efb8SGeert Uytterhoeven pr_err("alg: pcomp: decompression final failed on " 14193ce858cbSGeert Uytterhoeven "test %d for %s: error=%d\n", i + 1, algo, res); 14203ce858cbSGeert Uytterhoeven return res; 14218064efb8SGeert Uytterhoeven } 14223ce858cbSGeert Uytterhoeven if (res > 0) 14233ce858cbSGeert Uytterhoeven produced += res; 14248064efb8SGeert Uytterhoeven 14258064efb8SGeert Uytterhoeven if (COMP_BUF_SIZE - req.avail_out != dtemplate[i].outlen) { 14268064efb8SGeert Uytterhoeven pr_err("alg: comp: Decompression test %d failed for " 14278064efb8SGeert Uytterhoeven "%s: output len = %d (expected %d)\n", i + 1, 14288064efb8SGeert Uytterhoeven algo, COMP_BUF_SIZE - req.avail_out, 14298064efb8SGeert Uytterhoeven dtemplate[i].outlen); 14308064efb8SGeert Uytterhoeven return -EINVAL; 14318064efb8SGeert Uytterhoeven } 14328064efb8SGeert Uytterhoeven 14333ce858cbSGeert Uytterhoeven if (produced != dtemplate[i].outlen) { 14343ce858cbSGeert Uytterhoeven pr_err("alg: comp: Decompression test %d failed for " 14353ce858cbSGeert Uytterhoeven "%s: returned len = %u (expected %d)\n", i + 1, 14363ce858cbSGeert Uytterhoeven algo, produced, dtemplate[i].outlen); 14373ce858cbSGeert Uytterhoeven return -EINVAL; 14383ce858cbSGeert Uytterhoeven } 14393ce858cbSGeert Uytterhoeven 14408064efb8SGeert Uytterhoeven if (memcmp(result, dtemplate[i].output, dtemplate[i].outlen)) { 14418064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Decompression test %d failed for " 14428064efb8SGeert Uytterhoeven "%s\n", i + 1, algo); 14438064efb8SGeert Uytterhoeven hexdump(result, dtemplate[i].outlen); 14448064efb8SGeert Uytterhoeven return -EINVAL; 14458064efb8SGeert Uytterhoeven } 14468064efb8SGeert Uytterhoeven } 14478064efb8SGeert Uytterhoeven 14488064efb8SGeert Uytterhoeven return 0; 14498064efb8SGeert Uytterhoeven } 14508064efb8SGeert Uytterhoeven 14517647d6ceSJarod Wilson 14527647d6ceSJarod Wilson static int test_cprng(struct crypto_rng *tfm, struct cprng_testvec *template, 14537647d6ceSJarod Wilson unsigned int tcount) 14547647d6ceSJarod Wilson { 14557647d6ceSJarod Wilson const char *algo = crypto_tfm_alg_driver_name(crypto_rng_tfm(tfm)); 1456fa4ef8a6SFelipe Contreras int err = 0, i, j, seedsize; 14577647d6ceSJarod Wilson u8 *seed; 14587647d6ceSJarod Wilson char result[32]; 14597647d6ceSJarod Wilson 14607647d6ceSJarod Wilson seedsize = crypto_rng_seedsize(tfm); 14617647d6ceSJarod Wilson 14627647d6ceSJarod Wilson seed = kmalloc(seedsize, GFP_KERNEL); 14637647d6ceSJarod Wilson if (!seed) { 14647647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to allocate seed space " 14657647d6ceSJarod Wilson "for %s\n", algo); 14667647d6ceSJarod Wilson return -ENOMEM; 14677647d6ceSJarod Wilson } 14687647d6ceSJarod Wilson 14697647d6ceSJarod Wilson for (i = 0; i < tcount; i++) { 14707647d6ceSJarod Wilson memset(result, 0, 32); 14717647d6ceSJarod Wilson 14727647d6ceSJarod Wilson memcpy(seed, template[i].v, template[i].vlen); 14737647d6ceSJarod Wilson memcpy(seed + template[i].vlen, template[i].key, 14747647d6ceSJarod Wilson template[i].klen); 14757647d6ceSJarod Wilson memcpy(seed + template[i].vlen + template[i].klen, 14767647d6ceSJarod Wilson template[i].dt, template[i].dtlen); 14777647d6ceSJarod Wilson 14787647d6ceSJarod Wilson err = crypto_rng_reset(tfm, seed, seedsize); 14797647d6ceSJarod Wilson if (err) { 14807647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to reset rng " 14817647d6ceSJarod Wilson "for %s\n", algo); 14827647d6ceSJarod Wilson goto out; 14837647d6ceSJarod Wilson } 14847647d6ceSJarod Wilson 14857647d6ceSJarod Wilson for (j = 0; j < template[i].loops; j++) { 14867647d6ceSJarod Wilson err = crypto_rng_get_bytes(tfm, result, 14877647d6ceSJarod Wilson template[i].rlen); 148819e60e13SStephan Mueller if (err < 0) { 14897647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to obtain " 14907647d6ceSJarod Wilson "the correct amount of random data for " 149119e60e13SStephan Mueller "%s (requested %d)\n", algo, 149219e60e13SStephan Mueller template[i].rlen); 14937647d6ceSJarod Wilson goto out; 14947647d6ceSJarod Wilson } 14957647d6ceSJarod Wilson } 14967647d6ceSJarod Wilson 14977647d6ceSJarod Wilson err = memcmp(result, template[i].result, 14987647d6ceSJarod Wilson template[i].rlen); 14997647d6ceSJarod Wilson if (err) { 15007647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Test %d failed for %s\n", 15017647d6ceSJarod Wilson i, algo); 15027647d6ceSJarod Wilson hexdump(result, template[i].rlen); 15037647d6ceSJarod Wilson err = -EINVAL; 15047647d6ceSJarod Wilson goto out; 15057647d6ceSJarod Wilson } 15067647d6ceSJarod Wilson } 15077647d6ceSJarod Wilson 15087647d6ceSJarod Wilson out: 15097647d6ceSJarod Wilson kfree(seed); 15107647d6ceSJarod Wilson return err; 15117647d6ceSJarod Wilson } 15127647d6ceSJarod Wilson 1513da7f033dSHerbert Xu static int alg_test_aead(const struct alg_test_desc *desc, const char *driver, 1514da7f033dSHerbert Xu u32 type, u32 mask) 1515da7f033dSHerbert Xu { 1516da7f033dSHerbert Xu struct crypto_aead *tfm; 1517da7f033dSHerbert Xu int err = 0; 1518da7f033dSHerbert Xu 1519425a8829SStephan Mueller tfm = crypto_alloc_aead(driver, type | CRYPTO_ALG_INTERNAL, mask); 1520da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1521da7f033dSHerbert Xu printk(KERN_ERR "alg: aead: Failed to load transform for %s: " 1522da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1523da7f033dSHerbert Xu return PTR_ERR(tfm); 1524da7f033dSHerbert Xu } 1525da7f033dSHerbert Xu 1526da7f033dSHerbert Xu if (desc->suite.aead.enc.vecs) { 1527da7f033dSHerbert Xu err = test_aead(tfm, ENCRYPT, desc->suite.aead.enc.vecs, 1528da7f033dSHerbert Xu desc->suite.aead.enc.count); 1529da7f033dSHerbert Xu if (err) 1530da7f033dSHerbert Xu goto out; 1531da7f033dSHerbert Xu } 1532da7f033dSHerbert Xu 1533da7f033dSHerbert Xu if (!err && desc->suite.aead.dec.vecs) 1534da7f033dSHerbert Xu err = test_aead(tfm, DECRYPT, desc->suite.aead.dec.vecs, 1535da7f033dSHerbert Xu desc->suite.aead.dec.count); 1536da7f033dSHerbert Xu 1537da7f033dSHerbert Xu out: 1538da7f033dSHerbert Xu crypto_free_aead(tfm); 1539da7f033dSHerbert Xu return err; 1540da7f033dSHerbert Xu } 1541da7f033dSHerbert Xu 1542da7f033dSHerbert Xu static int alg_test_cipher(const struct alg_test_desc *desc, 1543da7f033dSHerbert Xu const char *driver, u32 type, u32 mask) 1544da7f033dSHerbert Xu { 15451aa4ecd9SHerbert Xu struct crypto_cipher *tfm; 1546da7f033dSHerbert Xu int err = 0; 1547da7f033dSHerbert Xu 1548425a8829SStephan Mueller tfm = crypto_alloc_cipher(driver, type | CRYPTO_ALG_INTERNAL, mask); 1549da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1550da7f033dSHerbert Xu printk(KERN_ERR "alg: cipher: Failed to load transform for " 1551da7f033dSHerbert Xu "%s: %ld\n", driver, PTR_ERR(tfm)); 1552da7f033dSHerbert Xu return PTR_ERR(tfm); 1553da7f033dSHerbert Xu } 1554da7f033dSHerbert Xu 1555da7f033dSHerbert Xu if (desc->suite.cipher.enc.vecs) { 1556da7f033dSHerbert Xu err = test_cipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs, 1557da7f033dSHerbert Xu desc->suite.cipher.enc.count); 1558da7f033dSHerbert Xu if (err) 1559da7f033dSHerbert Xu goto out; 1560da7f033dSHerbert Xu } 1561da7f033dSHerbert Xu 1562da7f033dSHerbert Xu if (desc->suite.cipher.dec.vecs) 1563da7f033dSHerbert Xu err = test_cipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs, 1564da7f033dSHerbert Xu desc->suite.cipher.dec.count); 1565da7f033dSHerbert Xu 1566da7f033dSHerbert Xu out: 15671aa4ecd9SHerbert Xu crypto_free_cipher(tfm); 15681aa4ecd9SHerbert Xu return err; 15691aa4ecd9SHerbert Xu } 15701aa4ecd9SHerbert Xu 15711aa4ecd9SHerbert Xu static int alg_test_skcipher(const struct alg_test_desc *desc, 15721aa4ecd9SHerbert Xu const char *driver, u32 type, u32 mask) 15731aa4ecd9SHerbert Xu { 15741aa4ecd9SHerbert Xu struct crypto_ablkcipher *tfm; 15751aa4ecd9SHerbert Xu int err = 0; 15761aa4ecd9SHerbert Xu 1577425a8829SStephan Mueller tfm = crypto_alloc_ablkcipher(driver, type | CRYPTO_ALG_INTERNAL, mask); 15781aa4ecd9SHerbert Xu if (IS_ERR(tfm)) { 15791aa4ecd9SHerbert Xu printk(KERN_ERR "alg: skcipher: Failed to load transform for " 15801aa4ecd9SHerbert Xu "%s: %ld\n", driver, PTR_ERR(tfm)); 15811aa4ecd9SHerbert Xu return PTR_ERR(tfm); 15821aa4ecd9SHerbert Xu } 15831aa4ecd9SHerbert Xu 15841aa4ecd9SHerbert Xu if (desc->suite.cipher.enc.vecs) { 15851aa4ecd9SHerbert Xu err = test_skcipher(tfm, ENCRYPT, desc->suite.cipher.enc.vecs, 15861aa4ecd9SHerbert Xu desc->suite.cipher.enc.count); 15871aa4ecd9SHerbert Xu if (err) 15881aa4ecd9SHerbert Xu goto out; 15891aa4ecd9SHerbert Xu } 15901aa4ecd9SHerbert Xu 15911aa4ecd9SHerbert Xu if (desc->suite.cipher.dec.vecs) 15921aa4ecd9SHerbert Xu err = test_skcipher(tfm, DECRYPT, desc->suite.cipher.dec.vecs, 15931aa4ecd9SHerbert Xu desc->suite.cipher.dec.count); 15941aa4ecd9SHerbert Xu 15951aa4ecd9SHerbert Xu out: 1596da7f033dSHerbert Xu crypto_free_ablkcipher(tfm); 1597da7f033dSHerbert Xu return err; 1598da7f033dSHerbert Xu } 1599da7f033dSHerbert Xu 1600da7f033dSHerbert Xu static int alg_test_comp(const struct alg_test_desc *desc, const char *driver, 1601da7f033dSHerbert Xu u32 type, u32 mask) 1602da7f033dSHerbert Xu { 1603da7f033dSHerbert Xu struct crypto_comp *tfm; 1604da7f033dSHerbert Xu int err; 1605da7f033dSHerbert Xu 1606da7f033dSHerbert Xu tfm = crypto_alloc_comp(driver, type, mask); 1607da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1608da7f033dSHerbert Xu printk(KERN_ERR "alg: comp: Failed to load transform for %s: " 1609da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1610da7f033dSHerbert Xu return PTR_ERR(tfm); 1611da7f033dSHerbert Xu } 1612da7f033dSHerbert Xu 1613da7f033dSHerbert Xu err = test_comp(tfm, desc->suite.comp.comp.vecs, 1614da7f033dSHerbert Xu desc->suite.comp.decomp.vecs, 1615da7f033dSHerbert Xu desc->suite.comp.comp.count, 1616da7f033dSHerbert Xu desc->suite.comp.decomp.count); 1617da7f033dSHerbert Xu 1618da7f033dSHerbert Xu crypto_free_comp(tfm); 1619da7f033dSHerbert Xu return err; 1620da7f033dSHerbert Xu } 1621da7f033dSHerbert Xu 16228064efb8SGeert Uytterhoeven static int alg_test_pcomp(const struct alg_test_desc *desc, const char *driver, 16238064efb8SGeert Uytterhoeven u32 type, u32 mask) 16248064efb8SGeert Uytterhoeven { 16258064efb8SGeert Uytterhoeven struct crypto_pcomp *tfm; 16268064efb8SGeert Uytterhoeven int err; 16278064efb8SGeert Uytterhoeven 16288064efb8SGeert Uytterhoeven tfm = crypto_alloc_pcomp(driver, type, mask); 16298064efb8SGeert Uytterhoeven if (IS_ERR(tfm)) { 16308064efb8SGeert Uytterhoeven pr_err("alg: pcomp: Failed to load transform for %s: %ld\n", 16318064efb8SGeert Uytterhoeven driver, PTR_ERR(tfm)); 16328064efb8SGeert Uytterhoeven return PTR_ERR(tfm); 16338064efb8SGeert Uytterhoeven } 16348064efb8SGeert Uytterhoeven 16358064efb8SGeert Uytterhoeven err = test_pcomp(tfm, desc->suite.pcomp.comp.vecs, 16368064efb8SGeert Uytterhoeven desc->suite.pcomp.decomp.vecs, 16378064efb8SGeert Uytterhoeven desc->suite.pcomp.comp.count, 16388064efb8SGeert Uytterhoeven desc->suite.pcomp.decomp.count); 16398064efb8SGeert Uytterhoeven 16408064efb8SGeert Uytterhoeven crypto_free_pcomp(tfm); 16418064efb8SGeert Uytterhoeven return err; 16428064efb8SGeert Uytterhoeven } 16438064efb8SGeert Uytterhoeven 1644da7f033dSHerbert Xu static int alg_test_hash(const struct alg_test_desc *desc, const char *driver, 1645da7f033dSHerbert Xu u32 type, u32 mask) 1646da7f033dSHerbert Xu { 1647da7f033dSHerbert Xu struct crypto_ahash *tfm; 1648da7f033dSHerbert Xu int err; 1649da7f033dSHerbert Xu 1650425a8829SStephan Mueller tfm = crypto_alloc_ahash(driver, type | CRYPTO_ALG_INTERNAL, mask); 1651da7f033dSHerbert Xu if (IS_ERR(tfm)) { 1652da7f033dSHerbert Xu printk(KERN_ERR "alg: hash: Failed to load transform for %s: " 1653da7f033dSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 1654da7f033dSHerbert Xu return PTR_ERR(tfm); 1655da7f033dSHerbert Xu } 1656da7f033dSHerbert Xu 1657a8f1a052SDavid S. Miller err = test_hash(tfm, desc->suite.hash.vecs, 1658a8f1a052SDavid S. Miller desc->suite.hash.count, true); 1659a8f1a052SDavid S. Miller if (!err) 1660a8f1a052SDavid S. Miller err = test_hash(tfm, desc->suite.hash.vecs, 1661a8f1a052SDavid S. Miller desc->suite.hash.count, false); 1662da7f033dSHerbert Xu 1663da7f033dSHerbert Xu crypto_free_ahash(tfm); 1664da7f033dSHerbert Xu return err; 1665da7f033dSHerbert Xu } 1666da7f033dSHerbert Xu 16678e3ee85eSHerbert Xu static int alg_test_crc32c(const struct alg_test_desc *desc, 16688e3ee85eSHerbert Xu const char *driver, u32 type, u32 mask) 16698e3ee85eSHerbert Xu { 16708e3ee85eSHerbert Xu struct crypto_shash *tfm; 16718e3ee85eSHerbert Xu u32 val; 16728e3ee85eSHerbert Xu int err; 16738e3ee85eSHerbert Xu 16748e3ee85eSHerbert Xu err = alg_test_hash(desc, driver, type, mask); 16758e3ee85eSHerbert Xu if (err) 16768e3ee85eSHerbert Xu goto out; 16778e3ee85eSHerbert Xu 1678425a8829SStephan Mueller tfm = crypto_alloc_shash(driver, type | CRYPTO_ALG_INTERNAL, mask); 16798e3ee85eSHerbert Xu if (IS_ERR(tfm)) { 16808e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Failed to load transform for %s: " 16818e3ee85eSHerbert Xu "%ld\n", driver, PTR_ERR(tfm)); 16828e3ee85eSHerbert Xu err = PTR_ERR(tfm); 16838e3ee85eSHerbert Xu goto out; 16848e3ee85eSHerbert Xu } 16858e3ee85eSHerbert Xu 16868e3ee85eSHerbert Xu do { 16874c5c3024SJan-Simon Möller SHASH_DESC_ON_STACK(shash, tfm); 16884c5c3024SJan-Simon Möller u32 *ctx = (u32 *)shash_desc_ctx(shash); 16898e3ee85eSHerbert Xu 16904c5c3024SJan-Simon Möller shash->tfm = tfm; 16914c5c3024SJan-Simon Möller shash->flags = 0; 16928e3ee85eSHerbert Xu 16934c5c3024SJan-Simon Möller *ctx = le32_to_cpu(420553207); 16944c5c3024SJan-Simon Möller err = crypto_shash_final(shash, (u8 *)&val); 16958e3ee85eSHerbert Xu if (err) { 16968e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Operation failed for " 16978e3ee85eSHerbert Xu "%s: %d\n", driver, err); 16988e3ee85eSHerbert Xu break; 16998e3ee85eSHerbert Xu } 17008e3ee85eSHerbert Xu 17018e3ee85eSHerbert Xu if (val != ~420553207) { 17028e3ee85eSHerbert Xu printk(KERN_ERR "alg: crc32c: Test failed for %s: " 17038e3ee85eSHerbert Xu "%d\n", driver, val); 17048e3ee85eSHerbert Xu err = -EINVAL; 17058e3ee85eSHerbert Xu } 17068e3ee85eSHerbert Xu } while (0); 17078e3ee85eSHerbert Xu 17088e3ee85eSHerbert Xu crypto_free_shash(tfm); 17098e3ee85eSHerbert Xu 17108e3ee85eSHerbert Xu out: 17118e3ee85eSHerbert Xu return err; 17128e3ee85eSHerbert Xu } 17138e3ee85eSHerbert Xu 17147647d6ceSJarod Wilson static int alg_test_cprng(const struct alg_test_desc *desc, const char *driver, 17157647d6ceSJarod Wilson u32 type, u32 mask) 17167647d6ceSJarod Wilson { 17177647d6ceSJarod Wilson struct crypto_rng *rng; 17187647d6ceSJarod Wilson int err; 17197647d6ceSJarod Wilson 1720425a8829SStephan Mueller rng = crypto_alloc_rng(driver, type | CRYPTO_ALG_INTERNAL, mask); 17217647d6ceSJarod Wilson if (IS_ERR(rng)) { 17227647d6ceSJarod Wilson printk(KERN_ERR "alg: cprng: Failed to load transform for %s: " 17237647d6ceSJarod Wilson "%ld\n", driver, PTR_ERR(rng)); 17247647d6ceSJarod Wilson return PTR_ERR(rng); 17257647d6ceSJarod Wilson } 17267647d6ceSJarod Wilson 17277647d6ceSJarod Wilson err = test_cprng(rng, desc->suite.cprng.vecs, desc->suite.cprng.count); 17287647d6ceSJarod Wilson 17297647d6ceSJarod Wilson crypto_free_rng(rng); 17307647d6ceSJarod Wilson 17317647d6ceSJarod Wilson return err; 17327647d6ceSJarod Wilson } 17337647d6ceSJarod Wilson 173464d1cdfbSStephan Mueller 173564d1cdfbSStephan Mueller static int drbg_cavs_test(struct drbg_testvec *test, int pr, 173664d1cdfbSStephan Mueller const char *driver, u32 type, u32 mask) 173764d1cdfbSStephan Mueller { 173864d1cdfbSStephan Mueller int ret = -EAGAIN; 173964d1cdfbSStephan Mueller struct crypto_rng *drng; 174064d1cdfbSStephan Mueller struct drbg_test_data test_data; 174164d1cdfbSStephan Mueller struct drbg_string addtl, pers, testentropy; 174264d1cdfbSStephan Mueller unsigned char *buf = kzalloc(test->expectedlen, GFP_KERNEL); 174364d1cdfbSStephan Mueller 174464d1cdfbSStephan Mueller if (!buf) 174564d1cdfbSStephan Mueller return -ENOMEM; 174664d1cdfbSStephan Mueller 1747425a8829SStephan Mueller drng = crypto_alloc_rng(driver, type | CRYPTO_ALG_INTERNAL, mask); 174864d1cdfbSStephan Mueller if (IS_ERR(drng)) { 174964d1cdfbSStephan Mueller printk(KERN_ERR "alg: drbg: could not allocate DRNG handle for " 175064d1cdfbSStephan Mueller "%s\n", driver); 175164d1cdfbSStephan Mueller kzfree(buf); 175264d1cdfbSStephan Mueller return -ENOMEM; 175364d1cdfbSStephan Mueller } 175464d1cdfbSStephan Mueller 175564d1cdfbSStephan Mueller test_data.testentropy = &testentropy; 175664d1cdfbSStephan Mueller drbg_string_fill(&testentropy, test->entropy, test->entropylen); 175764d1cdfbSStephan Mueller drbg_string_fill(&pers, test->pers, test->perslen); 175864d1cdfbSStephan Mueller ret = crypto_drbg_reset_test(drng, &pers, &test_data); 175964d1cdfbSStephan Mueller if (ret) { 176064d1cdfbSStephan Mueller printk(KERN_ERR "alg: drbg: Failed to reset rng\n"); 176164d1cdfbSStephan Mueller goto outbuf; 176264d1cdfbSStephan Mueller } 176364d1cdfbSStephan Mueller 176464d1cdfbSStephan Mueller drbg_string_fill(&addtl, test->addtla, test->addtllen); 176564d1cdfbSStephan Mueller if (pr) { 176664d1cdfbSStephan Mueller drbg_string_fill(&testentropy, test->entpra, test->entprlen); 176764d1cdfbSStephan Mueller ret = crypto_drbg_get_bytes_addtl_test(drng, 176864d1cdfbSStephan Mueller buf, test->expectedlen, &addtl, &test_data); 176964d1cdfbSStephan Mueller } else { 177064d1cdfbSStephan Mueller ret = crypto_drbg_get_bytes_addtl(drng, 177164d1cdfbSStephan Mueller buf, test->expectedlen, &addtl); 177264d1cdfbSStephan Mueller } 177319e60e13SStephan Mueller if (ret < 0) { 177464d1cdfbSStephan Mueller printk(KERN_ERR "alg: drbg: could not obtain random data for " 177564d1cdfbSStephan Mueller "driver %s\n", driver); 177664d1cdfbSStephan Mueller goto outbuf; 177764d1cdfbSStephan Mueller } 177864d1cdfbSStephan Mueller 177964d1cdfbSStephan Mueller drbg_string_fill(&addtl, test->addtlb, test->addtllen); 178064d1cdfbSStephan Mueller if (pr) { 178164d1cdfbSStephan Mueller drbg_string_fill(&testentropy, test->entprb, test->entprlen); 178264d1cdfbSStephan Mueller ret = crypto_drbg_get_bytes_addtl_test(drng, 178364d1cdfbSStephan Mueller buf, test->expectedlen, &addtl, &test_data); 178464d1cdfbSStephan Mueller } else { 178564d1cdfbSStephan Mueller ret = crypto_drbg_get_bytes_addtl(drng, 178664d1cdfbSStephan Mueller buf, test->expectedlen, &addtl); 178764d1cdfbSStephan Mueller } 178819e60e13SStephan Mueller if (ret < 0) { 178964d1cdfbSStephan Mueller printk(KERN_ERR "alg: drbg: could not obtain random data for " 179064d1cdfbSStephan Mueller "driver %s\n", driver); 179164d1cdfbSStephan Mueller goto outbuf; 179264d1cdfbSStephan Mueller } 179364d1cdfbSStephan Mueller 179464d1cdfbSStephan Mueller ret = memcmp(test->expected, buf, test->expectedlen); 179564d1cdfbSStephan Mueller 179664d1cdfbSStephan Mueller outbuf: 179764d1cdfbSStephan Mueller crypto_free_rng(drng); 179864d1cdfbSStephan Mueller kzfree(buf); 179964d1cdfbSStephan Mueller return ret; 180064d1cdfbSStephan Mueller } 180164d1cdfbSStephan Mueller 180264d1cdfbSStephan Mueller 180364d1cdfbSStephan Mueller static int alg_test_drbg(const struct alg_test_desc *desc, const char *driver, 180464d1cdfbSStephan Mueller u32 type, u32 mask) 180564d1cdfbSStephan Mueller { 180664d1cdfbSStephan Mueller int err = 0; 180764d1cdfbSStephan Mueller int pr = 0; 180864d1cdfbSStephan Mueller int i = 0; 180964d1cdfbSStephan Mueller struct drbg_testvec *template = desc->suite.drbg.vecs; 181064d1cdfbSStephan Mueller unsigned int tcount = desc->suite.drbg.count; 181164d1cdfbSStephan Mueller 181264d1cdfbSStephan Mueller if (0 == memcmp(driver, "drbg_pr_", 8)) 181364d1cdfbSStephan Mueller pr = 1; 181464d1cdfbSStephan Mueller 181564d1cdfbSStephan Mueller for (i = 0; i < tcount; i++) { 181664d1cdfbSStephan Mueller err = drbg_cavs_test(&template[i], pr, driver, type, mask); 181764d1cdfbSStephan Mueller if (err) { 181864d1cdfbSStephan Mueller printk(KERN_ERR "alg: drbg: Test %d failed for %s\n", 181964d1cdfbSStephan Mueller i, driver); 182064d1cdfbSStephan Mueller err = -EINVAL; 182164d1cdfbSStephan Mueller break; 182264d1cdfbSStephan Mueller } 182364d1cdfbSStephan Mueller } 182464d1cdfbSStephan Mueller return err; 182564d1cdfbSStephan Mueller 182664d1cdfbSStephan Mueller } 182764d1cdfbSStephan Mueller 1828863b557aSYouquan, Song static int alg_test_null(const struct alg_test_desc *desc, 1829863b557aSYouquan, Song const char *driver, u32 type, u32 mask) 1830863b557aSYouquan, Song { 1831863b557aSYouquan, Song return 0; 1832863b557aSYouquan, Song } 1833863b557aSYouquan, Song 1834da7f033dSHerbert Xu /* Please keep this list sorted by algorithm name. */ 1835da7f033dSHerbert Xu static const struct alg_test_desc alg_test_descs[] = { 1836da7f033dSHerbert Xu { 18374d6d6a2cSJohannes Goetzfried .alg = "__cbc-cast5-avx", 18384d6d6a2cSJohannes Goetzfried .test = alg_test_null, 18394d6d6a2cSJohannes Goetzfried }, { 18404ea1277dSJohannes Goetzfried .alg = "__cbc-cast6-avx", 18414ea1277dSJohannes Goetzfried .test = alg_test_null, 18424ea1277dSJohannes Goetzfried }, { 18437efe4076SJohannes Goetzfried .alg = "__cbc-serpent-avx", 18447efe4076SJohannes Goetzfried .test = alg_test_null, 18457efe4076SJohannes Goetzfried }, { 184656d76c96SJussi Kivilinna .alg = "__cbc-serpent-avx2", 184756d76c96SJussi Kivilinna .test = alg_test_null, 184856d76c96SJussi Kivilinna }, { 1849937c30d7SJussi Kivilinna .alg = "__cbc-serpent-sse2", 1850937c30d7SJussi Kivilinna .test = alg_test_null, 1851937c30d7SJussi Kivilinna }, { 1852107778b5SJohannes Goetzfried .alg = "__cbc-twofish-avx", 1853107778b5SJohannes Goetzfried .test = alg_test_null, 1854107778b5SJohannes Goetzfried }, { 1855863b557aSYouquan, Song .alg = "__driver-cbc-aes-aesni", 1856863b557aSYouquan, Song .test = alg_test_null, 18576c79294fSMilan Broz .fips_allowed = 1, 1858863b557aSYouquan, Song }, { 1859d9b1d2e7SJussi Kivilinna .alg = "__driver-cbc-camellia-aesni", 1860d9b1d2e7SJussi Kivilinna .test = alg_test_null, 1861d9b1d2e7SJussi Kivilinna }, { 1862f3f935a7SJussi Kivilinna .alg = "__driver-cbc-camellia-aesni-avx2", 1863f3f935a7SJussi Kivilinna .test = alg_test_null, 1864f3f935a7SJussi Kivilinna }, { 18654d6d6a2cSJohannes Goetzfried .alg = "__driver-cbc-cast5-avx", 18664d6d6a2cSJohannes Goetzfried .test = alg_test_null, 18674d6d6a2cSJohannes Goetzfried }, { 18684ea1277dSJohannes Goetzfried .alg = "__driver-cbc-cast6-avx", 18694ea1277dSJohannes Goetzfried .test = alg_test_null, 18704ea1277dSJohannes Goetzfried }, { 18717efe4076SJohannes Goetzfried .alg = "__driver-cbc-serpent-avx", 18727efe4076SJohannes Goetzfried .test = alg_test_null, 18737efe4076SJohannes Goetzfried }, { 187456d76c96SJussi Kivilinna .alg = "__driver-cbc-serpent-avx2", 187556d76c96SJussi Kivilinna .test = alg_test_null, 187656d76c96SJussi Kivilinna }, { 1877937c30d7SJussi Kivilinna .alg = "__driver-cbc-serpent-sse2", 1878937c30d7SJussi Kivilinna .test = alg_test_null, 1879937c30d7SJussi Kivilinna }, { 1880107778b5SJohannes Goetzfried .alg = "__driver-cbc-twofish-avx", 1881107778b5SJohannes Goetzfried .test = alg_test_null, 1882107778b5SJohannes Goetzfried }, { 1883863b557aSYouquan, Song .alg = "__driver-ecb-aes-aesni", 1884863b557aSYouquan, Song .test = alg_test_null, 18856c79294fSMilan Broz .fips_allowed = 1, 1886863b557aSYouquan, Song }, { 1887d9b1d2e7SJussi Kivilinna .alg = "__driver-ecb-camellia-aesni", 1888d9b1d2e7SJussi Kivilinna .test = alg_test_null, 1889d9b1d2e7SJussi Kivilinna }, { 1890f3f935a7SJussi Kivilinna .alg = "__driver-ecb-camellia-aesni-avx2", 1891f3f935a7SJussi Kivilinna .test = alg_test_null, 1892f3f935a7SJussi Kivilinna }, { 18934d6d6a2cSJohannes Goetzfried .alg = "__driver-ecb-cast5-avx", 18944d6d6a2cSJohannes Goetzfried .test = alg_test_null, 18954d6d6a2cSJohannes Goetzfried }, { 18964ea1277dSJohannes Goetzfried .alg = "__driver-ecb-cast6-avx", 18974ea1277dSJohannes Goetzfried .test = alg_test_null, 18984ea1277dSJohannes Goetzfried }, { 18997efe4076SJohannes Goetzfried .alg = "__driver-ecb-serpent-avx", 19007efe4076SJohannes Goetzfried .test = alg_test_null, 19017efe4076SJohannes Goetzfried }, { 190256d76c96SJussi Kivilinna .alg = "__driver-ecb-serpent-avx2", 190356d76c96SJussi Kivilinna .test = alg_test_null, 190456d76c96SJussi Kivilinna }, { 1905937c30d7SJussi Kivilinna .alg = "__driver-ecb-serpent-sse2", 1906937c30d7SJussi Kivilinna .test = alg_test_null, 1907937c30d7SJussi Kivilinna }, { 1908107778b5SJohannes Goetzfried .alg = "__driver-ecb-twofish-avx", 1909107778b5SJohannes Goetzfried .test = alg_test_null, 1910107778b5SJohannes Goetzfried }, { 1911863b557aSYouquan, Song .alg = "__ghash-pclmulqdqni", 1912863b557aSYouquan, Song .test = alg_test_null, 19136c79294fSMilan Broz .fips_allowed = 1, 1914863b557aSYouquan, Song }, { 1915e08ca2daSJarod Wilson .alg = "ansi_cprng", 1916e08ca2daSJarod Wilson .test = alg_test_cprng, 1917a1915d51SJarod Wilson .fips_allowed = 1, 1918e08ca2daSJarod Wilson .suite = { 1919e08ca2daSJarod Wilson .cprng = { 1920e08ca2daSJarod Wilson .vecs = ansi_cprng_aes_tv_template, 1921e08ca2daSJarod Wilson .count = ANSI_CPRNG_AES_TEST_VECTORS 1922e08ca2daSJarod Wilson } 1923e08ca2daSJarod Wilson } 1924e08ca2daSJarod Wilson }, { 1925bca4feb0SHoria Geanta .alg = "authenc(hmac(md5),ecb(cipher_null))", 1926bca4feb0SHoria Geanta .test = alg_test_aead, 1927bca4feb0SHoria Geanta .fips_allowed = 1, 1928bca4feb0SHoria Geanta .suite = { 1929bca4feb0SHoria Geanta .aead = { 1930bca4feb0SHoria Geanta .enc = { 1931bca4feb0SHoria Geanta .vecs = hmac_md5_ecb_cipher_null_enc_tv_template, 1932bca4feb0SHoria Geanta .count = HMAC_MD5_ECB_CIPHER_NULL_ENC_TEST_VECTORS 1933bca4feb0SHoria Geanta }, 1934bca4feb0SHoria Geanta .dec = { 1935bca4feb0SHoria Geanta .vecs = hmac_md5_ecb_cipher_null_dec_tv_template, 1936bca4feb0SHoria Geanta .count = HMAC_MD5_ECB_CIPHER_NULL_DEC_TEST_VECTORS 1937bca4feb0SHoria Geanta } 1938bca4feb0SHoria Geanta } 1939bca4feb0SHoria Geanta } 1940bca4feb0SHoria Geanta }, { 1941e46e9a46SHoria Geanta .alg = "authenc(hmac(sha1),cbc(aes))", 1942e46e9a46SHoria Geanta .test = alg_test_aead, 1943e46e9a46SHoria Geanta .fips_allowed = 1, 1944e46e9a46SHoria Geanta .suite = { 1945e46e9a46SHoria Geanta .aead = { 1946e46e9a46SHoria Geanta .enc = { 19475208ed2cSNitesh Lal .vecs = 19485208ed2cSNitesh Lal hmac_sha1_aes_cbc_enc_tv_temp, 19495208ed2cSNitesh Lal .count = 19505208ed2cSNitesh Lal HMAC_SHA1_AES_CBC_ENC_TEST_VEC 19515208ed2cSNitesh Lal } 19525208ed2cSNitesh Lal } 19535208ed2cSNitesh Lal } 19545208ed2cSNitesh Lal }, { 19555208ed2cSNitesh Lal .alg = "authenc(hmac(sha1),cbc(des))", 19565208ed2cSNitesh Lal .test = alg_test_aead, 19575208ed2cSNitesh Lal .fips_allowed = 1, 19585208ed2cSNitesh Lal .suite = { 19595208ed2cSNitesh Lal .aead = { 19605208ed2cSNitesh Lal .enc = { 19615208ed2cSNitesh Lal .vecs = 19625208ed2cSNitesh Lal hmac_sha1_des_cbc_enc_tv_temp, 19635208ed2cSNitesh Lal .count = 19645208ed2cSNitesh Lal HMAC_SHA1_DES_CBC_ENC_TEST_VEC 19655208ed2cSNitesh Lal } 19665208ed2cSNitesh Lal } 19675208ed2cSNitesh Lal } 19685208ed2cSNitesh Lal }, { 19695208ed2cSNitesh Lal .alg = "authenc(hmac(sha1),cbc(des3_ede))", 19705208ed2cSNitesh Lal .test = alg_test_aead, 19715208ed2cSNitesh Lal .fips_allowed = 1, 19725208ed2cSNitesh Lal .suite = { 19735208ed2cSNitesh Lal .aead = { 19745208ed2cSNitesh Lal .enc = { 19755208ed2cSNitesh Lal .vecs = 19765208ed2cSNitesh Lal hmac_sha1_des3_ede_cbc_enc_tv_temp, 19775208ed2cSNitesh Lal .count = 19785208ed2cSNitesh Lal HMAC_SHA1_DES3_EDE_CBC_ENC_TEST_VEC 1979e46e9a46SHoria Geanta } 1980e46e9a46SHoria Geanta } 1981e46e9a46SHoria Geanta } 1982e46e9a46SHoria Geanta }, { 1983bca4feb0SHoria Geanta .alg = "authenc(hmac(sha1),ecb(cipher_null))", 1984bca4feb0SHoria Geanta .test = alg_test_aead, 1985bca4feb0SHoria Geanta .fips_allowed = 1, 1986bca4feb0SHoria Geanta .suite = { 1987bca4feb0SHoria Geanta .aead = { 1988bca4feb0SHoria Geanta .enc = { 19895208ed2cSNitesh Lal .vecs = 19905208ed2cSNitesh Lal hmac_sha1_ecb_cipher_null_enc_tv_temp, 19915208ed2cSNitesh Lal .count = 19925208ed2cSNitesh Lal HMAC_SHA1_ECB_CIPHER_NULL_ENC_TEST_VEC 1993bca4feb0SHoria Geanta }, 1994bca4feb0SHoria Geanta .dec = { 19955208ed2cSNitesh Lal .vecs = 19965208ed2cSNitesh Lal hmac_sha1_ecb_cipher_null_dec_tv_temp, 19975208ed2cSNitesh Lal .count = 19985208ed2cSNitesh Lal HMAC_SHA1_ECB_CIPHER_NULL_DEC_TEST_VEC 19995208ed2cSNitesh Lal } 20005208ed2cSNitesh Lal } 20015208ed2cSNitesh Lal } 20025208ed2cSNitesh Lal }, { 20035208ed2cSNitesh Lal .alg = "authenc(hmac(sha224),cbc(des))", 20045208ed2cSNitesh Lal .test = alg_test_aead, 20055208ed2cSNitesh Lal .fips_allowed = 1, 20065208ed2cSNitesh Lal .suite = { 20075208ed2cSNitesh Lal .aead = { 20085208ed2cSNitesh Lal .enc = { 20095208ed2cSNitesh Lal .vecs = 20105208ed2cSNitesh Lal hmac_sha224_des_cbc_enc_tv_temp, 20115208ed2cSNitesh Lal .count = 20125208ed2cSNitesh Lal HMAC_SHA224_DES_CBC_ENC_TEST_VEC 20135208ed2cSNitesh Lal } 20145208ed2cSNitesh Lal } 20155208ed2cSNitesh Lal } 20165208ed2cSNitesh Lal }, { 20175208ed2cSNitesh Lal .alg = "authenc(hmac(sha224),cbc(des3_ede))", 20185208ed2cSNitesh Lal .test = alg_test_aead, 20195208ed2cSNitesh Lal .fips_allowed = 1, 20205208ed2cSNitesh Lal .suite = { 20215208ed2cSNitesh Lal .aead = { 20225208ed2cSNitesh Lal .enc = { 20235208ed2cSNitesh Lal .vecs = 20245208ed2cSNitesh Lal hmac_sha224_des3_ede_cbc_enc_tv_temp, 20255208ed2cSNitesh Lal .count = 20265208ed2cSNitesh Lal HMAC_SHA224_DES3_EDE_CBC_ENC_TEST_VEC 2027bca4feb0SHoria Geanta } 2028bca4feb0SHoria Geanta } 2029bca4feb0SHoria Geanta } 2030bca4feb0SHoria Geanta }, { 2031e46e9a46SHoria Geanta .alg = "authenc(hmac(sha256),cbc(aes))", 2032e46e9a46SHoria Geanta .test = alg_test_aead, 2033e46e9a46SHoria Geanta .fips_allowed = 1, 2034e46e9a46SHoria Geanta .suite = { 2035e46e9a46SHoria Geanta .aead = { 2036e46e9a46SHoria Geanta .enc = { 20375208ed2cSNitesh Lal .vecs = 20385208ed2cSNitesh Lal hmac_sha256_aes_cbc_enc_tv_temp, 20395208ed2cSNitesh Lal .count = 20405208ed2cSNitesh Lal HMAC_SHA256_AES_CBC_ENC_TEST_VEC 20415208ed2cSNitesh Lal } 20425208ed2cSNitesh Lal } 20435208ed2cSNitesh Lal } 20445208ed2cSNitesh Lal }, { 20455208ed2cSNitesh Lal .alg = "authenc(hmac(sha256),cbc(des))", 20465208ed2cSNitesh Lal .test = alg_test_aead, 20475208ed2cSNitesh Lal .fips_allowed = 1, 20485208ed2cSNitesh Lal .suite = { 20495208ed2cSNitesh Lal .aead = { 20505208ed2cSNitesh Lal .enc = { 20515208ed2cSNitesh Lal .vecs = 20525208ed2cSNitesh Lal hmac_sha256_des_cbc_enc_tv_temp, 20535208ed2cSNitesh Lal .count = 20545208ed2cSNitesh Lal HMAC_SHA256_DES_CBC_ENC_TEST_VEC 20555208ed2cSNitesh Lal } 20565208ed2cSNitesh Lal } 20575208ed2cSNitesh Lal } 20585208ed2cSNitesh Lal }, { 20595208ed2cSNitesh Lal .alg = "authenc(hmac(sha256),cbc(des3_ede))", 20605208ed2cSNitesh Lal .test = alg_test_aead, 20615208ed2cSNitesh Lal .fips_allowed = 1, 20625208ed2cSNitesh Lal .suite = { 20635208ed2cSNitesh Lal .aead = { 20645208ed2cSNitesh Lal .enc = { 20655208ed2cSNitesh Lal .vecs = 20665208ed2cSNitesh Lal hmac_sha256_des3_ede_cbc_enc_tv_temp, 20675208ed2cSNitesh Lal .count = 20685208ed2cSNitesh Lal HMAC_SHA256_DES3_EDE_CBC_ENC_TEST_VEC 20695208ed2cSNitesh Lal } 20705208ed2cSNitesh Lal } 20715208ed2cSNitesh Lal } 20725208ed2cSNitesh Lal }, { 20735208ed2cSNitesh Lal .alg = "authenc(hmac(sha384),cbc(des))", 20745208ed2cSNitesh Lal .test = alg_test_aead, 20755208ed2cSNitesh Lal .fips_allowed = 1, 20765208ed2cSNitesh Lal .suite = { 20775208ed2cSNitesh Lal .aead = { 20785208ed2cSNitesh Lal .enc = { 20795208ed2cSNitesh Lal .vecs = 20805208ed2cSNitesh Lal hmac_sha384_des_cbc_enc_tv_temp, 20815208ed2cSNitesh Lal .count = 20825208ed2cSNitesh Lal HMAC_SHA384_DES_CBC_ENC_TEST_VEC 20835208ed2cSNitesh Lal } 20845208ed2cSNitesh Lal } 20855208ed2cSNitesh Lal } 20865208ed2cSNitesh Lal }, { 20875208ed2cSNitesh Lal .alg = "authenc(hmac(sha384),cbc(des3_ede))", 20885208ed2cSNitesh Lal .test = alg_test_aead, 20895208ed2cSNitesh Lal .fips_allowed = 1, 20905208ed2cSNitesh Lal .suite = { 20915208ed2cSNitesh Lal .aead = { 20925208ed2cSNitesh Lal .enc = { 20935208ed2cSNitesh Lal .vecs = 20945208ed2cSNitesh Lal hmac_sha384_des3_ede_cbc_enc_tv_temp, 20955208ed2cSNitesh Lal .count = 20965208ed2cSNitesh Lal HMAC_SHA384_DES3_EDE_CBC_ENC_TEST_VEC 2097e46e9a46SHoria Geanta } 2098e46e9a46SHoria Geanta } 2099e46e9a46SHoria Geanta } 2100e46e9a46SHoria Geanta }, { 2101e46e9a46SHoria Geanta .alg = "authenc(hmac(sha512),cbc(aes))", 2102e46e9a46SHoria Geanta .test = alg_test_aead, 2103e46e9a46SHoria Geanta .fips_allowed = 1, 2104e46e9a46SHoria Geanta .suite = { 2105e46e9a46SHoria Geanta .aead = { 2106e46e9a46SHoria Geanta .enc = { 21075208ed2cSNitesh Lal .vecs = 21085208ed2cSNitesh Lal hmac_sha512_aes_cbc_enc_tv_temp, 21095208ed2cSNitesh Lal .count = 21105208ed2cSNitesh Lal HMAC_SHA512_AES_CBC_ENC_TEST_VEC 21115208ed2cSNitesh Lal } 21125208ed2cSNitesh Lal } 21135208ed2cSNitesh Lal } 21145208ed2cSNitesh Lal }, { 21155208ed2cSNitesh Lal .alg = "authenc(hmac(sha512),cbc(des))", 21165208ed2cSNitesh Lal .test = alg_test_aead, 21175208ed2cSNitesh Lal .fips_allowed = 1, 21185208ed2cSNitesh Lal .suite = { 21195208ed2cSNitesh Lal .aead = { 21205208ed2cSNitesh Lal .enc = { 21215208ed2cSNitesh Lal .vecs = 21225208ed2cSNitesh Lal hmac_sha512_des_cbc_enc_tv_temp, 21235208ed2cSNitesh Lal .count = 21245208ed2cSNitesh Lal HMAC_SHA512_DES_CBC_ENC_TEST_VEC 21255208ed2cSNitesh Lal } 21265208ed2cSNitesh Lal } 21275208ed2cSNitesh Lal } 21285208ed2cSNitesh Lal }, { 21295208ed2cSNitesh Lal .alg = "authenc(hmac(sha512),cbc(des3_ede))", 21305208ed2cSNitesh Lal .test = alg_test_aead, 21315208ed2cSNitesh Lal .fips_allowed = 1, 21325208ed2cSNitesh Lal .suite = { 21335208ed2cSNitesh Lal .aead = { 21345208ed2cSNitesh Lal .enc = { 21355208ed2cSNitesh Lal .vecs = 21365208ed2cSNitesh Lal hmac_sha512_des3_ede_cbc_enc_tv_temp, 21375208ed2cSNitesh Lal .count = 21385208ed2cSNitesh Lal HMAC_SHA512_DES3_EDE_CBC_ENC_TEST_VEC 2139e46e9a46SHoria Geanta } 2140e46e9a46SHoria Geanta } 2141e46e9a46SHoria Geanta } 2142e46e9a46SHoria Geanta }, { 2143da7f033dSHerbert Xu .alg = "cbc(aes)", 21441aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2145a1915d51SJarod Wilson .fips_allowed = 1, 2146da7f033dSHerbert Xu .suite = { 2147da7f033dSHerbert Xu .cipher = { 2148da7f033dSHerbert Xu .enc = { 2149da7f033dSHerbert Xu .vecs = aes_cbc_enc_tv_template, 2150da7f033dSHerbert Xu .count = AES_CBC_ENC_TEST_VECTORS 2151da7f033dSHerbert Xu }, 2152da7f033dSHerbert Xu .dec = { 2153da7f033dSHerbert Xu .vecs = aes_cbc_dec_tv_template, 2154da7f033dSHerbert Xu .count = AES_CBC_DEC_TEST_VECTORS 2155da7f033dSHerbert Xu } 2156da7f033dSHerbert Xu } 2157da7f033dSHerbert Xu } 2158da7f033dSHerbert Xu }, { 2159da7f033dSHerbert Xu .alg = "cbc(anubis)", 21601aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2161da7f033dSHerbert Xu .suite = { 2162da7f033dSHerbert Xu .cipher = { 2163da7f033dSHerbert Xu .enc = { 2164da7f033dSHerbert Xu .vecs = anubis_cbc_enc_tv_template, 2165da7f033dSHerbert Xu .count = ANUBIS_CBC_ENC_TEST_VECTORS 2166da7f033dSHerbert Xu }, 2167da7f033dSHerbert Xu .dec = { 2168da7f033dSHerbert Xu .vecs = anubis_cbc_dec_tv_template, 2169da7f033dSHerbert Xu .count = ANUBIS_CBC_DEC_TEST_VECTORS 2170da7f033dSHerbert Xu } 2171da7f033dSHerbert Xu } 2172da7f033dSHerbert Xu } 2173da7f033dSHerbert Xu }, { 2174da7f033dSHerbert Xu .alg = "cbc(blowfish)", 21751aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2176da7f033dSHerbert Xu .suite = { 2177da7f033dSHerbert Xu .cipher = { 2178da7f033dSHerbert Xu .enc = { 2179da7f033dSHerbert Xu .vecs = bf_cbc_enc_tv_template, 2180da7f033dSHerbert Xu .count = BF_CBC_ENC_TEST_VECTORS 2181da7f033dSHerbert Xu }, 2182da7f033dSHerbert Xu .dec = { 2183da7f033dSHerbert Xu .vecs = bf_cbc_dec_tv_template, 2184da7f033dSHerbert Xu .count = BF_CBC_DEC_TEST_VECTORS 2185da7f033dSHerbert Xu } 2186da7f033dSHerbert Xu } 2187da7f033dSHerbert Xu } 2188da7f033dSHerbert Xu }, { 2189da7f033dSHerbert Xu .alg = "cbc(camellia)", 21901aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2191da7f033dSHerbert Xu .suite = { 2192da7f033dSHerbert Xu .cipher = { 2193da7f033dSHerbert Xu .enc = { 2194da7f033dSHerbert Xu .vecs = camellia_cbc_enc_tv_template, 2195da7f033dSHerbert Xu .count = CAMELLIA_CBC_ENC_TEST_VECTORS 2196da7f033dSHerbert Xu }, 2197da7f033dSHerbert Xu .dec = { 2198da7f033dSHerbert Xu .vecs = camellia_cbc_dec_tv_template, 2199da7f033dSHerbert Xu .count = CAMELLIA_CBC_DEC_TEST_VECTORS 2200da7f033dSHerbert Xu } 2201da7f033dSHerbert Xu } 2202da7f033dSHerbert Xu } 2203da7f033dSHerbert Xu }, { 2204a2c58260SJohannes Goetzfried .alg = "cbc(cast5)", 2205a2c58260SJohannes Goetzfried .test = alg_test_skcipher, 2206a2c58260SJohannes Goetzfried .suite = { 2207a2c58260SJohannes Goetzfried .cipher = { 2208a2c58260SJohannes Goetzfried .enc = { 2209a2c58260SJohannes Goetzfried .vecs = cast5_cbc_enc_tv_template, 2210a2c58260SJohannes Goetzfried .count = CAST5_CBC_ENC_TEST_VECTORS 2211a2c58260SJohannes Goetzfried }, 2212a2c58260SJohannes Goetzfried .dec = { 2213a2c58260SJohannes Goetzfried .vecs = cast5_cbc_dec_tv_template, 2214a2c58260SJohannes Goetzfried .count = CAST5_CBC_DEC_TEST_VECTORS 2215a2c58260SJohannes Goetzfried } 2216a2c58260SJohannes Goetzfried } 2217a2c58260SJohannes Goetzfried } 2218a2c58260SJohannes Goetzfried }, { 22199b8b0405SJohannes Goetzfried .alg = "cbc(cast6)", 22209b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 22219b8b0405SJohannes Goetzfried .suite = { 22229b8b0405SJohannes Goetzfried .cipher = { 22239b8b0405SJohannes Goetzfried .enc = { 22249b8b0405SJohannes Goetzfried .vecs = cast6_cbc_enc_tv_template, 22259b8b0405SJohannes Goetzfried .count = CAST6_CBC_ENC_TEST_VECTORS 22269b8b0405SJohannes Goetzfried }, 22279b8b0405SJohannes Goetzfried .dec = { 22289b8b0405SJohannes Goetzfried .vecs = cast6_cbc_dec_tv_template, 22299b8b0405SJohannes Goetzfried .count = CAST6_CBC_DEC_TEST_VECTORS 22309b8b0405SJohannes Goetzfried } 22319b8b0405SJohannes Goetzfried } 22329b8b0405SJohannes Goetzfried } 22339b8b0405SJohannes Goetzfried }, { 2234da7f033dSHerbert Xu .alg = "cbc(des)", 22351aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2236da7f033dSHerbert Xu .suite = { 2237da7f033dSHerbert Xu .cipher = { 2238da7f033dSHerbert Xu .enc = { 2239da7f033dSHerbert Xu .vecs = des_cbc_enc_tv_template, 2240da7f033dSHerbert Xu .count = DES_CBC_ENC_TEST_VECTORS 2241da7f033dSHerbert Xu }, 2242da7f033dSHerbert Xu .dec = { 2243da7f033dSHerbert Xu .vecs = des_cbc_dec_tv_template, 2244da7f033dSHerbert Xu .count = DES_CBC_DEC_TEST_VECTORS 2245da7f033dSHerbert Xu } 2246da7f033dSHerbert Xu } 2247da7f033dSHerbert Xu } 2248da7f033dSHerbert Xu }, { 2249da7f033dSHerbert Xu .alg = "cbc(des3_ede)", 22501aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2251a1915d51SJarod Wilson .fips_allowed = 1, 2252da7f033dSHerbert Xu .suite = { 2253da7f033dSHerbert Xu .cipher = { 2254da7f033dSHerbert Xu .enc = { 2255da7f033dSHerbert Xu .vecs = des3_ede_cbc_enc_tv_template, 2256da7f033dSHerbert Xu .count = DES3_EDE_CBC_ENC_TEST_VECTORS 2257da7f033dSHerbert Xu }, 2258da7f033dSHerbert Xu .dec = { 2259da7f033dSHerbert Xu .vecs = des3_ede_cbc_dec_tv_template, 2260da7f033dSHerbert Xu .count = DES3_EDE_CBC_DEC_TEST_VECTORS 2261da7f033dSHerbert Xu } 2262da7f033dSHerbert Xu } 2263da7f033dSHerbert Xu } 2264da7f033dSHerbert Xu }, { 22659d25917dSJussi Kivilinna .alg = "cbc(serpent)", 22669d25917dSJussi Kivilinna .test = alg_test_skcipher, 22679d25917dSJussi Kivilinna .suite = { 22689d25917dSJussi Kivilinna .cipher = { 22699d25917dSJussi Kivilinna .enc = { 22709d25917dSJussi Kivilinna .vecs = serpent_cbc_enc_tv_template, 22719d25917dSJussi Kivilinna .count = SERPENT_CBC_ENC_TEST_VECTORS 22729d25917dSJussi Kivilinna }, 22739d25917dSJussi Kivilinna .dec = { 22749d25917dSJussi Kivilinna .vecs = serpent_cbc_dec_tv_template, 22759d25917dSJussi Kivilinna .count = SERPENT_CBC_DEC_TEST_VECTORS 22769d25917dSJussi Kivilinna } 22779d25917dSJussi Kivilinna } 22789d25917dSJussi Kivilinna } 22799d25917dSJussi Kivilinna }, { 2280da7f033dSHerbert Xu .alg = "cbc(twofish)", 22811aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2282da7f033dSHerbert Xu .suite = { 2283da7f033dSHerbert Xu .cipher = { 2284da7f033dSHerbert Xu .enc = { 2285da7f033dSHerbert Xu .vecs = tf_cbc_enc_tv_template, 2286da7f033dSHerbert Xu .count = TF_CBC_ENC_TEST_VECTORS 2287da7f033dSHerbert Xu }, 2288da7f033dSHerbert Xu .dec = { 2289da7f033dSHerbert Xu .vecs = tf_cbc_dec_tv_template, 2290da7f033dSHerbert Xu .count = TF_CBC_DEC_TEST_VECTORS 2291da7f033dSHerbert Xu } 2292da7f033dSHerbert Xu } 2293da7f033dSHerbert Xu } 2294da7f033dSHerbert Xu }, { 2295da7f033dSHerbert Xu .alg = "ccm(aes)", 2296da7f033dSHerbert Xu .test = alg_test_aead, 2297a1915d51SJarod Wilson .fips_allowed = 1, 2298da7f033dSHerbert Xu .suite = { 2299da7f033dSHerbert Xu .aead = { 2300da7f033dSHerbert Xu .enc = { 2301da7f033dSHerbert Xu .vecs = aes_ccm_enc_tv_template, 2302da7f033dSHerbert Xu .count = AES_CCM_ENC_TEST_VECTORS 2303da7f033dSHerbert Xu }, 2304da7f033dSHerbert Xu .dec = { 2305da7f033dSHerbert Xu .vecs = aes_ccm_dec_tv_template, 2306da7f033dSHerbert Xu .count = AES_CCM_DEC_TEST_VECTORS 2307da7f033dSHerbert Xu } 2308da7f033dSHerbert Xu } 2309da7f033dSHerbert Xu } 2310da7f033dSHerbert Xu }, { 23113590ebf2SMartin Willi .alg = "chacha20", 23123590ebf2SMartin Willi .test = alg_test_skcipher, 23133590ebf2SMartin Willi .suite = { 23143590ebf2SMartin Willi .cipher = { 23153590ebf2SMartin Willi .enc = { 23163590ebf2SMartin Willi .vecs = chacha20_enc_tv_template, 23173590ebf2SMartin Willi .count = CHACHA20_ENC_TEST_VECTORS 23183590ebf2SMartin Willi }, 23193590ebf2SMartin Willi .dec = { 23203590ebf2SMartin Willi .vecs = chacha20_enc_tv_template, 23213590ebf2SMartin Willi .count = CHACHA20_ENC_TEST_VECTORS 23223590ebf2SMartin Willi }, 23233590ebf2SMartin Willi } 23243590ebf2SMartin Willi } 23253590ebf2SMartin Willi }, { 232693b5e86aSJussi Kivilinna .alg = "cmac(aes)", 232793b5e86aSJussi Kivilinna .test = alg_test_hash, 232893b5e86aSJussi Kivilinna .suite = { 232993b5e86aSJussi Kivilinna .hash = { 233093b5e86aSJussi Kivilinna .vecs = aes_cmac128_tv_template, 233193b5e86aSJussi Kivilinna .count = CMAC_AES_TEST_VECTORS 233293b5e86aSJussi Kivilinna } 233393b5e86aSJussi Kivilinna } 233493b5e86aSJussi Kivilinna }, { 233593b5e86aSJussi Kivilinna .alg = "cmac(des3_ede)", 233693b5e86aSJussi Kivilinna .test = alg_test_hash, 233793b5e86aSJussi Kivilinna .suite = { 233893b5e86aSJussi Kivilinna .hash = { 233993b5e86aSJussi Kivilinna .vecs = des3_ede_cmac64_tv_template, 234093b5e86aSJussi Kivilinna .count = CMAC_DES3_EDE_TEST_VECTORS 234193b5e86aSJussi Kivilinna } 234293b5e86aSJussi Kivilinna } 234393b5e86aSJussi Kivilinna }, { 2344e448370dSJussi Kivilinna .alg = "compress_null", 2345e448370dSJussi Kivilinna .test = alg_test_null, 2346e448370dSJussi Kivilinna }, { 2347ebb3472fSArd Biesheuvel .alg = "crc32", 2348ebb3472fSArd Biesheuvel .test = alg_test_hash, 2349ebb3472fSArd Biesheuvel .suite = { 2350ebb3472fSArd Biesheuvel .hash = { 2351ebb3472fSArd Biesheuvel .vecs = crc32_tv_template, 2352ebb3472fSArd Biesheuvel .count = CRC32_TEST_VECTORS 2353ebb3472fSArd Biesheuvel } 2354ebb3472fSArd Biesheuvel } 2355ebb3472fSArd Biesheuvel }, { 2356da7f033dSHerbert Xu .alg = "crc32c", 23578e3ee85eSHerbert Xu .test = alg_test_crc32c, 2358a1915d51SJarod Wilson .fips_allowed = 1, 2359da7f033dSHerbert Xu .suite = { 2360da7f033dSHerbert Xu .hash = { 2361da7f033dSHerbert Xu .vecs = crc32c_tv_template, 2362da7f033dSHerbert Xu .count = CRC32C_TEST_VECTORS 2363da7f033dSHerbert Xu } 2364da7f033dSHerbert Xu } 2365da7f033dSHerbert Xu }, { 236668411521SHerbert Xu .alg = "crct10dif", 236768411521SHerbert Xu .test = alg_test_hash, 236868411521SHerbert Xu .fips_allowed = 1, 236968411521SHerbert Xu .suite = { 237068411521SHerbert Xu .hash = { 237168411521SHerbert Xu .vecs = crct10dif_tv_template, 237268411521SHerbert Xu .count = CRCT10DIF_TEST_VECTORS 237368411521SHerbert Xu } 237468411521SHerbert Xu } 237568411521SHerbert Xu }, { 23766c79294fSMilan Broz .alg = "cryptd(__driver-cbc-aes-aesni)", 23776c79294fSMilan Broz .test = alg_test_null, 23786c79294fSMilan Broz .fips_allowed = 1, 23796c79294fSMilan Broz }, { 2380d9b1d2e7SJussi Kivilinna .alg = "cryptd(__driver-cbc-camellia-aesni)", 2381d9b1d2e7SJussi Kivilinna .test = alg_test_null, 2382d9b1d2e7SJussi Kivilinna }, { 2383f3f935a7SJussi Kivilinna .alg = "cryptd(__driver-cbc-camellia-aesni-avx2)", 2384f3f935a7SJussi Kivilinna .test = alg_test_null, 2385f3f935a7SJussi Kivilinna }, { 238656d76c96SJussi Kivilinna .alg = "cryptd(__driver-cbc-serpent-avx2)", 238756d76c96SJussi Kivilinna .test = alg_test_null, 238856d76c96SJussi Kivilinna }, { 2389863b557aSYouquan, Song .alg = "cryptd(__driver-ecb-aes-aesni)", 2390863b557aSYouquan, Song .test = alg_test_null, 23916c79294fSMilan Broz .fips_allowed = 1, 2392863b557aSYouquan, Song }, { 2393d9b1d2e7SJussi Kivilinna .alg = "cryptd(__driver-ecb-camellia-aesni)", 2394d9b1d2e7SJussi Kivilinna .test = alg_test_null, 2395d9b1d2e7SJussi Kivilinna }, { 2396f3f935a7SJussi Kivilinna .alg = "cryptd(__driver-ecb-camellia-aesni-avx2)", 2397f3f935a7SJussi Kivilinna .test = alg_test_null, 2398f3f935a7SJussi Kivilinna }, { 23994d6d6a2cSJohannes Goetzfried .alg = "cryptd(__driver-ecb-cast5-avx)", 24004d6d6a2cSJohannes Goetzfried .test = alg_test_null, 24014d6d6a2cSJohannes Goetzfried }, { 24024ea1277dSJohannes Goetzfried .alg = "cryptd(__driver-ecb-cast6-avx)", 24034ea1277dSJohannes Goetzfried .test = alg_test_null, 24044ea1277dSJohannes Goetzfried }, { 24057efe4076SJohannes Goetzfried .alg = "cryptd(__driver-ecb-serpent-avx)", 24067efe4076SJohannes Goetzfried .test = alg_test_null, 24077efe4076SJohannes Goetzfried }, { 240856d76c96SJussi Kivilinna .alg = "cryptd(__driver-ecb-serpent-avx2)", 240956d76c96SJussi Kivilinna .test = alg_test_null, 241056d76c96SJussi Kivilinna }, { 2411937c30d7SJussi Kivilinna .alg = "cryptd(__driver-ecb-serpent-sse2)", 2412937c30d7SJussi Kivilinna .test = alg_test_null, 2413937c30d7SJussi Kivilinna }, { 2414107778b5SJohannes Goetzfried .alg = "cryptd(__driver-ecb-twofish-avx)", 2415107778b5SJohannes Goetzfried .test = alg_test_null, 2416107778b5SJohannes Goetzfried }, { 24176c79294fSMilan Broz .alg = "cryptd(__driver-gcm-aes-aesni)", 24186c79294fSMilan Broz .test = alg_test_null, 24196c79294fSMilan Broz .fips_allowed = 1, 24206c79294fSMilan Broz }, { 2421863b557aSYouquan, Song .alg = "cryptd(__ghash-pclmulqdqni)", 2422863b557aSYouquan, Song .test = alg_test_null, 24236c79294fSMilan Broz .fips_allowed = 1, 2424863b557aSYouquan, Song }, { 2425f7cb80f2SJarod Wilson .alg = "ctr(aes)", 2426f7cb80f2SJarod Wilson .test = alg_test_skcipher, 2427a1915d51SJarod Wilson .fips_allowed = 1, 2428f7cb80f2SJarod Wilson .suite = { 2429f7cb80f2SJarod Wilson .cipher = { 2430f7cb80f2SJarod Wilson .enc = { 2431f7cb80f2SJarod Wilson .vecs = aes_ctr_enc_tv_template, 2432f7cb80f2SJarod Wilson .count = AES_CTR_ENC_TEST_VECTORS 2433f7cb80f2SJarod Wilson }, 2434f7cb80f2SJarod Wilson .dec = { 2435f7cb80f2SJarod Wilson .vecs = aes_ctr_dec_tv_template, 2436f7cb80f2SJarod Wilson .count = AES_CTR_DEC_TEST_VECTORS 2437f7cb80f2SJarod Wilson } 2438f7cb80f2SJarod Wilson } 2439f7cb80f2SJarod Wilson } 2440f7cb80f2SJarod Wilson }, { 244185b63e34SJussi Kivilinna .alg = "ctr(blowfish)", 244285b63e34SJussi Kivilinna .test = alg_test_skcipher, 244385b63e34SJussi Kivilinna .suite = { 244485b63e34SJussi Kivilinna .cipher = { 244585b63e34SJussi Kivilinna .enc = { 244685b63e34SJussi Kivilinna .vecs = bf_ctr_enc_tv_template, 244785b63e34SJussi Kivilinna .count = BF_CTR_ENC_TEST_VECTORS 244885b63e34SJussi Kivilinna }, 244985b63e34SJussi Kivilinna .dec = { 245085b63e34SJussi Kivilinna .vecs = bf_ctr_dec_tv_template, 245185b63e34SJussi Kivilinna .count = BF_CTR_DEC_TEST_VECTORS 245285b63e34SJussi Kivilinna } 245385b63e34SJussi Kivilinna } 245485b63e34SJussi Kivilinna } 245585b63e34SJussi Kivilinna }, { 24560840605eSJussi Kivilinna .alg = "ctr(camellia)", 24570840605eSJussi Kivilinna .test = alg_test_skcipher, 24580840605eSJussi Kivilinna .suite = { 24590840605eSJussi Kivilinna .cipher = { 24600840605eSJussi Kivilinna .enc = { 24610840605eSJussi Kivilinna .vecs = camellia_ctr_enc_tv_template, 24620840605eSJussi Kivilinna .count = CAMELLIA_CTR_ENC_TEST_VECTORS 24630840605eSJussi Kivilinna }, 24640840605eSJussi Kivilinna .dec = { 24650840605eSJussi Kivilinna .vecs = camellia_ctr_dec_tv_template, 24660840605eSJussi Kivilinna .count = CAMELLIA_CTR_DEC_TEST_VECTORS 24670840605eSJussi Kivilinna } 24680840605eSJussi Kivilinna } 24690840605eSJussi Kivilinna } 24700840605eSJussi Kivilinna }, { 2471a2c58260SJohannes Goetzfried .alg = "ctr(cast5)", 2472a2c58260SJohannes Goetzfried .test = alg_test_skcipher, 2473a2c58260SJohannes Goetzfried .suite = { 2474a2c58260SJohannes Goetzfried .cipher = { 2475a2c58260SJohannes Goetzfried .enc = { 2476a2c58260SJohannes Goetzfried .vecs = cast5_ctr_enc_tv_template, 2477a2c58260SJohannes Goetzfried .count = CAST5_CTR_ENC_TEST_VECTORS 2478a2c58260SJohannes Goetzfried }, 2479a2c58260SJohannes Goetzfried .dec = { 2480a2c58260SJohannes Goetzfried .vecs = cast5_ctr_dec_tv_template, 2481a2c58260SJohannes Goetzfried .count = CAST5_CTR_DEC_TEST_VECTORS 2482a2c58260SJohannes Goetzfried } 2483a2c58260SJohannes Goetzfried } 2484a2c58260SJohannes Goetzfried } 2485a2c58260SJohannes Goetzfried }, { 24869b8b0405SJohannes Goetzfried .alg = "ctr(cast6)", 24879b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 24889b8b0405SJohannes Goetzfried .suite = { 24899b8b0405SJohannes Goetzfried .cipher = { 24909b8b0405SJohannes Goetzfried .enc = { 24919b8b0405SJohannes Goetzfried .vecs = cast6_ctr_enc_tv_template, 24929b8b0405SJohannes Goetzfried .count = CAST6_CTR_ENC_TEST_VECTORS 24939b8b0405SJohannes Goetzfried }, 24949b8b0405SJohannes Goetzfried .dec = { 24959b8b0405SJohannes Goetzfried .vecs = cast6_ctr_dec_tv_template, 24969b8b0405SJohannes Goetzfried .count = CAST6_CTR_DEC_TEST_VECTORS 24979b8b0405SJohannes Goetzfried } 24989b8b0405SJohannes Goetzfried } 24999b8b0405SJohannes Goetzfried } 25009b8b0405SJohannes Goetzfried }, { 25018163fc30SJussi Kivilinna .alg = "ctr(des)", 25028163fc30SJussi Kivilinna .test = alg_test_skcipher, 25038163fc30SJussi Kivilinna .suite = { 25048163fc30SJussi Kivilinna .cipher = { 25058163fc30SJussi Kivilinna .enc = { 25068163fc30SJussi Kivilinna .vecs = des_ctr_enc_tv_template, 25078163fc30SJussi Kivilinna .count = DES_CTR_ENC_TEST_VECTORS 25088163fc30SJussi Kivilinna }, 25098163fc30SJussi Kivilinna .dec = { 25108163fc30SJussi Kivilinna .vecs = des_ctr_dec_tv_template, 25118163fc30SJussi Kivilinna .count = DES_CTR_DEC_TEST_VECTORS 25128163fc30SJussi Kivilinna } 25138163fc30SJussi Kivilinna } 25148163fc30SJussi Kivilinna } 25158163fc30SJussi Kivilinna }, { 2516e080b17aSJussi Kivilinna .alg = "ctr(des3_ede)", 2517e080b17aSJussi Kivilinna .test = alg_test_skcipher, 2518e080b17aSJussi Kivilinna .suite = { 2519e080b17aSJussi Kivilinna .cipher = { 2520e080b17aSJussi Kivilinna .enc = { 2521e080b17aSJussi Kivilinna .vecs = des3_ede_ctr_enc_tv_template, 2522e080b17aSJussi Kivilinna .count = DES3_EDE_CTR_ENC_TEST_VECTORS 2523e080b17aSJussi Kivilinna }, 2524e080b17aSJussi Kivilinna .dec = { 2525e080b17aSJussi Kivilinna .vecs = des3_ede_ctr_dec_tv_template, 2526e080b17aSJussi Kivilinna .count = DES3_EDE_CTR_DEC_TEST_VECTORS 2527e080b17aSJussi Kivilinna } 2528e080b17aSJussi Kivilinna } 2529e080b17aSJussi Kivilinna } 2530e080b17aSJussi Kivilinna }, { 25319d25917dSJussi Kivilinna .alg = "ctr(serpent)", 25329d25917dSJussi Kivilinna .test = alg_test_skcipher, 25339d25917dSJussi Kivilinna .suite = { 25349d25917dSJussi Kivilinna .cipher = { 25359d25917dSJussi Kivilinna .enc = { 25369d25917dSJussi Kivilinna .vecs = serpent_ctr_enc_tv_template, 25379d25917dSJussi Kivilinna .count = SERPENT_CTR_ENC_TEST_VECTORS 25389d25917dSJussi Kivilinna }, 25399d25917dSJussi Kivilinna .dec = { 25409d25917dSJussi Kivilinna .vecs = serpent_ctr_dec_tv_template, 25419d25917dSJussi Kivilinna .count = SERPENT_CTR_DEC_TEST_VECTORS 25429d25917dSJussi Kivilinna } 25439d25917dSJussi Kivilinna } 25449d25917dSJussi Kivilinna } 25459d25917dSJussi Kivilinna }, { 2546573da620SJussi Kivilinna .alg = "ctr(twofish)", 2547573da620SJussi Kivilinna .test = alg_test_skcipher, 2548573da620SJussi Kivilinna .suite = { 2549573da620SJussi Kivilinna .cipher = { 2550573da620SJussi Kivilinna .enc = { 2551573da620SJussi Kivilinna .vecs = tf_ctr_enc_tv_template, 2552573da620SJussi Kivilinna .count = TF_CTR_ENC_TEST_VECTORS 2553573da620SJussi Kivilinna }, 2554573da620SJussi Kivilinna .dec = { 2555573da620SJussi Kivilinna .vecs = tf_ctr_dec_tv_template, 2556573da620SJussi Kivilinna .count = TF_CTR_DEC_TEST_VECTORS 2557573da620SJussi Kivilinna } 2558573da620SJussi Kivilinna } 2559573da620SJussi Kivilinna } 2560573da620SJussi Kivilinna }, { 2561da7f033dSHerbert Xu .alg = "cts(cbc(aes))", 25621aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2563da7f033dSHerbert Xu .suite = { 2564da7f033dSHerbert Xu .cipher = { 2565da7f033dSHerbert Xu .enc = { 2566da7f033dSHerbert Xu .vecs = cts_mode_enc_tv_template, 2567da7f033dSHerbert Xu .count = CTS_MODE_ENC_TEST_VECTORS 2568da7f033dSHerbert Xu }, 2569da7f033dSHerbert Xu .dec = { 2570da7f033dSHerbert Xu .vecs = cts_mode_dec_tv_template, 2571da7f033dSHerbert Xu .count = CTS_MODE_DEC_TEST_VECTORS 2572da7f033dSHerbert Xu } 2573da7f033dSHerbert Xu } 2574da7f033dSHerbert Xu } 2575da7f033dSHerbert Xu }, { 2576da7f033dSHerbert Xu .alg = "deflate", 2577da7f033dSHerbert Xu .test = alg_test_comp, 25780818904dSMilan Broz .fips_allowed = 1, 2579da7f033dSHerbert Xu .suite = { 2580da7f033dSHerbert Xu .comp = { 2581da7f033dSHerbert Xu .comp = { 2582da7f033dSHerbert Xu .vecs = deflate_comp_tv_template, 2583da7f033dSHerbert Xu .count = DEFLATE_COMP_TEST_VECTORS 2584da7f033dSHerbert Xu }, 2585da7f033dSHerbert Xu .decomp = { 2586da7f033dSHerbert Xu .vecs = deflate_decomp_tv_template, 2587da7f033dSHerbert Xu .count = DEFLATE_DECOMP_TEST_VECTORS 2588da7f033dSHerbert Xu } 2589da7f033dSHerbert Xu } 2590da7f033dSHerbert Xu } 2591da7f033dSHerbert Xu }, { 2592e448370dSJussi Kivilinna .alg = "digest_null", 2593e448370dSJussi Kivilinna .test = alg_test_null, 2594e448370dSJussi Kivilinna }, { 259564d1cdfbSStephan Mueller .alg = "drbg_nopr_ctr_aes128", 259664d1cdfbSStephan Mueller .test = alg_test_drbg, 259764d1cdfbSStephan Mueller .fips_allowed = 1, 259864d1cdfbSStephan Mueller .suite = { 259964d1cdfbSStephan Mueller .drbg = { 260064d1cdfbSStephan Mueller .vecs = drbg_nopr_ctr_aes128_tv_template, 260164d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_nopr_ctr_aes128_tv_template) 260264d1cdfbSStephan Mueller } 260364d1cdfbSStephan Mueller } 260464d1cdfbSStephan Mueller }, { 260564d1cdfbSStephan Mueller .alg = "drbg_nopr_ctr_aes192", 260664d1cdfbSStephan Mueller .test = alg_test_drbg, 260764d1cdfbSStephan Mueller .fips_allowed = 1, 260864d1cdfbSStephan Mueller .suite = { 260964d1cdfbSStephan Mueller .drbg = { 261064d1cdfbSStephan Mueller .vecs = drbg_nopr_ctr_aes192_tv_template, 261164d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_nopr_ctr_aes192_tv_template) 261264d1cdfbSStephan Mueller } 261364d1cdfbSStephan Mueller } 261464d1cdfbSStephan Mueller }, { 261564d1cdfbSStephan Mueller .alg = "drbg_nopr_ctr_aes256", 261664d1cdfbSStephan Mueller .test = alg_test_drbg, 261764d1cdfbSStephan Mueller .fips_allowed = 1, 261864d1cdfbSStephan Mueller .suite = { 261964d1cdfbSStephan Mueller .drbg = { 262064d1cdfbSStephan Mueller .vecs = drbg_nopr_ctr_aes256_tv_template, 262164d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_nopr_ctr_aes256_tv_template) 262264d1cdfbSStephan Mueller } 262364d1cdfbSStephan Mueller } 262464d1cdfbSStephan Mueller }, { 262564d1cdfbSStephan Mueller /* 262664d1cdfbSStephan Mueller * There is no need to specifically test the DRBG with every 262764d1cdfbSStephan Mueller * backend cipher -- covered by drbg_nopr_hmac_sha256 test 262864d1cdfbSStephan Mueller */ 262964d1cdfbSStephan Mueller .alg = "drbg_nopr_hmac_sha1", 263064d1cdfbSStephan Mueller .fips_allowed = 1, 263164d1cdfbSStephan Mueller .test = alg_test_null, 263264d1cdfbSStephan Mueller }, { 263364d1cdfbSStephan Mueller .alg = "drbg_nopr_hmac_sha256", 263464d1cdfbSStephan Mueller .test = alg_test_drbg, 263564d1cdfbSStephan Mueller .fips_allowed = 1, 263664d1cdfbSStephan Mueller .suite = { 263764d1cdfbSStephan Mueller .drbg = { 263864d1cdfbSStephan Mueller .vecs = drbg_nopr_hmac_sha256_tv_template, 263964d1cdfbSStephan Mueller .count = 264064d1cdfbSStephan Mueller ARRAY_SIZE(drbg_nopr_hmac_sha256_tv_template) 264164d1cdfbSStephan Mueller } 264264d1cdfbSStephan Mueller } 264364d1cdfbSStephan Mueller }, { 264464d1cdfbSStephan Mueller /* covered by drbg_nopr_hmac_sha256 test */ 264564d1cdfbSStephan Mueller .alg = "drbg_nopr_hmac_sha384", 264664d1cdfbSStephan Mueller .fips_allowed = 1, 264764d1cdfbSStephan Mueller .test = alg_test_null, 264864d1cdfbSStephan Mueller }, { 264964d1cdfbSStephan Mueller .alg = "drbg_nopr_hmac_sha512", 265064d1cdfbSStephan Mueller .test = alg_test_null, 265164d1cdfbSStephan Mueller .fips_allowed = 1, 265264d1cdfbSStephan Mueller }, { 265364d1cdfbSStephan Mueller .alg = "drbg_nopr_sha1", 265464d1cdfbSStephan Mueller .fips_allowed = 1, 265564d1cdfbSStephan Mueller .test = alg_test_null, 265664d1cdfbSStephan Mueller }, { 265764d1cdfbSStephan Mueller .alg = "drbg_nopr_sha256", 265864d1cdfbSStephan Mueller .test = alg_test_drbg, 265964d1cdfbSStephan Mueller .fips_allowed = 1, 266064d1cdfbSStephan Mueller .suite = { 266164d1cdfbSStephan Mueller .drbg = { 266264d1cdfbSStephan Mueller .vecs = drbg_nopr_sha256_tv_template, 266364d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_nopr_sha256_tv_template) 266464d1cdfbSStephan Mueller } 266564d1cdfbSStephan Mueller } 266664d1cdfbSStephan Mueller }, { 266764d1cdfbSStephan Mueller /* covered by drbg_nopr_sha256 test */ 266864d1cdfbSStephan Mueller .alg = "drbg_nopr_sha384", 266964d1cdfbSStephan Mueller .fips_allowed = 1, 267064d1cdfbSStephan Mueller .test = alg_test_null, 267164d1cdfbSStephan Mueller }, { 267264d1cdfbSStephan Mueller .alg = "drbg_nopr_sha512", 267364d1cdfbSStephan Mueller .fips_allowed = 1, 267464d1cdfbSStephan Mueller .test = alg_test_null, 267564d1cdfbSStephan Mueller }, { 267664d1cdfbSStephan Mueller .alg = "drbg_pr_ctr_aes128", 267764d1cdfbSStephan Mueller .test = alg_test_drbg, 267864d1cdfbSStephan Mueller .fips_allowed = 1, 267964d1cdfbSStephan Mueller .suite = { 268064d1cdfbSStephan Mueller .drbg = { 268164d1cdfbSStephan Mueller .vecs = drbg_pr_ctr_aes128_tv_template, 268264d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_pr_ctr_aes128_tv_template) 268364d1cdfbSStephan Mueller } 268464d1cdfbSStephan Mueller } 268564d1cdfbSStephan Mueller }, { 268664d1cdfbSStephan Mueller /* covered by drbg_pr_ctr_aes128 test */ 268764d1cdfbSStephan Mueller .alg = "drbg_pr_ctr_aes192", 268864d1cdfbSStephan Mueller .fips_allowed = 1, 268964d1cdfbSStephan Mueller .test = alg_test_null, 269064d1cdfbSStephan Mueller }, { 269164d1cdfbSStephan Mueller .alg = "drbg_pr_ctr_aes256", 269264d1cdfbSStephan Mueller .fips_allowed = 1, 269364d1cdfbSStephan Mueller .test = alg_test_null, 269464d1cdfbSStephan Mueller }, { 269564d1cdfbSStephan Mueller .alg = "drbg_pr_hmac_sha1", 269664d1cdfbSStephan Mueller .fips_allowed = 1, 269764d1cdfbSStephan Mueller .test = alg_test_null, 269864d1cdfbSStephan Mueller }, { 269964d1cdfbSStephan Mueller .alg = "drbg_pr_hmac_sha256", 270064d1cdfbSStephan Mueller .test = alg_test_drbg, 270164d1cdfbSStephan Mueller .fips_allowed = 1, 270264d1cdfbSStephan Mueller .suite = { 270364d1cdfbSStephan Mueller .drbg = { 270464d1cdfbSStephan Mueller .vecs = drbg_pr_hmac_sha256_tv_template, 270564d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_pr_hmac_sha256_tv_template) 270664d1cdfbSStephan Mueller } 270764d1cdfbSStephan Mueller } 270864d1cdfbSStephan Mueller }, { 270964d1cdfbSStephan Mueller /* covered by drbg_pr_hmac_sha256 test */ 271064d1cdfbSStephan Mueller .alg = "drbg_pr_hmac_sha384", 271164d1cdfbSStephan Mueller .fips_allowed = 1, 271264d1cdfbSStephan Mueller .test = alg_test_null, 271364d1cdfbSStephan Mueller }, { 271464d1cdfbSStephan Mueller .alg = "drbg_pr_hmac_sha512", 271564d1cdfbSStephan Mueller .test = alg_test_null, 271664d1cdfbSStephan Mueller .fips_allowed = 1, 271764d1cdfbSStephan Mueller }, { 271864d1cdfbSStephan Mueller .alg = "drbg_pr_sha1", 271964d1cdfbSStephan Mueller .fips_allowed = 1, 272064d1cdfbSStephan Mueller .test = alg_test_null, 272164d1cdfbSStephan Mueller }, { 272264d1cdfbSStephan Mueller .alg = "drbg_pr_sha256", 272364d1cdfbSStephan Mueller .test = alg_test_drbg, 272464d1cdfbSStephan Mueller .fips_allowed = 1, 272564d1cdfbSStephan Mueller .suite = { 272664d1cdfbSStephan Mueller .drbg = { 272764d1cdfbSStephan Mueller .vecs = drbg_pr_sha256_tv_template, 272864d1cdfbSStephan Mueller .count = ARRAY_SIZE(drbg_pr_sha256_tv_template) 272964d1cdfbSStephan Mueller } 273064d1cdfbSStephan Mueller } 273164d1cdfbSStephan Mueller }, { 273264d1cdfbSStephan Mueller /* covered by drbg_pr_sha256 test */ 273364d1cdfbSStephan Mueller .alg = "drbg_pr_sha384", 273464d1cdfbSStephan Mueller .fips_allowed = 1, 273564d1cdfbSStephan Mueller .test = alg_test_null, 273664d1cdfbSStephan Mueller }, { 273764d1cdfbSStephan Mueller .alg = "drbg_pr_sha512", 273864d1cdfbSStephan Mueller .fips_allowed = 1, 273964d1cdfbSStephan Mueller .test = alg_test_null, 274064d1cdfbSStephan Mueller }, { 2741863b557aSYouquan, Song .alg = "ecb(__aes-aesni)", 2742863b557aSYouquan, Song .test = alg_test_null, 27436c79294fSMilan Broz .fips_allowed = 1, 2744863b557aSYouquan, Song }, { 2745da7f033dSHerbert Xu .alg = "ecb(aes)", 27461aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2747a1915d51SJarod Wilson .fips_allowed = 1, 2748da7f033dSHerbert Xu .suite = { 2749da7f033dSHerbert Xu .cipher = { 2750da7f033dSHerbert Xu .enc = { 2751da7f033dSHerbert Xu .vecs = aes_enc_tv_template, 2752da7f033dSHerbert Xu .count = AES_ENC_TEST_VECTORS 2753da7f033dSHerbert Xu }, 2754da7f033dSHerbert Xu .dec = { 2755da7f033dSHerbert Xu .vecs = aes_dec_tv_template, 2756da7f033dSHerbert Xu .count = AES_DEC_TEST_VECTORS 2757da7f033dSHerbert Xu } 2758da7f033dSHerbert Xu } 2759da7f033dSHerbert Xu } 2760da7f033dSHerbert Xu }, { 2761da7f033dSHerbert Xu .alg = "ecb(anubis)", 27621aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2763da7f033dSHerbert Xu .suite = { 2764da7f033dSHerbert Xu .cipher = { 2765da7f033dSHerbert Xu .enc = { 2766da7f033dSHerbert Xu .vecs = anubis_enc_tv_template, 2767da7f033dSHerbert Xu .count = ANUBIS_ENC_TEST_VECTORS 2768da7f033dSHerbert Xu }, 2769da7f033dSHerbert Xu .dec = { 2770da7f033dSHerbert Xu .vecs = anubis_dec_tv_template, 2771da7f033dSHerbert Xu .count = ANUBIS_DEC_TEST_VECTORS 2772da7f033dSHerbert Xu } 2773da7f033dSHerbert Xu } 2774da7f033dSHerbert Xu } 2775da7f033dSHerbert Xu }, { 2776da7f033dSHerbert Xu .alg = "ecb(arc4)", 27771aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2778da7f033dSHerbert Xu .suite = { 2779da7f033dSHerbert Xu .cipher = { 2780da7f033dSHerbert Xu .enc = { 2781da7f033dSHerbert Xu .vecs = arc4_enc_tv_template, 2782da7f033dSHerbert Xu .count = ARC4_ENC_TEST_VECTORS 2783da7f033dSHerbert Xu }, 2784da7f033dSHerbert Xu .dec = { 2785da7f033dSHerbert Xu .vecs = arc4_dec_tv_template, 2786da7f033dSHerbert Xu .count = ARC4_DEC_TEST_VECTORS 2787da7f033dSHerbert Xu } 2788da7f033dSHerbert Xu } 2789da7f033dSHerbert Xu } 2790da7f033dSHerbert Xu }, { 2791da7f033dSHerbert Xu .alg = "ecb(blowfish)", 27921aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2793da7f033dSHerbert Xu .suite = { 2794da7f033dSHerbert Xu .cipher = { 2795da7f033dSHerbert Xu .enc = { 2796da7f033dSHerbert Xu .vecs = bf_enc_tv_template, 2797da7f033dSHerbert Xu .count = BF_ENC_TEST_VECTORS 2798da7f033dSHerbert Xu }, 2799da7f033dSHerbert Xu .dec = { 2800da7f033dSHerbert Xu .vecs = bf_dec_tv_template, 2801da7f033dSHerbert Xu .count = BF_DEC_TEST_VECTORS 2802da7f033dSHerbert Xu } 2803da7f033dSHerbert Xu } 2804da7f033dSHerbert Xu } 2805da7f033dSHerbert Xu }, { 2806da7f033dSHerbert Xu .alg = "ecb(camellia)", 28071aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2808da7f033dSHerbert Xu .suite = { 2809da7f033dSHerbert Xu .cipher = { 2810da7f033dSHerbert Xu .enc = { 2811da7f033dSHerbert Xu .vecs = camellia_enc_tv_template, 2812da7f033dSHerbert Xu .count = CAMELLIA_ENC_TEST_VECTORS 2813da7f033dSHerbert Xu }, 2814da7f033dSHerbert Xu .dec = { 2815da7f033dSHerbert Xu .vecs = camellia_dec_tv_template, 2816da7f033dSHerbert Xu .count = CAMELLIA_DEC_TEST_VECTORS 2817da7f033dSHerbert Xu } 2818da7f033dSHerbert Xu } 2819da7f033dSHerbert Xu } 2820da7f033dSHerbert Xu }, { 2821da7f033dSHerbert Xu .alg = "ecb(cast5)", 28221aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2823da7f033dSHerbert Xu .suite = { 2824da7f033dSHerbert Xu .cipher = { 2825da7f033dSHerbert Xu .enc = { 2826da7f033dSHerbert Xu .vecs = cast5_enc_tv_template, 2827da7f033dSHerbert Xu .count = CAST5_ENC_TEST_VECTORS 2828da7f033dSHerbert Xu }, 2829da7f033dSHerbert Xu .dec = { 2830da7f033dSHerbert Xu .vecs = cast5_dec_tv_template, 2831da7f033dSHerbert Xu .count = CAST5_DEC_TEST_VECTORS 2832da7f033dSHerbert Xu } 2833da7f033dSHerbert Xu } 2834da7f033dSHerbert Xu } 2835da7f033dSHerbert Xu }, { 2836da7f033dSHerbert Xu .alg = "ecb(cast6)", 28371aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2838da7f033dSHerbert Xu .suite = { 2839da7f033dSHerbert Xu .cipher = { 2840da7f033dSHerbert Xu .enc = { 2841da7f033dSHerbert Xu .vecs = cast6_enc_tv_template, 2842da7f033dSHerbert Xu .count = CAST6_ENC_TEST_VECTORS 2843da7f033dSHerbert Xu }, 2844da7f033dSHerbert Xu .dec = { 2845da7f033dSHerbert Xu .vecs = cast6_dec_tv_template, 2846da7f033dSHerbert Xu .count = CAST6_DEC_TEST_VECTORS 2847da7f033dSHerbert Xu } 2848da7f033dSHerbert Xu } 2849da7f033dSHerbert Xu } 2850da7f033dSHerbert Xu }, { 2851e448370dSJussi Kivilinna .alg = "ecb(cipher_null)", 2852e448370dSJussi Kivilinna .test = alg_test_null, 2853e448370dSJussi Kivilinna }, { 2854da7f033dSHerbert Xu .alg = "ecb(des)", 28551aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2856a1915d51SJarod Wilson .fips_allowed = 1, 2857da7f033dSHerbert Xu .suite = { 2858da7f033dSHerbert Xu .cipher = { 2859da7f033dSHerbert Xu .enc = { 2860da7f033dSHerbert Xu .vecs = des_enc_tv_template, 2861da7f033dSHerbert Xu .count = DES_ENC_TEST_VECTORS 2862da7f033dSHerbert Xu }, 2863da7f033dSHerbert Xu .dec = { 2864da7f033dSHerbert Xu .vecs = des_dec_tv_template, 2865da7f033dSHerbert Xu .count = DES_DEC_TEST_VECTORS 2866da7f033dSHerbert Xu } 2867da7f033dSHerbert Xu } 2868da7f033dSHerbert Xu } 2869da7f033dSHerbert Xu }, { 2870da7f033dSHerbert Xu .alg = "ecb(des3_ede)", 28711aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2872a1915d51SJarod Wilson .fips_allowed = 1, 2873da7f033dSHerbert Xu .suite = { 2874da7f033dSHerbert Xu .cipher = { 2875da7f033dSHerbert Xu .enc = { 2876da7f033dSHerbert Xu .vecs = des3_ede_enc_tv_template, 2877da7f033dSHerbert Xu .count = DES3_EDE_ENC_TEST_VECTORS 2878da7f033dSHerbert Xu }, 2879da7f033dSHerbert Xu .dec = { 2880da7f033dSHerbert Xu .vecs = des3_ede_dec_tv_template, 2881da7f033dSHerbert Xu .count = DES3_EDE_DEC_TEST_VECTORS 2882da7f033dSHerbert Xu } 2883da7f033dSHerbert Xu } 2884da7f033dSHerbert Xu } 2885da7f033dSHerbert Xu }, { 288666e5bd00SJussi Kivilinna .alg = "ecb(fcrypt)", 288766e5bd00SJussi Kivilinna .test = alg_test_skcipher, 288866e5bd00SJussi Kivilinna .suite = { 288966e5bd00SJussi Kivilinna .cipher = { 289066e5bd00SJussi Kivilinna .enc = { 289166e5bd00SJussi Kivilinna .vecs = fcrypt_pcbc_enc_tv_template, 289266e5bd00SJussi Kivilinna .count = 1 289366e5bd00SJussi Kivilinna }, 289466e5bd00SJussi Kivilinna .dec = { 289566e5bd00SJussi Kivilinna .vecs = fcrypt_pcbc_dec_tv_template, 289666e5bd00SJussi Kivilinna .count = 1 289766e5bd00SJussi Kivilinna } 289866e5bd00SJussi Kivilinna } 289966e5bd00SJussi Kivilinna } 290066e5bd00SJussi Kivilinna }, { 2901da7f033dSHerbert Xu .alg = "ecb(khazad)", 29021aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2903da7f033dSHerbert Xu .suite = { 2904da7f033dSHerbert Xu .cipher = { 2905da7f033dSHerbert Xu .enc = { 2906da7f033dSHerbert Xu .vecs = khazad_enc_tv_template, 2907da7f033dSHerbert Xu .count = KHAZAD_ENC_TEST_VECTORS 2908da7f033dSHerbert Xu }, 2909da7f033dSHerbert Xu .dec = { 2910da7f033dSHerbert Xu .vecs = khazad_dec_tv_template, 2911da7f033dSHerbert Xu .count = KHAZAD_DEC_TEST_VECTORS 2912da7f033dSHerbert Xu } 2913da7f033dSHerbert Xu } 2914da7f033dSHerbert Xu } 2915da7f033dSHerbert Xu }, { 2916da7f033dSHerbert Xu .alg = "ecb(seed)", 29171aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2918da7f033dSHerbert Xu .suite = { 2919da7f033dSHerbert Xu .cipher = { 2920da7f033dSHerbert Xu .enc = { 2921da7f033dSHerbert Xu .vecs = seed_enc_tv_template, 2922da7f033dSHerbert Xu .count = SEED_ENC_TEST_VECTORS 2923da7f033dSHerbert Xu }, 2924da7f033dSHerbert Xu .dec = { 2925da7f033dSHerbert Xu .vecs = seed_dec_tv_template, 2926da7f033dSHerbert Xu .count = SEED_DEC_TEST_VECTORS 2927da7f033dSHerbert Xu } 2928da7f033dSHerbert Xu } 2929da7f033dSHerbert Xu } 2930da7f033dSHerbert Xu }, { 2931da7f033dSHerbert Xu .alg = "ecb(serpent)", 29321aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2933da7f033dSHerbert Xu .suite = { 2934da7f033dSHerbert Xu .cipher = { 2935da7f033dSHerbert Xu .enc = { 2936da7f033dSHerbert Xu .vecs = serpent_enc_tv_template, 2937da7f033dSHerbert Xu .count = SERPENT_ENC_TEST_VECTORS 2938da7f033dSHerbert Xu }, 2939da7f033dSHerbert Xu .dec = { 2940da7f033dSHerbert Xu .vecs = serpent_dec_tv_template, 2941da7f033dSHerbert Xu .count = SERPENT_DEC_TEST_VECTORS 2942da7f033dSHerbert Xu } 2943da7f033dSHerbert Xu } 2944da7f033dSHerbert Xu } 2945da7f033dSHerbert Xu }, { 2946da7f033dSHerbert Xu .alg = "ecb(tea)", 29471aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2948da7f033dSHerbert Xu .suite = { 2949da7f033dSHerbert Xu .cipher = { 2950da7f033dSHerbert Xu .enc = { 2951da7f033dSHerbert Xu .vecs = tea_enc_tv_template, 2952da7f033dSHerbert Xu .count = TEA_ENC_TEST_VECTORS 2953da7f033dSHerbert Xu }, 2954da7f033dSHerbert Xu .dec = { 2955da7f033dSHerbert Xu .vecs = tea_dec_tv_template, 2956da7f033dSHerbert Xu .count = TEA_DEC_TEST_VECTORS 2957da7f033dSHerbert Xu } 2958da7f033dSHerbert Xu } 2959da7f033dSHerbert Xu } 2960da7f033dSHerbert Xu }, { 2961da7f033dSHerbert Xu .alg = "ecb(tnepres)", 29621aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2963da7f033dSHerbert Xu .suite = { 2964da7f033dSHerbert Xu .cipher = { 2965da7f033dSHerbert Xu .enc = { 2966da7f033dSHerbert Xu .vecs = tnepres_enc_tv_template, 2967da7f033dSHerbert Xu .count = TNEPRES_ENC_TEST_VECTORS 2968da7f033dSHerbert Xu }, 2969da7f033dSHerbert Xu .dec = { 2970da7f033dSHerbert Xu .vecs = tnepres_dec_tv_template, 2971da7f033dSHerbert Xu .count = TNEPRES_DEC_TEST_VECTORS 2972da7f033dSHerbert Xu } 2973da7f033dSHerbert Xu } 2974da7f033dSHerbert Xu } 2975da7f033dSHerbert Xu }, { 2976da7f033dSHerbert Xu .alg = "ecb(twofish)", 29771aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2978da7f033dSHerbert Xu .suite = { 2979da7f033dSHerbert Xu .cipher = { 2980da7f033dSHerbert Xu .enc = { 2981da7f033dSHerbert Xu .vecs = tf_enc_tv_template, 2982da7f033dSHerbert Xu .count = TF_ENC_TEST_VECTORS 2983da7f033dSHerbert Xu }, 2984da7f033dSHerbert Xu .dec = { 2985da7f033dSHerbert Xu .vecs = tf_dec_tv_template, 2986da7f033dSHerbert Xu .count = TF_DEC_TEST_VECTORS 2987da7f033dSHerbert Xu } 2988da7f033dSHerbert Xu } 2989da7f033dSHerbert Xu } 2990da7f033dSHerbert Xu }, { 2991da7f033dSHerbert Xu .alg = "ecb(xeta)", 29921aa4ecd9SHerbert Xu .test = alg_test_skcipher, 2993da7f033dSHerbert Xu .suite = { 2994da7f033dSHerbert Xu .cipher = { 2995da7f033dSHerbert Xu .enc = { 2996da7f033dSHerbert Xu .vecs = xeta_enc_tv_template, 2997da7f033dSHerbert Xu .count = XETA_ENC_TEST_VECTORS 2998da7f033dSHerbert Xu }, 2999da7f033dSHerbert Xu .dec = { 3000da7f033dSHerbert Xu .vecs = xeta_dec_tv_template, 3001da7f033dSHerbert Xu .count = XETA_DEC_TEST_VECTORS 3002da7f033dSHerbert Xu } 3003da7f033dSHerbert Xu } 3004da7f033dSHerbert Xu } 3005da7f033dSHerbert Xu }, { 3006da7f033dSHerbert Xu .alg = "ecb(xtea)", 30071aa4ecd9SHerbert Xu .test = alg_test_skcipher, 3008da7f033dSHerbert Xu .suite = { 3009da7f033dSHerbert Xu .cipher = { 3010da7f033dSHerbert Xu .enc = { 3011da7f033dSHerbert Xu .vecs = xtea_enc_tv_template, 3012da7f033dSHerbert Xu .count = XTEA_ENC_TEST_VECTORS 3013da7f033dSHerbert Xu }, 3014da7f033dSHerbert Xu .dec = { 3015da7f033dSHerbert Xu .vecs = xtea_dec_tv_template, 3016da7f033dSHerbert Xu .count = XTEA_DEC_TEST_VECTORS 3017da7f033dSHerbert Xu } 3018da7f033dSHerbert Xu } 3019da7f033dSHerbert Xu } 3020da7f033dSHerbert Xu }, { 3021da7f033dSHerbert Xu .alg = "gcm(aes)", 3022da7f033dSHerbert Xu .test = alg_test_aead, 3023a1915d51SJarod Wilson .fips_allowed = 1, 3024da7f033dSHerbert Xu .suite = { 3025da7f033dSHerbert Xu .aead = { 3026da7f033dSHerbert Xu .enc = { 3027da7f033dSHerbert Xu .vecs = aes_gcm_enc_tv_template, 3028da7f033dSHerbert Xu .count = AES_GCM_ENC_TEST_VECTORS 3029da7f033dSHerbert Xu }, 3030da7f033dSHerbert Xu .dec = { 3031da7f033dSHerbert Xu .vecs = aes_gcm_dec_tv_template, 3032da7f033dSHerbert Xu .count = AES_GCM_DEC_TEST_VECTORS 3033da7f033dSHerbert Xu } 3034da7f033dSHerbert Xu } 3035da7f033dSHerbert Xu } 3036da7f033dSHerbert Xu }, { 3037507069c9SYouquan, Song .alg = "ghash", 3038507069c9SYouquan, Song .test = alg_test_hash, 303918c0ebd2SJarod Wilson .fips_allowed = 1, 3040507069c9SYouquan, Song .suite = { 3041507069c9SYouquan, Song .hash = { 3042507069c9SYouquan, Song .vecs = ghash_tv_template, 3043507069c9SYouquan, Song .count = GHASH_TEST_VECTORS 3044507069c9SYouquan, Song } 3045507069c9SYouquan, Song } 3046507069c9SYouquan, Song }, { 3047a482b081SSonic Zhang .alg = "hmac(crc32)", 3048a482b081SSonic Zhang .test = alg_test_hash, 3049a482b081SSonic Zhang .suite = { 3050a482b081SSonic Zhang .hash = { 3051a482b081SSonic Zhang .vecs = bfin_crc_tv_template, 3052a482b081SSonic Zhang .count = BFIN_CRC_TEST_VECTORS 3053a482b081SSonic Zhang } 3054a482b081SSonic Zhang } 3055a482b081SSonic Zhang }, { 3056da7f033dSHerbert Xu .alg = "hmac(md5)", 3057da7f033dSHerbert Xu .test = alg_test_hash, 3058da7f033dSHerbert Xu .suite = { 3059da7f033dSHerbert Xu .hash = { 3060da7f033dSHerbert Xu .vecs = hmac_md5_tv_template, 3061da7f033dSHerbert Xu .count = HMAC_MD5_TEST_VECTORS 3062da7f033dSHerbert Xu } 3063da7f033dSHerbert Xu } 3064da7f033dSHerbert Xu }, { 3065da7f033dSHerbert Xu .alg = "hmac(rmd128)", 3066da7f033dSHerbert Xu .test = alg_test_hash, 3067da7f033dSHerbert Xu .suite = { 3068da7f033dSHerbert Xu .hash = { 3069da7f033dSHerbert Xu .vecs = hmac_rmd128_tv_template, 3070da7f033dSHerbert Xu .count = HMAC_RMD128_TEST_VECTORS 3071da7f033dSHerbert Xu } 3072da7f033dSHerbert Xu } 3073da7f033dSHerbert Xu }, { 3074da7f033dSHerbert Xu .alg = "hmac(rmd160)", 3075da7f033dSHerbert Xu .test = alg_test_hash, 3076da7f033dSHerbert Xu .suite = { 3077da7f033dSHerbert Xu .hash = { 3078da7f033dSHerbert Xu .vecs = hmac_rmd160_tv_template, 3079da7f033dSHerbert Xu .count = HMAC_RMD160_TEST_VECTORS 3080da7f033dSHerbert Xu } 3081da7f033dSHerbert Xu } 3082da7f033dSHerbert Xu }, { 3083da7f033dSHerbert Xu .alg = "hmac(sha1)", 3084da7f033dSHerbert Xu .test = alg_test_hash, 3085a1915d51SJarod Wilson .fips_allowed = 1, 3086da7f033dSHerbert Xu .suite = { 3087da7f033dSHerbert Xu .hash = { 3088da7f033dSHerbert Xu .vecs = hmac_sha1_tv_template, 3089da7f033dSHerbert Xu .count = HMAC_SHA1_TEST_VECTORS 3090da7f033dSHerbert Xu } 3091da7f033dSHerbert Xu } 3092da7f033dSHerbert Xu }, { 3093da7f033dSHerbert Xu .alg = "hmac(sha224)", 3094da7f033dSHerbert Xu .test = alg_test_hash, 3095a1915d51SJarod Wilson .fips_allowed = 1, 3096da7f033dSHerbert Xu .suite = { 3097da7f033dSHerbert Xu .hash = { 3098da7f033dSHerbert Xu .vecs = hmac_sha224_tv_template, 3099da7f033dSHerbert Xu .count = HMAC_SHA224_TEST_VECTORS 3100da7f033dSHerbert Xu } 3101da7f033dSHerbert Xu } 3102da7f033dSHerbert Xu }, { 3103da7f033dSHerbert Xu .alg = "hmac(sha256)", 3104da7f033dSHerbert Xu .test = alg_test_hash, 3105a1915d51SJarod Wilson .fips_allowed = 1, 3106da7f033dSHerbert Xu .suite = { 3107da7f033dSHerbert Xu .hash = { 3108da7f033dSHerbert Xu .vecs = hmac_sha256_tv_template, 3109da7f033dSHerbert Xu .count = HMAC_SHA256_TEST_VECTORS 3110da7f033dSHerbert Xu } 3111da7f033dSHerbert Xu } 3112da7f033dSHerbert Xu }, { 3113da7f033dSHerbert Xu .alg = "hmac(sha384)", 3114da7f033dSHerbert Xu .test = alg_test_hash, 3115a1915d51SJarod Wilson .fips_allowed = 1, 3116da7f033dSHerbert Xu .suite = { 3117da7f033dSHerbert Xu .hash = { 3118da7f033dSHerbert Xu .vecs = hmac_sha384_tv_template, 3119da7f033dSHerbert Xu .count = HMAC_SHA384_TEST_VECTORS 3120da7f033dSHerbert Xu } 3121da7f033dSHerbert Xu } 3122da7f033dSHerbert Xu }, { 3123da7f033dSHerbert Xu .alg = "hmac(sha512)", 3124da7f033dSHerbert Xu .test = alg_test_hash, 3125a1915d51SJarod Wilson .fips_allowed = 1, 3126da7f033dSHerbert Xu .suite = { 3127da7f033dSHerbert Xu .hash = { 3128da7f033dSHerbert Xu .vecs = hmac_sha512_tv_template, 3129da7f033dSHerbert Xu .count = HMAC_SHA512_TEST_VECTORS 3130da7f033dSHerbert Xu } 3131da7f033dSHerbert Xu } 3132da7f033dSHerbert Xu }, { 3133bb5530e4SStephan Mueller .alg = "jitterentropy_rng", 3134bb5530e4SStephan Mueller .fips_allowed = 1, 3135bb5530e4SStephan Mueller .test = alg_test_null, 3136bb5530e4SStephan Mueller }, { 3137da7f033dSHerbert Xu .alg = "lrw(aes)", 31381aa4ecd9SHerbert Xu .test = alg_test_skcipher, 3139da7f033dSHerbert Xu .suite = { 3140da7f033dSHerbert Xu .cipher = { 3141da7f033dSHerbert Xu .enc = { 3142da7f033dSHerbert Xu .vecs = aes_lrw_enc_tv_template, 3143da7f033dSHerbert Xu .count = AES_LRW_ENC_TEST_VECTORS 3144da7f033dSHerbert Xu }, 3145da7f033dSHerbert Xu .dec = { 3146da7f033dSHerbert Xu .vecs = aes_lrw_dec_tv_template, 3147da7f033dSHerbert Xu .count = AES_LRW_DEC_TEST_VECTORS 3148da7f033dSHerbert Xu } 3149da7f033dSHerbert Xu } 3150da7f033dSHerbert Xu } 3151da7f033dSHerbert Xu }, { 31520840605eSJussi Kivilinna .alg = "lrw(camellia)", 31530840605eSJussi Kivilinna .test = alg_test_skcipher, 31540840605eSJussi Kivilinna .suite = { 31550840605eSJussi Kivilinna .cipher = { 31560840605eSJussi Kivilinna .enc = { 31570840605eSJussi Kivilinna .vecs = camellia_lrw_enc_tv_template, 31580840605eSJussi Kivilinna .count = CAMELLIA_LRW_ENC_TEST_VECTORS 31590840605eSJussi Kivilinna }, 31600840605eSJussi Kivilinna .dec = { 31610840605eSJussi Kivilinna .vecs = camellia_lrw_dec_tv_template, 31620840605eSJussi Kivilinna .count = CAMELLIA_LRW_DEC_TEST_VECTORS 31630840605eSJussi Kivilinna } 31640840605eSJussi Kivilinna } 31650840605eSJussi Kivilinna } 31660840605eSJussi Kivilinna }, { 31679b8b0405SJohannes Goetzfried .alg = "lrw(cast6)", 31689b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 31699b8b0405SJohannes Goetzfried .suite = { 31709b8b0405SJohannes Goetzfried .cipher = { 31719b8b0405SJohannes Goetzfried .enc = { 31729b8b0405SJohannes Goetzfried .vecs = cast6_lrw_enc_tv_template, 31739b8b0405SJohannes Goetzfried .count = CAST6_LRW_ENC_TEST_VECTORS 31749b8b0405SJohannes Goetzfried }, 31759b8b0405SJohannes Goetzfried .dec = { 31769b8b0405SJohannes Goetzfried .vecs = cast6_lrw_dec_tv_template, 31779b8b0405SJohannes Goetzfried .count = CAST6_LRW_DEC_TEST_VECTORS 31789b8b0405SJohannes Goetzfried } 31799b8b0405SJohannes Goetzfried } 31809b8b0405SJohannes Goetzfried } 31819b8b0405SJohannes Goetzfried }, { 3182d7bfc0faSJussi Kivilinna .alg = "lrw(serpent)", 3183d7bfc0faSJussi Kivilinna .test = alg_test_skcipher, 3184d7bfc0faSJussi Kivilinna .suite = { 3185d7bfc0faSJussi Kivilinna .cipher = { 3186d7bfc0faSJussi Kivilinna .enc = { 3187d7bfc0faSJussi Kivilinna .vecs = serpent_lrw_enc_tv_template, 3188d7bfc0faSJussi Kivilinna .count = SERPENT_LRW_ENC_TEST_VECTORS 3189d7bfc0faSJussi Kivilinna }, 3190d7bfc0faSJussi Kivilinna .dec = { 3191d7bfc0faSJussi Kivilinna .vecs = serpent_lrw_dec_tv_template, 3192d7bfc0faSJussi Kivilinna .count = SERPENT_LRW_DEC_TEST_VECTORS 3193d7bfc0faSJussi Kivilinna } 3194d7bfc0faSJussi Kivilinna } 3195d7bfc0faSJussi Kivilinna } 3196d7bfc0faSJussi Kivilinna }, { 31970b2a1551SJussi Kivilinna .alg = "lrw(twofish)", 31980b2a1551SJussi Kivilinna .test = alg_test_skcipher, 31990b2a1551SJussi Kivilinna .suite = { 32000b2a1551SJussi Kivilinna .cipher = { 32010b2a1551SJussi Kivilinna .enc = { 32020b2a1551SJussi Kivilinna .vecs = tf_lrw_enc_tv_template, 32030b2a1551SJussi Kivilinna .count = TF_LRW_ENC_TEST_VECTORS 32040b2a1551SJussi Kivilinna }, 32050b2a1551SJussi Kivilinna .dec = { 32060b2a1551SJussi Kivilinna .vecs = tf_lrw_dec_tv_template, 32070b2a1551SJussi Kivilinna .count = TF_LRW_DEC_TEST_VECTORS 32080b2a1551SJussi Kivilinna } 32090b2a1551SJussi Kivilinna } 32100b2a1551SJussi Kivilinna } 32110b2a1551SJussi Kivilinna }, { 32121443cc9bSKOVACS Krisztian .alg = "lz4", 32131443cc9bSKOVACS Krisztian .test = alg_test_comp, 32141443cc9bSKOVACS Krisztian .fips_allowed = 1, 32151443cc9bSKOVACS Krisztian .suite = { 32161443cc9bSKOVACS Krisztian .comp = { 32171443cc9bSKOVACS Krisztian .comp = { 32181443cc9bSKOVACS Krisztian .vecs = lz4_comp_tv_template, 32191443cc9bSKOVACS Krisztian .count = LZ4_COMP_TEST_VECTORS 32201443cc9bSKOVACS Krisztian }, 32211443cc9bSKOVACS Krisztian .decomp = { 32221443cc9bSKOVACS Krisztian .vecs = lz4_decomp_tv_template, 32231443cc9bSKOVACS Krisztian .count = LZ4_DECOMP_TEST_VECTORS 32241443cc9bSKOVACS Krisztian } 32251443cc9bSKOVACS Krisztian } 32261443cc9bSKOVACS Krisztian } 32271443cc9bSKOVACS Krisztian }, { 32281443cc9bSKOVACS Krisztian .alg = "lz4hc", 32291443cc9bSKOVACS Krisztian .test = alg_test_comp, 32301443cc9bSKOVACS Krisztian .fips_allowed = 1, 32311443cc9bSKOVACS Krisztian .suite = { 32321443cc9bSKOVACS Krisztian .comp = { 32331443cc9bSKOVACS Krisztian .comp = { 32341443cc9bSKOVACS Krisztian .vecs = lz4hc_comp_tv_template, 32351443cc9bSKOVACS Krisztian .count = LZ4HC_COMP_TEST_VECTORS 32361443cc9bSKOVACS Krisztian }, 32371443cc9bSKOVACS Krisztian .decomp = { 32381443cc9bSKOVACS Krisztian .vecs = lz4hc_decomp_tv_template, 32391443cc9bSKOVACS Krisztian .count = LZ4HC_DECOMP_TEST_VECTORS 32401443cc9bSKOVACS Krisztian } 32411443cc9bSKOVACS Krisztian } 32421443cc9bSKOVACS Krisztian } 32431443cc9bSKOVACS Krisztian }, { 3244da7f033dSHerbert Xu .alg = "lzo", 3245da7f033dSHerbert Xu .test = alg_test_comp, 32460818904dSMilan Broz .fips_allowed = 1, 3247da7f033dSHerbert Xu .suite = { 3248da7f033dSHerbert Xu .comp = { 3249da7f033dSHerbert Xu .comp = { 3250da7f033dSHerbert Xu .vecs = lzo_comp_tv_template, 3251da7f033dSHerbert Xu .count = LZO_COMP_TEST_VECTORS 3252da7f033dSHerbert Xu }, 3253da7f033dSHerbert Xu .decomp = { 3254da7f033dSHerbert Xu .vecs = lzo_decomp_tv_template, 3255da7f033dSHerbert Xu .count = LZO_DECOMP_TEST_VECTORS 3256da7f033dSHerbert Xu } 3257da7f033dSHerbert Xu } 3258da7f033dSHerbert Xu } 3259da7f033dSHerbert Xu }, { 3260da7f033dSHerbert Xu .alg = "md4", 3261da7f033dSHerbert Xu .test = alg_test_hash, 3262da7f033dSHerbert Xu .suite = { 3263da7f033dSHerbert Xu .hash = { 3264da7f033dSHerbert Xu .vecs = md4_tv_template, 3265da7f033dSHerbert Xu .count = MD4_TEST_VECTORS 3266da7f033dSHerbert Xu } 3267da7f033dSHerbert Xu } 3268da7f033dSHerbert Xu }, { 3269da7f033dSHerbert Xu .alg = "md5", 3270da7f033dSHerbert Xu .test = alg_test_hash, 3271da7f033dSHerbert Xu .suite = { 3272da7f033dSHerbert Xu .hash = { 3273da7f033dSHerbert Xu .vecs = md5_tv_template, 3274da7f033dSHerbert Xu .count = MD5_TEST_VECTORS 3275da7f033dSHerbert Xu } 3276da7f033dSHerbert Xu } 3277da7f033dSHerbert Xu }, { 3278da7f033dSHerbert Xu .alg = "michael_mic", 3279da7f033dSHerbert Xu .test = alg_test_hash, 3280da7f033dSHerbert Xu .suite = { 3281da7f033dSHerbert Xu .hash = { 3282da7f033dSHerbert Xu .vecs = michael_mic_tv_template, 3283da7f033dSHerbert Xu .count = MICHAEL_MIC_TEST_VECTORS 3284da7f033dSHerbert Xu } 3285da7f033dSHerbert Xu } 3286da7f033dSHerbert Xu }, { 3287ba0e14acSPuneet Saxena .alg = "ofb(aes)", 3288ba0e14acSPuneet Saxena .test = alg_test_skcipher, 3289ba0e14acSPuneet Saxena .fips_allowed = 1, 3290ba0e14acSPuneet Saxena .suite = { 3291ba0e14acSPuneet Saxena .cipher = { 3292ba0e14acSPuneet Saxena .enc = { 3293ba0e14acSPuneet Saxena .vecs = aes_ofb_enc_tv_template, 3294ba0e14acSPuneet Saxena .count = AES_OFB_ENC_TEST_VECTORS 3295ba0e14acSPuneet Saxena }, 3296ba0e14acSPuneet Saxena .dec = { 3297ba0e14acSPuneet Saxena .vecs = aes_ofb_dec_tv_template, 3298ba0e14acSPuneet Saxena .count = AES_OFB_DEC_TEST_VECTORS 3299ba0e14acSPuneet Saxena } 3300ba0e14acSPuneet Saxena } 3301ba0e14acSPuneet Saxena } 3302ba0e14acSPuneet Saxena }, { 3303da7f033dSHerbert Xu .alg = "pcbc(fcrypt)", 33041aa4ecd9SHerbert Xu .test = alg_test_skcipher, 3305da7f033dSHerbert Xu .suite = { 3306da7f033dSHerbert Xu .cipher = { 3307da7f033dSHerbert Xu .enc = { 3308da7f033dSHerbert Xu .vecs = fcrypt_pcbc_enc_tv_template, 3309da7f033dSHerbert Xu .count = FCRYPT_ENC_TEST_VECTORS 3310da7f033dSHerbert Xu }, 3311da7f033dSHerbert Xu .dec = { 3312da7f033dSHerbert Xu .vecs = fcrypt_pcbc_dec_tv_template, 3313da7f033dSHerbert Xu .count = FCRYPT_DEC_TEST_VECTORS 3314da7f033dSHerbert Xu } 3315da7f033dSHerbert Xu } 3316da7f033dSHerbert Xu } 3317da7f033dSHerbert Xu }, { 3318eee9dc61SMartin Willi .alg = "poly1305", 3319eee9dc61SMartin Willi .test = alg_test_hash, 3320eee9dc61SMartin Willi .suite = { 3321eee9dc61SMartin Willi .hash = { 3322eee9dc61SMartin Willi .vecs = poly1305_tv_template, 3323eee9dc61SMartin Willi .count = POLY1305_TEST_VECTORS 3324eee9dc61SMartin Willi } 3325eee9dc61SMartin Willi } 3326eee9dc61SMartin Willi }, { 3327da7f033dSHerbert Xu .alg = "rfc3686(ctr(aes))", 33281aa4ecd9SHerbert Xu .test = alg_test_skcipher, 3329a1915d51SJarod Wilson .fips_allowed = 1, 3330da7f033dSHerbert Xu .suite = { 3331da7f033dSHerbert Xu .cipher = { 3332da7f033dSHerbert Xu .enc = { 3333f7cb80f2SJarod Wilson .vecs = aes_ctr_rfc3686_enc_tv_template, 3334f7cb80f2SJarod Wilson .count = AES_CTR_3686_ENC_TEST_VECTORS 3335da7f033dSHerbert Xu }, 3336da7f033dSHerbert Xu .dec = { 3337f7cb80f2SJarod Wilson .vecs = aes_ctr_rfc3686_dec_tv_template, 3338f7cb80f2SJarod Wilson .count = AES_CTR_3686_DEC_TEST_VECTORS 3339da7f033dSHerbert Xu } 3340da7f033dSHerbert Xu } 3341da7f033dSHerbert Xu } 3342da7f033dSHerbert Xu }, { 334369435b94SAdrian Hoban .alg = "rfc4106(gcm(aes))", 334469435b94SAdrian Hoban .test = alg_test_aead, 3345db71f29aSJarod Wilson .fips_allowed = 1, 334669435b94SAdrian Hoban .suite = { 334769435b94SAdrian Hoban .aead = { 334869435b94SAdrian Hoban .enc = { 334969435b94SAdrian Hoban .vecs = aes_gcm_rfc4106_enc_tv_template, 335069435b94SAdrian Hoban .count = AES_GCM_4106_ENC_TEST_VECTORS 335169435b94SAdrian Hoban }, 335269435b94SAdrian Hoban .dec = { 335369435b94SAdrian Hoban .vecs = aes_gcm_rfc4106_dec_tv_template, 335469435b94SAdrian Hoban .count = AES_GCM_4106_DEC_TEST_VECTORS 335569435b94SAdrian Hoban } 335669435b94SAdrian Hoban } 335769435b94SAdrian Hoban } 335869435b94SAdrian Hoban }, { 33595d667322SJarod Wilson .alg = "rfc4309(ccm(aes))", 33605d667322SJarod Wilson .test = alg_test_aead, 3361a1915d51SJarod Wilson .fips_allowed = 1, 33625d667322SJarod Wilson .suite = { 33635d667322SJarod Wilson .aead = { 33645d667322SJarod Wilson .enc = { 33655d667322SJarod Wilson .vecs = aes_ccm_rfc4309_enc_tv_template, 33665d667322SJarod Wilson .count = AES_CCM_4309_ENC_TEST_VECTORS 33675d667322SJarod Wilson }, 33685d667322SJarod Wilson .dec = { 33695d667322SJarod Wilson .vecs = aes_ccm_rfc4309_dec_tv_template, 33705d667322SJarod Wilson .count = AES_CCM_4309_DEC_TEST_VECTORS 33715d667322SJarod Wilson } 33725d667322SJarod Wilson } 33735d667322SJarod Wilson } 33745d667322SJarod Wilson }, { 3375bb68745eSHerbert Xu .alg = "rfc4543(gcm(aes))", 3376e9b7441aSJussi Kivilinna .test = alg_test_aead, 3377e9b7441aSJussi Kivilinna .suite = { 3378e9b7441aSJussi Kivilinna .aead = { 3379e9b7441aSJussi Kivilinna .enc = { 3380e9b7441aSJussi Kivilinna .vecs = aes_gcm_rfc4543_enc_tv_template, 3381e9b7441aSJussi Kivilinna .count = AES_GCM_4543_ENC_TEST_VECTORS 3382e9b7441aSJussi Kivilinna }, 3383e9b7441aSJussi Kivilinna .dec = { 3384e9b7441aSJussi Kivilinna .vecs = aes_gcm_rfc4543_dec_tv_template, 3385e9b7441aSJussi Kivilinna .count = AES_GCM_4543_DEC_TEST_VECTORS 3386e9b7441aSJussi Kivilinna }, 3387e9b7441aSJussi Kivilinna } 3388e9b7441aSJussi Kivilinna } 3389e9b7441aSJussi Kivilinna }, { 3390af2b76b5SMartin Willi .alg = "rfc7539(chacha20,poly1305)", 3391af2b76b5SMartin Willi .test = alg_test_aead, 3392af2b76b5SMartin Willi .suite = { 3393af2b76b5SMartin Willi .aead = { 3394af2b76b5SMartin Willi .enc = { 3395af2b76b5SMartin Willi .vecs = rfc7539_enc_tv_template, 3396af2b76b5SMartin Willi .count = RFC7539_ENC_TEST_VECTORS 3397af2b76b5SMartin Willi }, 3398af2b76b5SMartin Willi .dec = { 3399af2b76b5SMartin Willi .vecs = rfc7539_dec_tv_template, 3400af2b76b5SMartin Willi .count = RFC7539_DEC_TEST_VECTORS 3401af2b76b5SMartin Willi }, 3402af2b76b5SMartin Willi } 3403af2b76b5SMartin Willi } 3404af2b76b5SMartin Willi }, { 34055900758dSMartin Willi .alg = "rfc7539esp(chacha20,poly1305)", 34065900758dSMartin Willi .test = alg_test_aead, 34075900758dSMartin Willi .suite = { 34085900758dSMartin Willi .aead = { 34095900758dSMartin Willi .enc = { 34105900758dSMartin Willi .vecs = rfc7539esp_enc_tv_template, 34115900758dSMartin Willi .count = RFC7539ESP_ENC_TEST_VECTORS 34125900758dSMartin Willi }, 34135900758dSMartin Willi .dec = { 34145900758dSMartin Willi .vecs = rfc7539esp_dec_tv_template, 34155900758dSMartin Willi .count = RFC7539ESP_DEC_TEST_VECTORS 34165900758dSMartin Willi }, 34175900758dSMartin Willi } 34185900758dSMartin Willi } 34195900758dSMartin Willi }, { 3420da7f033dSHerbert Xu .alg = "rmd128", 3421da7f033dSHerbert Xu .test = alg_test_hash, 3422da7f033dSHerbert Xu .suite = { 3423da7f033dSHerbert Xu .hash = { 3424da7f033dSHerbert Xu .vecs = rmd128_tv_template, 3425da7f033dSHerbert Xu .count = RMD128_TEST_VECTORS 3426da7f033dSHerbert Xu } 3427da7f033dSHerbert Xu } 3428da7f033dSHerbert Xu }, { 3429da7f033dSHerbert Xu .alg = "rmd160", 3430da7f033dSHerbert Xu .test = alg_test_hash, 3431da7f033dSHerbert Xu .suite = { 3432da7f033dSHerbert Xu .hash = { 3433da7f033dSHerbert Xu .vecs = rmd160_tv_template, 3434da7f033dSHerbert Xu .count = RMD160_TEST_VECTORS 3435da7f033dSHerbert Xu } 3436da7f033dSHerbert Xu } 3437da7f033dSHerbert Xu }, { 3438da7f033dSHerbert Xu .alg = "rmd256", 3439da7f033dSHerbert Xu .test = alg_test_hash, 3440da7f033dSHerbert Xu .suite = { 3441da7f033dSHerbert Xu .hash = { 3442da7f033dSHerbert Xu .vecs = rmd256_tv_template, 3443da7f033dSHerbert Xu .count = RMD256_TEST_VECTORS 3444da7f033dSHerbert Xu } 3445da7f033dSHerbert Xu } 3446da7f033dSHerbert Xu }, { 3447da7f033dSHerbert Xu .alg = "rmd320", 3448da7f033dSHerbert Xu .test = alg_test_hash, 3449da7f033dSHerbert Xu .suite = { 3450da7f033dSHerbert Xu .hash = { 3451da7f033dSHerbert Xu .vecs = rmd320_tv_template, 3452da7f033dSHerbert Xu .count = RMD320_TEST_VECTORS 3453da7f033dSHerbert Xu } 3454da7f033dSHerbert Xu } 3455da7f033dSHerbert Xu }, { 3456da7f033dSHerbert Xu .alg = "salsa20", 34571aa4ecd9SHerbert Xu .test = alg_test_skcipher, 3458da7f033dSHerbert Xu .suite = { 3459da7f033dSHerbert Xu .cipher = { 3460da7f033dSHerbert Xu .enc = { 3461da7f033dSHerbert Xu .vecs = salsa20_stream_enc_tv_template, 3462da7f033dSHerbert Xu .count = SALSA20_STREAM_ENC_TEST_VECTORS 3463da7f033dSHerbert Xu } 3464da7f033dSHerbert Xu } 3465da7f033dSHerbert Xu } 3466da7f033dSHerbert Xu }, { 3467da7f033dSHerbert Xu .alg = "sha1", 3468da7f033dSHerbert Xu .test = alg_test_hash, 3469a1915d51SJarod Wilson .fips_allowed = 1, 3470da7f033dSHerbert Xu .suite = { 3471da7f033dSHerbert Xu .hash = { 3472da7f033dSHerbert Xu .vecs = sha1_tv_template, 3473da7f033dSHerbert Xu .count = SHA1_TEST_VECTORS 3474da7f033dSHerbert Xu } 3475da7f033dSHerbert Xu } 3476da7f033dSHerbert Xu }, { 3477da7f033dSHerbert Xu .alg = "sha224", 3478da7f033dSHerbert Xu .test = alg_test_hash, 3479a1915d51SJarod Wilson .fips_allowed = 1, 3480da7f033dSHerbert Xu .suite = { 3481da7f033dSHerbert Xu .hash = { 3482da7f033dSHerbert Xu .vecs = sha224_tv_template, 3483da7f033dSHerbert Xu .count = SHA224_TEST_VECTORS 3484da7f033dSHerbert Xu } 3485da7f033dSHerbert Xu } 3486da7f033dSHerbert Xu }, { 3487da7f033dSHerbert Xu .alg = "sha256", 3488da7f033dSHerbert Xu .test = alg_test_hash, 3489a1915d51SJarod Wilson .fips_allowed = 1, 3490da7f033dSHerbert Xu .suite = { 3491da7f033dSHerbert Xu .hash = { 3492da7f033dSHerbert Xu .vecs = sha256_tv_template, 3493da7f033dSHerbert Xu .count = SHA256_TEST_VECTORS 3494da7f033dSHerbert Xu } 3495da7f033dSHerbert Xu } 3496da7f033dSHerbert Xu }, { 3497da7f033dSHerbert Xu .alg = "sha384", 3498da7f033dSHerbert Xu .test = alg_test_hash, 3499a1915d51SJarod Wilson .fips_allowed = 1, 3500da7f033dSHerbert Xu .suite = { 3501da7f033dSHerbert Xu .hash = { 3502da7f033dSHerbert Xu .vecs = sha384_tv_template, 3503da7f033dSHerbert Xu .count = SHA384_TEST_VECTORS 3504da7f033dSHerbert Xu } 3505da7f033dSHerbert Xu } 3506da7f033dSHerbert Xu }, { 3507da7f033dSHerbert Xu .alg = "sha512", 3508da7f033dSHerbert Xu .test = alg_test_hash, 3509a1915d51SJarod Wilson .fips_allowed = 1, 3510da7f033dSHerbert Xu .suite = { 3511da7f033dSHerbert Xu .hash = { 3512da7f033dSHerbert Xu .vecs = sha512_tv_template, 3513da7f033dSHerbert Xu .count = SHA512_TEST_VECTORS 3514da7f033dSHerbert Xu } 3515da7f033dSHerbert Xu } 3516da7f033dSHerbert Xu }, { 3517da7f033dSHerbert Xu .alg = "tgr128", 3518da7f033dSHerbert Xu .test = alg_test_hash, 3519da7f033dSHerbert Xu .suite = { 3520da7f033dSHerbert Xu .hash = { 3521da7f033dSHerbert Xu .vecs = tgr128_tv_template, 3522da7f033dSHerbert Xu .count = TGR128_TEST_VECTORS 3523da7f033dSHerbert Xu } 3524da7f033dSHerbert Xu } 3525da7f033dSHerbert Xu }, { 3526da7f033dSHerbert Xu .alg = "tgr160", 3527da7f033dSHerbert Xu .test = alg_test_hash, 3528da7f033dSHerbert Xu .suite = { 3529da7f033dSHerbert Xu .hash = { 3530da7f033dSHerbert Xu .vecs = tgr160_tv_template, 3531da7f033dSHerbert Xu .count = TGR160_TEST_VECTORS 3532da7f033dSHerbert Xu } 3533da7f033dSHerbert Xu } 3534da7f033dSHerbert Xu }, { 3535da7f033dSHerbert Xu .alg = "tgr192", 3536da7f033dSHerbert Xu .test = alg_test_hash, 3537da7f033dSHerbert Xu .suite = { 3538da7f033dSHerbert Xu .hash = { 3539da7f033dSHerbert Xu .vecs = tgr192_tv_template, 3540da7f033dSHerbert Xu .count = TGR192_TEST_VECTORS 3541da7f033dSHerbert Xu } 3542da7f033dSHerbert Xu } 3543da7f033dSHerbert Xu }, { 3544f1939f7cSShane Wang .alg = "vmac(aes)", 3545f1939f7cSShane Wang .test = alg_test_hash, 3546f1939f7cSShane Wang .suite = { 3547f1939f7cSShane Wang .hash = { 3548f1939f7cSShane Wang .vecs = aes_vmac128_tv_template, 3549f1939f7cSShane Wang .count = VMAC_AES_TEST_VECTORS 3550f1939f7cSShane Wang } 3551f1939f7cSShane Wang } 3552f1939f7cSShane Wang }, { 3553da7f033dSHerbert Xu .alg = "wp256", 3554da7f033dSHerbert Xu .test = alg_test_hash, 3555da7f033dSHerbert Xu .suite = { 3556da7f033dSHerbert Xu .hash = { 3557da7f033dSHerbert Xu .vecs = wp256_tv_template, 3558da7f033dSHerbert Xu .count = WP256_TEST_VECTORS 3559da7f033dSHerbert Xu } 3560da7f033dSHerbert Xu } 3561da7f033dSHerbert Xu }, { 3562da7f033dSHerbert Xu .alg = "wp384", 3563da7f033dSHerbert Xu .test = alg_test_hash, 3564da7f033dSHerbert Xu .suite = { 3565da7f033dSHerbert Xu .hash = { 3566da7f033dSHerbert Xu .vecs = wp384_tv_template, 3567da7f033dSHerbert Xu .count = WP384_TEST_VECTORS 3568da7f033dSHerbert Xu } 3569da7f033dSHerbert Xu } 3570da7f033dSHerbert Xu }, { 3571da7f033dSHerbert Xu .alg = "wp512", 3572da7f033dSHerbert Xu .test = alg_test_hash, 3573da7f033dSHerbert Xu .suite = { 3574da7f033dSHerbert Xu .hash = { 3575da7f033dSHerbert Xu .vecs = wp512_tv_template, 3576da7f033dSHerbert Xu .count = WP512_TEST_VECTORS 3577da7f033dSHerbert Xu } 3578da7f033dSHerbert Xu } 3579da7f033dSHerbert Xu }, { 3580da7f033dSHerbert Xu .alg = "xcbc(aes)", 3581da7f033dSHerbert Xu .test = alg_test_hash, 3582da7f033dSHerbert Xu .suite = { 3583da7f033dSHerbert Xu .hash = { 3584da7f033dSHerbert Xu .vecs = aes_xcbc128_tv_template, 3585da7f033dSHerbert Xu .count = XCBC_AES_TEST_VECTORS 3586da7f033dSHerbert Xu } 3587da7f033dSHerbert Xu } 3588da7f033dSHerbert Xu }, { 3589da7f033dSHerbert Xu .alg = "xts(aes)", 35901aa4ecd9SHerbert Xu .test = alg_test_skcipher, 35912918aa8dSJarod Wilson .fips_allowed = 1, 3592da7f033dSHerbert Xu .suite = { 3593da7f033dSHerbert Xu .cipher = { 3594da7f033dSHerbert Xu .enc = { 3595da7f033dSHerbert Xu .vecs = aes_xts_enc_tv_template, 3596da7f033dSHerbert Xu .count = AES_XTS_ENC_TEST_VECTORS 3597da7f033dSHerbert Xu }, 3598da7f033dSHerbert Xu .dec = { 3599da7f033dSHerbert Xu .vecs = aes_xts_dec_tv_template, 3600da7f033dSHerbert Xu .count = AES_XTS_DEC_TEST_VECTORS 3601da7f033dSHerbert Xu } 3602da7f033dSHerbert Xu } 3603da7f033dSHerbert Xu } 36040c01aed5SGeert Uytterhoeven }, { 36050840605eSJussi Kivilinna .alg = "xts(camellia)", 36060840605eSJussi Kivilinna .test = alg_test_skcipher, 36070840605eSJussi Kivilinna .suite = { 36080840605eSJussi Kivilinna .cipher = { 36090840605eSJussi Kivilinna .enc = { 36100840605eSJussi Kivilinna .vecs = camellia_xts_enc_tv_template, 36110840605eSJussi Kivilinna .count = CAMELLIA_XTS_ENC_TEST_VECTORS 36120840605eSJussi Kivilinna }, 36130840605eSJussi Kivilinna .dec = { 36140840605eSJussi Kivilinna .vecs = camellia_xts_dec_tv_template, 36150840605eSJussi Kivilinna .count = CAMELLIA_XTS_DEC_TEST_VECTORS 36160840605eSJussi Kivilinna } 36170840605eSJussi Kivilinna } 36180840605eSJussi Kivilinna } 36190840605eSJussi Kivilinna }, { 36209b8b0405SJohannes Goetzfried .alg = "xts(cast6)", 36219b8b0405SJohannes Goetzfried .test = alg_test_skcipher, 36229b8b0405SJohannes Goetzfried .suite = { 36239b8b0405SJohannes Goetzfried .cipher = { 36249b8b0405SJohannes Goetzfried .enc = { 36259b8b0405SJohannes Goetzfried .vecs = cast6_xts_enc_tv_template, 36269b8b0405SJohannes Goetzfried .count = CAST6_XTS_ENC_TEST_VECTORS 36279b8b0405SJohannes Goetzfried }, 36289b8b0405SJohannes Goetzfried .dec = { 36299b8b0405SJohannes Goetzfried .vecs = cast6_xts_dec_tv_template, 36309b8b0405SJohannes Goetzfried .count = CAST6_XTS_DEC_TEST_VECTORS 36319b8b0405SJohannes Goetzfried } 36329b8b0405SJohannes Goetzfried } 36339b8b0405SJohannes Goetzfried } 36349b8b0405SJohannes Goetzfried }, { 363518be20b9SJussi Kivilinna .alg = "xts(serpent)", 363618be20b9SJussi Kivilinna .test = alg_test_skcipher, 363718be20b9SJussi Kivilinna .suite = { 363818be20b9SJussi Kivilinna .cipher = { 363918be20b9SJussi Kivilinna .enc = { 364018be20b9SJussi Kivilinna .vecs = serpent_xts_enc_tv_template, 364118be20b9SJussi Kivilinna .count = SERPENT_XTS_ENC_TEST_VECTORS 364218be20b9SJussi Kivilinna }, 364318be20b9SJussi Kivilinna .dec = { 364418be20b9SJussi Kivilinna .vecs = serpent_xts_dec_tv_template, 364518be20b9SJussi Kivilinna .count = SERPENT_XTS_DEC_TEST_VECTORS 364618be20b9SJussi Kivilinna } 364718be20b9SJussi Kivilinna } 364818be20b9SJussi Kivilinna } 364918be20b9SJussi Kivilinna }, { 3650aed265b9SJussi Kivilinna .alg = "xts(twofish)", 3651aed265b9SJussi Kivilinna .test = alg_test_skcipher, 3652aed265b9SJussi Kivilinna .suite = { 3653aed265b9SJussi Kivilinna .cipher = { 3654aed265b9SJussi Kivilinna .enc = { 3655aed265b9SJussi Kivilinna .vecs = tf_xts_enc_tv_template, 3656aed265b9SJussi Kivilinna .count = TF_XTS_ENC_TEST_VECTORS 3657aed265b9SJussi Kivilinna }, 3658aed265b9SJussi Kivilinna .dec = { 3659aed265b9SJussi Kivilinna .vecs = tf_xts_dec_tv_template, 3660aed265b9SJussi Kivilinna .count = TF_XTS_DEC_TEST_VECTORS 3661aed265b9SJussi Kivilinna } 3662aed265b9SJussi Kivilinna } 3663aed265b9SJussi Kivilinna } 3664aed265b9SJussi Kivilinna }, { 36650c01aed5SGeert Uytterhoeven .alg = "zlib", 36660c01aed5SGeert Uytterhoeven .test = alg_test_pcomp, 36670818904dSMilan Broz .fips_allowed = 1, 36680c01aed5SGeert Uytterhoeven .suite = { 36690c01aed5SGeert Uytterhoeven .pcomp = { 36700c01aed5SGeert Uytterhoeven .comp = { 36710c01aed5SGeert Uytterhoeven .vecs = zlib_comp_tv_template, 36720c01aed5SGeert Uytterhoeven .count = ZLIB_COMP_TEST_VECTORS 36730c01aed5SGeert Uytterhoeven }, 36740c01aed5SGeert Uytterhoeven .decomp = { 36750c01aed5SGeert Uytterhoeven .vecs = zlib_decomp_tv_template, 36760c01aed5SGeert Uytterhoeven .count = ZLIB_DECOMP_TEST_VECTORS 36770c01aed5SGeert Uytterhoeven } 36780c01aed5SGeert Uytterhoeven } 36790c01aed5SGeert Uytterhoeven } 3680da7f033dSHerbert Xu } 3681da7f033dSHerbert Xu }; 3682da7f033dSHerbert Xu 36835714758bSJussi Kivilinna static bool alg_test_descs_checked; 36845714758bSJussi Kivilinna 36855714758bSJussi Kivilinna static void alg_test_descs_check_order(void) 36865714758bSJussi Kivilinna { 36875714758bSJussi Kivilinna int i; 36885714758bSJussi Kivilinna 36895714758bSJussi Kivilinna /* only check once */ 36905714758bSJussi Kivilinna if (alg_test_descs_checked) 36915714758bSJussi Kivilinna return; 36925714758bSJussi Kivilinna 36935714758bSJussi Kivilinna alg_test_descs_checked = true; 36945714758bSJussi Kivilinna 36955714758bSJussi Kivilinna for (i = 1; i < ARRAY_SIZE(alg_test_descs); i++) { 36965714758bSJussi Kivilinna int diff = strcmp(alg_test_descs[i - 1].alg, 36975714758bSJussi Kivilinna alg_test_descs[i].alg); 36985714758bSJussi Kivilinna 36995714758bSJussi Kivilinna if (WARN_ON(diff > 0)) { 37005714758bSJussi Kivilinna pr_warn("testmgr: alg_test_descs entries in wrong order: '%s' before '%s'\n", 37015714758bSJussi Kivilinna alg_test_descs[i - 1].alg, 37025714758bSJussi Kivilinna alg_test_descs[i].alg); 37035714758bSJussi Kivilinna } 37045714758bSJussi Kivilinna 37055714758bSJussi Kivilinna if (WARN_ON(diff == 0)) { 37065714758bSJussi Kivilinna pr_warn("testmgr: duplicate alg_test_descs entry: '%s'\n", 37075714758bSJussi Kivilinna alg_test_descs[i].alg); 37085714758bSJussi Kivilinna } 37095714758bSJussi Kivilinna } 37105714758bSJussi Kivilinna } 37115714758bSJussi Kivilinna 37121aa4ecd9SHerbert Xu static int alg_find_test(const char *alg) 3713da7f033dSHerbert Xu { 3714da7f033dSHerbert Xu int start = 0; 3715da7f033dSHerbert Xu int end = ARRAY_SIZE(alg_test_descs); 3716da7f033dSHerbert Xu 3717da7f033dSHerbert Xu while (start < end) { 3718da7f033dSHerbert Xu int i = (start + end) / 2; 3719da7f033dSHerbert Xu int diff = strcmp(alg_test_descs[i].alg, alg); 3720da7f033dSHerbert Xu 3721da7f033dSHerbert Xu if (diff > 0) { 3722da7f033dSHerbert Xu end = i; 3723da7f033dSHerbert Xu continue; 3724da7f033dSHerbert Xu } 3725da7f033dSHerbert Xu 3726da7f033dSHerbert Xu if (diff < 0) { 3727da7f033dSHerbert Xu start = i + 1; 3728da7f033dSHerbert Xu continue; 3729da7f033dSHerbert Xu } 3730da7f033dSHerbert Xu 37311aa4ecd9SHerbert Xu return i; 3732da7f033dSHerbert Xu } 3733da7f033dSHerbert Xu 37341aa4ecd9SHerbert Xu return -1; 37351aa4ecd9SHerbert Xu } 37361aa4ecd9SHerbert Xu 37371aa4ecd9SHerbert Xu int alg_test(const char *driver, const char *alg, u32 type, u32 mask) 37381aa4ecd9SHerbert Xu { 37391aa4ecd9SHerbert Xu int i; 3740a68f6610SHerbert Xu int j; 3741d12d6b6dSNeil Horman int rc; 37421aa4ecd9SHerbert Xu 37435714758bSJussi Kivilinna alg_test_descs_check_order(); 37445714758bSJussi Kivilinna 37451aa4ecd9SHerbert Xu if ((type & CRYPTO_ALG_TYPE_MASK) == CRYPTO_ALG_TYPE_CIPHER) { 37461aa4ecd9SHerbert Xu char nalg[CRYPTO_MAX_ALG_NAME]; 37471aa4ecd9SHerbert Xu 37481aa4ecd9SHerbert Xu if (snprintf(nalg, sizeof(nalg), "ecb(%s)", alg) >= 37491aa4ecd9SHerbert Xu sizeof(nalg)) 37501aa4ecd9SHerbert Xu return -ENAMETOOLONG; 37511aa4ecd9SHerbert Xu 37521aa4ecd9SHerbert Xu i = alg_find_test(nalg); 37531aa4ecd9SHerbert Xu if (i < 0) 37541aa4ecd9SHerbert Xu goto notest; 37551aa4ecd9SHerbert Xu 3756a3bef3a3SJarod Wilson if (fips_enabled && !alg_test_descs[i].fips_allowed) 3757a3bef3a3SJarod Wilson goto non_fips_alg; 3758a3bef3a3SJarod Wilson 3759941fb328SJarod Wilson rc = alg_test_cipher(alg_test_descs + i, driver, type, mask); 3760941fb328SJarod Wilson goto test_done; 37611aa4ecd9SHerbert Xu } 37621aa4ecd9SHerbert Xu 37631aa4ecd9SHerbert Xu i = alg_find_test(alg); 3764a68f6610SHerbert Xu j = alg_find_test(driver); 3765a68f6610SHerbert Xu if (i < 0 && j < 0) 37661aa4ecd9SHerbert Xu goto notest; 37671aa4ecd9SHerbert Xu 3768a68f6610SHerbert Xu if (fips_enabled && ((i >= 0 && !alg_test_descs[i].fips_allowed) || 3769a68f6610SHerbert Xu (j >= 0 && !alg_test_descs[j].fips_allowed))) 3770a3bef3a3SJarod Wilson goto non_fips_alg; 3771a3bef3a3SJarod Wilson 3772a68f6610SHerbert Xu rc = 0; 3773a68f6610SHerbert Xu if (i >= 0) 3774a68f6610SHerbert Xu rc |= alg_test_descs[i].test(alg_test_descs + i, driver, 37751aa4ecd9SHerbert Xu type, mask); 3776032c8cacSCristian Stoica if (j >= 0 && j != i) 3777a68f6610SHerbert Xu rc |= alg_test_descs[j].test(alg_test_descs + j, driver, 3778a68f6610SHerbert Xu type, mask); 3779a68f6610SHerbert Xu 3780941fb328SJarod Wilson test_done: 3781d12d6b6dSNeil Horman if (fips_enabled && rc) 3782d12d6b6dSNeil Horman panic("%s: %s alg self test failed in fips mode!\n", driver, alg); 3783d12d6b6dSNeil Horman 378429ecd4abSJarod Wilson if (fips_enabled && !rc) 37853e8cffd4SMasanari Iida pr_info("alg: self-tests for %s (%s) passed\n", driver, alg); 378629ecd4abSJarod Wilson 3787d12d6b6dSNeil Horman return rc; 37881aa4ecd9SHerbert Xu 37891aa4ecd9SHerbert Xu notest: 3790da7f033dSHerbert Xu printk(KERN_INFO "alg: No test for %s (%s)\n", alg, driver); 3791da7f033dSHerbert Xu return 0; 3792a3bef3a3SJarod Wilson non_fips_alg: 3793a3bef3a3SJarod Wilson return -EINVAL; 3794da7f033dSHerbert Xu } 37950b767f96SAlexander Shishkin 3796326a6346SHerbert Xu #endif /* CONFIG_CRYPTO_MANAGER_DISABLE_TESTS */ 37970b767f96SAlexander Shishkin 3798da7f033dSHerbert Xu EXPORT_SYMBOL_GPL(alg_test); 3799