Lines Matching +full:inline +full:- +full:crypto +full:- +full:engine
1 // SPDX-License-Identifier: GPL-2.0-only
3 * AMD Cryptographic Coprocessor (CCP) RSA crypto API support
13 #include <linux/crypto.h>
14 #include <crypto/algapi.h>
15 #include <crypto/internal/rsa.h>
16 #include <crypto/internal/akcipher.h>
17 #include <crypto/akcipher.h>
18 #include <crypto/scatterwalk.h>
20 #include "ccp-crypto.h"
22 static inline struct akcipher_request *akcipher_request_cast( in akcipher_request_cast()
28 static inline int ccp_copy_and_save_keypart(u8 **kpbuf, unsigned int *kplen, in ccp_copy_and_save_keypart()
36 *kplen = sz - nskip; in ccp_copy_and_save_keypart()
39 return -ENOMEM; in ccp_copy_and_save_keypart()
52 req->dst_len = rctx->cmd.u.rsa.key_size >> 3; in ccp_rsa_complete()
61 return ctx->u.rsa.n_len; in ccp_rsa_maxsize()
71 memset(&rctx->cmd, 0, sizeof(rctx->cmd)); in ccp_rsa_crypt()
72 INIT_LIST_HEAD(&rctx->cmd.entry); in ccp_rsa_crypt()
73 rctx->cmd.engine = CCP_ENGINE_RSA; in ccp_rsa_crypt()
75 rctx->cmd.u.rsa.key_size = ctx->u.rsa.key_len; /* in bits */ in ccp_rsa_crypt()
77 rctx->cmd.u.rsa.exp = &ctx->u.rsa.e_sg; in ccp_rsa_crypt()
78 rctx->cmd.u.rsa.exp_len = ctx->u.rsa.e_len; in ccp_rsa_crypt()
80 rctx->cmd.u.rsa.exp = &ctx->u.rsa.d_sg; in ccp_rsa_crypt()
81 rctx->cmd.u.rsa.exp_len = ctx->u.rsa.d_len; in ccp_rsa_crypt()
83 rctx->cmd.u.rsa.mod = &ctx->u.rsa.n_sg; in ccp_rsa_crypt()
84 rctx->cmd.u.rsa.mod_len = ctx->u.rsa.n_len; in ccp_rsa_crypt()
85 rctx->cmd.u.rsa.src = req->src; in ccp_rsa_crypt()
86 rctx->cmd.u.rsa.src_len = req->src_len; in ccp_rsa_crypt()
87 rctx->cmd.u.rsa.dst = req->dst; in ccp_rsa_crypt()
89 ret = ccp_crypto_enqueue_request(&req->base, &rctx->cmd); in ccp_rsa_crypt()
108 return -EINVAL; in ccp_check_key_length()
115 kfree_sensitive(ctx->u.rsa.e_buf); in ccp_rsa_free_key_bufs()
116 ctx->u.rsa.e_buf = NULL; in ccp_rsa_free_key_bufs()
117 ctx->u.rsa.e_len = 0; in ccp_rsa_free_key_bufs()
118 kfree_sensitive(ctx->u.rsa.n_buf); in ccp_rsa_free_key_bufs()
119 ctx->u.rsa.n_buf = NULL; in ccp_rsa_free_key_bufs()
120 ctx->u.rsa.n_len = 0; in ccp_rsa_free_key_bufs()
121 kfree_sensitive(ctx->u.rsa.d_buf); in ccp_rsa_free_key_bufs()
122 ctx->u.rsa.d_buf = NULL; in ccp_rsa_free_key_bufs()
123 ctx->u.rsa.d_len = 0; in ccp_rsa_free_key_bufs()
136 /* Code borrowed from crypto/rsa.c */ in ccp_rsa_setkey()
144 ret = ccp_copy_and_save_keypart(&ctx->u.rsa.n_buf, &ctx->u.rsa.n_len, in ccp_rsa_setkey()
148 sg_init_one(&ctx->u.rsa.n_sg, ctx->u.rsa.n_buf, ctx->u.rsa.n_len); in ccp_rsa_setkey()
150 ctx->u.rsa.key_len = ctx->u.rsa.n_len << 3; /* convert to bits */ in ccp_rsa_setkey()
151 if (ccp_check_key_length(ctx->u.rsa.key_len)) { in ccp_rsa_setkey()
152 ret = -EINVAL; in ccp_rsa_setkey()
156 ret = ccp_copy_and_save_keypart(&ctx->u.rsa.e_buf, &ctx->u.rsa.e_len, in ccp_rsa_setkey()
160 sg_init_one(&ctx->u.rsa.e_sg, ctx->u.rsa.e_buf, ctx->u.rsa.e_len); in ccp_rsa_setkey()
163 ret = ccp_copy_and_save_keypart(&ctx->u.rsa.d_buf, in ccp_rsa_setkey()
164 &ctx->u.rsa.d_len, in ccp_rsa_setkey()
168 sg_init_one(&ctx->u.rsa.d_sg, in ccp_rsa_setkey()
169 ctx->u.rsa.d_buf, ctx->u.rsa.d_len); in ccp_rsa_setkey()
198 ctx->complete = ccp_rsa_complete; in ccp_rsa_init_tfm()
220 .cra_driver_name = "rsa-ccp",
239 .driver_name = "rsa-ccp",
254 return -ENOMEM; in ccp_register_rsa_alg()
256 INIT_LIST_HEAD(&ccp_alg->entry); in ccp_register_rsa_alg()
258 alg = &ccp_alg->alg; in ccp_register_rsa_alg()
259 *alg = *def->alg_defaults; in ccp_register_rsa_alg()
260 snprintf(alg->base.cra_name, CRYPTO_MAX_ALG_NAME, "%s", def->name); in ccp_register_rsa_alg()
261 snprintf(alg->base.cra_driver_name, CRYPTO_MAX_ALG_NAME, "%s", in ccp_register_rsa_alg()
262 def->driver_name); in ccp_register_rsa_alg()
266 alg->base.cra_name, ret); in ccp_register_rsa_alg()
271 list_add(&ccp_alg->entry, head); in ccp_register_rsa_alg()