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