Lines Matching +full:aes +full:- +full:cmac
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright (c) 2002 Jean-Francois Dive <jef@linuxbe.org>
11 * Updated RFC4106 AES-GCM testing.
46 MODULE_PARM_DESC(notests, "disable all crypto self-tests");
51 MODULE_PARM_DESC(noslowtests, "disable slow crypto self-tests");
98 * behavior when the two IV copies differ is implementation-defined.
179 while (i-- > 0) in __testmgr_alloc_buf()
182 return -ENOMEM; in __testmgr_alloc_buf()
225 /* likewise, but also export and re-import the intermediate state */
237 * Whether the crypto operation will occur in-place, and if so whether the
238 * source and destination scatterlist pointers will coincide (req->src ==
239 * req->dst), or whether they'll merely point to two separate scatterlists
240 * (req->src != req->dst) that reference the same underlying memory.
242 * This is only relevant for algorithm types that support in-place operation.
253 * struct test_sg_division - description of a scatterlist entry
261 * @offset: byte offset into a 2-page buffer at which this chunk will start
277 * struct testvec_config - configuration for testing a crypto test vector
283 * @inplace_mode: whether and how to operate on the data in-place, if applicable
321 * type when the "fast" crypto self-tests are enabled. They aim to provide good
329 .name = "in-place (one sglist)",
333 .name = "in-place (two sglists)",
337 .name = "out-of-place",
388 .offset = PAGE_SIZE - 32
391 .offset = PAGE_SIZE - 7
449 .offset = PAGE_SIZE - 32,
452 .offset = PAGE_SIZE - 7,
477 remaining -= divs[ndivs++].proportion_of_total; in count_test_sg_divisions()
494 divs[i].proportion_of_total > TEST_SG_TOTAL - total) in valid_sg_divisions()
503 memchr_inv(&divs[i], 0, (count - i) * sizeof(divs[0])) == NULL; in valid_sg_divisions()
515 if (cfg->name == NULL) in valid_testvec_config()
518 if (!valid_sg_divisions(cfg->src_divs, ARRAY_SIZE(cfg->src_divs), in valid_testvec_config()
522 if (cfg->dst_divs[0].proportion_of_total) { in valid_testvec_config()
523 if (!valid_sg_divisions(cfg->dst_divs, in valid_testvec_config()
524 ARRAY_SIZE(cfg->dst_divs), &flags)) in valid_testvec_config()
527 if (memchr_inv(cfg->dst_divs, 0, sizeof(cfg->dst_divs))) in valid_testvec_config()
532 if (cfg->iv_offset + in valid_testvec_config()
533 (cfg->iv_offset_relative_to_alignmask ? MAX_ALGAPI_ALIGNMASK : 0) > in valid_testvec_config()
538 cfg->finalization_type == FINALIZATION_TYPE_DIGEST) in valid_testvec_config()
541 if ((cfg->nosimd || cfg->nosimd_setkey || in valid_testvec_config()
543 (cfg->req_flags & CRYPTO_TFM_REQ_MAY_SLEEP)) in valid_testvec_config()
559 return __testmgr_alloc_buf(tsgl->bufs, 1 /* two pages per buffer */); in init_test_sglist()
564 return __testmgr_free_buf(tsgl->bufs, 1 /* two pages per buffer */); in destroy_test_sglist()
568 * build_test_sglist() - build a scatterlist for a crypto test
570 * @tsgl: the scatterlist to build. @tsgl->bufs[] contains an array of 2-page
571 * buffers which the scatterlist @tsgl->sgl[] will be made to point into.
575 * @data: if non-NULL, the buffers will be filled with this data until it ends.
578 * @out_divs: if non-NULL, the test_sg_division to which each scatterlist entry
583 * Return: 0 or a -errno value
600 BUILD_BUG_ON(ARRAY_SIZE(partitions) != ARRAY_SIZE(tsgl->sgl)); in build_test_sglist()
602 return -EINVAL; in build_test_sglist()
605 tsgl->nents = 0; in build_test_sglist()
613 partitions[tsgl->nents].div = &divs[i]; in build_test_sglist()
614 partitions[tsgl->nents].length = len_this_sg; in build_test_sglist()
615 tsgl->nents++; in build_test_sglist()
616 len_remaining -= len_this_sg; in build_test_sglist()
619 if (tsgl->nents == 0) { in build_test_sglist()
620 partitions[tsgl->nents].div = &divs[0]; in build_test_sglist()
621 partitions[tsgl->nents].length = 0; in build_test_sglist()
622 tsgl->nents++; in build_test_sglist()
624 partitions[tsgl->nents - 1].length += len_remaining; in build_test_sglist()
627 sg_init_table(tsgl->sgl, tsgl->nents); in build_test_sglist()
628 for (i = 0; i < tsgl->nents; i++) { in build_test_sglist()
629 unsigned int offset = partitions[i].div->offset; in build_test_sglist()
632 if (partitions[i].div->offset_relative_to_alignmask) in build_test_sglist()
638 return -EINVAL; in build_test_sglist()
642 addr = &tsgl->bufs[i][offset]; in build_test_sglist()
643 sg_set_buf(&tsgl->sgl[i], addr, partitions[i].length); in build_test_sglist()
651 copy_len = min(partitions[i].length, data->count); in build_test_sglist()
654 return -EINVAL; in build_test_sglist()
656 TESTMGR_POISON_LEN - copy_len); in build_test_sglist()
663 sg_mark_end(&tsgl->sgl[tsgl->nents - 1]); in build_test_sglist()
664 tsgl->sgl_ptr = tsgl->sgl; in build_test_sglist()
665 memcpy(tsgl->sgl_saved, tsgl->sgl, tsgl->nents * sizeof(tsgl->sgl[0])); in build_test_sglist()
678 * Return: 0 if correct, -EINVAL if incorrect, -EOVERFLOW if buffer overrun.
688 for (i = 0; i < tsgl->nents; i++) { in verify_correct_output()
689 struct scatterlist *sg = &tsgl->sgl_ptr[i]; in verify_correct_output()
690 unsigned int len = sg->length; in verify_correct_output()
691 unsigned int offset = sg->offset; in verify_correct_output()
696 unchecked_prefix_len -= len; in verify_correct_output()
700 len -= unchecked_prefix_len; in verify_correct_output()
706 return -EINVAL; in verify_correct_output()
709 return -EOVERFLOW; in verify_correct_output()
710 len_to_check -= len; in verify_correct_output()
714 return -EINVAL; in verify_correct_output()
722 for (i = 0; i < tsgl->nents; i++) { in is_test_sglist_corrupted()
723 if (tsgl->sgl[i].page_link != tsgl->sgl_saved[i].page_link) in is_test_sglist_corrupted()
725 if (tsgl->sgl[i].offset != tsgl->sgl_saved[i].offset) in is_test_sglist_corrupted()
727 if (tsgl->sgl[i].length != tsgl->sgl_saved[i].length) in is_test_sglist_corrupted()
746 if (init_test_sglist(&tsgls->src) != 0) in alloc_cipher_test_sglists()
748 if (init_test_sglist(&tsgls->dst) != 0) in alloc_cipher_test_sglists()
754 destroy_test_sglist(&tsgls->src); in alloc_cipher_test_sglists()
763 destroy_test_sglist(&tsgls->src); in free_cipher_test_sglists()
764 destroy_test_sglist(&tsgls->dst); in free_cipher_test_sglists()
782 err = build_test_sglist(&tsgls->src, cfg->src_divs, alignmask, in build_cipher_test_sglists()
783 cfg->inplace_mode != OUT_OF_PLACE ? in build_cipher_test_sglists()
791 * In-place crypto operations can use the same scatterlist for both the in build_cipher_test_sglists()
792 * source and destination (req->src == req->dst), or can use separate in build_cipher_test_sglists()
793 * scatterlists (req->src != req->dst) which point to the same in build_cipher_test_sglists()
796 if (cfg->inplace_mode == INPLACE_ONE_SGLIST) { in build_cipher_test_sglists()
797 tsgls->dst.sgl_ptr = tsgls->src.sgl; in build_cipher_test_sglists()
798 tsgls->dst.nents = tsgls->src.nents; in build_cipher_test_sglists()
801 if (cfg->inplace_mode == INPLACE_TWO_SGLISTS) { in build_cipher_test_sglists()
807 memcpy(tsgls->dst.sgl, tsgls->src.sgl, in build_cipher_test_sglists()
808 tsgls->src.nents * sizeof(tsgls->src.sgl[0])); in build_cipher_test_sglists()
809 memcpy(tsgls->dst.sgl_saved, tsgls->src.sgl, in build_cipher_test_sglists()
810 tsgls->src.nents * sizeof(tsgls->src.sgl[0])); in build_cipher_test_sglists()
811 tsgls->dst.sgl_ptr = tsgls->dst.sgl; in build_cipher_test_sglists()
812 tsgls->dst.nents = tsgls->src.nents; in build_cipher_test_sglists()
816 return build_test_sglist(&tsgls->dst, in build_cipher_test_sglists()
817 cfg->dst_divs[0].proportion_of_total ? in build_cipher_test_sglists()
818 cfg->dst_divs : cfg->src_divs, in build_cipher_test_sglists()
825 * If cfg->key_offset is set, copy the key into a new buffer at that offset,
833 unsigned int key_offset = cfg->key_offset; in prepare_keybuf()
837 if (cfg->key_offset_relative_to_alignmask) in prepare_keybuf()
841 return -ENOMEM; in prepare_keybuf()
852 * In addition, run the setkey function in no-SIMD context if requested.
862 if ((cfg)->nosimd_setkey) \
865 if ((cfg)->nosimd_setkey) \
876 * has been initialized or if they are run on a lockdep-enabled kernel.
892 * This is slightly biased for non-power-of-2 values of 'ceil', but this in prandom_u32_below()
906 return floor + prandom_u32_below(rng, ceil - floor + 1); in prandom_u32_inclusive()
1024 if (div == &divs[max_divs - 1] || prandom_bool(rng)) in generate_random_sgl_divisions()
1030 div->proportion_of_total = this_len; in generate_random_sgl_divisions()
1033 div->offset = prandom_u32_inclusive(rng, in generate_random_sgl_divisions()
1034 PAGE_SIZE - 128, in generate_random_sgl_divisions()
1035 PAGE_SIZE - 1); in generate_random_sgl_divisions()
1037 div->offset = prandom_u32_below(rng, 32); in generate_random_sgl_divisions()
1039 div->offset = prandom_u32_below(rng, PAGE_SIZE); in generate_random_sgl_divisions()
1041 div->offset_relative_to_alignmask = true; in generate_random_sgl_divisions()
1043 div->flush_type = FLUSH_TYPE_NONE; in generate_random_sgl_divisions()
1047 div->flush_type = FLUSH_TYPE_REIMPORT; in generate_random_sgl_divisions()
1050 div->flush_type = FLUSH_TYPE_FLUSH; in generate_random_sgl_divisions()
1055 if (div->flush_type != FLUSH_TYPE_NONE && in generate_random_sgl_divisions()
1058 div->nosimd = true; in generate_random_sgl_divisions()
1060 switch (div->flush_type) { in generate_random_sgl_divisions()
1062 if (div->nosimd) in generate_random_sgl_divisions()
1068 if (div->nosimd) in generate_random_sgl_divisions()
1079 p += scnprintf(p, end - p, "%s%u.%u%%@%s+%u%s", flushtype_str, in generate_random_sgl_divisions()
1081 div->offset_relative_to_alignmask ? in generate_random_sgl_divisions()
1083 div->offset, this_len == remaining ? "" : ", "); in generate_random_sgl_divisions()
1084 remaining -= this_len; in generate_random_sgl_divisions()
1101 cfg->name = name; in generate_random_testvec_config()
1103 p += scnprintf(p, end - p, "random:"); in generate_random_testvec_config()
1108 cfg->inplace_mode = OUT_OF_PLACE; in generate_random_testvec_config()
1111 cfg->inplace_mode = INPLACE_ONE_SGLIST; in generate_random_testvec_config()
1112 p += scnprintf(p, end - p, " inplace_one_sglist"); in generate_random_testvec_config()
1115 cfg->inplace_mode = INPLACE_TWO_SGLISTS; in generate_random_testvec_config()
1116 p += scnprintf(p, end - p, " inplace_two_sglists"); in generate_random_testvec_config()
1121 cfg->req_flags |= CRYPTO_TFM_REQ_MAY_SLEEP; in generate_random_testvec_config()
1122 p += scnprintf(p, end - p, " may_sleep"); in generate_random_testvec_config()
1127 cfg->finalization_type = FINALIZATION_TYPE_FINAL; in generate_random_testvec_config()
1128 p += scnprintf(p, end - p, " use_final"); in generate_random_testvec_config()
1131 cfg->finalization_type = FINALIZATION_TYPE_FINUP; in generate_random_testvec_config()
1132 p += scnprintf(p, end - p, " use_finup"); in generate_random_testvec_config()
1135 cfg->finalization_type = FINALIZATION_TYPE_DIGEST; in generate_random_testvec_config()
1136 p += scnprintf(p, end - p, " use_digest"); in generate_random_testvec_config()
1140 if (!(cfg->req_flags & CRYPTO_TFM_REQ_MAY_SLEEP)) { in generate_random_testvec_config()
1142 cfg->nosimd = true; in generate_random_testvec_config()
1143 p += scnprintf(p, end - p, " nosimd"); in generate_random_testvec_config()
1146 cfg->nosimd_setkey = true; in generate_random_testvec_config()
1147 p += scnprintf(p, end - p, " nosimd_setkey"); in generate_random_testvec_config()
1151 p += scnprintf(p, end - p, " src_divs=["); in generate_random_testvec_config()
1152 p = generate_random_sgl_divisions(rng, cfg->src_divs, in generate_random_testvec_config()
1153 ARRAY_SIZE(cfg->src_divs), p, end, in generate_random_testvec_config()
1154 (cfg->finalization_type != in generate_random_testvec_config()
1156 cfg->req_flags); in generate_random_testvec_config()
1157 p += scnprintf(p, end - p, "]"); in generate_random_testvec_config()
1159 if (cfg->inplace_mode == OUT_OF_PLACE && prandom_bool(rng)) { in generate_random_testvec_config()
1160 p += scnprintf(p, end - p, " dst_divs=["); in generate_random_testvec_config()
1161 p = generate_random_sgl_divisions(rng, cfg->dst_divs, in generate_random_testvec_config()
1162 ARRAY_SIZE(cfg->dst_divs), in generate_random_testvec_config()
1164 cfg->req_flags); in generate_random_testvec_config()
1165 p += scnprintf(p, end - p, "]"); in generate_random_testvec_config()
1169 cfg->iv_offset = prandom_u32_inclusive(rng, 1, in generate_random_testvec_config()
1171 p += scnprintf(p, end - p, " iv_offset=%u", cfg->iv_offset); in generate_random_testvec_config()
1175 cfg->key_offset = prandom_u32_inclusive(rng, 1, in generate_random_testvec_config()
1177 p += scnprintf(p, end - p, " key_offset=%u", cfg->key_offset); in generate_random_testvec_config()
1202 * "-generic" to every part of the name that is not a template name. Examples:
1204 * aes => aes-generic
1205 * cbc(aes) => cbc(aes-generic)
1206 * cts(cbc(aes)) => cts(cbc(aes-generic))
1207 * rfc7539(chacha20,poly1305) => rfc7539(chacha20-generic,poly1305-generic)
1209 * Return: 0 on success, or -ENAMETOOLONG if the generic name would be too long
1229 memcpy(out, "-generic", 8); in build_generic_driver_name()
1238 return -ENAMETOOLONG; in build_generic_driver_name()
1250 kv.iov_base = (void *)vec->plaintext; in build_hash_sglist()
1251 kv.iov_len = vec->psize; in build_hash_sglist()
1252 iov_iter_kvec(&input, ITER_SOURCE, &kv, 1, vec->psize); in build_hash_sglist()
1253 return build_test_sglist(tsgl, cfg->src_divs, alignmask, vec->psize, in build_hash_sglist()
1264 if (memcmp(result, vec->digest, digestsize) != 0) { in check_hash_result()
1266 type, driver, vec_name, cfg->name); in check_hash_result()
1267 return -EINVAL; in check_hash_result()
1271 type, driver, vec_name, cfg->name); in check_hash_result()
1272 return -EOVERFLOW; in check_hash_result()
1283 driver, op, err, vec_name, cfg->name); in check_shash_op()
1295 struct crypto_shash *tfm = desc->tfm; in test_shash_vec_cfg()
1305 if (vec->ksize) { in test_shash_vec_cfg()
1306 err = do_setkey(crypto_shash_setkey, tfm, vec->key, vec->ksize, in test_shash_vec_cfg()
1309 if (err == vec->setkey_error) in test_shash_vec_cfg()
1312 driver, vec_name, vec->setkey_error, err, in test_shash_vec_cfg()
1316 if (vec->setkey_error) { in test_shash_vec_cfg()
1318 driver, vec_name, vec->setkey_error); in test_shash_vec_cfg()
1319 return -EINVAL; in test_shash_vec_cfg()
1327 driver, vec_name, cfg->name); in test_shash_vec_cfg()
1333 testmgr_poison(desc->__ctx, crypto_shash_descsize(tfm)); in test_shash_vec_cfg()
1336 if (cfg->finalization_type == FINALIZATION_TYPE_DIGEST || in test_shash_vec_cfg()
1337 vec->digest_error) { in test_shash_vec_cfg()
1339 if (tsgl->nents != 1) in test_shash_vec_cfg()
1341 if (cfg->nosimd) in test_shash_vec_cfg()
1343 err = crypto_shash_digest(desc, sg_virt(&tsgl->sgl[0]), in test_shash_vec_cfg()
1344 tsgl->sgl[0].length, result); in test_shash_vec_cfg()
1345 if (cfg->nosimd) in test_shash_vec_cfg()
1348 if (err == vec->digest_error) in test_shash_vec_cfg()
1351 driver, vec_name, vec->digest_error, err, in test_shash_vec_cfg()
1352 cfg->name); in test_shash_vec_cfg()
1355 if (vec->digest_error) { in test_shash_vec_cfg()
1357 driver, vec_name, vec->digest_error, cfg->name); in test_shash_vec_cfg()
1358 return -EINVAL; in test_shash_vec_cfg()
1365 if (cfg->nosimd) in test_shash_vec_cfg()
1368 if (cfg->nosimd) in test_shash_vec_cfg()
1374 for (i = 0; i < tsgl->nents; i++) { in test_shash_vec_cfg()
1375 if (i + 1 == tsgl->nents && in test_shash_vec_cfg()
1376 cfg->finalization_type == FINALIZATION_TYPE_FINUP) { in test_shash_vec_cfg()
1377 if (divs[i]->nosimd) in test_shash_vec_cfg()
1379 err = crypto_shash_finup(desc, sg_virt(&tsgl->sgl[i]), in test_shash_vec_cfg()
1380 tsgl->sgl[i].length, result); in test_shash_vec_cfg()
1381 if (divs[i]->nosimd) in test_shash_vec_cfg()
1389 if (divs[i]->nosimd) in test_shash_vec_cfg()
1391 err = crypto_shash_update(desc, sg_virt(&tsgl->sgl[i]), in test_shash_vec_cfg()
1392 tsgl->sgl[i].length); in test_shash_vec_cfg()
1393 if (divs[i]->nosimd) in test_shash_vec_cfg()
1398 if (divs[i]->flush_type == FLUSH_TYPE_REIMPORT) { in test_shash_vec_cfg()
1399 /* Test ->export() and ->import() */ in test_shash_vec_cfg()
1410 driver, vec_name, cfg->name); in test_shash_vec_cfg()
1411 return -EOVERFLOW; in test_shash_vec_cfg()
1413 testmgr_poison(desc->__ctx, crypto_shash_descsize(tfm)); in test_shash_vec_cfg()
1422 if (cfg->nosimd) in test_shash_vec_cfg()
1425 if (cfg->nosimd) in test_shash_vec_cfg()
1459 driver, op, err, vec_name, cfg->name); in check_nonfinal_ahash_op()
1464 driver, op, vec_name, cfg->name); in check_nonfinal_ahash_op()
1465 return -EINVAL; in check_nonfinal_ahash_op()
1482 const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; in test_ahash_vec_cfg()
1492 if (vec->ksize) { in test_ahash_vec_cfg()
1493 err = do_setkey(crypto_ahash_setkey, tfm, vec->key, vec->ksize, in test_ahash_vec_cfg()
1496 if (err == vec->setkey_error) in test_ahash_vec_cfg()
1499 driver, vec_name, vec->setkey_error, err, in test_ahash_vec_cfg()
1503 if (vec->setkey_error) { in test_ahash_vec_cfg()
1505 driver, vec_name, vec->setkey_error); in test_ahash_vec_cfg()
1506 return -EINVAL; in test_ahash_vec_cfg()
1514 driver, vec_name, cfg->name); in test_ahash_vec_cfg()
1520 testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm)); in test_ahash_vec_cfg()
1523 if (cfg->finalization_type == FINALIZATION_TYPE_DIGEST || in test_ahash_vec_cfg()
1524 vec->digest_error) { in test_ahash_vec_cfg()
1528 ahash_request_set_crypt(req, tsgl->sgl, result, vec->psize); in test_ahash_vec_cfg()
1529 err = do_ahash_op(crypto_ahash_digest, req, &wait, cfg->nosimd); in test_ahash_vec_cfg()
1531 if (err == vec->digest_error) in test_ahash_vec_cfg()
1534 driver, vec_name, vec->digest_error, err, in test_ahash_vec_cfg()
1535 cfg->name); in test_ahash_vec_cfg()
1538 if (vec->digest_error) { in test_ahash_vec_cfg()
1540 driver, vec_name, vec->digest_error, cfg->name); in test_ahash_vec_cfg()
1541 return -EINVAL; in test_ahash_vec_cfg()
1550 err = do_ahash_op(crypto_ahash_init, req, &wait, cfg->nosimd); in test_ahash_vec_cfg()
1558 for (i = 0; i < tsgl->nents; i++) { in test_ahash_vec_cfg()
1559 if (divs[i]->flush_type != FLUSH_TYPE_NONE && in test_ahash_vec_cfg()
1567 divs[i]->nosimd); in test_ahash_vec_cfg()
1576 if (divs[i]->flush_type == FLUSH_TYPE_REIMPORT) { in test_ahash_vec_cfg()
1577 /* Test ->export() and ->import() */ in test_ahash_vec_cfg()
1589 driver, vec_name, cfg->name); in test_ahash_vec_cfg()
1590 return -EOVERFLOW; in test_ahash_vec_cfg()
1593 testmgr_poison(req->__ctx, crypto_ahash_reqsize(tfm)); in test_ahash_vec_cfg()
1602 pending_sgl = &tsgl->sgl[i]; in test_ahash_vec_cfg()
1603 pending_len += tsgl->sgl[i].length; in test_ahash_vec_cfg()
1608 if (cfg->finalization_type == FINALIZATION_TYPE_FINAL) { in test_ahash_vec_cfg()
1610 err = do_ahash_op(crypto_ahash_update, req, &wait, cfg->nosimd); in test_ahash_vec_cfg()
1615 err = do_ahash_op(crypto_ahash_final, req, &wait, cfg->nosimd); in test_ahash_vec_cfg()
1618 driver, err, vec_name, cfg->name); in test_ahash_vec_cfg()
1623 err = do_ahash_op(crypto_ahash_finup, req, &wait, cfg->nosimd); in test_ahash_vec_cfg()
1626 driver, err, vec_name, cfg->name); in test_ahash_vec_cfg()
1712 vec->psize = generate_random_length(rng, maxdatasize); in generate_random_hash_testvec()
1713 generate_random_bytes(rng, (u8 *)vec->plaintext, vec->psize); in generate_random_hash_testvec()
1719 vec->setkey_error = 0; in generate_random_hash_testvec()
1720 vec->ksize = 0; in generate_random_hash_testvec()
1722 vec->ksize = maxkeysize; in generate_random_hash_testvec()
1724 vec->ksize = prandom_u32_inclusive(rng, 1, maxkeysize); in generate_random_hash_testvec()
1725 generate_random_bytes(rng, (u8 *)vec->key, vec->ksize); in generate_random_hash_testvec()
1727 vec->setkey_error = crypto_ahash_setkey( in generate_random_hash_testvec()
1728 crypto_ahash_reqtfm(req), vec->key, vec->ksize); in generate_random_hash_testvec()
1730 if (vec->setkey_error) in generate_random_hash_testvec()
1735 vec->digest_error = crypto_hash_digest( in generate_random_hash_testvec()
1736 crypto_ahash_reqtfm(req), vec->plaintext, in generate_random_hash_testvec()
1737 vec->psize, (u8 *)vec->digest); in generate_random_hash_testvec()
1740 vec->psize, vec->ksize); in generate_random_hash_testvec()
1757 const unsigned int maxdatasize = (2 * PAGE_SIZE) - TESTMGR_POISON_LEN; in test_hash_vs_generic_impl()
1758 const char *algname = crypto_hash_alg_common(tfm)->base.cra_name; in test_hash_vs_generic_impl()
1789 if (err == -ENOENT) { in test_hash_vs_generic_impl()
1801 err = -ENOMEM; in test_hash_vs_generic_impl()
1807 err = -ENOMEM; in test_hash_vs_generic_impl()
1817 err = -EINVAL; in test_hash_vs_generic_impl()
1824 err = -EINVAL; in test_hash_vs_generic_impl()
1837 err = -ENOMEM; in test_hash_vs_generic_impl()
1874 if (PTR_ERR(tfm) == -ENOENT || PTR_ERR(tfm) == -EEXIST) { in alloc_shash()
1889 return -ENOMEM; in alloc_shash()
1891 desc->tfm = tfm; in alloc_shash()
1920 if (PTR_ERR(atfm) == -ENOENT) in __alg_test_hash()
1932 err = -ENOMEM; in __alg_test_hash()
1950 err = -ENOMEM; in __alg_test_hash()
1961 err = -ENOMEM; in __alg_test_hash()
1992 const struct hash_testvec *template = desc->suite.hash.vecs; in alg_test_hash()
1993 unsigned int tcount = desc->suite.hash.count; in alg_test_hash()
2011 "unkeyed ones must come first\n", desc->alg); in alg_test_hash()
2012 return -EINVAL; in alg_test_hash()
2021 desc->generic_driver, maxkeysize); in alg_test_hash()
2027 desc->generic_driver, maxkeysize); in alg_test_hash()
2041 const unsigned int authsize = vec->clen - vec->plen; in test_aead_vec_cfg()
2043 const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; in test_aead_vec_cfg()
2048 cfg->iv_offset + in test_aead_vec_cfg()
2049 (cfg->iv_offset_relative_to_alignmask ? alignmask : 0); in test_aead_vec_cfg()
2054 if (vec->wk) in test_aead_vec_cfg()
2059 err = do_setkey(crypto_aead_setkey, tfm, vec->key, vec->klen, in test_aead_vec_cfg()
2061 if (err && err != vec->setkey_error) { in test_aead_vec_cfg()
2063 driver, vec_name, vec->setkey_error, err, in test_aead_vec_cfg()
2067 if (!err && vec->setkey_error) { in test_aead_vec_cfg()
2069 driver, vec_name, vec->setkey_error); in test_aead_vec_cfg()
2070 return -EINVAL; in test_aead_vec_cfg()
2075 if (err && err != vec->setauthsize_error) { in test_aead_vec_cfg()
2077 driver, vec_name, vec->setauthsize_error, err); in test_aead_vec_cfg()
2080 if (!err && vec->setauthsize_error) { in test_aead_vec_cfg()
2082 driver, vec_name, vec->setauthsize_error); in test_aead_vec_cfg()
2083 return -EINVAL; in test_aead_vec_cfg()
2086 if (vec->setkey_error || vec->setauthsize_error) in test_aead_vec_cfg()
2091 return -EINVAL; in test_aead_vec_cfg()
2092 if (vec->iv) in test_aead_vec_cfg()
2093 memcpy(iv, vec->iv, ivsize); in test_aead_vec_cfg()
2098 input[0].iov_base = (void *)vec->assoc; in test_aead_vec_cfg()
2099 input[0].iov_len = vec->alen; in test_aead_vec_cfg()
2100 input[1].iov_base = enc ? (void *)vec->ptext : (void *)vec->ctext; in test_aead_vec_cfg()
2101 input[1].iov_len = enc ? vec->plen : vec->clen; in test_aead_vec_cfg()
2103 vec->alen + (enc ? vec->plen : in test_aead_vec_cfg()
2104 vec->clen), in test_aead_vec_cfg()
2105 vec->alen + (enc ? vec->clen : in test_aead_vec_cfg()
2106 vec->plen), in test_aead_vec_cfg()
2110 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2115 testmgr_poison(req->__ctx, crypto_aead_reqsize(tfm)); in test_aead_vec_cfg()
2117 aead_request_set_crypt(req, tsgls->src.sgl_ptr, tsgls->dst.sgl_ptr, in test_aead_vec_cfg()
2118 enc ? vec->plen : vec->clen, iv); in test_aead_vec_cfg()
2119 aead_request_set_ad(req, vec->alen); in test_aead_vec_cfg()
2120 if (cfg->nosimd) in test_aead_vec_cfg()
2123 if (cfg->nosimd) in test_aead_vec_cfg()
2128 if (req->cryptlen != (enc ? vec->plen : vec->clen) || in test_aead_vec_cfg()
2129 req->assoclen != vec->alen || in test_aead_vec_cfg()
2130 req->iv != iv || in test_aead_vec_cfg()
2131 req->src != tsgls->src.sgl_ptr || in test_aead_vec_cfg()
2132 req->dst != tsgls->dst.sgl_ptr || in test_aead_vec_cfg()
2134 req->base.complete != crypto_req_done || in test_aead_vec_cfg()
2135 req->base.flags != req_flags || in test_aead_vec_cfg()
2136 req->base.data != &wait) { in test_aead_vec_cfg()
2138 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2139 if (req->cryptlen != (enc ? vec->plen : vec->clen)) in test_aead_vec_cfg()
2140 pr_err("alg: aead: changed 'req->cryptlen'\n"); in test_aead_vec_cfg()
2141 if (req->assoclen != vec->alen) in test_aead_vec_cfg()
2142 pr_err("alg: aead: changed 'req->assoclen'\n"); in test_aead_vec_cfg()
2143 if (req->iv != iv) in test_aead_vec_cfg()
2144 pr_err("alg: aead: changed 'req->iv'\n"); in test_aead_vec_cfg()
2145 if (req->src != tsgls->src.sgl_ptr) in test_aead_vec_cfg()
2146 pr_err("alg: aead: changed 'req->src'\n"); in test_aead_vec_cfg()
2147 if (req->dst != tsgls->dst.sgl_ptr) in test_aead_vec_cfg()
2148 pr_err("alg: aead: changed 'req->dst'\n"); in test_aead_vec_cfg()
2150 pr_err("alg: aead: changed 'req->base.tfm'\n"); in test_aead_vec_cfg()
2151 if (req->base.complete != crypto_req_done) in test_aead_vec_cfg()
2152 pr_err("alg: aead: changed 'req->base.complete'\n"); in test_aead_vec_cfg()
2153 if (req->base.flags != req_flags) in test_aead_vec_cfg()
2154 pr_err("alg: aead: changed 'req->base.flags'\n"); in test_aead_vec_cfg()
2155 if (req->base.data != &wait) in test_aead_vec_cfg()
2156 pr_err("alg: aead: changed 'req->base.data'\n"); in test_aead_vec_cfg()
2157 return -EINVAL; in test_aead_vec_cfg()
2159 if (is_test_sglist_corrupted(&tsgls->src)) { in test_aead_vec_cfg()
2161 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2162 return -EINVAL; in test_aead_vec_cfg()
2164 if (tsgls->dst.sgl_ptr != tsgls->src.sgl && in test_aead_vec_cfg()
2165 is_test_sglist_corrupted(&tsgls->dst)) { in test_aead_vec_cfg()
2167 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2168 return -EINVAL; in test_aead_vec_cfg()
2172 if ((err == 0 && vec->novrfy) || in test_aead_vec_cfg()
2173 (err != vec->crypt_error && !(err == -EBADMSG && vec->novrfy))) { in test_aead_vec_cfg()
2176 if (vec->novrfy && in test_aead_vec_cfg()
2177 vec->crypt_error != 0 && vec->crypt_error != -EBADMSG) in test_aead_vec_cfg()
2178 sprintf(expected_error, "-EBADMSG or %d", in test_aead_vec_cfg()
2179 vec->crypt_error); in test_aead_vec_cfg()
2180 else if (vec->novrfy) in test_aead_vec_cfg()
2181 sprintf(expected_error, "-EBADMSG"); in test_aead_vec_cfg()
2183 sprintf(expected_error, "%d", vec->crypt_error); in test_aead_vec_cfg()
2187 cfg->name); in test_aead_vec_cfg()
2191 driver, op, vec_name, expected_error, cfg->name); in test_aead_vec_cfg()
2192 return -EINVAL; in test_aead_vec_cfg()
2198 err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext, in test_aead_vec_cfg()
2199 enc ? vec->clen : vec->plen, in test_aead_vec_cfg()
2200 vec->alen, in test_aead_vec_cfg()
2201 enc || cfg->inplace_mode == OUT_OF_PLACE); in test_aead_vec_cfg()
2202 if (err == -EOVERFLOW) { in test_aead_vec_cfg()
2204 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2209 driver, op, vec_name, cfg->name); in test_aead_vec_cfg()
2224 if (enc && vec->novrfy) in test_aead_vec()
2282 const unsigned int authsize = vec->clen - vec->plen; in mutate_aead_message()
2284 if (prandom_bool(rng) && vec->alen > aad_tail_size) { in mutate_aead_message()
2286 flip_random_bit(rng, (u8 *)vec->assoc, in mutate_aead_message()
2287 vec->alen - aad_tail_size); in mutate_aead_message()
2293 flip_random_bit(rng, (u8 *)vec->ctext + vec->plen, authsize); in mutate_aead_message()
2296 flip_random_bit(rng, (u8 *)vec->ctext, vec->clen); in mutate_aead_message()
2315 const unsigned int authsize = vec->clen - vec->plen; in generate_aead_message()
2321 generate_random_bytes(rng, (u8 *)vec->assoc, vec->alen); in generate_aead_message()
2322 if (suite->aad_iv && vec->alen >= ivsize) in generate_aead_message()
2323 /* Avoid implementation-defined behavior. */ in generate_aead_message()
2324 memcpy((u8 *)vec->assoc + vec->alen - ivsize, vec->iv, ivsize); in generate_aead_message()
2328 generate_random_bytes(rng, (u8 *)vec->ctext, vec->clen); in generate_aead_message()
2337 if (vec->alen) in generate_aead_message()
2338 sg_set_buf(&src[i++], vec->assoc, vec->alen); in generate_aead_message()
2339 if (vec->plen) { in generate_aead_message()
2340 generate_random_bytes(rng, (u8 *)vec->ptext, vec->plen); in generate_aead_message()
2341 sg_set_buf(&src[i++], vec->ptext, vec->plen); in generate_aead_message()
2343 sg_init_one(&dst, vec->ctext, vec->alen + vec->clen); in generate_aead_message()
2344 memcpy(iv, vec->iv, ivsize); in generate_aead_message()
2346 aead_request_set_crypt(req, src, &dst, vec->plen, iv); in generate_aead_message()
2347 aead_request_set_ad(req, vec->alen); in generate_aead_message()
2348 vec->crypt_error = crypto_wait_req(crypto_aead_encrypt(req), in generate_aead_message()
2351 if (vec->crypt_error != 0) in generate_aead_message()
2353 memmove((u8 *)vec->ctext, vec->ctext + vec->alen, vec->clen); in generate_aead_message()
2360 mutate_aead_message(rng, vec, suite->aad_iv, ivsize); in generate_aead_message()
2362 vec->novrfy = 1; in generate_aead_message()
2363 if (suite->einval_allowed) in generate_aead_message()
2364 vec->crypt_error = -EINVAL; in generate_aead_message()
2372 * test vectors (i.e. vectors with 'vec->novrfy=1') more often.
2390 vec->klen = maxkeysize; in generate_random_aead_testvec()
2392 vec->klen = prandom_u32_below(rng, maxkeysize + 1); in generate_random_aead_testvec()
2393 generate_random_bytes(rng, (u8 *)vec->key, vec->klen); in generate_random_aead_testvec()
2394 vec->setkey_error = crypto_aead_setkey(tfm, vec->key, vec->klen); in generate_random_aead_testvec()
2397 generate_random_bytes(rng, (u8 *)vec->iv, ivsize); in generate_random_aead_testvec()
2407 maxdatasize -= authsize; in generate_random_aead_testvec()
2408 vec->setauthsize_error = crypto_aead_setauthsize(tfm, authsize); in generate_random_aead_testvec()
2413 vec->alen = 0; in generate_random_aead_testvec()
2415 vec->alen = generate_random_length(rng, total_len); in generate_random_aead_testvec()
2416 vec->plen = total_len - vec->alen; in generate_random_aead_testvec()
2417 vec->clen = vec->plen + authsize; in generate_random_aead_testvec()
2423 vec->novrfy = 0; in generate_random_aead_testvec()
2424 vec->crypt_error = 0; in generate_random_aead_testvec()
2425 if (vec->setkey_error == 0 && vec->setauthsize_error == 0) in generate_random_aead_testvec()
2429 vec->alen, vec->plen, authsize, vec->klen, vec->novrfy); in generate_random_aead_testvec()
2437 generate_random_aead_testvec(&ctx->rng, ctx->req, &ctx->vec, in try_to_generate_inauthentic_testvec()
2438 &ctx->test_desc->suite.aead, in try_to_generate_inauthentic_testvec()
2439 ctx->maxkeysize, ctx->maxdatasize, in try_to_generate_inauthentic_testvec()
2440 ctx->vec_name, in try_to_generate_inauthentic_testvec()
2441 sizeof(ctx->vec_name), true); in try_to_generate_inauthentic_testvec()
2442 if (ctx->vec.novrfy) in try_to_generate_inauthentic_testvec()
2467 if (ctx->vec.novrfy) { in test_aead_inauthentic_inputs()
2468 generate_random_testvec_config(&ctx->rng, &ctx->cfg, in test_aead_inauthentic_inputs()
2469 ctx->cfgname, in test_aead_inauthentic_inputs()
2470 sizeof(ctx->cfgname)); in test_aead_inauthentic_inputs()
2471 err = test_aead_vec_cfg(DECRYPT, &ctx->vec, in test_aead_inauthentic_inputs()
2472 ctx->vec_name, &ctx->cfg, in test_aead_inauthentic_inputs()
2473 ctx->req, ctx->tsgls); in test_aead_inauthentic_inputs()
2488 struct crypto_aead *tfm = ctx->tfm; in test_aead_vs_generic_impl()
2489 const char *algname = crypto_aead_alg(tfm)->base.cra_name; in test_aead_vs_generic_impl()
2491 const char *generic_driver = ctx->test_desc->generic_driver; in test_aead_vs_generic_impl()
2511 if (err == -ENOENT) { in test_aead_vs_generic_impl()
2523 err = -ENOMEM; in test_aead_vs_generic_impl()
2534 err = -EINVAL; in test_aead_vs_generic_impl()
2542 err = -EINVAL; in test_aead_vs_generic_impl()
2550 err = -EINVAL; in test_aead_vs_generic_impl()
2559 generate_random_aead_testvec(&ctx->rng, generic_req, &ctx->vec, in test_aead_vs_generic_impl()
2560 &ctx->test_desc->suite.aead, in test_aead_vs_generic_impl()
2561 ctx->maxkeysize, ctx->maxdatasize, in test_aead_vs_generic_impl()
2562 ctx->vec_name, in test_aead_vs_generic_impl()
2563 sizeof(ctx->vec_name), false); in test_aead_vs_generic_impl()
2564 generate_random_testvec_config(&ctx->rng, &ctx->cfg, in test_aead_vs_generic_impl()
2565 ctx->cfgname, in test_aead_vs_generic_impl()
2566 sizeof(ctx->cfgname)); in test_aead_vs_generic_impl()
2567 if (!ctx->vec.novrfy) { in test_aead_vs_generic_impl()
2568 err = test_aead_vec_cfg(ENCRYPT, &ctx->vec, in test_aead_vs_generic_impl()
2569 ctx->vec_name, &ctx->cfg, in test_aead_vs_generic_impl()
2570 ctx->req, ctx->tsgls); in test_aead_vs_generic_impl()
2574 if (ctx->vec.crypt_error == 0 || ctx->vec.novrfy) { in test_aead_vs_generic_impl()
2575 err = test_aead_vec_cfg(DECRYPT, &ctx->vec, in test_aead_vs_generic_impl()
2576 ctx->vec_name, &ctx->cfg, in test_aead_vs_generic_impl()
2577 ctx->req, ctx->tsgls); in test_aead_vs_generic_impl()
2603 return -ENOMEM; in test_aead_slow()
2604 init_rnd_state(&ctx->rng); in test_aead_slow()
2605 ctx->req = req; in test_aead_slow()
2606 ctx->tfm = crypto_aead_reqtfm(req); in test_aead_slow()
2607 ctx->test_desc = test_desc; in test_aead_slow()
2608 ctx->tsgls = tsgls; in test_aead_slow()
2609 ctx->maxdatasize = (2 * PAGE_SIZE) - TESTMGR_POISON_LEN; in test_aead_slow()
2610 ctx->maxkeysize = 0; in test_aead_slow()
2611 for (i = 0; i < test_desc->suite.aead.count; i++) in test_aead_slow()
2612 ctx->maxkeysize = max_t(unsigned int, ctx->maxkeysize, in test_aead_slow()
2613 test_desc->suite.aead.vecs[i].klen); in test_aead_slow()
2615 ctx->vec.key = kmalloc(ctx->maxkeysize, GFP_KERNEL); in test_aead_slow()
2616 ctx->vec.iv = kmalloc(crypto_aead_ivsize(ctx->tfm), GFP_KERNEL); in test_aead_slow()
2617 ctx->vec.assoc = kmalloc(ctx->maxdatasize, GFP_KERNEL); in test_aead_slow()
2618 ctx->vec.ptext = kmalloc(ctx->maxdatasize, GFP_KERNEL); in test_aead_slow()
2619 ctx->vec.ctext = kmalloc(ctx->maxdatasize, GFP_KERNEL); in test_aead_slow()
2620 if (!ctx->vec.key || !ctx->vec.iv || !ctx->vec.assoc || in test_aead_slow()
2621 !ctx->vec.ptext || !ctx->vec.ctext) { in test_aead_slow()
2622 err = -ENOMEM; in test_aead_slow()
2632 kfree(ctx->vec.key); in test_aead_slow()
2633 kfree(ctx->vec.iv); in test_aead_slow()
2634 kfree(ctx->vec.assoc); in test_aead_slow()
2635 kfree(ctx->vec.ptext); in test_aead_slow()
2636 kfree(ctx->vec.ctext); in test_aead_slow()
2648 for (i = 0; i < suite->count; i++) { in test_aead()
2649 err = test_aead_vec(enc, &suite->vecs[i], i, req, tsgls); in test_aead()
2660 const struct aead_test_suite *suite = &desc->suite.aead; in alg_test_aead()
2666 if (suite->count <= 0) { in alg_test_aead()
2668 return -EINVAL; in alg_test_aead()
2673 if (PTR_ERR(tfm) == -ENOENT) in alg_test_aead()
2685 err = -ENOMEM; in alg_test_aead()
2693 err = -ENOMEM; in alg_test_aead()
2724 int ret = -ENOMEM; in test_cipher()
2744 ret = -EINVAL; in test_cipher()
2768 ret = -EINVAL; in test_cipher()
2787 ret = -EINVAL; in test_cipher()
2810 const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; in test_skcipher_vec_cfg()
2815 cfg->iv_offset + in test_skcipher_vec_cfg()
2816 (cfg->iv_offset_relative_to_alignmask ? alignmask : 0); in test_skcipher_vec_cfg()
2821 if (vec->wk) in test_skcipher_vec_cfg()
2826 err = do_setkey(crypto_skcipher_setkey, tfm, vec->key, vec->klen, in test_skcipher_vec_cfg()
2829 if (err == vec->setkey_error) in test_skcipher_vec_cfg()
2832 driver, vec_name, vec->setkey_error, err, in test_skcipher_vec_cfg()
2836 if (vec->setkey_error) { in test_skcipher_vec_cfg()
2838 driver, vec_name, vec->setkey_error); in test_skcipher_vec_cfg()
2839 return -EINVAL; in test_skcipher_vec_cfg()
2845 return -EINVAL; in test_skcipher_vec_cfg()
2846 if (vec->iv) in test_skcipher_vec_cfg()
2847 memcpy(iv, vec->iv, ivsize); in test_skcipher_vec_cfg()
2855 input.iov_base = enc ? (void *)vec->ptext : (void *)vec->ctext; in test_skcipher_vec_cfg()
2856 input.iov_len = vec->len; in test_skcipher_vec_cfg()
2858 vec->len, vec->len, &input, 1); in test_skcipher_vec_cfg()
2861 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2866 testmgr_poison(req->__ctx, crypto_skcipher_reqsize(tfm)); in test_skcipher_vec_cfg()
2868 skcipher_request_set_crypt(req, tsgls->src.sgl_ptr, tsgls->dst.sgl_ptr, in test_skcipher_vec_cfg()
2869 vec->len, iv); in test_skcipher_vec_cfg()
2870 if (cfg->nosimd) in test_skcipher_vec_cfg()
2873 if (cfg->nosimd) in test_skcipher_vec_cfg()
2878 if (req->cryptlen != vec->len || in test_skcipher_vec_cfg()
2879 req->iv != iv || in test_skcipher_vec_cfg()
2880 req->src != tsgls->src.sgl_ptr || in test_skcipher_vec_cfg()
2881 req->dst != tsgls->dst.sgl_ptr || in test_skcipher_vec_cfg()
2883 req->base.complete != crypto_req_done || in test_skcipher_vec_cfg()
2884 req->base.flags != req_flags || in test_skcipher_vec_cfg()
2885 req->base.data != &wait) { in test_skcipher_vec_cfg()
2887 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2888 if (req->cryptlen != vec->len) in test_skcipher_vec_cfg()
2889 pr_err("alg: skcipher: changed 'req->cryptlen'\n"); in test_skcipher_vec_cfg()
2890 if (req->iv != iv) in test_skcipher_vec_cfg()
2891 pr_err("alg: skcipher: changed 'req->iv'\n"); in test_skcipher_vec_cfg()
2892 if (req->src != tsgls->src.sgl_ptr) in test_skcipher_vec_cfg()
2893 pr_err("alg: skcipher: changed 'req->src'\n"); in test_skcipher_vec_cfg()
2894 if (req->dst != tsgls->dst.sgl_ptr) in test_skcipher_vec_cfg()
2895 pr_err("alg: skcipher: changed 'req->dst'\n"); in test_skcipher_vec_cfg()
2897 pr_err("alg: skcipher: changed 'req->base.tfm'\n"); in test_skcipher_vec_cfg()
2898 if (req->base.complete != crypto_req_done) in test_skcipher_vec_cfg()
2899 pr_err("alg: skcipher: changed 'req->base.complete'\n"); in test_skcipher_vec_cfg()
2900 if (req->base.flags != req_flags) in test_skcipher_vec_cfg()
2901 pr_err("alg: skcipher: changed 'req->base.flags'\n"); in test_skcipher_vec_cfg()
2902 if (req->base.data != &wait) in test_skcipher_vec_cfg()
2903 pr_err("alg: skcipher: changed 'req->base.data'\n"); in test_skcipher_vec_cfg()
2904 return -EINVAL; in test_skcipher_vec_cfg()
2906 if (is_test_sglist_corrupted(&tsgls->src)) { in test_skcipher_vec_cfg()
2908 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2909 return -EINVAL; in test_skcipher_vec_cfg()
2911 if (tsgls->dst.sgl_ptr != tsgls->src.sgl && in test_skcipher_vec_cfg()
2912 is_test_sglist_corrupted(&tsgls->dst)) { in test_skcipher_vec_cfg()
2914 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2915 return -EINVAL; in test_skcipher_vec_cfg()
2920 if (err == vec->crypt_error) in test_skcipher_vec_cfg()
2923 driver, op, vec_name, vec->crypt_error, err, cfg->name); in test_skcipher_vec_cfg()
2926 if (vec->crypt_error) { in test_skcipher_vec_cfg()
2928 driver, op, vec_name, vec->crypt_error, cfg->name); in test_skcipher_vec_cfg()
2929 return -EINVAL; in test_skcipher_vec_cfg()
2933 err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext, in test_skcipher_vec_cfg()
2934 vec->len, 0, true); in test_skcipher_vec_cfg()
2935 if (err == -EOVERFLOW) { in test_skcipher_vec_cfg()
2937 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2942 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2947 if (vec->iv_out && memcmp(iv, vec->iv_out, ivsize) != 0) { in test_skcipher_vec_cfg()
2949 driver, op, vec_name, cfg->name); in test_skcipher_vec_cfg()
2951 return -EINVAL; in test_skcipher_vec_cfg()
2966 if (fips_enabled && vec->fips_skip) in test_skcipher_vec()
3017 vec->klen = maxkeysize; in generate_random_cipher_testvec()
3019 vec->klen = prandom_u32_below(rng, maxkeysize + 1); in generate_random_cipher_testvec()
3020 generate_random_bytes(rng, (u8 *)vec->key, vec->klen); in generate_random_cipher_testvec()
3021 vec->setkey_error = crypto_skcipher_setkey(tfm, vec->key, vec->klen); in generate_random_cipher_testvec()
3024 generate_random_bytes(rng, (u8 *)vec->iv, ivsize); in generate_random_cipher_testvec()
3027 vec->len = generate_random_length(rng, maxdatasize); in generate_random_cipher_testvec()
3028 generate_random_bytes(rng, (u8 *)vec->ptext, vec->len); in generate_random_cipher_testvec()
3031 if (vec->setkey_error) in generate_random_cipher_testvec()
3035 sg_init_one(&src, vec->ptext, vec->len); in generate_random_cipher_testvec()
3036 sg_init_one(&dst, vec->ctext, vec->len); in generate_random_cipher_testvec()
3037 memcpy(iv, vec->iv, ivsize); in generate_random_cipher_testvec()
3039 skcipher_request_set_crypt(req, &src, &dst, vec->len, iv); in generate_random_cipher_testvec()
3040 vec->crypt_error = crypto_wait_req(crypto_skcipher_encrypt(req), &wait); in generate_random_cipher_testvec()
3041 if (vec->crypt_error != 0) { in generate_random_cipher_testvec()
3045 * We'll test for this. But to keep the API usage well-defined, in generate_random_cipher_testvec()
3048 memset((u8 *)vec->ctext, 0, vec->len); in generate_random_cipher_testvec()
3052 vec->len, vec->klen); in generate_random_cipher_testvec()
3067 const unsigned int maxdatasize = (2 * PAGE_SIZE) - TESTMGR_POISON_LEN; in test_skcipher_vs_generic_impl()
3068 const char *algname = crypto_skcipher_alg(tfm)->base.cra_name; in test_skcipher_vs_generic_impl()
3099 if (err == -ENOENT) { in test_skcipher_vs_generic_impl()
3111 err = -ENOMEM; in test_skcipher_vs_generic_impl()
3117 err = -ENOMEM; in test_skcipher_vs_generic_impl()
3128 err = -EINVAL; in test_skcipher_vs_generic_impl()
3136 err = -EINVAL; in test_skcipher_vs_generic_impl()
3143 err = -EINVAL; in test_skcipher_vs_generic_impl()
3151 err = -EINVAL; in test_skcipher_vs_generic_impl()
3165 err = -ENOMEM; in test_skcipher_vs_generic_impl()
3205 for (i = 0; i < suite->count; i++) { in test_skcipher()
3206 err = test_skcipher_vec(enc, &suite->vecs[i], i, req, tsgls); in test_skcipher()
3217 const struct cipher_test_suite *suite = &desc->suite.cipher; in alg_test_skcipher()
3223 if (suite->count <= 0) { in alg_test_skcipher()
3225 return -EINVAL; in alg_test_skcipher()
3230 if (PTR_ERR(tfm) == -ENOENT) in alg_test_skcipher()
3242 err = -ENOMEM; in alg_test_skcipher()
3250 err = -ENOMEM; in alg_test_skcipher()
3262 err = test_skcipher_vs_generic_impl(desc->generic_driver, req, tsgls); in alg_test_skcipher()
3285 return -ENOMEM; in test_acomp()
3290 return -ENOMEM; in test_acomp()
3300 ret = -ENOMEM; in test_acomp()
3314 ret = -ENOMEM; in test_acomp()
3325 i + 1, algo, -ret); in test_acomp()
3331 ilen = req->dlen; in test_acomp()
3341 i + 1, algo, -ret); in test_acomp()
3347 if (req->dlen != ctemplate[i].inlen) { in test_acomp()
3349 i + 1, algo, req->dlen); in test_acomp()
3350 ret = -EINVAL; in test_acomp()
3356 if (memcmp(input_vec, decomp_out, req->dlen)) { in test_acomp()
3359 hexdump(output, req->dlen); in test_acomp()
3360 ret = -EINVAL; in test_acomp()
3377 ret = -ENOMEM; in test_acomp()
3391 ret = -ENOMEM; in test_acomp()
3402 i + 1, algo, -ret); in test_acomp()
3408 if (req->dlen != dtemplate[i].outlen) { in test_acomp()
3410 i + 1, algo, req->dlen); in test_acomp()
3411 ret = -EINVAL; in test_acomp()
3417 if (memcmp(output, dtemplate[i].output, req->dlen)) { in test_acomp()
3420 hexdump(output, req->dlen); in test_acomp()
3421 ret = -EINVAL; in test_acomp()
3442 const struct cipher_test_suite *suite = &desc->suite.cipher; in alg_test_cipher()
3448 if (PTR_ERR(tfm) == -ENOENT) in alg_test_cipher()
3455 err = test_cipher(tfm, ENCRYPT, suite->vecs, suite->count); in alg_test_cipher()
3457 err = test_cipher(tfm, DECRYPT, suite->vecs, suite->count); in alg_test_cipher()
3471 if (PTR_ERR(acomp) == -ENOENT) in alg_test_comp()
3477 err = test_acomp(acomp, desc->suite.comp.comp.vecs, in alg_test_comp()
3478 desc->suite.comp.decomp.vecs, in alg_test_comp()
3479 desc->suite.comp.comp.count, in alg_test_comp()
3480 desc->suite.comp.decomp.count); in alg_test_comp()
3488 int ret = -EAGAIN; in drbg_cavs_test()
3492 unsigned char *buf = kzalloc(test->expectedlen, GFP_KERNEL); in drbg_cavs_test()
3495 return -ENOMEM; in drbg_cavs_test()
3500 if (PTR_ERR(drng) == -ENOENT) in drbg_cavs_test()
3508 drbg_string_fill(&testentropy, test->entropy, test->entropylen); in drbg_cavs_test()
3509 drbg_string_fill(&pers, test->pers, test->perslen); in drbg_cavs_test()
3516 drbg_string_fill(&addtl, test->addtla, test->addtllen); in drbg_cavs_test()
3518 drbg_string_fill(&testentropy, test->entpra, test->entprlen); in drbg_cavs_test()
3520 buf, test->expectedlen, &addtl, &test_data); in drbg_cavs_test()
3523 buf, test->expectedlen, &addtl); in drbg_cavs_test()
3531 drbg_string_fill(&addtl, test->addtlb, test->addtllen); in drbg_cavs_test()
3533 drbg_string_fill(&testentropy, test->entprb, test->entprlen); in drbg_cavs_test()
3535 buf, test->expectedlen, &addtl, &test_data); in drbg_cavs_test()
3538 buf, test->expectedlen, &addtl); in drbg_cavs_test()
3546 ret = memcmp(test->expected, buf, test->expectedlen); in drbg_cavs_test()
3561 const struct drbg_testvec *template = desc->suite.drbg.vecs; in alg_test_drbg()
3562 unsigned int tcount = desc->suite.drbg.count; in alg_test_drbg()
3572 err = -EINVAL; in alg_test_drbg()
3591 int err = -ENOMEM; in do_test_kpp()
3600 err = crypto_kpp_set_secret(tfm, vec->secret, vec->secret_size); in do_test_kpp()
3607 err = -ENOMEM; in do_test_kpp()
3626 if (vec->genkey) { in do_test_kpp()
3628 a_public = kmemdup(sg_virt(req->dst), out_len_max, GFP_KERNEL); in do_test_kpp()
3630 err = -ENOMEM; in do_test_kpp()
3635 if (memcmp(vec->expected_a_public, sg_virt(req->dst), in do_test_kpp()
3636 vec->expected_a_public_size)) { in do_test_kpp()
3639 err = -EINVAL; in do_test_kpp()
3645 input_buf = kmemdup(vec->b_public, vec->b_public_size, GFP_KERNEL); in do_test_kpp()
3647 err = -ENOMEM; in do_test_kpp()
3651 sg_init_one(&src, input_buf, vec->b_public_size); in do_test_kpp()
3653 kpp_request_set_input(req, &src, vec->b_public_size); in do_test_kpp()
3664 if (vec->genkey) { in do_test_kpp()
3666 a_ss = kmemdup(sg_virt(req->dst), vec->expected_ss_size, GFP_KERNEL); in do_test_kpp()
3668 err = -ENOMEM; in do_test_kpp()
3676 err = crypto_kpp_set_secret(tfm, vec->b_secret, in do_test_kpp()
3677 vec->b_secret_size); in do_test_kpp()
3681 sg_init_one(&src, a_public, vec->expected_a_public_size); in do_test_kpp()
3683 kpp_request_set_input(req, &src, vec->expected_a_public_size); in do_test_kpp()
3697 shared_secret = (void *)vec->expected_ss; in do_test_kpp()
3704 if (memcmp(shared_secret, sg_virt(req->dst), in do_test_kpp()
3705 vec->expected_ss_size)) { in do_test_kpp()
3708 err = -EINVAL; in do_test_kpp()
3746 if (PTR_ERR(tfm) == -ENOENT) in alg_test_kpp()
3752 if (desc->suite.kpp.vecs) in alg_test_kpp()
3753 err = test_kpp(tfm, desc->alg, desc->suite.kpp.vecs, in alg_test_kpp()
3754 desc->suite.kpp.count); in alg_test_kpp()
3775 int err = -ENOMEM; in test_akcipher_one()
3789 if (vecs->public_key_vec) in test_akcipher_one()
3790 err = crypto_akcipher_set_pub_key(tfm, vecs->key, in test_akcipher_one()
3791 vecs->key_len); in test_akcipher_one()
3793 err = crypto_akcipher_set_priv_key(tfm, vecs->key, in test_akcipher_one()
3794 vecs->key_len); in test_akcipher_one()
3799 err = -ENOMEM; in test_akcipher_one()
3805 c = vecs->c; in test_akcipher_one()
3806 c_size = vecs->c_size; in test_akcipher_one()
3808 err = -E2BIG; in test_akcipher_one()
3809 if (WARN_ON(vecs->m_size > PAGE_SIZE)) in test_akcipher_one()
3811 memcpy(xbuf[0], vecs->m, vecs->m_size); in test_akcipher_one()
3815 sg_set_buf(&src_tab[1], xbuf[0] + 8, vecs->m_size - 8); in test_akcipher_one()
3817 akcipher_request_set_crypt(req, src_tab, &dst, vecs->m_size, in test_akcipher_one()
3828 if (req->dst_len != c_size) { in test_akcipher_one()
3830 err = -EINVAL; in test_akcipher_one()
3837 err = -EINVAL; in test_akcipher_one()
3846 if (vecs->public_key_vec) { in test_akcipher_one()
3852 err = -ENOMEM; in test_akcipher_one()
3858 c_size = req->dst_len; in test_akcipher_one()
3861 err = -E2BIG; in test_akcipher_one()
3876 out_len = req->dst_len; in test_akcipher_one()
3877 if (out_len < vecs->m_size) { in test_akcipher_one()
3880 err = -EINVAL; in test_akcipher_one()
3884 if (memchr_inv(outbuf_dec, 0, out_len - vecs->m_size) || in test_akcipher_one()
3885 memcmp(vecs->m, outbuf_dec + out_len - vecs->m_size, in test_akcipher_one()
3886 vecs->m_size)) { in test_akcipher_one()
3889 err = -EINVAL; in test_akcipher_one()
3929 if (PTR_ERR(tfm) == -ENOENT) in alg_test_akcipher()
3935 if (desc->suite.akcipher.vecs) in alg_test_akcipher()
3936 err = test_akcipher(tfm, desc->alg, desc->suite.akcipher.vecs, in alg_test_akcipher()
3937 desc->suite.akcipher.count); in alg_test_akcipher()
3948 key = kmalloc(vecs->key_len + 2 * sizeof(u32) + vecs->param_len, in test_sig_one()
3951 return -ENOMEM; in test_sig_one()
3954 memcpy(key, vecs->key, vecs->key_len); in test_sig_one()
3955 ptr = key + vecs->key_len; in test_sig_one()
3956 ptr = test_pack_u32(ptr, vecs->algo); in test_sig_one()
3957 ptr = test_pack_u32(ptr, vecs->param_len); in test_sig_one()
3958 memcpy(ptr, vecs->params, vecs->param_len); in test_sig_one()
3960 if (vecs->public_key_vec) in test_sig_one()
3961 err = crypto_sig_set_pubkey(tfm, key, vecs->key_len); in test_sig_one()
3963 err = crypto_sig_set_privkey(tfm, key, vecs->key_len); in test_sig_one()
3971 err = crypto_sig_verify(tfm, vecs->c, vecs->c_size, in test_sig_one()
3972 vecs->m, vecs->m_size); in test_sig_one()
3982 if (vecs->public_key_vec) in test_sig_one()
3986 if (sig_size < vecs->c_size) { in test_sig_one()
3988 return -EINVAL; in test_sig_one()
3993 return -ENOMEM; in test_sig_one()
3996 err = crypto_sig_sign(tfm, vecs->m, vecs->m_size, sig, sig_size); in test_sig_one()
4003 if (err != vecs->c_size || in test_sig_one()
4004 memcmp(sig, vecs->c, vecs->c_size) || in test_sig_one()
4005 memchr_inv(sig + vecs->c_size, 0, sig_size - vecs->c_size)) { in test_sig_one()
4008 return -EINVAL; in test_sig_one()
4043 if (desc->suite.sig.vecs) in alg_test_sig()
4044 err = test_sig(tfm, desc->alg, desc->suite.sig.vecs, in alg_test_sig()
4045 desc->suite.sig.count); in alg_test_sig()
4063 .alg = "adiantum(xchacha12,aes)",
4064 .generic_driver = "adiantum(xchacha12-lib,aes-generic,nhpoly1305-generic)",
4070 .alg = "adiantum(xchacha20,aes)",
4071 .generic_driver = "adiantum(xchacha20-lib,aes-generic,nhpoly1305-generic)",
4084 .generic_driver = "authenc(hmac-md5-lib,ecb-cipher_null)",
4090 .alg = "authenc(hmac(sha1),cbc(aes))",
4091 .generic_driver = "authenc(hmac-sha1-lib,cbc(aes-generic))",
4099 .generic_driver = "authenc(hmac-sha1-lib,cbc(des-generic))",
4106 .generic_driver = "authenc(hmac-sha1-lib,cbc(des3_ede-generic))",
4112 .alg = "authenc(hmac(sha1),ctr(aes))",
4117 .generic_driver = "authenc(hmac-sha1-lib,ecb-cipher_null)",
4123 .alg = "authenc(hmac(sha1),rfc3686(ctr(aes)))",
4128 .generic_driver = "authenc(hmac-sha224-lib,cbc(des-generic))",
4135 .generic_driver = "authenc(hmac-sha224-lib,cbc(des3_ede-generic))",
4141 .alg = "authenc(hmac(sha256),cbc(aes))",
4142 .generic_driver = "authenc(hmac-sha256-lib,cbc(aes-generic))",
4150 .generic_driver = "authenc(hmac-sha256-lib,cbc(des-generic))",
4157 .generic_driver = "authenc(hmac-sha256-lib,cbc(des3_ede-generic))",
4163 .alg = "authenc(hmac(sha256),ctr(aes))",
4167 .alg = "authenc(hmac(sha256),cts(cbc(aes)))",
4168 .generic_driver = "authenc(hmac-sha256-lib,cts(cbc(aes-generic)))",
4174 .alg = "authenc(hmac(sha256),rfc3686(ctr(aes)))",
4179 .generic_driver = "authenc(hmac-sha384-lib,cbc(des-generic))",
4186 .generic_driver = "authenc(hmac-sha384-lib,cbc(des3_ede-generic))",
4192 .alg = "authenc(hmac(sha384),ctr(aes))",
4196 .alg = "authenc(hmac(sha384),cts(cbc(aes)))",
4197 .generic_driver = "authenc(hmac-sha384-lib,cts(cbc(aes-generic)))",
4203 .alg = "authenc(hmac(sha384),rfc3686(ctr(aes)))",
4207 .alg = "authenc(hmac(sha512),cbc(aes))",
4208 .generic_driver = "authenc(hmac-sha512-lib,cbc(aes-generic))",
4216 .generic_driver = "authenc(hmac-sha512-lib,cbc(des-generic))",
4223 .generic_driver = "authenc(hmac-sha512-lib,cbc(des3_ede-generic))",
4229 .alg = "authenc(hmac(sha512),ctr(aes))",
4233 .alg = "authenc(hmac(sha512),rfc3686(ctr(aes)))",
4237 .alg = "blake2b-160",
4238 .generic_driver = "blake2b-160-lib",
4245 .alg = "blake2b-256",
4246 .generic_driver = "blake2b-256-lib",
4253 .alg = "blake2b-384",
4254 .generic_driver = "blake2b-384-lib",
4261 .alg = "blake2b-512",
4262 .generic_driver = "blake2b-512-lib",
4269 .alg = "cbc(aes)",
4324 /* Same as cbc(aes) except the key is stored in
4356 .alg = "cbc-paes-s390",
4364 .alg = "cbcmac(aes)",
4376 .alg = "ccm(aes)",
4377 .generic_driver = "ccm_base(ctr(aes-generic),cbcmac(aes-generic))",
4388 .generic_driver = "ccm_base(ctr(sm4-generic),cbcmac(sm4-generic))",
4398 .generic_driver = "chacha20-lib",
4404 .alg = "cmac(aes)",
4411 .alg = "cmac(camellia)",
4417 .alg = "cmac(des3_ede)",
4423 .alg = "cmac(sm4)",
4430 .generic_driver = "crc32-lib",
4438 .generic_driver = "crc32c-lib",
4445 .alg = "ctr(aes)",
4494 /* Same as ctr(aes) except the key is stored in
4527 .alg = "ctr-paes-s390",
4535 .alg = "cts(cbc(aes))",
4542 /* Same as cts(cbc((aes)) except the key is stored in
4565 .alg = "deflate-iaa",
4614 * backend cipher -- covered by drbg_nopr_hmac_sha512 test
4691 .alg = "ecb(aes)",
4705 .generic_driver = "arc4-generic",
4772 /* Same as ecb(aes) except the key is stored in
4822 .alg = "ecb-paes-s390",
4830 .alg = "ecdh-nist-p192",
4836 .alg = "ecdh-nist-p256",
4843 .alg = "ecdh-nist-p384",
4850 .alg = "ecdsa-nist-p192",
4856 .alg = "ecdsa-nist-p256",
4863 .alg = "ecdsa-nist-p384",
4870 .alg = "ecdsa-nist-p521",
4883 .alg = "essiv(authenc(hmac(sha256),cbc(aes)),sha256)",
4884 .generic_driver = "essiv(authenc(hmac-sha256-lib,cbc(aes-generic)),sha256-lib)",
4891 .alg = "essiv(cbc(aes),sha256)",
4892 .generic_driver = "essiv(cbc(aes-generic),sha256-lib)",
4936 .alg = "gcm(aes)",
4937 .generic_driver = "gcm_base(ctr(aes-generic),ghash-generic)",
4945 .generic_driver = "gcm_base(ctr(aria-generic),ghash-generic)",
4952 .generic_driver = "gcm_base(ctr(sm4-generic),ghash-generic)",
4964 .alg = "hctr2(aes)",
4965 .generic_driver = "hctr2_base(xctr(aes-generic),polyval-lib)",
4972 .generic_driver = "hmac-md5-lib",
4985 .generic_driver = "hmac-sha1-lib",
4993 .generic_driver = "hmac-sha224-lib",
5001 .generic_driver = "hmac-sha256-lib",
5008 .alg = "hmac(sha3-224)",
5009 .generic_driver = "hmac(sha3-224-lib)",
5016 .alg = "hmac(sha3-256)",
5017 .generic_driver = "hmac(sha3-256-lib)",
5024 .alg = "hmac(sha3-384)",
5025 .generic_driver = "hmac(sha3-384-lib)",
5032 .alg = "hmac(sha3-512)",
5033 .generic_driver = "hmac(sha3-512-lib)",
5041 .generic_driver = "hmac-sha384-lib",
5049 .generic_driver = "hmac-sha512-lib",
5078 .alg = "krb5enc(cmac(camellia),cts(cbc(camellia)))",
5082 .alg = "lrw(aes)",
5083 .generic_driver = "lrw(ecb(aes-generic))",
5090 .generic_driver = "lrw(ecb(camellia-generic))",
5097 .generic_driver = "lrw(ecb(cast6-generic))",
5104 .generic_driver = "lrw(ecb(serpent-generic))",
5111 .generic_driver = "lrw(ecb(twofish-generic))",
5147 .alg = "lzo-rle",
5164 .generic_driver = "md5-lib",
5182 .alg = "p1363(ecdsa-nist-p192)",
5185 .alg = "p1363(ecdsa-nist-p256)",
5192 .alg = "p1363(ecdsa-nist-p384)",
5196 .alg = "p1363(ecdsa-nist-p521)",
5253 .alg = "pkcs1(rsa,sha3-256)",
5257 .alg = "pkcs1(rsa,sha3-384)",
5261 .alg = "pkcs1(rsa,sha3-512)",
5277 .alg = "rfc3686(ctr(aes))",
5290 .alg = "rfc4106(gcm(aes))",
5291 .generic_driver = "rfc4106(gcm_base(ctr(aes-generic),ghash-generic))",
5302 .alg = "rfc4309(ccm(aes))",
5303 .generic_driver = "rfc4309(ccm_base(ctr(aes-generic),cbcmac(aes-generic)))",
5314 .alg = "rfc4543(gcm(aes))",
5315 .generic_driver = "rfc4543(gcm_base(ctr(aes-generic),ghash-generic))",
5326 .generic_driver = "rfc7539(chacha20-lib,poly1305-generic)",
5333 .generic_driver = "rfc7539esp(chacha20-lib,poly1305-generic)",
5357 .generic_driver = "sha1-lib",
5365 .generic_driver = "sha224-lib",
5373 .generic_driver = "sha256-lib",
5380 .alg = "sha3-224",
5381 .generic_driver = "sha3-224-lib",
5388 .alg = "sha3-256",
5389 .generic_driver = "sha3-256-lib",
5396 .alg = "sha3-384",
5397 .generic_driver = "sha3-384-lib",
5404 .alg = "sha3-512",
5405 .generic_driver = "sha3-512-lib",
5413 .generic_driver = "sha384-lib",
5421 .generic_driver = "sha512-lib",
5464 .alg = "x962(ecdsa-nist-p192)",
5470 .alg = "x962(ecdsa-nist-p256)",
5477 .alg = "x962(ecdsa-nist-p384)",
5484 .alg = "x962(ecdsa-nist-p521)",
5491 .alg = "xcbc(aes)",
5504 .generic_driver = "xchacha12-lib",
5511 .generic_driver = "xchacha20-lib",
5517 .alg = "xctr(aes)",
5523 .alg = "xts(aes)",
5524 .generic_driver = "xts(ecb(aes-generic))",
5532 .generic_driver = "xts(ecb(camellia-generic))",
5539 .generic_driver = "xts(ecb(cast6-generic))",
5545 /* Same as xts(aes) except the key is stored in
5553 .generic_driver = "xts(ecb(serpent-generic))",
5560 .generic_driver = "xts(ecb(sm4-generic))",
5567 .generic_driver = "xts(ecb(twofish-generic))",
5574 .alg = "xts-paes-s390",
5606 int diff = strcmp(alg_test_descs[i - 1].alg, in alg_check_test_descs_order()
5611 alg_test_descs[i - 1].alg, in alg_check_test_descs_order()
5666 return -1; in alg_find_test()
5673 return -ECANCELED; in alg_fips_disabled()
5683 printk_once(KERN_INFO "alg: self-tests disabled\n"); in alg_test()
5694 return -ENAMETOOLONG; in alg_test()
5714 return -EINVAL; in alg_test()
5732 panic("alg: self-tests for %s (%s) failed in fips mode!\n", in alg_test()
5735 pr_warn("alg: self-tests for %s using %s failed (rc=%d)", in alg_test()
5737 WARN(rc != -ENOENT, in alg_test()
5738 "alg: self-tests for %s using %s failed (rc=%d)", in alg_test()
5742 pr_info("alg: self-tests for %s (%s) passed\n", in alg_test()