Lines Matching refs:req
59 struct aead_request *req) in crypto_ccm_reqctx() argument
61 unsigned long align = crypto_aead_alignmask(crypto_aead_reqtfm(req)); in crypto_ccm_reqctx()
63 return (void *)PTR_ALIGN((u8 *)aead_request_ctx(req), align + 1); in crypto_ccm_reqctx()
124 static int format_input(u8 *info, struct aead_request *req, in format_input() argument
127 struct crypto_aead *aead = crypto_aead_reqtfm(req); in format_input()
128 unsigned int lp = req->iv[0]; in format_input()
134 memcpy(info, req->iv, 16); in format_input()
140 if (req->assoclen) in format_input()
165 static int crypto_ccm_auth(struct aead_request *req, struct scatterlist *plain, in crypto_ccm_auth() argument
168 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_auth()
169 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_ccm_auth()
172 unsigned int assoclen = req->assoclen; in crypto_ccm_auth()
179 err = format_input(odata, req, cryptlen); in crypto_ccm_auth()
190 sg_chain(sg, 3, req->src); in crypto_ccm_auth()
193 sg_chain(sg, 2, req->src); in crypto_ccm_auth()
226 struct aead_request *req = data; in crypto_ccm_encrypt_done() local
227 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_ccm_encrypt_done()
228 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_encrypt_done()
232 scatterwalk_map_and_copy(odata, req->dst, in crypto_ccm_encrypt_done()
233 req->assoclen + req->cryptlen, in crypto_ccm_encrypt_done()
235 aead_request_complete(req, err); in crypto_ccm_encrypt_done()
247 static int crypto_ccm_init_crypt(struct aead_request *req, u8 *tag) in crypto_ccm_init_crypt() argument
249 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_init_crypt()
251 u8 *iv = req->iv; in crypto_ccm_init_crypt()
258 pctx->flags = aead_request_flags(req); in crypto_ccm_init_crypt()
267 sg = scatterwalk_ffwd(pctx->src + 1, req->src, req->assoclen); in crypto_ccm_init_crypt()
271 if (req->src != req->dst) { in crypto_ccm_init_crypt()
274 sg = scatterwalk_ffwd(pctx->dst + 1, req->dst, req->assoclen); in crypto_ccm_init_crypt()
282 static int crypto_ccm_encrypt(struct aead_request *req) in crypto_ccm_encrypt() argument
284 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_ccm_encrypt()
286 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_encrypt()
289 unsigned int cryptlen = req->cryptlen; in crypto_ccm_encrypt()
291 u8 *iv = req->iv; in crypto_ccm_encrypt()
294 err = crypto_ccm_init_crypt(req, odata); in crypto_ccm_encrypt()
298 err = crypto_ccm_auth(req, sg_next(pctx->src), cryptlen); in crypto_ccm_encrypt()
303 if (req->src != req->dst) in crypto_ccm_encrypt()
308 crypto_ccm_encrypt_done, req); in crypto_ccm_encrypt()
322 struct aead_request *req = data; in crypto_ccm_decrypt_done() local
323 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_decrypt_done()
324 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_ccm_decrypt_done()
326 unsigned int cryptlen = req->cryptlen - authsize; in crypto_ccm_decrypt_done()
331 dst = sg_next(req->src == req->dst ? pctx->src : pctx->dst); in crypto_ccm_decrypt_done()
334 err = crypto_ccm_auth(req, dst, cryptlen); in crypto_ccm_decrypt_done()
338 aead_request_complete(req, err); in crypto_ccm_decrypt_done()
341 static int crypto_ccm_decrypt(struct aead_request *req) in crypto_ccm_decrypt() argument
343 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_ccm_decrypt()
345 struct crypto_ccm_req_priv_ctx *pctx = crypto_ccm_reqctx(req); in crypto_ccm_decrypt()
349 unsigned int cryptlen = req->cryptlen; in crypto_ccm_decrypt()
357 err = crypto_ccm_init_crypt(req, authtag); in crypto_ccm_decrypt()
365 if (req->src != req->dst) in crypto_ccm_decrypt()
368 memcpy(iv, req->iv, 16); in crypto_ccm_decrypt()
372 crypto_ccm_decrypt_done, req); in crypto_ccm_decrypt()
378 err = crypto_ccm_auth(req, sg_next(dst), cryptlen); in crypto_ccm_decrypt()
598 static struct aead_request *crypto_rfc4309_crypt(struct aead_request *req) in crypto_rfc4309_crypt() argument
600 struct crypto_rfc4309_req_ctx *rctx = aead_request_ctx(req); in crypto_rfc4309_crypt()
602 struct crypto_aead *aead = crypto_aead_reqtfm(req); in crypto_rfc4309_crypt()
613 memcpy(iv + 4, req->iv, 8); in crypto_rfc4309_crypt()
615 scatterwalk_map_and_copy(iv + 16, req->src, 0, req->assoclen - 8, 0); in crypto_rfc4309_crypt()
618 sg_set_buf(rctx->src, iv + 16, req->assoclen - 8); in crypto_rfc4309_crypt()
619 sg = scatterwalk_ffwd(rctx->src + 1, req->src, req->assoclen); in crypto_rfc4309_crypt()
623 if (req->src != req->dst) { in crypto_rfc4309_crypt()
625 sg_set_buf(rctx->dst, iv + 16, req->assoclen - 8); in crypto_rfc4309_crypt()
626 sg = scatterwalk_ffwd(rctx->dst + 1, req->dst, req->assoclen); in crypto_rfc4309_crypt()
632 aead_request_set_callback(subreq, req->base.flags, req->base.complete, in crypto_rfc4309_crypt()
633 req->base.data); in crypto_rfc4309_crypt()
635 req->src == req->dst ? rctx->src : rctx->dst, in crypto_rfc4309_crypt()
636 req->cryptlen, iv); in crypto_rfc4309_crypt()
637 aead_request_set_ad(subreq, req->assoclen - 8); in crypto_rfc4309_crypt()
642 static int crypto_rfc4309_encrypt(struct aead_request *req) in crypto_rfc4309_encrypt() argument
644 if (req->assoclen != 16 && req->assoclen != 20) in crypto_rfc4309_encrypt()
647 req = crypto_rfc4309_crypt(req); in crypto_rfc4309_encrypt()
649 return crypto_aead_encrypt(req); in crypto_rfc4309_encrypt()
652 static int crypto_rfc4309_decrypt(struct aead_request *req) in crypto_rfc4309_decrypt() argument
654 if (req->assoclen != 16 && req->assoclen != 20) in crypto_rfc4309_decrypt()
657 req = crypto_rfc4309_crypt(req); in crypto_rfc4309_decrypt()
659 return crypto_aead_decrypt(req); in crypto_rfc4309_decrypt()