Message ID | 20190123224926.250525-12-ebiggers@kernel.org (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Herbert Xu |
Headers | show |
Series | crypto: improved skcipher, aead, and hash tests | expand |
On Wed, 23 Jan 2019 at 23:53, Eric Biggers <ebiggers@kernel.org> wrote: > > From: Eric Biggers <ebiggers@google.com> > > Convert alg_test_skcipher() to use the new test framework, adding a list > of testvec_configs to test by default. When the extra self-tests are > enabled, randomly generated testvec_configs are tested as well. > > This improves skcipher test coverage mainly because now all algorithms > have a variety of data layouts tested, whereas before each algorithm was > responsible for declaring its own chunked test cases which were often > missing or provided poor test coverage. The new code also tests both > the MAY_SLEEP and !MAY_SLEEP cases, different IV alignments, and buffers > that cross pages. > > This has already found a bug in the arm64 ctr-aes-neonbs algorithm. > It would have easily found many past bugs. > > I removed the skcipher chunked test vectors that were the same as > non-chunked ones, but left the ones that were unique. > > Signed-off-by: Eric Biggers <ebiggers@google.com> This patch does not apply after applying 1..10 onto cryptodev/master Do you have a tree somewhere? > --- > crypto/testmgr.c | 515 ++++++++++++++++++++++------------------------- > crypto/testmgr.h | 253 ----------------------- > 2 files changed, 245 insertions(+), 523 deletions(-) > > diff --git a/crypto/testmgr.c b/crypto/testmgr.c > index ccc0e18b13ea..fd3fed8eee4e 100644 > --- a/crypto/testmgr.c > +++ b/crypto/testmgr.c > @@ -284,6 +284,68 @@ struct testvec_config { > > #define TESTVEC_CONFIG_NAMELEN 192 > > +/* > + * The following are the lists of testvec_configs to test for each algorithm > + * type when the basic crypto self-tests are enabled, i.e. when > + * CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is unset. They aim to provide good test > + * coverage, while keeping the test time much shorter than the full fuzz tests > + * so that the basic tests can be enabled in a wider range of circumstances. > + */ > + > +/* Configs for skciphers and aeads */ > +static const struct testvec_config default_cipher_testvec_configs[] = { > + { > + .name = "in-place", > + .inplace = true, > + .src_divs = { { .proportion_of_total = 10000 } }, > + }, { > + .name = "out-of-place", > + .src_divs = { { .proportion_of_total = 10000 } }, > + }, { > + .name = "unaligned buffer, offset=1", > + .src_divs = { { .proportion_of_total = 10000, .offset = 1 } }, > + .iv_offset = 1, > + }, { > + .name = "buffer aligned only to alignmask", > + .src_divs = { > + { > + .proportion_of_total = 10000, > + .offset = 1, > + .offset_relative_to_alignmask = true, > + }, > + }, > + .iv_offset = 1, > + .iv_offset_relative_to_alignmask = true, > + }, { > + .name = "two even aligned splits", > + .src_divs = { > + { .proportion_of_total = 5000 }, > + { .proportion_of_total = 5000 }, > + }, > + }, { > + .name = "uneven misaligned splits, may sleep", > + .req_flags = CRYPTO_TFM_REQ_MAY_SLEEP, > + .src_divs = { > + { .proportion_of_total = 1900, .offset = 33 }, > + { .proportion_of_total = 3300, .offset = 7 }, > + { .proportion_of_total = 4800, .offset = 18 }, > + }, > + .iv_offset = 3, > + }, { > + .name = "misaligned splits crossing pages, inplace", > + .inplace = true, > + .src_divs = { > + { > + .proportion_of_total = 7500, > + .offset = PAGE_SIZE - 32 > + }, { > + .proportion_of_total = 2500, > + .offset = PAGE_SIZE - 7 > + }, > + }, > + } > +}; > + > static unsigned int count_test_sg_divisions(const struct test_sg_division *divs) > { > unsigned int remaining = TEST_SG_TOTAL; > @@ -1608,8 +1670,6 @@ static int test_cipher(struct crypto_cipher *tfm, int enc, > > j = 0; > for (i = 0; i < tcount; i++) { > - if (template[i].np) > - continue; > > if (fips_enabled && template[i].fips_skip) > continue; > @@ -1667,282 +1727,214 @@ static int test_cipher(struct crypto_cipher *tfm, int enc, > return ret; > } > > -static int __test_skcipher(struct crypto_skcipher *tfm, int enc, > - const struct cipher_testvec *template, > - unsigned int tcount, > - const bool diff_dst, const int align_offset) > +static int test_skcipher_vec_cfg(const char *driver, int enc, > + const struct cipher_testvec *vec, > + unsigned int vec_num, > + const struct testvec_config *cfg, > + struct skcipher_request *req, > + struct cipher_test_sglists *tsgls) > { > - const char *algo = > - crypto_tfm_alg_driver_name(crypto_skcipher_tfm(tfm)); > - unsigned int i, j, k, n, temp; > - char *q; > - struct skcipher_request *req; > - struct scatterlist sg[8]; > - struct scatterlist sgout[8]; > - const char *e, *d; > - struct crypto_wait wait; > - const char *input, *result; > - void *data; > - char iv[MAX_IVLEN]; > - char *xbuf[XBUFSIZE]; > - char *xoutbuf[XBUFSIZE]; > - int ret = -ENOMEM; > - unsigned int ivsize = crypto_skcipher_ivsize(tfm); > - > - if (testmgr_alloc_buf(xbuf)) > - goto out_nobuf; > - > - if (diff_dst && testmgr_alloc_buf(xoutbuf)) > - goto out_nooutbuf; > - > - if (diff_dst) > - d = "-ddst"; > - else > - d = ""; > + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); > + const unsigned int alignmask = crypto_skcipher_alignmask(tfm); > + const unsigned int ivsize = crypto_skcipher_ivsize(tfm); > + const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; > + const char *op = enc ? "encryption" : "decryption"; > + DECLARE_CRYPTO_WAIT(wait); > + u8 _iv[3 * (MAX_ALGAPI_ALIGNMASK + 1) + MAX_IVLEN]; > + u8 *iv = PTR_ALIGN(&_iv[0], 2 * (MAX_ALGAPI_ALIGNMASK + 1)) + > + cfg->iv_offset + > + (cfg->iv_offset_relative_to_alignmask ? alignmask : 0); > + struct kvec input; > + int err; > > - if (enc == ENCRYPT) > - e = "encryption"; > + /* Set the key */ > + if (vec->wk) > + crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); > else > - e = "decryption"; > - > - crypto_init_wait(&wait); > - > - req = skcipher_request_alloc(tfm, GFP_KERNEL); > - if (!req) { > - pr_err("alg: skcipher%s: Failed to allocate request for %s\n", > - d, algo); > - goto out; > + crypto_skcipher_clear_flags(tfm, > + CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); > + err = crypto_skcipher_setkey(tfm, vec->key, vec->klen); > + if (err) { > + if (vec->fail) /* expectedly failed to set key? */ > + return 0; > + pr_err("alg: skcipher: %s setkey failed with err %d on test vector %u; flags=%#x\n", > + driver, err, vec_num, crypto_skcipher_get_flags(tfm)); > + return err; > + } > + if (vec->fail) { > + pr_err("alg: skcipher: %s setkey unexpectedly succeeded on test vector %u\n", > + driver, vec_num); > + return -EINVAL; > } > > - skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, > - crypto_req_done, &wait); > - > - j = 0; > - for (i = 0; i < tcount; i++) { > - if (template[i].np && !template[i].also_non_np) > - continue; > - > - if (fips_enabled && template[i].fips_skip) > - continue; > - > - if (template[i].iv && !(template[i].generates_iv && enc)) > - memcpy(iv, template[i].iv, ivsize); > + /* The IV must be copied to a buffer, as the algorithm may modify it */ > + if (ivsize) { > + if (WARN_ON(ivsize > MAX_IVLEN)) > + return -EINVAL; > + if (vec->iv && !(vec->generates_iv && enc)) > + memcpy(iv, vec->iv, ivsize); > else > - memset(iv, 0, MAX_IVLEN); > - > - input = enc ? template[i].ptext : template[i].ctext; > - result = enc ? template[i].ctext : template[i].ptext; > - j++; > - ret = -EINVAL; > - if (WARN_ON(align_offset + template[i].len > PAGE_SIZE)) > - goto out; > - > - data = xbuf[0]; > - data += align_offset; > - memcpy(data, input, template[i].len); > - > - crypto_skcipher_clear_flags(tfm, ~0); > - if (template[i].wk) > - crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); > - > - ret = crypto_skcipher_setkey(tfm, template[i].key, > - template[i].klen); > - if (template[i].fail == !ret) { > - pr_err("alg: skcipher%s: setkey failed on test %d for %s: flags=%x\n", > - d, j, algo, crypto_skcipher_get_flags(tfm)); > - goto out; > - } else if (ret) > - continue; > - > - sg_init_one(&sg[0], data, template[i].len); > - if (diff_dst) { > - data = xoutbuf[0]; > - data += align_offset; > - sg_init_one(&sgout[0], data, template[i].len); > - } > - > - skcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, > - template[i].len, iv); > - ret = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : > - crypto_skcipher_decrypt(req), &wait); > - > - if (ret) { > - pr_err("alg: skcipher%s: %s failed on test %d for %s: ret=%d\n", > - d, e, j, algo, -ret); > - goto out; > - } > - > - q = data; > - if (memcmp(q, result, template[i].len)) { > - pr_err("alg: skcipher%s: Test %d failed (invalid result) on %s for %s\n", > - d, j, e, algo); > - hexdump(q, template[i].len); > - ret = -EINVAL; > - goto out; > - } > - > - if (template[i].generates_iv && enc && > - memcmp(iv, template[i].iv, crypto_skcipher_ivsize(tfm))) { > - pr_err("alg: skcipher%s: Test %d failed (invalid output IV) on %s for %s\n", > - d, j, e, algo); > - hexdump(iv, crypto_skcipher_ivsize(tfm)); > - ret = -EINVAL; > - goto out; > + memset(iv, 0, ivsize); > + } else { > + if (vec->generates_iv) { > + pr_err("alg: skcipher: %s has ivsize=0 but test vector %u generates IV!\n", > + driver, vec_num); > + return -EINVAL; > } > + iv = NULL; > } > > - j = 0; > - for (i = 0; i < tcount; i++) { > - /* alignment tests are only done with continuous buffers */ > - if (align_offset != 0) > - break; > - > - if (!template[i].np) > - continue; > - > - if (fips_enabled && template[i].fips_skip) > - continue; > - > - if (template[i].iv && !(template[i].generates_iv && enc)) > - memcpy(iv, template[i].iv, ivsize); > - else > - memset(iv, 0, MAX_IVLEN); > - > - input = enc ? template[i].ptext : template[i].ctext; > - result = enc ? template[i].ctext : template[i].ptext; > - j++; > - crypto_skcipher_clear_flags(tfm, ~0); > - if (template[i].wk) > - crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); > - > - ret = crypto_skcipher_setkey(tfm, template[i].key, > - template[i].klen); > - if (template[i].fail == !ret) { > - pr_err("alg: skcipher%s: setkey failed on chunk test %d for %s: flags=%x\n", > - d, j, algo, crypto_skcipher_get_flags(tfm)); > - goto out; > - } else if (ret) > - continue; > - > - temp = 0; > - ret = -EINVAL; > - sg_init_table(sg, template[i].np); > - if (diff_dst) > - sg_init_table(sgout, template[i].np); > - for (k = 0; k < template[i].np; k++) { > - if (WARN_ON(offset_in_page(IDX[k]) + > - template[i].tap[k] > PAGE_SIZE)) > - goto out; > - > - q = xbuf[IDX[k] >> PAGE_SHIFT] + offset_in_page(IDX[k]); > - > - memcpy(q, input + temp, template[i].tap[k]); > - > - if (offset_in_page(q) + template[i].tap[k] < PAGE_SIZE) > - q[template[i].tap[k]] = 0; > - > - sg_set_buf(&sg[k], q, template[i].tap[k]); > - if (diff_dst) { > - q = xoutbuf[IDX[k] >> PAGE_SHIFT] + > - offset_in_page(IDX[k]); > - > - sg_set_buf(&sgout[k], q, template[i].tap[k]); > + /* Build the src/dst scatterlists */ > + input.iov_base = enc ? (void *)vec->ptext : (void *)vec->ctext; > + input.iov_len = vec->len; > + err = build_cipher_test_sglists(tsgls, cfg, alignmask, > + vec->len, vec->len, &input, 1); > + if (err) { > + pr_err("alg: skcipher: %s %s: error preparing scatterlists for test vector %u, cfg=\"%s\"\n", > + driver, op, vec_num, cfg->name); > + return err; > + } > > - memset(q, 0, template[i].tap[k]); > - if (offset_in_page(q) + > - template[i].tap[k] < PAGE_SIZE) > - q[template[i].tap[k]] = 0; > - } > + /* Do the actual encryption or decryption */ > + testmgr_poison(req->__ctx, crypto_skcipher_reqsize(tfm)); > + skcipher_request_set_callback(req, req_flags, crypto_req_done, &wait); > + skcipher_request_set_crypt(req, tsgls->src.sgl_ptr, tsgls->dst.sgl_ptr, > + vec->len, iv); > + err = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : > + crypto_skcipher_decrypt(req), &wait); > + if (err) { > + pr_err("alg: skcipher: %s %s failed with err %d on test vector %u, cfg=\"%s\"\n", > + driver, op, err, vec_num, cfg->name); > + return err; > + } > > - temp += template[i].tap[k]; > - } > + /* Check for the correct output (ciphertext or plaintext) */ > + err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext, > + vec->len, 0, true); > + if (err == -EOVERFLOW) { > + pr_err("alg: skcipher: %s %s overran dst buffer on test vector %u, cfg=\"%s\"\n", > + driver, op, vec_num, cfg->name); > + return err; > + } > + if (err) { > + pr_err("alg: skcipher: %s %s test failed (wrong result) on test vector %u, cfg=\"%s\"\n", > + driver, op, vec_num, cfg->name); > + return err; > + } > > - skcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, > - template[i].len, iv); > + /* If applicable, check that the algorithm generated the correct IV */ > + if (vec->generates_iv && enc && memcmp(iv, vec->iv, ivsize) != 0) { > + pr_err("alg: skcipher: %s %s test failed (wrong output IV) on test vector %u, cfg=\"%s\"\n", > + driver, op, vec_num, cfg->name); > + hexdump(iv, ivsize); > + return -EINVAL; > + } > > - ret = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : > - crypto_skcipher_decrypt(req), &wait); > + return 0; > +} > > - if (ret) { > - pr_err("alg: skcipher%s: %s failed on chunk test %d for %s: ret=%d\n", > - d, e, j, algo, -ret); > - goto out; > - } > +static int test_skcipher_vec(const char *driver, int enc, > + const struct cipher_testvec *vec, > + unsigned int vec_num, > + struct skcipher_request *req, > + struct cipher_test_sglists *tsgls) > +{ > + unsigned int i; > + int err; > > - temp = 0; > - ret = -EINVAL; > - for (k = 0; k < template[i].np; k++) { > - if (diff_dst) > - q = xoutbuf[IDX[k] >> PAGE_SHIFT] + > - offset_in_page(IDX[k]); > - else > - q = xbuf[IDX[k] >> PAGE_SHIFT] + > - offset_in_page(IDX[k]); > + if (fips_enabled && vec->fips_skip) > + return 0; > > - if (memcmp(q, result + temp, template[i].tap[k])) { > - pr_err("alg: skcipher%s: Chunk test %d failed on %s at page %u for %s\n", > - d, j, e, k, algo); > - hexdump(q, template[i].tap[k]); > - goto out; > - } > + for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) { > + err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, > + &default_cipher_testvec_configs[i], > + req, tsgls); > + if (err) > + return err; > + } > > - q += template[i].tap[k]; > - for (n = 0; offset_in_page(q + n) && q[n]; n++) > - ; > - if (n) { > - pr_err("alg: skcipher%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n", > - d, j, e, k, algo, n); > - hexdump(q, n); > - goto out; > - } > - temp += template[i].tap[k]; > +#ifdef CONFIG_CRYPTO_MANAGER_EXTRA_TESTS > + if (!noextratests) { > + struct testvec_config cfg; > + char cfgname[TESTVEC_CONFIG_NAMELEN]; > + > + for (i = 0; i < fuzz_iterations; i++) { > + generate_random_testvec_config(&cfg, cfgname, > + sizeof(cfgname)); > + err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, > + &cfg, req, tsgls); > + if (err) > + return err; > } > } > +#endif > + return 0; > +} > > - ret = 0; > +static int test_skcipher(const char *driver, int enc, > + const struct cipher_test_suite *suite, > + struct skcipher_request *req, > + struct cipher_test_sglists *tsgls) > +{ > + unsigned int i; > + int err; > > -out: > - skcipher_request_free(req); > - if (diff_dst) > - testmgr_free_buf(xoutbuf); > -out_nooutbuf: > - testmgr_free_buf(xbuf); > -out_nobuf: > - return ret; > + for (i = 0; i < suite->count; i++) { > + err = test_skcipher_vec(driver, enc, &suite->vecs[i], i, req, > + tsgls); > + if (err) > + return err; > + } > + return 0; > } > > -static int test_skcipher(struct crypto_skcipher *tfm, int enc, > - const struct cipher_testvec *template, > - unsigned int tcount) > +static int alg_test_skcipher(const struct alg_test_desc *desc, > + const char *driver, u32 type, u32 mask) > { > - unsigned int alignmask; > - int ret; > + const struct cipher_test_suite *suite = &desc->suite.cipher; > + struct crypto_skcipher *tfm; > + struct skcipher_request *req = NULL; > + struct cipher_test_sglists *tsgls = NULL; > + int err; > > - /* test 'dst == src' case */ > - ret = __test_skcipher(tfm, enc, template, tcount, false, 0); > - if (ret) > - return ret; > + if (suite->count <= 0) { > + pr_err("alg: skcipher: empty test suite for %s\n", driver); > + return -EINVAL; > + } > > - /* test 'dst != src' case */ > - ret = __test_skcipher(tfm, enc, template, tcount, true, 0); > - if (ret) > - return ret; > + tfm = crypto_alloc_skcipher(driver, type, mask); > + if (IS_ERR(tfm)) { > + pr_err("alg: skcipher: failed to allocate transform for %s: %ld\n", > + driver, PTR_ERR(tfm)); > + return PTR_ERR(tfm); > + } > > - /* test unaligned buffers, check with one byte offset */ > - ret = __test_skcipher(tfm, enc, template, tcount, true, 1); > - if (ret) > - return ret; > + req = skcipher_request_alloc(tfm, GFP_KERNEL); > + if (!req) { > + pr_err("alg: skcipher: failed to allocate request for %s\n", > + driver); > + err = -ENOMEM; > + goto out; > + } > > - alignmask = crypto_tfm_alg_alignmask(&tfm->base); > - if (alignmask) { > - /* Check if alignment mask for tfm is correctly set. */ > - ret = __test_skcipher(tfm, enc, template, tcount, true, > - alignmask + 1); > - if (ret) > - return ret; > + tsgls = alloc_cipher_test_sglists(); > + if (!tsgls) { > + pr_err("alg: skcipher: failed to allocate test buffers for %s\n", > + driver); > + err = -ENOMEM; > + goto out; > } > > - return 0; > + err = test_skcipher(driver, ENCRYPT, suite, req, tsgls); > + if (err) > + goto out; > + > + err = test_skcipher(driver, DECRYPT, suite, req, tsgls); > +out: > + free_cipher_test_sglists(tsgls); > + skcipher_request_free(req); > + crypto_free_skcipher(tfm); > + return err; > } > > static int test_comp(struct crypto_comp *tfm, > @@ -2326,28 +2318,6 @@ static int alg_test_cipher(const struct alg_test_desc *desc, > return err; > } > > -static int alg_test_skcipher(const struct alg_test_desc *desc, > - const char *driver, u32 type, u32 mask) > -{ > - const struct cipher_test_suite *suite = &desc->suite.cipher; > - struct crypto_skcipher *tfm; > - int err; > - > - tfm = crypto_alloc_skcipher(driver, type, mask); > - if (IS_ERR(tfm)) { > - printk(KERN_ERR "alg: skcipher: Failed to load transform for " > - "%s: %ld\n", driver, PTR_ERR(tfm)); > - return PTR_ERR(tfm); > - } > - > - err = test_skcipher(tfm, ENCRYPT, suite->vecs, suite->count); > - if (!err) > - err = test_skcipher(tfm, DECRYPT, suite->vecs, suite->count); > - > - crypto_free_skcipher(tfm); > - return err; > -} > - > static int alg_test_comp(const struct alg_test_desc *desc, const char *driver, > u32 type, u32 mask) > { > @@ -4220,6 +4190,11 @@ static void alg_check_test_descs_order(void) > > static void alg_check_testvec_configs(void) > { > + int i; > + > + for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) > + WARN_ON(!valid_testvec_config( > + &default_cipher_testvec_configs[i])); > } > > static void testmgr_onetime_init(void) > diff --git a/crypto/testmgr.h b/crypto/testmgr.h > index d8f6035c7ff2..1a73af8a79f7 100644 > --- a/crypto/testmgr.h > +++ b/crypto/testmgr.h > @@ -52,10 +52,6 @@ struct hash_testvec { > * @fail: If set to one, the test need to fail > * @wk: Does the test need CRYPTO_TFM_REQ_FORBID_WEAK_KEYS? > * ( e.g. test needs to fail due to a weak key ) > - * @np: numbers of SG to distribute data in (from 1 to MAX_TAP) > - * @tap: How to distribute data in @np SGs > - * @also_non_np: if set to 1, the test will be also done without > - * splitting data in @np SGs > * @fips_skip: Skip the test vector in FIPS mode > * @generates_iv: Encryption should ignore the given IV, and output @iv. > * Decryption takes @iv. Needed for AES Keywrap ("kw(aes)"). > @@ -65,9 +61,6 @@ struct cipher_testvec { > const char *iv; > const char *ptext; > const char *ctext; > - unsigned short tap[MAX_TAP]; > - int np; > - unsigned char also_non_np; > bool fail; > unsigned char wk; /* weak key flag */ > unsigned char klen; > @@ -7011,18 +7004,6 @@ static const struct cipher_testvec des_tv_template[] = { > .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" > "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", > .len = 16, > - .np = 2, > - .tap = { 8, 8 } > - }, { > - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > - .klen = 8, > - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" > - "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5", > - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" > - "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b", > - .len = 16, > - .np = 2, > - .tap = { 8, 8 } > }, { > .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > .klen = 8, > @@ -7031,8 +7012,6 @@ static const struct cipher_testvec des_tv_template[] = { > .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" > "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b", > .len = 16, > - .np = 3, > - .tap = { 3, 12, 1 } > }, { /* Four blocks -- for testing encryption with chunking */ > .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > .klen = 8, > @@ -7045,38 +7024,6 @@ static const struct cipher_testvec des_tv_template[] = { > "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90" > "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", > .len = 32, > - .np = 3, > - .tap = { 14, 10, 8 } > - }, { > - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > - .klen = 8, > - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" > - "\x22\x33\x44\x55\x66\x77\x88\x99" > - "\xca\xfe\xba\xbe\xfe\xed\xbe\xef", > - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" > - "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b" > - "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90", > - .len = 24, > - .np = 4, > - .tap = { 2, 1, 3, 18 } > - }, { > - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > - .klen = 8, > - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" > - "\x22\x33\x44\x55\x66\x77\x88\x99", > - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" > - "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", > - .len = 16, > - .np = 5, > - .tap = { 2, 2, 2, 2, 8 } > - }, { > - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > - .klen = 8, > - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7", > - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d", > - .len = 8, > - .np = 8, > - .tap = { 1, 1, 1, 1, 1, 1, 1, 1 } > }, { /* Generated with Crypto++ */ > .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", > .klen = 8, > @@ -7143,9 +7090,6 @@ static const struct cipher_testvec des_tv_template[] = { > "\xE1\x58\x39\x09\xB4\x8B\x40\xAC" > "\x5F\x62\xC7\x72\xD9\xFC\xCB\x9A", > .len = 248, > - .also_non_np = 1, > - .np = 3, > - .tap = { 248 - 10, 2, 8 }, > }, > }; > > @@ -7182,23 +7126,6 @@ static const struct cipher_testvec des_cbc_tv_template[] = { > .ptext = "\x66\x6f\x72\x20\x61\x6c\x6c\x20", > .ctext = "\x68\x37\x88\x49\x9a\x7c\x05\xf6", > .len = 8, > - .np = 2, > - .tap = { 4, 4 }, > - .also_non_np = 1, > - }, { /* Copy of openssl vector for chunk testing */ > - /* From OpenSSL */ > - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", > - .klen = 8, > - .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10", > - .ptext = "\x37\x36\x35\x34\x33\x32\x31\x20" > - "\x4e\x6f\x77\x20\x69\x73\x20\x74" > - "\x68\x65\x20\x74\x69\x6d\x65\x20", > - .ctext = "\xcc\xd1\x73\xff\xab\x20\x39\xf4" > - "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb" > - "\x46\x8e\x91\x15\x78\x88\xba\x68", > - .len = 24, > - .np = 2, > - .tap = { 13, 11 } > }, { /* Generated with Crypto++ */ > .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", > .klen = 8, > @@ -7266,9 +7193,6 @@ static const struct cipher_testvec des_cbc_tv_template[] = { > "\x82\xA9\xBD\x6A\x31\x91\x39\x11" > "\xC6\x4A\xF3\x55\xC7\x29\x2E\x63", > .len = 248, > - .also_non_np = 1, > - .np = 3, > - .tap = { 248 - 10, 2, 8 }, > }, > }; > > @@ -7340,9 +7264,6 @@ static const struct cipher_testvec des_ctr_tv_template[] = { > "\x19\x7F\x99\x19\x53\xCE\x1D\x14" > "\x69\x74\xA1\x06\x46\x0F\x4E\x75", > .len = 248, > - .also_non_np = 1, > - .np = 3, > - .tap = { 248 - 10, 2, 8 }, > }, { /* Generated with Crypto++ */ > .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", > .klen = 8, > @@ -7410,9 +7331,6 @@ static const struct cipher_testvec des_ctr_tv_template[] = { > "\xA5\xA6\xE7\xB0\x51\x36\x52\x37" > "\x91\x45\x05\x3E\x58\xBF\x32", > .len = 247, > - .also_non_np = 1, > - .np = 2, > - .tap = { 247 - 8, 8 }, > }, > }; > > @@ -7571,9 +7489,6 @@ static const struct cipher_testvec des3_ede_tv_template[] = { > "\x93\x03\xD7\x51\x09\xFA\xBE\x68" > "\xD8\x45\xFF\x33\xBA\xBB\x2B\x63", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -7749,9 +7664,6 @@ static const struct cipher_testvec des3_ede_cbc_tv_template[] = { > "\x83\x70\xFF\x86\xE6\xAA\x0F\x1F" > "\x95\x63\x73\xA2\x44\xAC\xF8\xA5", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -7888,9 +7800,6 @@ static const struct cipher_testvec des3_ede_ctr_tv_template[] = { > "\xFD\x51\xB0\xC6\x2C\x63\x13\x78" > "\x5C\xEE\xFC\xCF\xC4\x70\x00\x34", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, { /* Generated with Crypto++ */ > .key = "\x9C\xD6\xF3\x9C\xB9\x5A\x67\x00" > "\x5A\x67\x00\x2D\xCE\xEB\x2D\xCE" > @@ -8025,9 +7934,6 @@ static const struct cipher_testvec des3_ede_ctr_tv_template[] = { > "\x32\x0F\x05\x2F\xF2\x4C\x95\x3B" > "\xF2\x79\xD9", > .len = 499, > - .also_non_np = 1, > - .np = 2, > - .tap = { 499 - 16, 16 }, > }, > }; > > @@ -8213,9 +8119,6 @@ static const struct cipher_testvec bf_tv_template[] = { > "\x56\xEB\x36\x77\x3D\xAA\xB8\xF5" > "\xC9\x1A\xFB\x5D\xDE\xBB\x43\xF4", > .len = 504, > - .also_non_np = 1, > - .np = 3, > - .tap = { 504 - 10, 2, 8 }, > }, > }; > > @@ -8368,9 +8271,6 @@ static const struct cipher_testvec bf_cbc_tv_template[] = { > "\x93\x9B\xEE\xB5\x97\x41\xD2\xA0" > "\xB4\x98\xD8\x6B\x74\xE7\x65\xF4", > .len = 504, > - .also_non_np = 1, > - .np = 3, > - .tap = { 504 - 10, 2, 8 }, > }, > }; > > @@ -8643,9 +8543,6 @@ static const struct cipher_testvec bf_ctr_tv_template[] = { > "\x32\x44\x96\x1C\xD8\xEB\x95\xD2" > "\xF3\x71\xEF\xEB\x4E\xBB\x4D", > .len = 503, > - .also_non_np = 1, > - .np = 2, > - .tap = { 503 - 8, 8 }, > }, { /* Generated with Crypto++ */ > .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" > "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" > @@ -8944,9 +8841,6 @@ static const struct cipher_testvec tf_tv_template[] = { > "\x58\x33\x9B\x78\xC7\x58\x48\x6B" > "\x2C\x75\x64\xC4\xCA\xC1\x7E\xD5", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -9122,9 +9016,6 @@ static const struct cipher_testvec tf_cbc_tv_template[] = { > "\x30\x70\x56\xA4\x37\xDD\x7C\xC0" > "\x0A\xA3\x30\x10\x26\x25\x41\x2C", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -9530,9 +9421,6 @@ static const struct cipher_testvec tf_ctr_tv_template[] = { > "\xC5\xC9\x7F\x9E\xCF\x33\x7A\xDF" > "\x6C\x82\x9D", > .len = 499, > - .also_non_np = 1, > - .np = 2, > - .tap = { 499 - 16, 16 }, > }, > }; > > @@ -9774,9 +9662,6 @@ static const struct cipher_testvec tf_lrw_tv_template[] = { > "\x80\x18\xc4\x6c\x03\xd3\xb7\xba" > "\x11\xd7\xb8\x6e\xea\xe1\x80\x30", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -10111,9 +9996,6 @@ static const struct cipher_testvec tf_xts_tv_template[] = { > "\xa4\x05\x0b\xb2\xb3\xa8\x30\x97" > "\x37\x30\xe1\x91\x8d\xb3\x2a\xff", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -10286,9 +10168,6 @@ static const struct cipher_testvec serpent_tv_template[] = { > "\x75\x55\x9B\xFF\x36\x73\xAB\x7C" > "\xF4\x46\x2E\xEB\xAC\xF3\xD2\xB7", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -10505,9 +10384,6 @@ static const struct cipher_testvec serpent_cbc_tv_template[] = { > "\xFC\x66\xAA\x37\xF2\x37\x39\x6B" > "\xBC\x08\x3A\xA2\x29\xB3\xDF\xD1", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -10780,9 +10656,6 @@ static const struct cipher_testvec serpent_ctr_tv_template[] = { > "\x40\x53\x77\x8C\x15\xF8\x8D\x13" > "\x38\xE2\xE5", > .len = 499, > - .also_non_np = 1, > - .np = 2, > - .tap = { 499 - 16, 16 }, > }, { /* Generated with Crypto++ */ > .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" > "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" > @@ -11157,9 +11030,6 @@ static const struct cipher_testvec serpent_lrw_tv_template[] = { > "\x5c\xc6\x84\xfe\x7c\xcb\x26\xfd" > "\xd9\x51\x0f\xd7\x94\x2f\xc5\xa7", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -11494,9 +11364,6 @@ static const struct cipher_testvec serpent_xts_tv_template[] = { > "\xaf\x43\x0b\xc5\x20\x41\x92\x20" > "\xd4\xa0\x91\x98\x11\x5f\x4d\xb1", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -11836,9 +11703,6 @@ static const struct cipher_testvec cast6_tv_template[] = { > "\x84\x52\x6D\x68\xDE\xC6\x64\xB2" > "\x11\x74\x93\x57\xB4\x7E\xC6\x00", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -11976,9 +11840,6 @@ static const struct cipher_testvec cast6_cbc_tv_template[] = { > "\x4D\x59\x7D\xC5\x28\x69\xFA\x92" > "\x22\x46\x89\x2D\x0F\x2B\x08\x24", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -12131,9 +11992,6 @@ static const struct cipher_testvec cast6_ctr_tv_template[] = { > "\x0E\x74\x33\x30\x62\xB9\x89\xDF" > "\xF9\xC5\xDD\x27\xB3\x39\xCB\xCB", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -12277,9 +12135,6 @@ static const struct cipher_testvec cast6_lrw_tv_template[] = { > "\x8D\xD9\xCD\x3B\x22\x67\x18\xC7" > "\xC4\xF5\x99\x61\xBC\xBB\x5B\x46", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -12425,9 +12280,6 @@ static const struct cipher_testvec cast6_xts_tv_template[] = { > "\xA1\xAC\xE8\xCF\xC6\x74\xCF\xDC" > "\x22\x60\x4E\xE8\xA4\x5D\x85\xB9", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -12596,9 +12448,6 @@ static const struct cipher_testvec aes_tv_template[] = { > "\x09\x79\xA0\x43\x5C\x0D\x08\x58" > "\x17\xBB\xC0\x6B\x62\x3F\x56\xE9", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -12613,9 +12462,6 @@ static const struct cipher_testvec aes_cbc_tv_template[] = { > .ctext = "\xe3\x53\x77\x9c\x10\x79\xae\xb8" > "\x27\x08\x94\x2d\xbe\x77\x18\x1a", > .len = 16, > - .also_non_np = 1, > - .np = 8, > - .tap = { 3, 2, 3, 2, 3, 1, 1, 1 }, > }, { > .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0" > "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a", > @@ -12813,9 +12659,6 @@ static const struct cipher_testvec aes_cbc_tv_template[] = { > "\xE0\x1F\x91\xF8\x82\x96\x2D\x65" > "\xA3\xAA\x13\xCC\x50\xFF\x7B\x02", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -12892,9 +12735,6 @@ static const struct cipher_testvec aes_cfb_tv_template[] = { > "\x75\xa3\x85\x74\x1a\xb9\xce\xf8" > "\x20\x31\x62\x3d\x55\xb1\xe4\x71", > .len = 64, > - .also_non_np = 1, > - .np = 2, > - .tap = { 31, 33 }, > }, { /* > 16 bytes, not a multiple of 16 bytes */ > .key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6" > "\xab\xf7\x15\x88\x09\xcf\x4f\x3c", > @@ -14795,9 +14635,6 @@ static const struct cipher_testvec aes_lrw_tv_template[] = { > "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7" > "\x74\x3f\x7d\x58\x88\x75\xde\x3e", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > } > }; > > @@ -15133,9 +14970,6 @@ static const struct cipher_testvec aes_xts_tv_template[] = { > "\xc4\xf3\x6f\xfd\xa9\xfc\xea\x70" > "\xb9\xc6\xe6\x93\xe1\x48\xc1\x51", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > } > }; > > @@ -15345,9 +15179,6 @@ static const struct cipher_testvec aes_ctr_tv_template[] = { > "\xFA\x3A\x05\x4C\xFA\xD1\xFF\xFE" > "\xF1\x4C\xE5\xB2\x91\x64\x0C\x51", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, { /* Generated with Crypto++ */ > .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55" > "\x0F\x32\x55\x78\x9B\xBE\x78\x9B" > @@ -15483,9 +15314,6 @@ static const struct cipher_testvec aes_ctr_tv_template[] = { > "\xD8\xFE\xC9\x5B\x5C\x25\xE5\x76" > "\xFB\xF2\x3F", > .len = 499, > - .also_non_np = 1, > - .np = 2, > - .tap = { 499 - 16, 16 }, > }, > }; > > @@ -16609,8 +16437,6 @@ static const struct cipher_testvec aes_ctr_rfc3686_tv_template[] = { > "\x4b\xef\x31\x18\xea\xac\xb1\x84" > "\x21\xed\xda\x86", > .len = 4100, > - .np = 2, > - .tap = { 4064, 36 }, > }, > }; > > @@ -16638,9 +16464,6 @@ static const struct cipher_testvec aes_ofb_tv_template[] = { > "\x30\x4c\x65\x28\xf6\x59\xc7\x78" > "\x66\xa5\x10\xd9\xc1\xd6\xae\x5e", > .len = 64, > - .also_non_np = 1, > - .np = 2, > - .tap = { 31, 33 }, > }, { /* > 16 bytes, not a multiple of 16 bytes */ > .key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6" > "\xab\xf7\x15\x88\x09\xcf\x4f\x3c", > @@ -23174,9 +22997,6 @@ static const struct cipher_testvec cast5_tv_template[] = { > "\x4F\xFE\x24\x9C\x9A\x02\xE5\x57" > "\xF5\xBC\x25\xD6\x02\x56\x57\x1C", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -23311,9 +23131,6 @@ static const struct cipher_testvec cast5_cbc_tv_template[] = { > "\x15\x5F\xDB\xE9\xB1\x83\xD2\xE6" > "\x1D\x18\x66\x44\x5B\x8F\x14\xEB", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -23460,9 +23277,6 @@ static const struct cipher_testvec cast5_ctr_tv_template[] = { > "\x8C\x98\xDB\xDE\xFC\x72\x94\xAA" > "\xC0\x0D\x96\xAA\x23\xF8\xFE\x13", > .len = 496, > - .also_non_np = 1, > - .np = 3, > - .tap = { 496 - 20, 4, 16 }, > }, > }; > > @@ -23835,20 +23649,6 @@ static const struct cipher_testvec fcrypt_pcbc_tv_template[] = { > "\x19\x89\x09\x1c\x2a\x8e\x8c\x94" > "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f", > .len = 48, > - }, { /* split-page version */ > - .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10", > - .klen = 8, > - .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87", > - .ptext = "The quick brown fox jumps over the lazy dogs.\0\0", > - .ctext = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c" > - "\x01\x88\x7f\x3e\x31\x6e\x62\x9d" > - "\xd8\xe0\x57\xa3\x06\x3a\x42\x58" > - "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0" > - "\x19\x89\x09\x1c\x2a\x8e\x8c\x94" > - "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f", > - .len = 48, > - .np = 2, > - .tap = { 20, 28 }, > } > }; > > @@ -24145,9 +23945,6 @@ static const struct cipher_testvec camellia_tv_template[] = { > "\xF8\xB2\xAA\x7A\xD6\xFF\xFA\x55" > "\x33\x1A\xBB\xD3\xA2\x7E\x97\x66", > .len = 1008, > - .also_non_np = 1, > - .np = 3, > - .tap = { 1008 - 20, 4, 16 }, > }, > }; > > @@ -24438,9 +24235,6 @@ static const struct cipher_testvec camellia_cbc_tv_template[] = { > "\x55\x01\xD4\x58\xB2\xF2\x85\x49" > "\x70\xC5\xB9\x0B\x3B\x7A\x6E\x6C", > .len = 1008, > - .also_non_np = 1, > - .np = 3, > - .tap = { 1008 - 20, 4, 16 }, > }, > }; > > @@ -24841,9 +24635,6 @@ static const struct cipher_testvec camellia_ctr_tv_template[] = { > "\xE7\x2C\x49\x08\x8B\x72\xFA\x5C" > "\xF1\x6B\xD9", > .len = 1011, > - .also_non_np = 1, > - .np = 2, > - .tap = { 1011 - 16, 16 }, > }, { /* Generated with Crypto++ */ > .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" > "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" > @@ -25346,9 +25137,6 @@ static const struct cipher_testvec camellia_lrw_tv_template[] = { > "\xb2\x1a\xd8\x4c\xbd\x1d\x10\xe9" > "\x5a\xa8\x92\x7f\xba\xe6\x0c\x95", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -25683,9 +25471,6 @@ static const struct cipher_testvec camellia_xts_tv_template[] = { > "\xb7\x16\xd8\x12\x5c\xcd\x7d\x4e" > "\xd5\xc6\x99\xcc\x4e\x6c\x94\x95", > .len = 512, > - .also_non_np = 1, > - .np = 3, > - .tap = { 512 - 20, 4, 16 }, > }, > }; > > @@ -26889,8 +26674,6 @@ static const struct cipher_testvec salsa20_stream_tv_template[] = { > "\x87\x13\xc6\x5b\x59\x8d\xf2\xc8" > "\xaf\xdf\x11\x95", > .len = 4100, > - .np = 2, > - .tap = { 4064, 36 }, > }, > }; > > @@ -27023,9 +26806,6 @@ static const struct cipher_testvec chacha20_tv_template[] = { > "\x5b\x86\x2f\x37\x30\xe3\x7c\xfd" > "\xc4\xfd\x80\x6c\x22\xf2\x21", > .len = 375, > - .also_non_np = 1, > - .np = 3, > - .tap = { 375 - 20, 4, 16 }, > > }, { /* RFC7539 A.2. Test Vector #3 */ > .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" > @@ -27399,9 +27179,6 @@ static const struct cipher_testvec chacha20_tv_template[] = { > "\xa1\xed\xad\xd5\x76\xfa\x24\x8f" > "\x98", > .len = 1281, > - .also_non_np = 1, > - .np = 3, > - .tap = { 1200, 1, 80 }, > }, > }; > > @@ -27594,9 +27371,6 @@ static const struct cipher_testvec xchacha20_tv_template[] = { > "\xab\xff\x1f\x12\xc3\xee\xe5\x65" > "\x12\x8d\x7b\x61\xe5\x1f\x98", > .len = 375, > - .also_non_np = 1, > - .np = 3, > - .tap = { 375 - 20, 4, 16 }, > > }, { /* Derived from a ChaCha20 test vector, via the process above */ > .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" > @@ -27974,9 +27748,6 @@ static const struct cipher_testvec xchacha20_tv_template[] = { > "\xba\xd0\x34\xc9\x2d\x91\xc5\x17" > "\x11", > .len = 1281, > - .also_non_np = 1, > - .np = 3, > - .tap = { 1200, 1, 80 }, > }, { /* test vector from https://tools.ietf.org/html/draft-arciszewski-xchacha-02#appendix-A.3.2 */ > .key = "\x80\x81\x82\x83\x84\x85\x86\x87" > "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" > @@ -28259,9 +28030,6 @@ static const struct cipher_testvec xchacha12_tv_template[] = { > "\xda\x4e\xc9\xab\x9b\x8a\x7b", > > .len = 375, > - .also_non_np = 1, > - .np = 3, > - .tap = { 375 - 20, 4, 16 }, > > }, { > .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" > @@ -28639,9 +28407,6 @@ static const struct cipher_testvec xchacha12_tv_template[] = { > "\xf0\xfc\x5e\x1c\xf1\xf5\xf9\xf3" > "\x5b", > .len = 1281, > - .also_non_np = 1, > - .np = 3, > - .tap = { 1200, 1, 80 }, > }, { > .key = "\x80\x81\x82\x83\x84\x85\x86\x87" > "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" > @@ -28749,9 +28514,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { > .ctext = "\x6d\x32\x86\x18\x67\x86\x0f\x3f" > "\x96\x7c\x9d\x28\x0d\x53\xec\x9f", > .len = 16, > - .also_non_np = 1, > - .np = 2, > - .tap = { 14, 2 }, > }, { > .key = "\x36\x2b\x57\x97\xf8\x5d\xcd\x99" > "\x5f\x1a\x5a\x44\x1d\x92\x0f\x27" > @@ -28814,9 +28576,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { > "\x74\xa6\xaa\xa3\xac\xdc\xc2\xf5" > "\x8d\xde\x34\x86\x78\x60\x75\x8d", > .len = 128, > - .also_non_np = 1, > - .np = 4, > - .tap = { 104, 16, 4, 4 }, > }, { > .key = "\xd3\x81\x72\x18\x23\xff\x6f\x4a" > "\x25\x74\x29\x0d\x51\x8a\x0e\x13" > @@ -28956,9 +28715,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { > "\x21\xb0\x21\x52\xba\xa7\x37\xaa" > "\xcc\xbf\x95\xa8\xf4\xd0\x91\xf6", > .len = 512, > - .also_non_np = 1, > - .np = 2, > - .tap = { 144, 368 }, > } > }; > > @@ -28980,9 +28736,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { > .ctext = "\xf6\x78\x97\xd6\xaa\x94\x01\x27" > "\x2e\x4d\x83\xe0\x6e\x64\x9a\xdf", > .len = 16, > - .also_non_np = 1, > - .np = 3, > - .tap = { 5, 2, 9 }, > }, { > .key = "\x36\x2b\x57\x97\xf8\x5d\xcd\x99" > "\x5f\x1a\x5a\x44\x1d\x92\x0f\x27" > @@ -29002,9 +28755,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { > "\x57\x72\xb5\xfd\xb5\x5d\xb8\x28" > "\x0c\x04\x91\x14\x91\xe9\x37", > .len = 31, > - .also_non_np = 1, > - .np = 2, > - .tap = { 16, 15 }, > }, { > .key = "\xa5\x28\x24\x34\x1a\x3c\xd8\xf7" > "\x05\x91\x8f\xee\x85\x1f\x35\x7f" > @@ -29048,9 +28798,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { > "\x29\x62\x0d\xb2\xf6\x3c\x58\x57" > "\xc1\xd5\x5a\xbb\xd6\xa6\x2a\xe5", > .len = 128, > - .also_non_np = 1, > - .np = 4, > - .tap = { 112, 7, 8, 1 }, > }, { > .key = "\xd3\x81\x72\x18\x23\xff\x6f\x4a" > "\x25\x74\x29\x0d\x51\x8a\x0e\x13" > -- > 2.20.1.321.g9e740568ce-goog >
On Thu, Jan 24, 2019 at 01:36:23PM +0100, Ard Biesheuvel wrote: > On Wed, 23 Jan 2019 at 23:53, Eric Biggers <ebiggers@kernel.org> wrote: > > > > From: Eric Biggers <ebiggers@google.com> > > > > Convert alg_test_skcipher() to use the new test framework, adding a list > > of testvec_configs to test by default. When the extra self-tests are > > enabled, randomly generated testvec_configs are tested as well. > > > > This improves skcipher test coverage mainly because now all algorithms > > have a variety of data layouts tested, whereas before each algorithm was > > responsible for declaring its own chunked test cases which were often > > missing or provided poor test coverage. The new code also tests both > > the MAY_SLEEP and !MAY_SLEEP cases, different IV alignments, and buffers > > that cross pages. > > > > This has already found a bug in the arm64 ctr-aes-neonbs algorithm. > > It would have easily found many past bugs. > > > > I removed the skcipher chunked test vectors that were the same as > > non-chunked ones, but left the ones that were unique. > > > > Signed-off-by: Eric Biggers <ebiggers@google.com> > > This patch does not apply after applying 1..10 onto cryptodev/master > > Do you have a tree somewhere? Hello I got the same with next. You need to apply "crypto: clarify name of WEAK_KEY request flag" from his repo: https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git branch testmgr-improvements Regards
On Thu, 24 Jan 2019 at 14:14, Corentin Labbe <clabbe.montjoie@gmail.com> wrote: > > On Thu, Jan 24, 2019 at 01:36:23PM +0100, Ard Biesheuvel wrote: > > On Wed, 23 Jan 2019 at 23:53, Eric Biggers <ebiggers@kernel.org> wrote: > > > > > > From: Eric Biggers <ebiggers@google.com> > > > > > > Convert alg_test_skcipher() to use the new test framework, adding a list > > > of testvec_configs to test by default. When the extra self-tests are > > > enabled, randomly generated testvec_configs are tested as well. > > > > > > This improves skcipher test coverage mainly because now all algorithms > > > have a variety of data layouts tested, whereas before each algorithm was > > > responsible for declaring its own chunked test cases which were often > > > missing or provided poor test coverage. The new code also tests both > > > the MAY_SLEEP and !MAY_SLEEP cases, different IV alignments, and buffers > > > that cross pages. > > > > > > This has already found a bug in the arm64 ctr-aes-neonbs algorithm. > > > It would have easily found many past bugs. > > > > > > I removed the skcipher chunked test vectors that were the same as > > > non-chunked ones, but left the ones that were unique. > > > > > > Signed-off-by: Eric Biggers <ebiggers@google.com> > > > > This patch does not apply after applying 1..10 onto cryptodev/master > > > > Do you have a tree somewhere? > > Hello > > I got the same with next. > You need to apply "crypto: clarify name of WEAK_KEY request flag" from his repo: > https://git.kernel.org/pub/scm/linux/kernel/git/ebiggers/linux.git branch testmgr-improvements > Thanks I just pulled that branch entirely instead.
diff --git a/crypto/testmgr.c b/crypto/testmgr.c index ccc0e18b13ea..fd3fed8eee4e 100644 --- a/crypto/testmgr.c +++ b/crypto/testmgr.c @@ -284,6 +284,68 @@ struct testvec_config { #define TESTVEC_CONFIG_NAMELEN 192 +/* + * The following are the lists of testvec_configs to test for each algorithm + * type when the basic crypto self-tests are enabled, i.e. when + * CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is unset. They aim to provide good test + * coverage, while keeping the test time much shorter than the full fuzz tests + * so that the basic tests can be enabled in a wider range of circumstances. + */ + +/* Configs for skciphers and aeads */ +static const struct testvec_config default_cipher_testvec_configs[] = { + { + .name = "in-place", + .inplace = true, + .src_divs = { { .proportion_of_total = 10000 } }, + }, { + .name = "out-of-place", + .src_divs = { { .proportion_of_total = 10000 } }, + }, { + .name = "unaligned buffer, offset=1", + .src_divs = { { .proportion_of_total = 10000, .offset = 1 } }, + .iv_offset = 1, + }, { + .name = "buffer aligned only to alignmask", + .src_divs = { + { + .proportion_of_total = 10000, + .offset = 1, + .offset_relative_to_alignmask = true, + }, + }, + .iv_offset = 1, + .iv_offset_relative_to_alignmask = true, + }, { + .name = "two even aligned splits", + .src_divs = { + { .proportion_of_total = 5000 }, + { .proportion_of_total = 5000 }, + }, + }, { + .name = "uneven misaligned splits, may sleep", + .req_flags = CRYPTO_TFM_REQ_MAY_SLEEP, + .src_divs = { + { .proportion_of_total = 1900, .offset = 33 }, + { .proportion_of_total = 3300, .offset = 7 }, + { .proportion_of_total = 4800, .offset = 18 }, + }, + .iv_offset = 3, + }, { + .name = "misaligned splits crossing pages, inplace", + .inplace = true, + .src_divs = { + { + .proportion_of_total = 7500, + .offset = PAGE_SIZE - 32 + }, { + .proportion_of_total = 2500, + .offset = PAGE_SIZE - 7 + }, + }, + } +}; + static unsigned int count_test_sg_divisions(const struct test_sg_division *divs) { unsigned int remaining = TEST_SG_TOTAL; @@ -1608,8 +1670,6 @@ static int test_cipher(struct crypto_cipher *tfm, int enc, j = 0; for (i = 0; i < tcount; i++) { - if (template[i].np) - continue; if (fips_enabled && template[i].fips_skip) continue; @@ -1667,282 +1727,214 @@ static int test_cipher(struct crypto_cipher *tfm, int enc, return ret; } -static int __test_skcipher(struct crypto_skcipher *tfm, int enc, - const struct cipher_testvec *template, - unsigned int tcount, - const bool diff_dst, const int align_offset) +static int test_skcipher_vec_cfg(const char *driver, int enc, + const struct cipher_testvec *vec, + unsigned int vec_num, + const struct testvec_config *cfg, + struct skcipher_request *req, + struct cipher_test_sglists *tsgls) { - const char *algo = - crypto_tfm_alg_driver_name(crypto_skcipher_tfm(tfm)); - unsigned int i, j, k, n, temp; - char *q; - struct skcipher_request *req; - struct scatterlist sg[8]; - struct scatterlist sgout[8]; - const char *e, *d; - struct crypto_wait wait; - const char *input, *result; - void *data; - char iv[MAX_IVLEN]; - char *xbuf[XBUFSIZE]; - char *xoutbuf[XBUFSIZE]; - int ret = -ENOMEM; - unsigned int ivsize = crypto_skcipher_ivsize(tfm); - - if (testmgr_alloc_buf(xbuf)) - goto out_nobuf; - - if (diff_dst && testmgr_alloc_buf(xoutbuf)) - goto out_nooutbuf; - - if (diff_dst) - d = "-ddst"; - else - d = ""; + struct crypto_skcipher *tfm = crypto_skcipher_reqtfm(req); + const unsigned int alignmask = crypto_skcipher_alignmask(tfm); + const unsigned int ivsize = crypto_skcipher_ivsize(tfm); + const u32 req_flags = CRYPTO_TFM_REQ_MAY_BACKLOG | cfg->req_flags; + const char *op = enc ? "encryption" : "decryption"; + DECLARE_CRYPTO_WAIT(wait); + u8 _iv[3 * (MAX_ALGAPI_ALIGNMASK + 1) + MAX_IVLEN]; + u8 *iv = PTR_ALIGN(&_iv[0], 2 * (MAX_ALGAPI_ALIGNMASK + 1)) + + cfg->iv_offset + + (cfg->iv_offset_relative_to_alignmask ? alignmask : 0); + struct kvec input; + int err; - if (enc == ENCRYPT) - e = "encryption"; + /* Set the key */ + if (vec->wk) + crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); else - e = "decryption"; - - crypto_init_wait(&wait); - - req = skcipher_request_alloc(tfm, GFP_KERNEL); - if (!req) { - pr_err("alg: skcipher%s: Failed to allocate request for %s\n", - d, algo); - goto out; + crypto_skcipher_clear_flags(tfm, + CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); + err = crypto_skcipher_setkey(tfm, vec->key, vec->klen); + if (err) { + if (vec->fail) /* expectedly failed to set key? */ + return 0; + pr_err("alg: skcipher: %s setkey failed with err %d on test vector %u; flags=%#x\n", + driver, err, vec_num, crypto_skcipher_get_flags(tfm)); + return err; + } + if (vec->fail) { + pr_err("alg: skcipher: %s setkey unexpectedly succeeded on test vector %u\n", + driver, vec_num); + return -EINVAL; } - skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG, - crypto_req_done, &wait); - - j = 0; - for (i = 0; i < tcount; i++) { - if (template[i].np && !template[i].also_non_np) - continue; - - if (fips_enabled && template[i].fips_skip) - continue; - - if (template[i].iv && !(template[i].generates_iv && enc)) - memcpy(iv, template[i].iv, ivsize); + /* The IV must be copied to a buffer, as the algorithm may modify it */ + if (ivsize) { + if (WARN_ON(ivsize > MAX_IVLEN)) + return -EINVAL; + if (vec->iv && !(vec->generates_iv && enc)) + memcpy(iv, vec->iv, ivsize); else - memset(iv, 0, MAX_IVLEN); - - input = enc ? template[i].ptext : template[i].ctext; - result = enc ? template[i].ctext : template[i].ptext; - j++; - ret = -EINVAL; - if (WARN_ON(align_offset + template[i].len > PAGE_SIZE)) - goto out; - - data = xbuf[0]; - data += align_offset; - memcpy(data, input, template[i].len); - - crypto_skcipher_clear_flags(tfm, ~0); - if (template[i].wk) - crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); - - ret = crypto_skcipher_setkey(tfm, template[i].key, - template[i].klen); - if (template[i].fail == !ret) { - pr_err("alg: skcipher%s: setkey failed on test %d for %s: flags=%x\n", - d, j, algo, crypto_skcipher_get_flags(tfm)); - goto out; - } else if (ret) - continue; - - sg_init_one(&sg[0], data, template[i].len); - if (diff_dst) { - data = xoutbuf[0]; - data += align_offset; - sg_init_one(&sgout[0], data, template[i].len); - } - - skcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, - template[i].len, iv); - ret = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : - crypto_skcipher_decrypt(req), &wait); - - if (ret) { - pr_err("alg: skcipher%s: %s failed on test %d for %s: ret=%d\n", - d, e, j, algo, -ret); - goto out; - } - - q = data; - if (memcmp(q, result, template[i].len)) { - pr_err("alg: skcipher%s: Test %d failed (invalid result) on %s for %s\n", - d, j, e, algo); - hexdump(q, template[i].len); - ret = -EINVAL; - goto out; - } - - if (template[i].generates_iv && enc && - memcmp(iv, template[i].iv, crypto_skcipher_ivsize(tfm))) { - pr_err("alg: skcipher%s: Test %d failed (invalid output IV) on %s for %s\n", - d, j, e, algo); - hexdump(iv, crypto_skcipher_ivsize(tfm)); - ret = -EINVAL; - goto out; + memset(iv, 0, ivsize); + } else { + if (vec->generates_iv) { + pr_err("alg: skcipher: %s has ivsize=0 but test vector %u generates IV!\n", + driver, vec_num); + return -EINVAL; } + iv = NULL; } - j = 0; - for (i = 0; i < tcount; i++) { - /* alignment tests are only done with continuous buffers */ - if (align_offset != 0) - break; - - if (!template[i].np) - continue; - - if (fips_enabled && template[i].fips_skip) - continue; - - if (template[i].iv && !(template[i].generates_iv && enc)) - memcpy(iv, template[i].iv, ivsize); - else - memset(iv, 0, MAX_IVLEN); - - input = enc ? template[i].ptext : template[i].ctext; - result = enc ? template[i].ctext : template[i].ptext; - j++; - crypto_skcipher_clear_flags(tfm, ~0); - if (template[i].wk) - crypto_skcipher_set_flags(tfm, CRYPTO_TFM_REQ_FORBID_WEAK_KEYS); - - ret = crypto_skcipher_setkey(tfm, template[i].key, - template[i].klen); - if (template[i].fail == !ret) { - pr_err("alg: skcipher%s: setkey failed on chunk test %d for %s: flags=%x\n", - d, j, algo, crypto_skcipher_get_flags(tfm)); - goto out; - } else if (ret) - continue; - - temp = 0; - ret = -EINVAL; - sg_init_table(sg, template[i].np); - if (diff_dst) - sg_init_table(sgout, template[i].np); - for (k = 0; k < template[i].np; k++) { - if (WARN_ON(offset_in_page(IDX[k]) + - template[i].tap[k] > PAGE_SIZE)) - goto out; - - q = xbuf[IDX[k] >> PAGE_SHIFT] + offset_in_page(IDX[k]); - - memcpy(q, input + temp, template[i].tap[k]); - - if (offset_in_page(q) + template[i].tap[k] < PAGE_SIZE) - q[template[i].tap[k]] = 0; - - sg_set_buf(&sg[k], q, template[i].tap[k]); - if (diff_dst) { - q = xoutbuf[IDX[k] >> PAGE_SHIFT] + - offset_in_page(IDX[k]); - - sg_set_buf(&sgout[k], q, template[i].tap[k]); + /* Build the src/dst scatterlists */ + input.iov_base = enc ? (void *)vec->ptext : (void *)vec->ctext; + input.iov_len = vec->len; + err = build_cipher_test_sglists(tsgls, cfg, alignmask, + vec->len, vec->len, &input, 1); + if (err) { + pr_err("alg: skcipher: %s %s: error preparing scatterlists for test vector %u, cfg=\"%s\"\n", + driver, op, vec_num, cfg->name); + return err; + } - memset(q, 0, template[i].tap[k]); - if (offset_in_page(q) + - template[i].tap[k] < PAGE_SIZE) - q[template[i].tap[k]] = 0; - } + /* Do the actual encryption or decryption */ + testmgr_poison(req->__ctx, crypto_skcipher_reqsize(tfm)); + skcipher_request_set_callback(req, req_flags, crypto_req_done, &wait); + skcipher_request_set_crypt(req, tsgls->src.sgl_ptr, tsgls->dst.sgl_ptr, + vec->len, iv); + err = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : + crypto_skcipher_decrypt(req), &wait); + if (err) { + pr_err("alg: skcipher: %s %s failed with err %d on test vector %u, cfg=\"%s\"\n", + driver, op, err, vec_num, cfg->name); + return err; + } - temp += template[i].tap[k]; - } + /* Check for the correct output (ciphertext or plaintext) */ + err = verify_correct_output(&tsgls->dst, enc ? vec->ctext : vec->ptext, + vec->len, 0, true); + if (err == -EOVERFLOW) { + pr_err("alg: skcipher: %s %s overran dst buffer on test vector %u, cfg=\"%s\"\n", + driver, op, vec_num, cfg->name); + return err; + } + if (err) { + pr_err("alg: skcipher: %s %s test failed (wrong result) on test vector %u, cfg=\"%s\"\n", + driver, op, vec_num, cfg->name); + return err; + } - skcipher_request_set_crypt(req, sg, (diff_dst) ? sgout : sg, - template[i].len, iv); + /* If applicable, check that the algorithm generated the correct IV */ + if (vec->generates_iv && enc && memcmp(iv, vec->iv, ivsize) != 0) { + pr_err("alg: skcipher: %s %s test failed (wrong output IV) on test vector %u, cfg=\"%s\"\n", + driver, op, vec_num, cfg->name); + hexdump(iv, ivsize); + return -EINVAL; + } - ret = crypto_wait_req(enc ? crypto_skcipher_encrypt(req) : - crypto_skcipher_decrypt(req), &wait); + return 0; +} - if (ret) { - pr_err("alg: skcipher%s: %s failed on chunk test %d for %s: ret=%d\n", - d, e, j, algo, -ret); - goto out; - } +static int test_skcipher_vec(const char *driver, int enc, + const struct cipher_testvec *vec, + unsigned int vec_num, + struct skcipher_request *req, + struct cipher_test_sglists *tsgls) +{ + unsigned int i; + int err; - temp = 0; - ret = -EINVAL; - for (k = 0; k < template[i].np; k++) { - if (diff_dst) - q = xoutbuf[IDX[k] >> PAGE_SHIFT] + - offset_in_page(IDX[k]); - else - q = xbuf[IDX[k] >> PAGE_SHIFT] + - offset_in_page(IDX[k]); + if (fips_enabled && vec->fips_skip) + return 0; - if (memcmp(q, result + temp, template[i].tap[k])) { - pr_err("alg: skcipher%s: Chunk test %d failed on %s at page %u for %s\n", - d, j, e, k, algo); - hexdump(q, template[i].tap[k]); - goto out; - } + for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) { + err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, + &default_cipher_testvec_configs[i], + req, tsgls); + if (err) + return err; + } - q += template[i].tap[k]; - for (n = 0; offset_in_page(q + n) && q[n]; n++) - ; - if (n) { - pr_err("alg: skcipher%s: Result buffer corruption in chunk test %d on %s at page %u for %s: %u bytes:\n", - d, j, e, k, algo, n); - hexdump(q, n); - goto out; - } - temp += template[i].tap[k]; +#ifdef CONFIG_CRYPTO_MANAGER_EXTRA_TESTS + if (!noextratests) { + struct testvec_config cfg; + char cfgname[TESTVEC_CONFIG_NAMELEN]; + + for (i = 0; i < fuzz_iterations; i++) { + generate_random_testvec_config(&cfg, cfgname, + sizeof(cfgname)); + err = test_skcipher_vec_cfg(driver, enc, vec, vec_num, + &cfg, req, tsgls); + if (err) + return err; } } +#endif + return 0; +} - ret = 0; +static int test_skcipher(const char *driver, int enc, + const struct cipher_test_suite *suite, + struct skcipher_request *req, + struct cipher_test_sglists *tsgls) +{ + unsigned int i; + int err; -out: - skcipher_request_free(req); - if (diff_dst) - testmgr_free_buf(xoutbuf); -out_nooutbuf: - testmgr_free_buf(xbuf); -out_nobuf: - return ret; + for (i = 0; i < suite->count; i++) { + err = test_skcipher_vec(driver, enc, &suite->vecs[i], i, req, + tsgls); + if (err) + return err; + } + return 0; } -static int test_skcipher(struct crypto_skcipher *tfm, int enc, - const struct cipher_testvec *template, - unsigned int tcount) +static int alg_test_skcipher(const struct alg_test_desc *desc, + const char *driver, u32 type, u32 mask) { - unsigned int alignmask; - int ret; + const struct cipher_test_suite *suite = &desc->suite.cipher; + struct crypto_skcipher *tfm; + struct skcipher_request *req = NULL; + struct cipher_test_sglists *tsgls = NULL; + int err; - /* test 'dst == src' case */ - ret = __test_skcipher(tfm, enc, template, tcount, false, 0); - if (ret) - return ret; + if (suite->count <= 0) { + pr_err("alg: skcipher: empty test suite for %s\n", driver); + return -EINVAL; + } - /* test 'dst != src' case */ - ret = __test_skcipher(tfm, enc, template, tcount, true, 0); - if (ret) - return ret; + tfm = crypto_alloc_skcipher(driver, type, mask); + if (IS_ERR(tfm)) { + pr_err("alg: skcipher: failed to allocate transform for %s: %ld\n", + driver, PTR_ERR(tfm)); + return PTR_ERR(tfm); + } - /* test unaligned buffers, check with one byte offset */ - ret = __test_skcipher(tfm, enc, template, tcount, true, 1); - if (ret) - return ret; + req = skcipher_request_alloc(tfm, GFP_KERNEL); + if (!req) { + pr_err("alg: skcipher: failed to allocate request for %s\n", + driver); + err = -ENOMEM; + goto out; + } - alignmask = crypto_tfm_alg_alignmask(&tfm->base); - if (alignmask) { - /* Check if alignment mask for tfm is correctly set. */ - ret = __test_skcipher(tfm, enc, template, tcount, true, - alignmask + 1); - if (ret) - return ret; + tsgls = alloc_cipher_test_sglists(); + if (!tsgls) { + pr_err("alg: skcipher: failed to allocate test buffers for %s\n", + driver); + err = -ENOMEM; + goto out; } - return 0; + err = test_skcipher(driver, ENCRYPT, suite, req, tsgls); + if (err) + goto out; + + err = test_skcipher(driver, DECRYPT, suite, req, tsgls); +out: + free_cipher_test_sglists(tsgls); + skcipher_request_free(req); + crypto_free_skcipher(tfm); + return err; } static int test_comp(struct crypto_comp *tfm, @@ -2326,28 +2318,6 @@ static int alg_test_cipher(const struct alg_test_desc *desc, return err; } -static int alg_test_skcipher(const struct alg_test_desc *desc, - const char *driver, u32 type, u32 mask) -{ - const struct cipher_test_suite *suite = &desc->suite.cipher; - struct crypto_skcipher *tfm; - int err; - - tfm = crypto_alloc_skcipher(driver, type, mask); - if (IS_ERR(tfm)) { - printk(KERN_ERR "alg: skcipher: Failed to load transform for " - "%s: %ld\n", driver, PTR_ERR(tfm)); - return PTR_ERR(tfm); - } - - err = test_skcipher(tfm, ENCRYPT, suite->vecs, suite->count); - if (!err) - err = test_skcipher(tfm, DECRYPT, suite->vecs, suite->count); - - crypto_free_skcipher(tfm); - return err; -} - static int alg_test_comp(const struct alg_test_desc *desc, const char *driver, u32 type, u32 mask) { @@ -4220,6 +4190,11 @@ static void alg_check_test_descs_order(void) static void alg_check_testvec_configs(void) { + int i; + + for (i = 0; i < ARRAY_SIZE(default_cipher_testvec_configs); i++) + WARN_ON(!valid_testvec_config( + &default_cipher_testvec_configs[i])); } static void testmgr_onetime_init(void) diff --git a/crypto/testmgr.h b/crypto/testmgr.h index d8f6035c7ff2..1a73af8a79f7 100644 --- a/crypto/testmgr.h +++ b/crypto/testmgr.h @@ -52,10 +52,6 @@ struct hash_testvec { * @fail: If set to one, the test need to fail * @wk: Does the test need CRYPTO_TFM_REQ_FORBID_WEAK_KEYS? * ( e.g. test needs to fail due to a weak key ) - * @np: numbers of SG to distribute data in (from 1 to MAX_TAP) - * @tap: How to distribute data in @np SGs - * @also_non_np: if set to 1, the test will be also done without - * splitting data in @np SGs * @fips_skip: Skip the test vector in FIPS mode * @generates_iv: Encryption should ignore the given IV, and output @iv. * Decryption takes @iv. Needed for AES Keywrap ("kw(aes)"). @@ -65,9 +61,6 @@ struct cipher_testvec { const char *iv; const char *ptext; const char *ctext; - unsigned short tap[MAX_TAP]; - int np; - unsigned char also_non_np; bool fail; unsigned char wk; /* weak key flag */ unsigned char klen; @@ -7011,18 +7004,6 @@ static const struct cipher_testvec des_tv_template[] = { .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", .len = 16, - .np = 2, - .tap = { 8, 8 } - }, { - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", - .klen = 8, - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" - "\xa3\x99\x7b\xca\xaf\x69\xa0\xf5", - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" - "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b", - .len = 16, - .np = 2, - .tap = { 8, 8 } }, { .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", .klen = 8, @@ -7031,8 +7012,6 @@ static const struct cipher_testvec des_tv_template[] = { .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" "\x69\x0f\x5b\x0d\x9a\x26\x93\x9b", .len = 16, - .np = 3, - .tap = { 3, 12, 1 } }, { /* Four blocks -- for testing encryption with chunking */ .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", .klen = 8, @@ -7045,38 +7024,6 @@ static const struct cipher_testvec des_tv_template[] = { "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90" "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", .len = 32, - .np = 3, - .tap = { 14, 10, 8 } - }, { - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", - .klen = 8, - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" - "\x22\x33\x44\x55\x66\x77\x88\x99" - "\xca\xfe\xba\xbe\xfe\xed\xbe\xef", - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" - "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b" - "\xb4\x99\x26\xf7\x1f\xe1\xd4\x90", - .len = 24, - .np = 4, - .tap = { 2, 1, 3, 18 } - }, { - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", - .klen = 8, - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7" - "\x22\x33\x44\x55\x66\x77\x88\x99", - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d" - "\xf7\x9c\x89\x2a\x33\x8f\x4a\x8b", - .len = 16, - .np = 5, - .tap = { 2, 2, 2, 2, 8 } - }, { - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", - .klen = 8, - .ptext = "\x01\x23\x45\x67\x89\xab\xcd\xe7", - .ctext = "\xc9\x57\x44\x25\x6a\x5e\xd3\x1d", - .len = 8, - .np = 8, - .tap = { 1, 1, 1, 1, 1, 1, 1, 1 } }, { /* Generated with Crypto++ */ .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", .klen = 8, @@ -7143,9 +7090,6 @@ static const struct cipher_testvec des_tv_template[] = { "\xE1\x58\x39\x09\xB4\x8B\x40\xAC" "\x5F\x62\xC7\x72\xD9\xFC\xCB\x9A", .len = 248, - .also_non_np = 1, - .np = 3, - .tap = { 248 - 10, 2, 8 }, }, }; @@ -7182,23 +7126,6 @@ static const struct cipher_testvec des_cbc_tv_template[] = { .ptext = "\x66\x6f\x72\x20\x61\x6c\x6c\x20", .ctext = "\x68\x37\x88\x49\x9a\x7c\x05\xf6", .len = 8, - .np = 2, - .tap = { 4, 4 }, - .also_non_np = 1, - }, { /* Copy of openssl vector for chunk testing */ - /* From OpenSSL */ - .key = "\x01\x23\x45\x67\x89\xab\xcd\xef", - .klen = 8, - .iv = "\xfe\xdc\xba\x98\x76\x54\x32\x10", - .ptext = "\x37\x36\x35\x34\x33\x32\x31\x20" - "\x4e\x6f\x77\x20\x69\x73\x20\x74" - "\x68\x65\x20\x74\x69\x6d\x65\x20", - .ctext = "\xcc\xd1\x73\xff\xab\x20\x39\xf4" - "\xac\xd8\xae\xfd\xdf\xd8\xa1\xeb" - "\x46\x8e\x91\x15\x78\x88\xba\x68", - .len = 24, - .np = 2, - .tap = { 13, 11 } }, { /* Generated with Crypto++ */ .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", .klen = 8, @@ -7266,9 +7193,6 @@ static const struct cipher_testvec des_cbc_tv_template[] = { "\x82\xA9\xBD\x6A\x31\x91\x39\x11" "\xC6\x4A\xF3\x55\xC7\x29\x2E\x63", .len = 248, - .also_non_np = 1, - .np = 3, - .tap = { 248 - 10, 2, 8 }, }, }; @@ -7340,9 +7264,6 @@ static const struct cipher_testvec des_ctr_tv_template[] = { "\x19\x7F\x99\x19\x53\xCE\x1D\x14" "\x69\x74\xA1\x06\x46\x0F\x4E\x75", .len = 248, - .also_non_np = 1, - .np = 3, - .tap = { 248 - 10, 2, 8 }, }, { /* Generated with Crypto++ */ .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55", .klen = 8, @@ -7410,9 +7331,6 @@ static const struct cipher_testvec des_ctr_tv_template[] = { "\xA5\xA6\xE7\xB0\x51\x36\x52\x37" "\x91\x45\x05\x3E\x58\xBF\x32", .len = 247, - .also_non_np = 1, - .np = 2, - .tap = { 247 - 8, 8 }, }, }; @@ -7571,9 +7489,6 @@ static const struct cipher_testvec des3_ede_tv_template[] = { "\x93\x03\xD7\x51\x09\xFA\xBE\x68" "\xD8\x45\xFF\x33\xBA\xBB\x2B\x63", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -7749,9 +7664,6 @@ static const struct cipher_testvec des3_ede_cbc_tv_template[] = { "\x83\x70\xFF\x86\xE6\xAA\x0F\x1F" "\x95\x63\x73\xA2\x44\xAC\xF8\xA5", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -7888,9 +7800,6 @@ static const struct cipher_testvec des3_ede_ctr_tv_template[] = { "\xFD\x51\xB0\xC6\x2C\x63\x13\x78" "\x5C\xEE\xFC\xCF\xC4\x70\x00\x34", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, { /* Generated with Crypto++ */ .key = "\x9C\xD6\xF3\x9C\xB9\x5A\x67\x00" "\x5A\x67\x00\x2D\xCE\xEB\x2D\xCE" @@ -8025,9 +7934,6 @@ static const struct cipher_testvec des3_ede_ctr_tv_template[] = { "\x32\x0F\x05\x2F\xF2\x4C\x95\x3B" "\xF2\x79\xD9", .len = 499, - .also_non_np = 1, - .np = 2, - .tap = { 499 - 16, 16 }, }, }; @@ -8213,9 +8119,6 @@ static const struct cipher_testvec bf_tv_template[] = { "\x56\xEB\x36\x77\x3D\xAA\xB8\xF5" "\xC9\x1A\xFB\x5D\xDE\xBB\x43\xF4", .len = 504, - .also_non_np = 1, - .np = 3, - .tap = { 504 - 10, 2, 8 }, }, }; @@ -8368,9 +8271,6 @@ static const struct cipher_testvec bf_cbc_tv_template[] = { "\x93\x9B\xEE\xB5\x97\x41\xD2\xA0" "\xB4\x98\xD8\x6B\x74\xE7\x65\xF4", .len = 504, - .also_non_np = 1, - .np = 3, - .tap = { 504 - 10, 2, 8 }, }, }; @@ -8643,9 +8543,6 @@ static const struct cipher_testvec bf_ctr_tv_template[] = { "\x32\x44\x96\x1C\xD8\xEB\x95\xD2" "\xF3\x71\xEF\xEB\x4E\xBB\x4D", .len = 503, - .also_non_np = 1, - .np = 2, - .tap = { 503 - 8, 8 }, }, { /* Generated with Crypto++ */ .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" @@ -8944,9 +8841,6 @@ static const struct cipher_testvec tf_tv_template[] = { "\x58\x33\x9B\x78\xC7\x58\x48\x6B" "\x2C\x75\x64\xC4\xCA\xC1\x7E\xD5", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -9122,9 +9016,6 @@ static const struct cipher_testvec tf_cbc_tv_template[] = { "\x30\x70\x56\xA4\x37\xDD\x7C\xC0" "\x0A\xA3\x30\x10\x26\x25\x41\x2C", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -9530,9 +9421,6 @@ static const struct cipher_testvec tf_ctr_tv_template[] = { "\xC5\xC9\x7F\x9E\xCF\x33\x7A\xDF" "\x6C\x82\x9D", .len = 499, - .also_non_np = 1, - .np = 2, - .tap = { 499 - 16, 16 }, }, }; @@ -9774,9 +9662,6 @@ static const struct cipher_testvec tf_lrw_tv_template[] = { "\x80\x18\xc4\x6c\x03\xd3\xb7\xba" "\x11\xd7\xb8\x6e\xea\xe1\x80\x30", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -10111,9 +9996,6 @@ static const struct cipher_testvec tf_xts_tv_template[] = { "\xa4\x05\x0b\xb2\xb3\xa8\x30\x97" "\x37\x30\xe1\x91\x8d\xb3\x2a\xff", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -10286,9 +10168,6 @@ static const struct cipher_testvec serpent_tv_template[] = { "\x75\x55\x9B\xFF\x36\x73\xAB\x7C" "\xF4\x46\x2E\xEB\xAC\xF3\xD2\xB7", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -10505,9 +10384,6 @@ static const struct cipher_testvec serpent_cbc_tv_template[] = { "\xFC\x66\xAA\x37\xF2\x37\x39\x6B" "\xBC\x08\x3A\xA2\x29\xB3\xDF\xD1", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -10780,9 +10656,6 @@ static const struct cipher_testvec serpent_ctr_tv_template[] = { "\x40\x53\x77\x8C\x15\xF8\x8D\x13" "\x38\xE2\xE5", .len = 499, - .also_non_np = 1, - .np = 2, - .tap = { 499 - 16, 16 }, }, { /* Generated with Crypto++ */ .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" @@ -11157,9 +11030,6 @@ static const struct cipher_testvec serpent_lrw_tv_template[] = { "\x5c\xc6\x84\xfe\x7c\xcb\x26\xfd" "\xd9\x51\x0f\xd7\x94\x2f\xc5\xa7", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -11494,9 +11364,6 @@ static const struct cipher_testvec serpent_xts_tv_template[] = { "\xaf\x43\x0b\xc5\x20\x41\x92\x20" "\xd4\xa0\x91\x98\x11\x5f\x4d\xb1", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -11836,9 +11703,6 @@ static const struct cipher_testvec cast6_tv_template[] = { "\x84\x52\x6D\x68\xDE\xC6\x64\xB2" "\x11\x74\x93\x57\xB4\x7E\xC6\x00", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -11976,9 +11840,6 @@ static const struct cipher_testvec cast6_cbc_tv_template[] = { "\x4D\x59\x7D\xC5\x28\x69\xFA\x92" "\x22\x46\x89\x2D\x0F\x2B\x08\x24", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -12131,9 +11992,6 @@ static const struct cipher_testvec cast6_ctr_tv_template[] = { "\x0E\x74\x33\x30\x62\xB9\x89\xDF" "\xF9\xC5\xDD\x27\xB3\x39\xCB\xCB", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -12277,9 +12135,6 @@ static const struct cipher_testvec cast6_lrw_tv_template[] = { "\x8D\xD9\xCD\x3B\x22\x67\x18\xC7" "\xC4\xF5\x99\x61\xBC\xBB\x5B\x46", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -12425,9 +12280,6 @@ static const struct cipher_testvec cast6_xts_tv_template[] = { "\xA1\xAC\xE8\xCF\xC6\x74\xCF\xDC" "\x22\x60\x4E\xE8\xA4\x5D\x85\xB9", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -12596,9 +12448,6 @@ static const struct cipher_testvec aes_tv_template[] = { "\x09\x79\xA0\x43\x5C\x0D\x08\x58" "\x17\xBB\xC0\x6B\x62\x3F\x56\xE9", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -12613,9 +12462,6 @@ static const struct cipher_testvec aes_cbc_tv_template[] = { .ctext = "\xe3\x53\x77\x9c\x10\x79\xae\xb8" "\x27\x08\x94\x2d\xbe\x77\x18\x1a", .len = 16, - .also_non_np = 1, - .np = 8, - .tap = { 3, 2, 3, 2, 3, 1, 1, 1 }, }, { .key = "\xc2\x86\x69\x6d\x88\x7c\x9a\xa0" "\x61\x1b\xbb\x3e\x20\x25\xa4\x5a", @@ -12813,9 +12659,6 @@ static const struct cipher_testvec aes_cbc_tv_template[] = { "\xE0\x1F\x91\xF8\x82\x96\x2D\x65" "\xA3\xAA\x13\xCC\x50\xFF\x7B\x02", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -12892,9 +12735,6 @@ static const struct cipher_testvec aes_cfb_tv_template[] = { "\x75\xa3\x85\x74\x1a\xb9\xce\xf8" "\x20\x31\x62\x3d\x55\xb1\xe4\x71", .len = 64, - .also_non_np = 1, - .np = 2, - .tap = { 31, 33 }, }, { /* > 16 bytes, not a multiple of 16 bytes */ .key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6" "\xab\xf7\x15\x88\x09\xcf\x4f\x3c", @@ -14795,9 +14635,6 @@ static const struct cipher_testvec aes_lrw_tv_template[] = { "\xcd\x7e\x2b\x5d\x43\xea\x42\xe7" "\x74\x3f\x7d\x58\x88\x75\xde\x3e", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, } }; @@ -15133,9 +14970,6 @@ static const struct cipher_testvec aes_xts_tv_template[] = { "\xc4\xf3\x6f\xfd\xa9\xfc\xea\x70" "\xb9\xc6\xe6\x93\xe1\x48\xc1\x51", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, } }; @@ -15345,9 +15179,6 @@ static const struct cipher_testvec aes_ctr_tv_template[] = { "\xFA\x3A\x05\x4C\xFA\xD1\xFF\xFE" "\xF1\x4C\xE5\xB2\x91\x64\x0C\x51", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, { /* Generated with Crypto++ */ .key = "\xC9\x83\xA6\xC9\xEC\x0F\x32\x55" "\x0F\x32\x55\x78\x9B\xBE\x78\x9B" @@ -15483,9 +15314,6 @@ static const struct cipher_testvec aes_ctr_tv_template[] = { "\xD8\xFE\xC9\x5B\x5C\x25\xE5\x76" "\xFB\xF2\x3F", .len = 499, - .also_non_np = 1, - .np = 2, - .tap = { 499 - 16, 16 }, }, }; @@ -16609,8 +16437,6 @@ static const struct cipher_testvec aes_ctr_rfc3686_tv_template[] = { "\x4b\xef\x31\x18\xea\xac\xb1\x84" "\x21\xed\xda\x86", .len = 4100, - .np = 2, - .tap = { 4064, 36 }, }, }; @@ -16638,9 +16464,6 @@ static const struct cipher_testvec aes_ofb_tv_template[] = { "\x30\x4c\x65\x28\xf6\x59\xc7\x78" "\x66\xa5\x10\xd9\xc1\xd6\xae\x5e", .len = 64, - .also_non_np = 1, - .np = 2, - .tap = { 31, 33 }, }, { /* > 16 bytes, not a multiple of 16 bytes */ .key = "\x2b\x7e\x15\x16\x28\xae\xd2\xa6" "\xab\xf7\x15\x88\x09\xcf\x4f\x3c", @@ -23174,9 +22997,6 @@ static const struct cipher_testvec cast5_tv_template[] = { "\x4F\xFE\x24\x9C\x9A\x02\xE5\x57" "\xF5\xBC\x25\xD6\x02\x56\x57\x1C", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -23311,9 +23131,6 @@ static const struct cipher_testvec cast5_cbc_tv_template[] = { "\x15\x5F\xDB\xE9\xB1\x83\xD2\xE6" "\x1D\x18\x66\x44\x5B\x8F\x14\xEB", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -23460,9 +23277,6 @@ static const struct cipher_testvec cast5_ctr_tv_template[] = { "\x8C\x98\xDB\xDE\xFC\x72\x94\xAA" "\xC0\x0D\x96\xAA\x23\xF8\xFE\x13", .len = 496, - .also_non_np = 1, - .np = 3, - .tap = { 496 - 20, 4, 16 }, }, }; @@ -23835,20 +23649,6 @@ static const struct cipher_testvec fcrypt_pcbc_tv_template[] = { "\x19\x89\x09\x1c\x2a\x8e\x8c\x94" "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f", .len = 48, - }, { /* split-page version */ - .key = "\xfe\xdc\xba\x98\x76\x54\x32\x10", - .klen = 8, - .iv = "\xf0\xe1\xd2\xc3\xb4\xa5\x96\x87", - .ptext = "The quick brown fox jumps over the lazy dogs.\0\0", - .ctext = "\xca\x90\xf5\x9d\xcb\xd4\xd2\x3c" - "\x01\x88\x7f\x3e\x31\x6e\x62\x9d" - "\xd8\xe0\x57\xa3\x06\x3a\x42\x58" - "\x2a\x28\xfe\x72\x52\x2f\xdd\xe0" - "\x19\x89\x09\x1c\x2a\x8e\x8c\x94" - "\xfc\xc7\x68\xe4\x88\xaa\xde\x0f", - .len = 48, - .np = 2, - .tap = { 20, 28 }, } }; @@ -24145,9 +23945,6 @@ static const struct cipher_testvec camellia_tv_template[] = { "\xF8\xB2\xAA\x7A\xD6\xFF\xFA\x55" "\x33\x1A\xBB\xD3\xA2\x7E\x97\x66", .len = 1008, - .also_non_np = 1, - .np = 3, - .tap = { 1008 - 20, 4, 16 }, }, }; @@ -24438,9 +24235,6 @@ static const struct cipher_testvec camellia_cbc_tv_template[] = { "\x55\x01\xD4\x58\xB2\xF2\x85\x49" "\x70\xC5\xB9\x0B\x3B\x7A\x6E\x6C", .len = 1008, - .also_non_np = 1, - .np = 3, - .tap = { 1008 - 20, 4, 16 }, }, }; @@ -24841,9 +24635,6 @@ static const struct cipher_testvec camellia_ctr_tv_template[] = { "\xE7\x2C\x49\x08\x8B\x72\xFA\x5C" "\xF1\x6B\xD9", .len = 1011, - .also_non_np = 1, - .np = 2, - .tap = { 1011 - 16, 16 }, }, { /* Generated with Crypto++ */ .key = "\x85\x62\x3F\x1C\xF9\xD6\x1C\xF9" "\xD6\xB3\x90\x6D\x4A\x90\x6D\x4A" @@ -25346,9 +25137,6 @@ static const struct cipher_testvec camellia_lrw_tv_template[] = { "\xb2\x1a\xd8\x4c\xbd\x1d\x10\xe9" "\x5a\xa8\x92\x7f\xba\xe6\x0c\x95", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -25683,9 +25471,6 @@ static const struct cipher_testvec camellia_xts_tv_template[] = { "\xb7\x16\xd8\x12\x5c\xcd\x7d\x4e" "\xd5\xc6\x99\xcc\x4e\x6c\x94\x95", .len = 512, - .also_non_np = 1, - .np = 3, - .tap = { 512 - 20, 4, 16 }, }, }; @@ -26889,8 +26674,6 @@ static const struct cipher_testvec salsa20_stream_tv_template[] = { "\x87\x13\xc6\x5b\x59\x8d\xf2\xc8" "\xaf\xdf\x11\x95", .len = 4100, - .np = 2, - .tap = { 4064, 36 }, }, }; @@ -27023,9 +26806,6 @@ static const struct cipher_testvec chacha20_tv_template[] = { "\x5b\x86\x2f\x37\x30\xe3\x7c\xfd" "\xc4\xfd\x80\x6c\x22\xf2\x21", .len = 375, - .also_non_np = 1, - .np = 3, - .tap = { 375 - 20, 4, 16 }, }, { /* RFC7539 A.2. Test Vector #3 */ .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" @@ -27399,9 +27179,6 @@ static const struct cipher_testvec chacha20_tv_template[] = { "\xa1\xed\xad\xd5\x76\xfa\x24\x8f" "\x98", .len = 1281, - .also_non_np = 1, - .np = 3, - .tap = { 1200, 1, 80 }, }, }; @@ -27594,9 +27371,6 @@ static const struct cipher_testvec xchacha20_tv_template[] = { "\xab\xff\x1f\x12\xc3\xee\xe5\x65" "\x12\x8d\x7b\x61\xe5\x1f\x98", .len = 375, - .also_non_np = 1, - .np = 3, - .tap = { 375 - 20, 4, 16 }, }, { /* Derived from a ChaCha20 test vector, via the process above */ .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" @@ -27974,9 +27748,6 @@ static const struct cipher_testvec xchacha20_tv_template[] = { "\xba\xd0\x34\xc9\x2d\x91\xc5\x17" "\x11", .len = 1281, - .also_non_np = 1, - .np = 3, - .tap = { 1200, 1, 80 }, }, { /* test vector from https://tools.ietf.org/html/draft-arciszewski-xchacha-02#appendix-A.3.2 */ .key = "\x80\x81\x82\x83\x84\x85\x86\x87" "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" @@ -28259,9 +28030,6 @@ static const struct cipher_testvec xchacha12_tv_template[] = { "\xda\x4e\xc9\xab\x9b\x8a\x7b", .len = 375, - .also_non_np = 1, - .np = 3, - .tap = { 375 - 20, 4, 16 }, }, { .key = "\x1c\x92\x40\xa5\xeb\x55\xd3\x8a" @@ -28639,9 +28407,6 @@ static const struct cipher_testvec xchacha12_tv_template[] = { "\xf0\xfc\x5e\x1c\xf1\xf5\xf9\xf3" "\x5b", .len = 1281, - .also_non_np = 1, - .np = 3, - .tap = { 1200, 1, 80 }, }, { .key = "\x80\x81\x82\x83\x84\x85\x86\x87" "\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f" @@ -28749,9 +28514,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { .ctext = "\x6d\x32\x86\x18\x67\x86\x0f\x3f" "\x96\x7c\x9d\x28\x0d\x53\xec\x9f", .len = 16, - .also_non_np = 1, - .np = 2, - .tap = { 14, 2 }, }, { .key = "\x36\x2b\x57\x97\xf8\x5d\xcd\x99" "\x5f\x1a\x5a\x44\x1d\x92\x0f\x27" @@ -28814,9 +28576,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { "\x74\xa6\xaa\xa3\xac\xdc\xc2\xf5" "\x8d\xde\x34\x86\x78\x60\x75\x8d", .len = 128, - .also_non_np = 1, - .np = 4, - .tap = { 104, 16, 4, 4 }, }, { .key = "\xd3\x81\x72\x18\x23\xff\x6f\x4a" "\x25\x74\x29\x0d\x51\x8a\x0e\x13" @@ -28956,9 +28715,6 @@ static const struct cipher_testvec adiantum_xchacha12_aes_tv_template[] = { "\x21\xb0\x21\x52\xba\xa7\x37\xaa" "\xcc\xbf\x95\xa8\xf4\xd0\x91\xf6", .len = 512, - .also_non_np = 1, - .np = 2, - .tap = { 144, 368 }, } }; @@ -28980,9 +28736,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { .ctext = "\xf6\x78\x97\xd6\xaa\x94\x01\x27" "\x2e\x4d\x83\xe0\x6e\x64\x9a\xdf", .len = 16, - .also_non_np = 1, - .np = 3, - .tap = { 5, 2, 9 }, }, { .key = "\x36\x2b\x57\x97\xf8\x5d\xcd\x99" "\x5f\x1a\x5a\x44\x1d\x92\x0f\x27" @@ -29002,9 +28755,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { "\x57\x72\xb5\xfd\xb5\x5d\xb8\x28" "\x0c\x04\x91\x14\x91\xe9\x37", .len = 31, - .also_non_np = 1, - .np = 2, - .tap = { 16, 15 }, }, { .key = "\xa5\x28\x24\x34\x1a\x3c\xd8\xf7" "\x05\x91\x8f\xee\x85\x1f\x35\x7f" @@ -29048,9 +28798,6 @@ static const struct cipher_testvec adiantum_xchacha20_aes_tv_template[] = { "\x29\x62\x0d\xb2\xf6\x3c\x58\x57" "\xc1\xd5\x5a\xbb\xd6\xa6\x2a\xe5", .len = 128, - .also_non_np = 1, - .np = 4, - .tap = { 112, 7, 8, 1 }, }, { .key = "\xd3\x81\x72\x18\x23\xff\x6f\x4a" "\x25\x74\x29\x0d\x51\x8a\x0e\x13"