xref: /linux/drivers/crypto/inside-secure/eip93/eip93-aead.c (revision bbfd5594756011167b8f8de9a00e0c946afda1e6)
1*9739f5f9SChristian Marangi // SPDX-License-Identifier: GPL-2.0
2*9739f5f9SChristian Marangi /*
3*9739f5f9SChristian Marangi  * Copyright (C) 2019 - 2021
4*9739f5f9SChristian Marangi  *
5*9739f5f9SChristian Marangi  * Richard van Schagen <vschagen@icloud.com>
6*9739f5f9SChristian Marangi  * Christian Marangi <ansuelsmth@gmail.com
7*9739f5f9SChristian Marangi  */
8*9739f5f9SChristian Marangi 
9*9739f5f9SChristian Marangi #include <crypto/aead.h>
10*9739f5f9SChristian Marangi #include <crypto/aes.h>
11*9739f5f9SChristian Marangi #include <crypto/authenc.h>
12*9739f5f9SChristian Marangi #include <crypto/ctr.h>
13*9739f5f9SChristian Marangi #include <crypto/hmac.h>
14*9739f5f9SChristian Marangi #include <crypto/internal/aead.h>
15*9739f5f9SChristian Marangi #include <crypto/md5.h>
16*9739f5f9SChristian Marangi #include <crypto/null.h>
17*9739f5f9SChristian Marangi #include <crypto/sha1.h>
18*9739f5f9SChristian Marangi #include <crypto/sha2.h>
19*9739f5f9SChristian Marangi 
20*9739f5f9SChristian Marangi #include <crypto/internal/des.h>
21*9739f5f9SChristian Marangi 
22*9739f5f9SChristian Marangi #include <linux/crypto.h>
23*9739f5f9SChristian Marangi #include <linux/dma-mapping.h>
24*9739f5f9SChristian Marangi 
25*9739f5f9SChristian Marangi #include "eip93-aead.h"
26*9739f5f9SChristian Marangi #include "eip93-cipher.h"
27*9739f5f9SChristian Marangi #include "eip93-common.h"
28*9739f5f9SChristian Marangi #include "eip93-regs.h"
29*9739f5f9SChristian Marangi 
30*9739f5f9SChristian Marangi void eip93_aead_handle_result(struct crypto_async_request *async, int err)
31*9739f5f9SChristian Marangi {
32*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(async->tfm);
33*9739f5f9SChristian Marangi 	struct eip93_device *eip93 = ctx->eip93;
34*9739f5f9SChristian Marangi 	struct aead_request *req = aead_request_cast(async);
35*9739f5f9SChristian Marangi 	struct eip93_cipher_reqctx *rctx = aead_request_ctx(req);
36*9739f5f9SChristian Marangi 
37*9739f5f9SChristian Marangi 	eip93_unmap_dma(eip93, rctx, req->src, req->dst);
38*9739f5f9SChristian Marangi 	eip93_handle_result(eip93, rctx, req->iv);
39*9739f5f9SChristian Marangi 
40*9739f5f9SChristian Marangi 	aead_request_complete(req, err);
41*9739f5f9SChristian Marangi }
42*9739f5f9SChristian Marangi 
43*9739f5f9SChristian Marangi static int eip93_aead_send_req(struct crypto_async_request *async)
44*9739f5f9SChristian Marangi {
45*9739f5f9SChristian Marangi 	struct aead_request *req = aead_request_cast(async);
46*9739f5f9SChristian Marangi 	struct eip93_cipher_reqctx *rctx = aead_request_ctx(req);
47*9739f5f9SChristian Marangi 	int err;
48*9739f5f9SChristian Marangi 
49*9739f5f9SChristian Marangi 	err = check_valid_request(rctx);
50*9739f5f9SChristian Marangi 	if (err) {
51*9739f5f9SChristian Marangi 		aead_request_complete(req, err);
52*9739f5f9SChristian Marangi 		return err;
53*9739f5f9SChristian Marangi 	}
54*9739f5f9SChristian Marangi 
55*9739f5f9SChristian Marangi 	return eip93_send_req(async, req->iv, rctx);
56*9739f5f9SChristian Marangi }
57*9739f5f9SChristian Marangi 
58*9739f5f9SChristian Marangi /* Crypto aead API functions */
59*9739f5f9SChristian Marangi static int eip93_aead_cra_init(struct crypto_tfm *tfm)
60*9739f5f9SChristian Marangi {
61*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(tfm);
62*9739f5f9SChristian Marangi 	struct eip93_alg_template *tmpl = container_of(tfm->__crt_alg,
63*9739f5f9SChristian Marangi 				struct eip93_alg_template, alg.aead.base);
64*9739f5f9SChristian Marangi 
65*9739f5f9SChristian Marangi 	crypto_aead_set_reqsize(__crypto_aead_cast(tfm),
66*9739f5f9SChristian Marangi 				sizeof(struct eip93_cipher_reqctx));
67*9739f5f9SChristian Marangi 
68*9739f5f9SChristian Marangi 	ctx->eip93 = tmpl->eip93;
69*9739f5f9SChristian Marangi 	ctx->flags = tmpl->flags;
70*9739f5f9SChristian Marangi 	ctx->type = tmpl->type;
71*9739f5f9SChristian Marangi 	ctx->set_assoc = true;
72*9739f5f9SChristian Marangi 
73*9739f5f9SChristian Marangi 	ctx->sa_record = kzalloc(sizeof(*ctx->sa_record), GFP_KERNEL);
74*9739f5f9SChristian Marangi 	if (!ctx->sa_record)
75*9739f5f9SChristian Marangi 		return -ENOMEM;
76*9739f5f9SChristian Marangi 
77*9739f5f9SChristian Marangi 	return 0;
78*9739f5f9SChristian Marangi }
79*9739f5f9SChristian Marangi 
80*9739f5f9SChristian Marangi static void eip93_aead_cra_exit(struct crypto_tfm *tfm)
81*9739f5f9SChristian Marangi {
82*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(tfm);
83*9739f5f9SChristian Marangi 
84*9739f5f9SChristian Marangi 	dma_unmap_single(ctx->eip93->dev, ctx->sa_record_base,
85*9739f5f9SChristian Marangi 			 sizeof(*ctx->sa_record), DMA_TO_DEVICE);
86*9739f5f9SChristian Marangi 	kfree(ctx->sa_record);
87*9739f5f9SChristian Marangi }
88*9739f5f9SChristian Marangi 
89*9739f5f9SChristian Marangi static int eip93_aead_setkey(struct crypto_aead *ctfm, const u8 *key,
90*9739f5f9SChristian Marangi 			     unsigned int len)
91*9739f5f9SChristian Marangi {
92*9739f5f9SChristian Marangi 	struct crypto_tfm *tfm = crypto_aead_tfm(ctfm);
93*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(tfm);
94*9739f5f9SChristian Marangi 	struct crypto_authenc_keys keys;
95*9739f5f9SChristian Marangi 	struct crypto_aes_ctx aes;
96*9739f5f9SChristian Marangi 	struct sa_record *sa_record = ctx->sa_record;
97*9739f5f9SChristian Marangi 	u32 nonce = 0;
98*9739f5f9SChristian Marangi 	int ret;
99*9739f5f9SChristian Marangi 
100*9739f5f9SChristian Marangi 	if (crypto_authenc_extractkeys(&keys, key, len))
101*9739f5f9SChristian Marangi 		return -EINVAL;
102*9739f5f9SChristian Marangi 
103*9739f5f9SChristian Marangi 	if (IS_RFC3686(ctx->flags)) {
104*9739f5f9SChristian Marangi 		if (keys.enckeylen < CTR_RFC3686_NONCE_SIZE)
105*9739f5f9SChristian Marangi 			return -EINVAL;
106*9739f5f9SChristian Marangi 
107*9739f5f9SChristian Marangi 		keys.enckeylen -= CTR_RFC3686_NONCE_SIZE;
108*9739f5f9SChristian Marangi 		memcpy(&nonce, keys.enckey + keys.enckeylen,
109*9739f5f9SChristian Marangi 		       CTR_RFC3686_NONCE_SIZE);
110*9739f5f9SChristian Marangi 	}
111*9739f5f9SChristian Marangi 
112*9739f5f9SChristian Marangi 	switch ((ctx->flags & EIP93_ALG_MASK)) {
113*9739f5f9SChristian Marangi 	case EIP93_ALG_DES:
114*9739f5f9SChristian Marangi 		ret = verify_aead_des_key(ctfm, keys.enckey, keys.enckeylen);
115*9739f5f9SChristian Marangi 		if (ret)
116*9739f5f9SChristian Marangi 			return ret;
117*9739f5f9SChristian Marangi 
118*9739f5f9SChristian Marangi 		break;
119*9739f5f9SChristian Marangi 	case EIP93_ALG_3DES:
120*9739f5f9SChristian Marangi 		if (keys.enckeylen != DES3_EDE_KEY_SIZE)
121*9739f5f9SChristian Marangi 			return -EINVAL;
122*9739f5f9SChristian Marangi 
123*9739f5f9SChristian Marangi 		ret = verify_aead_des3_key(ctfm, keys.enckey, keys.enckeylen);
124*9739f5f9SChristian Marangi 		if (ret)
125*9739f5f9SChristian Marangi 			return ret;
126*9739f5f9SChristian Marangi 
127*9739f5f9SChristian Marangi 		break;
128*9739f5f9SChristian Marangi 	case EIP93_ALG_AES:
129*9739f5f9SChristian Marangi 		ret = aes_expandkey(&aes, keys.enckey, keys.enckeylen);
130*9739f5f9SChristian Marangi 		if (ret)
131*9739f5f9SChristian Marangi 			return ret;
132*9739f5f9SChristian Marangi 
133*9739f5f9SChristian Marangi 		break;
134*9739f5f9SChristian Marangi 	}
135*9739f5f9SChristian Marangi 
136*9739f5f9SChristian Marangi 	ctx->blksize = crypto_aead_blocksize(ctfm);
137*9739f5f9SChristian Marangi 	/* Encryption key */
138*9739f5f9SChristian Marangi 	eip93_set_sa_record(sa_record, keys.enckeylen, ctx->flags);
139*9739f5f9SChristian Marangi 	sa_record->sa_cmd0_word &= ~EIP93_SA_CMD_OPCODE;
140*9739f5f9SChristian Marangi 	sa_record->sa_cmd0_word |= FIELD_PREP(EIP93_SA_CMD_OPCODE,
141*9739f5f9SChristian Marangi 					      EIP93_SA_CMD_OPCODE_BASIC_OUT_ENC_HASH);
142*9739f5f9SChristian Marangi 	sa_record->sa_cmd0_word &= ~EIP93_SA_CMD_DIGEST_LENGTH;
143*9739f5f9SChristian Marangi 	sa_record->sa_cmd0_word |= FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH,
144*9739f5f9SChristian Marangi 					      ctx->authsize / sizeof(u32));
145*9739f5f9SChristian Marangi 
146*9739f5f9SChristian Marangi 	memcpy(sa_record->sa_key, keys.enckey, keys.enckeylen);
147*9739f5f9SChristian Marangi 	ctx->sa_nonce = nonce;
148*9739f5f9SChristian Marangi 	sa_record->sa_nonce = nonce;
149*9739f5f9SChristian Marangi 
150*9739f5f9SChristian Marangi 	/* authentication key */
151*9739f5f9SChristian Marangi 	ret = eip93_hmac_setkey(ctx->flags, keys.authkey, keys.authkeylen,
152*9739f5f9SChristian Marangi 				ctx->authsize, sa_record->sa_i_digest,
153*9739f5f9SChristian Marangi 				sa_record->sa_o_digest, false);
154*9739f5f9SChristian Marangi 
155*9739f5f9SChristian Marangi 	ctx->set_assoc = true;
156*9739f5f9SChristian Marangi 
157*9739f5f9SChristian Marangi 	return ret;
158*9739f5f9SChristian Marangi }
159*9739f5f9SChristian Marangi 
160*9739f5f9SChristian Marangi static int eip93_aead_setauthsize(struct crypto_aead *ctfm,
161*9739f5f9SChristian Marangi 				  unsigned int authsize)
162*9739f5f9SChristian Marangi {
163*9739f5f9SChristian Marangi 	struct crypto_tfm *tfm = crypto_aead_tfm(ctfm);
164*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(tfm);
165*9739f5f9SChristian Marangi 
166*9739f5f9SChristian Marangi 	ctx->authsize = authsize;
167*9739f5f9SChristian Marangi 	ctx->sa_record->sa_cmd0_word &= ~EIP93_SA_CMD_DIGEST_LENGTH;
168*9739f5f9SChristian Marangi 	ctx->sa_record->sa_cmd0_word |= FIELD_PREP(EIP93_SA_CMD_DIGEST_LENGTH,
169*9739f5f9SChristian Marangi 						   ctx->authsize / sizeof(u32));
170*9739f5f9SChristian Marangi 
171*9739f5f9SChristian Marangi 	return 0;
172*9739f5f9SChristian Marangi }
173*9739f5f9SChristian Marangi 
174*9739f5f9SChristian Marangi static void eip93_aead_setassoc(struct eip93_crypto_ctx *ctx,
175*9739f5f9SChristian Marangi 				struct aead_request *req)
176*9739f5f9SChristian Marangi {
177*9739f5f9SChristian Marangi 	struct sa_record *sa_record = ctx->sa_record;
178*9739f5f9SChristian Marangi 
179*9739f5f9SChristian Marangi 	sa_record->sa_cmd1_word &= ~EIP93_SA_CMD_HASH_CRYPT_OFFSET;
180*9739f5f9SChristian Marangi 	sa_record->sa_cmd1_word |= FIELD_PREP(EIP93_SA_CMD_HASH_CRYPT_OFFSET,
181*9739f5f9SChristian Marangi 					      req->assoclen / sizeof(u32));
182*9739f5f9SChristian Marangi 
183*9739f5f9SChristian Marangi 	ctx->assoclen = req->assoclen;
184*9739f5f9SChristian Marangi }
185*9739f5f9SChristian Marangi 
186*9739f5f9SChristian Marangi static int eip93_aead_crypt(struct aead_request *req)
187*9739f5f9SChristian Marangi {
188*9739f5f9SChristian Marangi 	struct eip93_cipher_reqctx *rctx = aead_request_ctx(req);
189*9739f5f9SChristian Marangi 	struct crypto_async_request *async = &req->base;
190*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
191*9739f5f9SChristian Marangi 	struct crypto_aead *aead = crypto_aead_reqtfm(req);
192*9739f5f9SChristian Marangi 	int ret;
193*9739f5f9SChristian Marangi 
194*9739f5f9SChristian Marangi 	ctx->sa_record_base = dma_map_single(ctx->eip93->dev, ctx->sa_record,
195*9739f5f9SChristian Marangi 					     sizeof(*ctx->sa_record), DMA_TO_DEVICE);
196*9739f5f9SChristian Marangi 	ret = dma_mapping_error(ctx->eip93->dev, ctx->sa_record_base);
197*9739f5f9SChristian Marangi 	if (ret)
198*9739f5f9SChristian Marangi 		return ret;
199*9739f5f9SChristian Marangi 
200*9739f5f9SChristian Marangi 	rctx->textsize = req->cryptlen;
201*9739f5f9SChristian Marangi 	rctx->blksize = ctx->blksize;
202*9739f5f9SChristian Marangi 	rctx->assoclen = req->assoclen;
203*9739f5f9SChristian Marangi 	rctx->authsize = ctx->authsize;
204*9739f5f9SChristian Marangi 	rctx->sg_src = req->src;
205*9739f5f9SChristian Marangi 	rctx->sg_dst = req->dst;
206*9739f5f9SChristian Marangi 	rctx->ivsize = crypto_aead_ivsize(aead);
207*9739f5f9SChristian Marangi 	rctx->desc_flags = EIP93_DESC_AEAD;
208*9739f5f9SChristian Marangi 	rctx->sa_record_base = ctx->sa_record_base;
209*9739f5f9SChristian Marangi 
210*9739f5f9SChristian Marangi 	if (IS_DECRYPT(rctx->flags))
211*9739f5f9SChristian Marangi 		rctx->textsize -= rctx->authsize;
212*9739f5f9SChristian Marangi 
213*9739f5f9SChristian Marangi 	return eip93_aead_send_req(async);
214*9739f5f9SChristian Marangi }
215*9739f5f9SChristian Marangi 
216*9739f5f9SChristian Marangi static int eip93_aead_encrypt(struct aead_request *req)
217*9739f5f9SChristian Marangi {
218*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
219*9739f5f9SChristian Marangi 	struct eip93_cipher_reqctx *rctx = aead_request_ctx(req);
220*9739f5f9SChristian Marangi 
221*9739f5f9SChristian Marangi 	rctx->flags = ctx->flags;
222*9739f5f9SChristian Marangi 	rctx->flags |= EIP93_ENCRYPT;
223*9739f5f9SChristian Marangi 	if (ctx->set_assoc) {
224*9739f5f9SChristian Marangi 		eip93_aead_setassoc(ctx, req);
225*9739f5f9SChristian Marangi 		ctx->set_assoc = false;
226*9739f5f9SChristian Marangi 	}
227*9739f5f9SChristian Marangi 
228*9739f5f9SChristian Marangi 	if (req->assoclen != ctx->assoclen) {
229*9739f5f9SChristian Marangi 		dev_err(ctx->eip93->dev, "Request AAD length error\n");
230*9739f5f9SChristian Marangi 		return -EINVAL;
231*9739f5f9SChristian Marangi 	}
232*9739f5f9SChristian Marangi 
233*9739f5f9SChristian Marangi 	return eip93_aead_crypt(req);
234*9739f5f9SChristian Marangi }
235*9739f5f9SChristian Marangi 
236*9739f5f9SChristian Marangi static int eip93_aead_decrypt(struct aead_request *req)
237*9739f5f9SChristian Marangi {
238*9739f5f9SChristian Marangi 	struct eip93_crypto_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
239*9739f5f9SChristian Marangi 	struct eip93_cipher_reqctx *rctx = aead_request_ctx(req);
240*9739f5f9SChristian Marangi 
241*9739f5f9SChristian Marangi 	ctx->sa_record->sa_cmd0_word |= EIP93_SA_CMD_DIRECTION_IN;
242*9739f5f9SChristian Marangi 	ctx->sa_record->sa_cmd1_word &= ~(EIP93_SA_CMD_COPY_PAD |
243*9739f5f9SChristian Marangi 					  EIP93_SA_CMD_COPY_DIGEST);
244*9739f5f9SChristian Marangi 
245*9739f5f9SChristian Marangi 	rctx->flags = ctx->flags;
246*9739f5f9SChristian Marangi 	rctx->flags |= EIP93_DECRYPT;
247*9739f5f9SChristian Marangi 	if (ctx->set_assoc) {
248*9739f5f9SChristian Marangi 		eip93_aead_setassoc(ctx, req);
249*9739f5f9SChristian Marangi 		ctx->set_assoc = false;
250*9739f5f9SChristian Marangi 	}
251*9739f5f9SChristian Marangi 
252*9739f5f9SChristian Marangi 	if (req->assoclen != ctx->assoclen) {
253*9739f5f9SChristian Marangi 		dev_err(ctx->eip93->dev, "Request AAD length error\n");
254*9739f5f9SChristian Marangi 		return -EINVAL;
255*9739f5f9SChristian Marangi 	}
256*9739f5f9SChristian Marangi 
257*9739f5f9SChristian Marangi 	return eip93_aead_crypt(req);
258*9739f5f9SChristian Marangi }
259*9739f5f9SChristian Marangi 
260*9739f5f9SChristian Marangi /* Available authenc algorithms in this module */
261*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_md5_cbc_aes = {
262*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
263*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_MD5 | EIP93_MODE_CBC | EIP93_ALG_AES,
264*9739f5f9SChristian Marangi 	.alg.aead = {
265*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
266*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
267*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
268*9739f5f9SChristian Marangi 		.ivsize	= AES_BLOCK_SIZE,
269*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
270*9739f5f9SChristian Marangi 		.maxauthsize = MD5_DIGEST_SIZE,
271*9739f5f9SChristian Marangi 		.base = {
272*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(md5),cbc(aes))",
273*9739f5f9SChristian Marangi 			.cra_driver_name =
274*9739f5f9SChristian Marangi 				"authenc(hmac(md5-eip93), cbc(aes-eip93))",
275*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
276*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
277*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
278*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
279*9739f5f9SChristian Marangi 			.cra_blocksize = AES_BLOCK_SIZE,
280*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
281*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
282*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
283*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
284*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
285*9739f5f9SChristian Marangi 		},
286*9739f5f9SChristian Marangi 	},
287*9739f5f9SChristian Marangi };
288*9739f5f9SChristian Marangi 
289*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha1_cbc_aes = {
290*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
291*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA1 | EIP93_MODE_CBC | EIP93_ALG_AES,
292*9739f5f9SChristian Marangi 	.alg.aead = {
293*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
294*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
295*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
296*9739f5f9SChristian Marangi 		.ivsize	= AES_BLOCK_SIZE,
297*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
298*9739f5f9SChristian Marangi 		.maxauthsize = SHA1_DIGEST_SIZE,
299*9739f5f9SChristian Marangi 		.base = {
300*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha1),cbc(aes))",
301*9739f5f9SChristian Marangi 			.cra_driver_name =
302*9739f5f9SChristian Marangi 				"authenc(hmac(sha1-eip93),cbc(aes-eip93))",
303*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
304*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
305*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
306*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
307*9739f5f9SChristian Marangi 			.cra_blocksize = AES_BLOCK_SIZE,
308*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
309*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
310*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
311*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
312*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
313*9739f5f9SChristian Marangi 		},
314*9739f5f9SChristian Marangi 	},
315*9739f5f9SChristian Marangi };
316*9739f5f9SChristian Marangi 
317*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha224_cbc_aes = {
318*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
319*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA224 | EIP93_MODE_CBC | EIP93_ALG_AES,
320*9739f5f9SChristian Marangi 	.alg.aead = {
321*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
322*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
323*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
324*9739f5f9SChristian Marangi 		.ivsize	= AES_BLOCK_SIZE,
325*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
326*9739f5f9SChristian Marangi 		.maxauthsize = SHA224_DIGEST_SIZE,
327*9739f5f9SChristian Marangi 		.base = {
328*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha224),cbc(aes))",
329*9739f5f9SChristian Marangi 			.cra_driver_name =
330*9739f5f9SChristian Marangi 				"authenc(hmac(sha224-eip93),cbc(aes-eip93))",
331*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
332*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
333*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
334*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
335*9739f5f9SChristian Marangi 			.cra_blocksize = AES_BLOCK_SIZE,
336*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
337*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
338*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
339*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
340*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
341*9739f5f9SChristian Marangi 		},
342*9739f5f9SChristian Marangi 	},
343*9739f5f9SChristian Marangi };
344*9739f5f9SChristian Marangi 
345*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha256_cbc_aes = {
346*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
347*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA256 | EIP93_MODE_CBC | EIP93_ALG_AES,
348*9739f5f9SChristian Marangi 	.alg.aead = {
349*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
350*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
351*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
352*9739f5f9SChristian Marangi 		.ivsize	= AES_BLOCK_SIZE,
353*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
354*9739f5f9SChristian Marangi 		.maxauthsize = SHA256_DIGEST_SIZE,
355*9739f5f9SChristian Marangi 		.base = {
356*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha256),cbc(aes))",
357*9739f5f9SChristian Marangi 			.cra_driver_name =
358*9739f5f9SChristian Marangi 				"authenc(hmac(sha256-eip93),cbc(aes-eip93))",
359*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
360*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
361*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
362*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
363*9739f5f9SChristian Marangi 			.cra_blocksize = AES_BLOCK_SIZE,
364*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
365*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
366*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
367*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
368*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
369*9739f5f9SChristian Marangi 		},
370*9739f5f9SChristian Marangi 	},
371*9739f5f9SChristian Marangi };
372*9739f5f9SChristian Marangi 
373*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_md5_rfc3686_aes = {
374*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
375*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_MD5 |
376*9739f5f9SChristian Marangi 			EIP93_MODE_CTR | EIP93_MODE_RFC3686 | EIP93_ALG_AES,
377*9739f5f9SChristian Marangi 	.alg.aead = {
378*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
379*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
380*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
381*9739f5f9SChristian Marangi 		.ivsize	= CTR_RFC3686_IV_SIZE,
382*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
383*9739f5f9SChristian Marangi 		.maxauthsize = MD5_DIGEST_SIZE,
384*9739f5f9SChristian Marangi 		.base = {
385*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(md5),rfc3686(ctr(aes)))",
386*9739f5f9SChristian Marangi 			.cra_driver_name =
387*9739f5f9SChristian Marangi 			"authenc(hmac(md5-eip93),rfc3686(ctr(aes-eip93)))",
388*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
389*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
390*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
391*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
392*9739f5f9SChristian Marangi 			.cra_blocksize = 1,
393*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
394*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
395*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
396*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
397*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
398*9739f5f9SChristian Marangi 		},
399*9739f5f9SChristian Marangi 	},
400*9739f5f9SChristian Marangi };
401*9739f5f9SChristian Marangi 
402*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha1_rfc3686_aes = {
403*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
404*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA1 |
405*9739f5f9SChristian Marangi 			EIP93_MODE_CTR | EIP93_MODE_RFC3686 | EIP93_ALG_AES,
406*9739f5f9SChristian Marangi 	.alg.aead = {
407*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
408*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
409*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
410*9739f5f9SChristian Marangi 		.ivsize	= CTR_RFC3686_IV_SIZE,
411*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
412*9739f5f9SChristian Marangi 		.maxauthsize = SHA1_DIGEST_SIZE,
413*9739f5f9SChristian Marangi 		.base = {
414*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha1),rfc3686(ctr(aes)))",
415*9739f5f9SChristian Marangi 			.cra_driver_name =
416*9739f5f9SChristian Marangi 			"authenc(hmac(sha1-eip93),rfc3686(ctr(aes-eip93)))",
417*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
418*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
419*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
420*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
421*9739f5f9SChristian Marangi 			.cra_blocksize = 1,
422*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
423*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
424*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
425*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
426*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
427*9739f5f9SChristian Marangi 		},
428*9739f5f9SChristian Marangi 	},
429*9739f5f9SChristian Marangi };
430*9739f5f9SChristian Marangi 
431*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha224_rfc3686_aes = {
432*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
433*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA224 |
434*9739f5f9SChristian Marangi 			EIP93_MODE_CTR | EIP93_MODE_RFC3686 | EIP93_ALG_AES,
435*9739f5f9SChristian Marangi 	.alg.aead = {
436*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
437*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
438*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
439*9739f5f9SChristian Marangi 		.ivsize	= CTR_RFC3686_IV_SIZE,
440*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
441*9739f5f9SChristian Marangi 		.maxauthsize = SHA224_DIGEST_SIZE,
442*9739f5f9SChristian Marangi 		.base = {
443*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha224),rfc3686(ctr(aes)))",
444*9739f5f9SChristian Marangi 			.cra_driver_name =
445*9739f5f9SChristian Marangi 			"authenc(hmac(sha224-eip93),rfc3686(ctr(aes-eip93)))",
446*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
447*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
448*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
449*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
450*9739f5f9SChristian Marangi 			.cra_blocksize = 1,
451*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
452*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
453*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
454*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
455*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
456*9739f5f9SChristian Marangi 		},
457*9739f5f9SChristian Marangi 	},
458*9739f5f9SChristian Marangi };
459*9739f5f9SChristian Marangi 
460*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha256_rfc3686_aes = {
461*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
462*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA256 |
463*9739f5f9SChristian Marangi 			EIP93_MODE_CTR | EIP93_MODE_RFC3686 | EIP93_ALG_AES,
464*9739f5f9SChristian Marangi 	.alg.aead = {
465*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
466*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
467*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
468*9739f5f9SChristian Marangi 		.ivsize	= CTR_RFC3686_IV_SIZE,
469*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
470*9739f5f9SChristian Marangi 		.maxauthsize = SHA256_DIGEST_SIZE,
471*9739f5f9SChristian Marangi 		.base = {
472*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha256),rfc3686(ctr(aes)))",
473*9739f5f9SChristian Marangi 			.cra_driver_name =
474*9739f5f9SChristian Marangi 			"authenc(hmac(sha256-eip93),rfc3686(ctr(aes-eip93)))",
475*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
476*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
477*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
478*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
479*9739f5f9SChristian Marangi 			.cra_blocksize = 1,
480*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
481*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
482*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
483*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
484*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
485*9739f5f9SChristian Marangi 		},
486*9739f5f9SChristian Marangi 	},
487*9739f5f9SChristian Marangi };
488*9739f5f9SChristian Marangi 
489*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_md5_cbc_des = {
490*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
491*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_MD5 | EIP93_MODE_CBC | EIP93_ALG_DES,
492*9739f5f9SChristian Marangi 	.alg.aead = {
493*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
494*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
495*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
496*9739f5f9SChristian Marangi 		.ivsize	= DES_BLOCK_SIZE,
497*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
498*9739f5f9SChristian Marangi 		.maxauthsize = MD5_DIGEST_SIZE,
499*9739f5f9SChristian Marangi 		.base = {
500*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(md5),cbc(des))",
501*9739f5f9SChristian Marangi 			.cra_driver_name =
502*9739f5f9SChristian Marangi 				"authenc(hmac(md5-eip93),cbc(des-eip93))",
503*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
504*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
505*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
506*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
507*9739f5f9SChristian Marangi 			.cra_blocksize = DES_BLOCK_SIZE,
508*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
509*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
510*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
511*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
512*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
513*9739f5f9SChristian Marangi 		},
514*9739f5f9SChristian Marangi 	},
515*9739f5f9SChristian Marangi };
516*9739f5f9SChristian Marangi 
517*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha1_cbc_des = {
518*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
519*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA1 | EIP93_MODE_CBC | EIP93_ALG_DES,
520*9739f5f9SChristian Marangi 	.alg.aead = {
521*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
522*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
523*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
524*9739f5f9SChristian Marangi 		.ivsize	= DES_BLOCK_SIZE,
525*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
526*9739f5f9SChristian Marangi 		.maxauthsize = SHA1_DIGEST_SIZE,
527*9739f5f9SChristian Marangi 		.base = {
528*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha1),cbc(des))",
529*9739f5f9SChristian Marangi 			.cra_driver_name =
530*9739f5f9SChristian Marangi 				"authenc(hmac(sha1-eip93),cbc(des-eip93))",
531*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
532*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
533*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
534*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
535*9739f5f9SChristian Marangi 			.cra_blocksize = DES_BLOCK_SIZE,
536*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
537*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
538*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
539*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
540*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
541*9739f5f9SChristian Marangi 		},
542*9739f5f9SChristian Marangi 	},
543*9739f5f9SChristian Marangi };
544*9739f5f9SChristian Marangi 
545*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha224_cbc_des = {
546*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
547*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA224 | EIP93_MODE_CBC | EIP93_ALG_DES,
548*9739f5f9SChristian Marangi 	.alg.aead = {
549*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
550*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
551*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
552*9739f5f9SChristian Marangi 		.ivsize	= DES_BLOCK_SIZE,
553*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
554*9739f5f9SChristian Marangi 		.maxauthsize = SHA224_DIGEST_SIZE,
555*9739f5f9SChristian Marangi 		.base = {
556*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha224),cbc(des))",
557*9739f5f9SChristian Marangi 			.cra_driver_name =
558*9739f5f9SChristian Marangi 				"authenc(hmac(sha224-eip93),cbc(des-eip93))",
559*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
560*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
561*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
562*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
563*9739f5f9SChristian Marangi 			.cra_blocksize = DES_BLOCK_SIZE,
564*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
565*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
566*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
567*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
568*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
569*9739f5f9SChristian Marangi 		},
570*9739f5f9SChristian Marangi 	},
571*9739f5f9SChristian Marangi };
572*9739f5f9SChristian Marangi 
573*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha256_cbc_des = {
574*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
575*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA256 | EIP93_MODE_CBC | EIP93_ALG_DES,
576*9739f5f9SChristian Marangi 	.alg.aead = {
577*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
578*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
579*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
580*9739f5f9SChristian Marangi 		.ivsize	= DES_BLOCK_SIZE,
581*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
582*9739f5f9SChristian Marangi 		.maxauthsize = SHA256_DIGEST_SIZE,
583*9739f5f9SChristian Marangi 		.base = {
584*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha256),cbc(des))",
585*9739f5f9SChristian Marangi 			.cra_driver_name =
586*9739f5f9SChristian Marangi 				"authenc(hmac(sha256-eip93),cbc(des-eip93))",
587*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
588*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
589*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
590*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
591*9739f5f9SChristian Marangi 			.cra_blocksize = DES_BLOCK_SIZE,
592*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
593*9739f5f9SChristian Marangi 			.cra_alignmask = 0,
594*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
595*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
596*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
597*9739f5f9SChristian Marangi 		},
598*9739f5f9SChristian Marangi 	},
599*9739f5f9SChristian Marangi };
600*9739f5f9SChristian Marangi 
601*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_md5_cbc_des3_ede = {
602*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
603*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_MD5 | EIP93_MODE_CBC | EIP93_ALG_3DES,
604*9739f5f9SChristian Marangi 	.alg.aead = {
605*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
606*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
607*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
608*9739f5f9SChristian Marangi 		.ivsize	= DES3_EDE_BLOCK_SIZE,
609*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
610*9739f5f9SChristian Marangi 		.maxauthsize = MD5_DIGEST_SIZE,
611*9739f5f9SChristian Marangi 		.base = {
612*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(md5),cbc(des3_ede))",
613*9739f5f9SChristian Marangi 			.cra_driver_name =
614*9739f5f9SChristian Marangi 				"authenc(hmac(md5-eip93),cbc(des3_ede-eip93))",
615*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
616*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
617*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
618*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
619*9739f5f9SChristian Marangi 			.cra_blocksize = DES3_EDE_BLOCK_SIZE,
620*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
621*9739f5f9SChristian Marangi 			.cra_alignmask = 0x0,
622*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
623*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
624*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
625*9739f5f9SChristian Marangi 		},
626*9739f5f9SChristian Marangi 	},
627*9739f5f9SChristian Marangi };
628*9739f5f9SChristian Marangi 
629*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha1_cbc_des3_ede = {
630*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
631*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA1 | EIP93_MODE_CBC | EIP93_ALG_3DES,
632*9739f5f9SChristian Marangi 	.alg.aead = {
633*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
634*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
635*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
636*9739f5f9SChristian Marangi 		.ivsize	= DES3_EDE_BLOCK_SIZE,
637*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
638*9739f5f9SChristian Marangi 		.maxauthsize = SHA1_DIGEST_SIZE,
639*9739f5f9SChristian Marangi 		.base = {
640*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha1),cbc(des3_ede))",
641*9739f5f9SChristian Marangi 			.cra_driver_name =
642*9739f5f9SChristian Marangi 				"authenc(hmac(sha1-eip93),cbc(des3_ede-eip93))",
643*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
644*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
645*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
646*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
647*9739f5f9SChristian Marangi 			.cra_blocksize = DES3_EDE_BLOCK_SIZE,
648*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
649*9739f5f9SChristian Marangi 			.cra_alignmask = 0x0,
650*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
651*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
652*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
653*9739f5f9SChristian Marangi 		},
654*9739f5f9SChristian Marangi 	},
655*9739f5f9SChristian Marangi };
656*9739f5f9SChristian Marangi 
657*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha224_cbc_des3_ede = {
658*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
659*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA224 | EIP93_MODE_CBC | EIP93_ALG_3DES,
660*9739f5f9SChristian Marangi 	.alg.aead = {
661*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
662*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
663*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
664*9739f5f9SChristian Marangi 		.ivsize	= DES3_EDE_BLOCK_SIZE,
665*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
666*9739f5f9SChristian Marangi 		.maxauthsize = SHA224_DIGEST_SIZE,
667*9739f5f9SChristian Marangi 		.base = {
668*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha224),cbc(des3_ede))",
669*9739f5f9SChristian Marangi 			.cra_driver_name =
670*9739f5f9SChristian Marangi 			"authenc(hmac(sha224-eip93),cbc(des3_ede-eip93))",
671*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
672*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
673*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
674*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
675*9739f5f9SChristian Marangi 			.cra_blocksize = DES3_EDE_BLOCK_SIZE,
676*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
677*9739f5f9SChristian Marangi 			.cra_alignmask = 0x0,
678*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
679*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
680*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
681*9739f5f9SChristian Marangi 		},
682*9739f5f9SChristian Marangi 	},
683*9739f5f9SChristian Marangi };
684*9739f5f9SChristian Marangi 
685*9739f5f9SChristian Marangi struct eip93_alg_template eip93_alg_authenc_hmac_sha256_cbc_des3_ede = {
686*9739f5f9SChristian Marangi 	.type = EIP93_ALG_TYPE_AEAD,
687*9739f5f9SChristian Marangi 	.flags = EIP93_HASH_HMAC | EIP93_HASH_SHA256 | EIP93_MODE_CBC | EIP93_ALG_3DES,
688*9739f5f9SChristian Marangi 	.alg.aead = {
689*9739f5f9SChristian Marangi 		.setkey = eip93_aead_setkey,
690*9739f5f9SChristian Marangi 		.encrypt = eip93_aead_encrypt,
691*9739f5f9SChristian Marangi 		.decrypt = eip93_aead_decrypt,
692*9739f5f9SChristian Marangi 		.ivsize	= DES3_EDE_BLOCK_SIZE,
693*9739f5f9SChristian Marangi 		.setauthsize = eip93_aead_setauthsize,
694*9739f5f9SChristian Marangi 		.maxauthsize = SHA256_DIGEST_SIZE,
695*9739f5f9SChristian Marangi 		.base = {
696*9739f5f9SChristian Marangi 			.cra_name = "authenc(hmac(sha256),cbc(des3_ede))",
697*9739f5f9SChristian Marangi 			.cra_driver_name =
698*9739f5f9SChristian Marangi 			"authenc(hmac(sha256-eip93),cbc(des3_ede-eip93))",
699*9739f5f9SChristian Marangi 			.cra_priority = EIP93_CRA_PRIORITY,
700*9739f5f9SChristian Marangi 			.cra_flags = CRYPTO_ALG_ASYNC |
701*9739f5f9SChristian Marangi 					CRYPTO_ALG_KERN_DRIVER_ONLY |
702*9739f5f9SChristian Marangi 					CRYPTO_ALG_ALLOCATES_MEMORY,
703*9739f5f9SChristian Marangi 			.cra_blocksize = DES3_EDE_BLOCK_SIZE,
704*9739f5f9SChristian Marangi 			.cra_ctxsize = sizeof(struct eip93_crypto_ctx),
705*9739f5f9SChristian Marangi 			.cra_alignmask = 0x0,
706*9739f5f9SChristian Marangi 			.cra_init = eip93_aead_cra_init,
707*9739f5f9SChristian Marangi 			.cra_exit = eip93_aead_cra_exit,
708*9739f5f9SChristian Marangi 			.cra_module = THIS_MODULE,
709*9739f5f9SChristian Marangi 		},
710*9739f5f9SChristian Marangi 	},
711*9739f5f9SChristian Marangi };
712