]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - crypto/testmgr.c
Merge remote-tracking branch 'sound-current/for-linus'
[karo-tx-linux.git] / crypto / testmgr.c
index fa18753f5c344de0eba58d9c9c1296255f4178c7..ae8c57fd8bc7f855e4fb73145a1ec72a34540add 100644 (file)
@@ -1034,12 +1034,22 @@ static int __test_skcipher(struct crypto_skcipher *tfm, int enc,
 
                q = data;
                if (memcmp(q, template[i].result, template[i].rlen)) {
-                       pr_err("alg: skcipher%s: Test %d failed on %s for %s\n",
+                       pr_err("alg: skcipher%s: Test %d failed (invalid result) on %s for %s\n",
                               d, j, e, algo);
                        hexdump(q, template[i].rlen);
                        ret = -EINVAL;
                        goto out;
                }
+
+               if (template[i].iv_out &&
+                   memcmp(iv, template[i].iv_out,
+                          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;
+               }
        }
 
        j = 0;
@@ -1845,34 +1855,34 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
        struct tcrypt_result result;
        unsigned int out_len_max, out_len = 0;
        int err = -ENOMEM;
+       struct scatterlist src, dst, src_tab[2];
 
        req = akcipher_request_alloc(tfm, GFP_KERNEL);
        if (!req)
                return err;
 
        init_completion(&result.completion);
-       err = crypto_akcipher_setkey(tfm, vecs->key, vecs->key_len);
-       if (err)
-               goto free_req;
 
-       akcipher_request_set_crypt(req, vecs->m, outbuf_enc, vecs->m_size,
-                                  out_len);
-       /* expect this to fail, and update the required buf len */
-       crypto_akcipher_encrypt(req);
-       out_len = req->dst_len;
-       if (!out_len) {
-               err = -EINVAL;
+       if (vecs->public_key_vec)
+               err = crypto_akcipher_set_pub_key(tfm, vecs->key,
+                                                 vecs->key_len);
+       else
+               err = crypto_akcipher_set_priv_key(tfm, vecs->key,
+                                                  vecs->key_len);
+       if (err)
                goto free_req;
-       }
 
-       out_len_max = out_len;
-       err = -ENOMEM;
+       out_len_max = crypto_akcipher_maxsize(tfm);
        outbuf_enc = kzalloc(out_len_max, GFP_KERNEL);
        if (!outbuf_enc)
                goto free_req;
 
-       akcipher_request_set_crypt(req, vecs->m, outbuf_enc, vecs->m_size,
-                                  out_len);
+       sg_init_table(src_tab, 2);
+       sg_set_buf(&src_tab[0], vecs->m, 8);
+       sg_set_buf(&src_tab[1], vecs->m + 8, vecs->m_size - 8);
+       sg_init_one(&dst, outbuf_enc, out_len_max);
+       akcipher_request_set_crypt(req, src_tab, &dst, vecs->m_size,
+                                  out_len_max);
        akcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG,
                                      tcrypt_complete, &result);
 
@@ -1882,13 +1892,13 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
                pr_err("alg: rsa: encrypt test failed. err %d\n", err);
                goto free_all;
        }
-       if (out_len != vecs->c_size) {
+       if (req->dst_len != vecs->c_size) {
                pr_err("alg: rsa: encrypt test failed. Invalid output len\n");
                err = -EINVAL;
                goto free_all;
        }
        /* verify that encrypted message is equal to expected */
-       if (memcmp(vecs->c, outbuf_enc, vecs->c_size)) {
+       if (memcmp(vecs->c, sg_virt(req->dst), vecs->c_size)) {
                pr_err("alg: rsa: encrypt test failed. Invalid output\n");
                err = -EINVAL;
                goto free_all;
@@ -1903,9 +1913,10 @@ static int do_test_rsa(struct crypto_akcipher *tfm,
                err = -ENOMEM;
                goto free_all;
        }
+       sg_init_one(&src, vecs->c, vecs->c_size);
+       sg_init_one(&dst, outbuf_dec, out_len_max);
        init_completion(&result.completion);
-       akcipher_request_set_crypt(req, outbuf_enc, outbuf_dec, vecs->c_size,
-                                  out_len);
+       akcipher_request_set_crypt(req, &src, &dst, vecs->c_size, out_len_max);
 
        /* Run RSA decrypt - m = c^d mod n;*/
        err = wait_async_op(&result, crypto_akcipher_decrypt(req));
@@ -2080,7 +2091,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(md5),ecb(cipher_null))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2096,7 +2106,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha1),cbc(aes))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2110,7 +2119,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha1),cbc(des))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2124,7 +2132,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha1),cbc(des3_ede))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2138,7 +2145,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha1),ecb(cipher_null))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2158,7 +2164,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha224),cbc(des))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2172,7 +2177,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha224),cbc(des3_ede))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2186,7 +2190,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha256),cbc(aes))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2200,7 +2203,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha256),cbc(des))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2214,7 +2216,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha256),cbc(des3_ede))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2228,7 +2229,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha384),cbc(des))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2242,7 +2242,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha384),cbc(des3_ede))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2256,7 +2255,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha512),cbc(aes))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2270,7 +2268,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha512),cbc(des))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -2284,7 +2281,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "authenc(hmac(sha512),cbc(des3_ede))",
                .test = alg_test_aead,
-               .fips_allowed = 1,
                .suite = {
                        .aead = {
                                .enc = {
@@ -3011,7 +3007,6 @@ static const struct alg_test_desc alg_test_descs[] = {
        }, {
                .alg = "ecb(des)",
                .test = alg_test_skcipher,
-               .fips_allowed = 1,
                .suite = {
                        .cipher = {
                                .enc = {
@@ -3291,6 +3286,22 @@ static const struct alg_test_desc alg_test_descs[] = {
                .alg = "jitterentropy_rng",
                .fips_allowed = 1,
                .test = alg_test_null,
+       }, {
+               .alg = "kw(aes)",
+               .test = alg_test_skcipher,
+               .fips_allowed = 1,
+               .suite = {
+                       .cipher = {
+                               .enc = {
+                                       .vecs = aes_kw_enc_tv_template,
+                                       .count = ARRAY_SIZE(aes_kw_enc_tv_template)
+                               },
+                               .dec = {
+                                       .vecs = aes_kw_dec_tv_template,
+                                       .count = ARRAY_SIZE(aes_kw_dec_tv_template)
+                               }
+                       }
+               }
        }, {
                .alg = "lrw(aes)",
                .test = alg_test_skcipher,