diff options
| author | Pascal van Leeuwen <pascalvanl@gmail.com> | 2019-09-13 22:04:46 +0200 | 
|---|---|---|
| committer | Herbert Xu <herbert@gondor.apana.org.au> | 2019-10-05 01:06:09 +1000 | 
| commit | 457a6fdf4caaac5d5006bfd609f33b8b2a383750 (patch) | |
| tree | 94f5692c66b86bf43d9009968d8cbea01ad845bb /drivers/crypto | |
| parent | f0a8bdf0b113b51d023c94468628ec90d4375acc (diff) | |
crypto: inside-secure - Added support for authenc HMAC-SHA2/DES-CBC
This patch adds support for the authenc(hmac(sha224),cbc(des)),
authenc(hmac(sha256),cbc(des)), authenc(hmac(sha384),cbc(des))
and authenc(hmac(sha512),cbc(des)) aead's
changes since v1:
- nothing
Signed-off-by: Pascal van Leeuwen <pvanleeuwen@verimatrix.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto')
| -rw-r--r-- | drivers/crypto/inside-secure/safexcel.c | 4 | ||||
| -rw-r--r-- | drivers/crypto/inside-secure/safexcel.h | 4 | ||||
| -rw-r--r-- | drivers/crypto/inside-secure/safexcel_cipher.c | 136 | 
3 files changed, 144 insertions, 0 deletions
| diff --git a/drivers/crypto/inside-secure/safexcel.c b/drivers/crypto/inside-secure/safexcel.c index 36523dd74599..094b581c194e 100644 --- a/drivers/crypto/inside-secure/safexcel.c +++ b/drivers/crypto/inside-secure/safexcel.c @@ -1200,6 +1200,10 @@ static struct safexcel_alg_template *safexcel_algs[] = {  	&safexcel_alg_authenc_hmac_sha224_cbc_des3_ede,  	&safexcel_alg_authenc_hmac_sha512_cbc_des3_ede,  	&safexcel_alg_authenc_hmac_sha384_cbc_des3_ede, +	&safexcel_alg_authenc_hmac_sha256_cbc_des, +	&safexcel_alg_authenc_hmac_sha224_cbc_des, +	&safexcel_alg_authenc_hmac_sha512_cbc_des, +	&safexcel_alg_authenc_hmac_sha384_cbc_des,  };  static int safexcel_register_algorithms(struct safexcel_crypto_priv *priv) diff --git a/drivers/crypto/inside-secure/safexcel.h b/drivers/crypto/inside-secure/safexcel.h index b1703e322ab8..9522594cd3a4 100644 --- a/drivers/crypto/inside-secure/safexcel.h +++ b/drivers/crypto/inside-secure/safexcel.h @@ -906,5 +906,9 @@ extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_des3_ed  extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_des3_ede;  extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_des3_ede;  extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_des3_ede; +extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_des; +extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_des; +extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_des; +extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_des;  #endif diff --git a/drivers/crypto/inside-secure/safexcel_cipher.c b/drivers/crypto/inside-secure/safexcel_cipher.c index 0803b0ba233c..6c3fdd650ecc 100644 --- a/drivers/crypto/inside-secure/safexcel_cipher.c +++ b/drivers/crypto/inside-secure/safexcel_cipher.c @@ -2016,6 +2016,142 @@ struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_cbc_des = {  	},  }; +static int safexcel_aead_sha256_des_cra_init(struct crypto_tfm *tfm) +{ +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); + +	safexcel_aead_sha256_cra_init(tfm); +	ctx->alg = SAFEXCEL_DES; /* override default */ +	return 0; +} + +struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_cbc_des = { +	.type = SAFEXCEL_ALG_TYPE_AEAD, +	.algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_SHA2_256, +	.alg.aead = { +		.setkey = safexcel_aead_setkey, +		.encrypt = safexcel_aead_encrypt, +		.decrypt = safexcel_aead_decrypt, +		.ivsize = DES_BLOCK_SIZE, +		.maxauthsize = SHA256_DIGEST_SIZE, +		.base = { +			.cra_name = "authenc(hmac(sha256),cbc(des))", +			.cra_driver_name = "safexcel-authenc-hmac-sha256-cbc-des", +			.cra_priority = SAFEXCEL_CRA_PRIORITY, +			.cra_flags = CRYPTO_ALG_ASYNC | +				     CRYPTO_ALG_KERN_DRIVER_ONLY, +			.cra_blocksize = DES_BLOCK_SIZE, +			.cra_ctxsize = sizeof(struct safexcel_cipher_ctx), +			.cra_alignmask = 0, +			.cra_init = safexcel_aead_sha256_des_cra_init, +			.cra_exit = safexcel_aead_cra_exit, +			.cra_module = THIS_MODULE, +		}, +	}, +}; + +static int safexcel_aead_sha224_des_cra_init(struct crypto_tfm *tfm) +{ +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); + +	safexcel_aead_sha224_cra_init(tfm); +	ctx->alg = SAFEXCEL_DES; /* override default */ +	return 0; +} + +struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_cbc_des = { +	.type = SAFEXCEL_ALG_TYPE_AEAD, +	.algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_SHA2_256, +	.alg.aead = { +		.setkey = safexcel_aead_setkey, +		.encrypt = safexcel_aead_encrypt, +		.decrypt = safexcel_aead_decrypt, +		.ivsize = DES_BLOCK_SIZE, +		.maxauthsize = SHA224_DIGEST_SIZE, +		.base = { +			.cra_name = "authenc(hmac(sha224),cbc(des))", +			.cra_driver_name = "safexcel-authenc-hmac-sha224-cbc-des", +			.cra_priority = SAFEXCEL_CRA_PRIORITY, +			.cra_flags = CRYPTO_ALG_ASYNC | +				     CRYPTO_ALG_KERN_DRIVER_ONLY, +			.cra_blocksize = DES_BLOCK_SIZE, +			.cra_ctxsize = sizeof(struct safexcel_cipher_ctx), +			.cra_alignmask = 0, +			.cra_init = safexcel_aead_sha224_des_cra_init, +			.cra_exit = safexcel_aead_cra_exit, +			.cra_module = THIS_MODULE, +		}, +	}, +}; + +static int safexcel_aead_sha512_des_cra_init(struct crypto_tfm *tfm) +{ +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); + +	safexcel_aead_sha512_cra_init(tfm); +	ctx->alg = SAFEXCEL_DES; /* override default */ +	return 0; +} + +struct safexcel_alg_template safexcel_alg_authenc_hmac_sha512_cbc_des = { +	.type = SAFEXCEL_ALG_TYPE_AEAD, +	.algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_SHA2_512, +	.alg.aead = { +		.setkey = safexcel_aead_setkey, +		.encrypt = safexcel_aead_encrypt, +		.decrypt = safexcel_aead_decrypt, +		.ivsize = DES_BLOCK_SIZE, +		.maxauthsize = SHA512_DIGEST_SIZE, +		.base = { +			.cra_name = "authenc(hmac(sha512),cbc(des))", +			.cra_driver_name = "safexcel-authenc-hmac-sha512-cbc-des", +			.cra_priority = SAFEXCEL_CRA_PRIORITY, +			.cra_flags = CRYPTO_ALG_ASYNC | +				     CRYPTO_ALG_KERN_DRIVER_ONLY, +			.cra_blocksize = DES_BLOCK_SIZE, +			.cra_ctxsize = sizeof(struct safexcel_cipher_ctx), +			.cra_alignmask = 0, +			.cra_init = safexcel_aead_sha512_des_cra_init, +			.cra_exit = safexcel_aead_cra_exit, +			.cra_module = THIS_MODULE, +		}, +	}, +}; + +static int safexcel_aead_sha384_des_cra_init(struct crypto_tfm *tfm) +{ +	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); + +	safexcel_aead_sha384_cra_init(tfm); +	ctx->alg = SAFEXCEL_DES; /* override default */ +	return 0; +} + +struct safexcel_alg_template safexcel_alg_authenc_hmac_sha384_cbc_des = { +	.type = SAFEXCEL_ALG_TYPE_AEAD, +	.algo_mask = SAFEXCEL_ALG_DES | SAFEXCEL_ALG_SHA2_512, +	.alg.aead = { +		.setkey = safexcel_aead_setkey, +		.encrypt = safexcel_aead_encrypt, +		.decrypt = safexcel_aead_decrypt, +		.ivsize = DES_BLOCK_SIZE, +		.maxauthsize = SHA384_DIGEST_SIZE, +		.base = { +			.cra_name = "authenc(hmac(sha384),cbc(des))", +			.cra_driver_name = "safexcel-authenc-hmac-sha384-cbc-des", +			.cra_priority = SAFEXCEL_CRA_PRIORITY, +			.cra_flags = CRYPTO_ALG_ASYNC | +				     CRYPTO_ALG_KERN_DRIVER_ONLY, +			.cra_blocksize = DES_BLOCK_SIZE, +			.cra_ctxsize = sizeof(struct safexcel_cipher_ctx), +			.cra_alignmask = 0, +			.cra_init = safexcel_aead_sha384_des_cra_init, +			.cra_exit = safexcel_aead_cra_exit, +			.cra_module = THIS_MODULE, +		}, +	}, +}; +  static int safexcel_aead_sha1_ctr_cra_init(struct crypto_tfm *tfm)  {  	struct safexcel_cipher_ctx *ctx = crypto_tfm_ctx(tfm); | 
