crypto: chelsio - Cleanup and bug fixes
Subsystems (2)
cover crypto: chelsio - Cleanup and bug fixes
This series include cleanup, bug fixes and authenc algo supporting
ctr(aes)-sha operation.
Harsh Jain (5):
crypto: chelsio - Fix Indentation
crypto: chelsio - check for sg null
crypto: chelsio - Fix IV updated in XTS operation
crypto: chelsio - Add authenc versions of ctr and sha
crypto: chelsio - Remove dst sg size zero check
drivers/crypto/chelsio/chcr_algo.c | 299 ++++++++++++++++++++++++++--------- drivers/crypto/chelsio/chcr_crypto.h | 7 +- 2 files changed, 233 insertions(+), 73 deletions(-)
Signature · 1 line
2.1.4
PATCH 1/5 crypto: chelsio - Fix Indentation
Fix inconsistent Indenting.
--- drivers/crypto/chelsio/chcr_algo.c | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-)
drivers/crypto/chelsio/chcr_algo.c +13 -15
@@ -683,7 +683,7 @@ static int chcr_sg_ent_in_wr(struct scatterlist *src,if (srclen <= dstlen)break ; less = min_t(unsigned int, sg_dma_len(dst) - offset - - dstskip,CHCR_DST_SG_SIZE ); + dstskip,CHCR_DST_SG_SIZE ); dstlen += less; offset += less;if (offset ==sg_dma_len (dst)) {
@@ -694,7 +694,7 @@ static int chcr_sg_ent_in_wr(struct scatterlist *src, dstskip =0 ; } src =sg_next (src); - srcskip =0 ; + srcskip =0 ; }return min (srclen, dstlen); }
@@ -1142,10 +1142,10 @@ static int chcr_handle_cipher_resp(struct ablkcipher_request *req, bytes =chcr_sg_ent_in_wr (reqctx->srcsg, reqctx->dstsg,1 ,SPACE_LEFT (ablkctx->enckey_len), reqctx->src_ofst, reqctx->dst_ofst); -if ((bytes + reqctx->processed) >= req->nbytes) - bytes = req->nbytes - reqctx->processed; -else - bytes =ROUND_16 (bytes); +if ((bytes + reqctx->processed) >= req->nbytes) + bytes = req->nbytes - reqctx->processed; +else + bytes =ROUND_16 (bytes); }else {/*CTR mode counter overfloa*/ bytes = req->nbytes - reqctx->processed;
@@ -1246,15 +1246,15 @@ static int process_cipher(struct ablkcipher_request *req,MIN_CIPHER_SG ,SPACE_LEFT (ablkctx->enckey_len), 0, 0); -if ((bytes + reqctx->processed) >= req->nbytes) - bytes = req->nbytes - reqctx->processed; -else - bytes =ROUND_16 (bytes); +if ((bytes + reqctx->processed) >= req->nbytes) + bytes = req->nbytes - reqctx->processed; +else + bytes =ROUND_16 (bytes); }else { bytes = req->nbytes; }if (get_cryptoalg_subtype (crypto_ablkcipher_tfm (tfm)) == -CRYPTO_ALG_SUB_TYPE_CTR ) { +CRYPTO_ALG_SUB_TYPE_CTR ) { bytes =adjust_ctr_overflow (req->info, bytes); } if (get_cryptoalg_subtype(crypto_ablkcipher_tfm(tfm)) ==
@@ -2399,10 +2399,8 @@ void chcr_add_hash_src_ent(struct ahash_request *req,ulptx_walk_add_page (&ulp_walk, param->bfr_len, &reqctx->dma_addr);ulptx_walk_add_sg (&ulp_walk, req->src, param->sg_len, -0 ); -// reqctx->srcsg = ulp_walk.last_sg; -// reqctx->src_ofst = ulp_walk.last_sg_len; -ulptx_walk_end (&ulp_walk); +0 ); +ulptx_walk_end (&ulp_walk); } }
Signature · 1 line
2.1.4
PATCH 2/5 crypto: chelsio - check for sg null
In reply to Harsh JainAdd warning message if sg is NULL after skipping bytes.
--- drivers/crypto/chelsio/chcr_algo.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/crypto/chelsio/chcr_algo.c +2 -1
@@ -574,7 +574,8 @@ static void ulptx_walk_add_sg(struct ulptx_walk *walk, skip =0 ; } } -if (walk->nents ==0 ) { +WARN (!sg,"SG should not be null here\n" ); +if (sg && (walk->nents ==0 )) { small = min_t(unsigned int, sg_dma_len(sg) - skip_len, len); sgmin = min_t(unsigned int, small, CHCR_SRC_SG_SIZE); walk->sgl->len0 =cpu_to_be32 (sgmin);
Signature · 1 line
2.1.4
PATCH 3/5 crypto: chelsio - Fix IV updated in XTS operation
In reply to Harsh JainSkip decrypt operation on IV received from HW for last request.
--- drivers/crypto/chelsio/chcr_algo.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) mode change 100644 => 100755 drivers/crypto/chelsio/chcr_algo.c
drivers/crypto/chelsio/chcr_algo.c +6 -4
@@ -1017,7 +1017,8 @@ static unsigned int adjust_ctr_overflow(u8 *iv, u32 bytes)return bytes; } -static int chcr_update_tweak (struct ablkcipher_request *req,u8 *iv) +static int chcr_update_tweak (struct ablkcipher_request *req,u8 *iv, +u32 isfinal) {struct crypto_ablkcipher *tfm =crypto_ablkcipher_reqtfm (req);struct ablk_ctx *ablkctx =ABLK_CTX (c_ctx (tfm));
@@ -1044,7 +1045,8 @@ static int chcr_update_tweak(struct ablkcipher_request *req, u8 *iv)for (i =0 ; i < (round %8 ); i++)gf128mul_x_ble ((le128 *)iv, (le128 *)iv); -crypto_cipher_decrypt_one (cipher, iv, iv); +if (!isfinal) +crypto_cipher_decrypt_one (cipher, iv, iv); out:return ret; }
@@ -1065,7 +1067,7 @@ static int chcr_update_cipher_iv(struct ablkcipher_request *req, CTR_RFC3686_IV_SIZE) = cpu_to_be32((reqctx->processed /AES_BLOCK_SIZE ) +1 ); else if (subtype == CRYPTO_ALG_SUB_TYPE_XTS) - ret =chcr_update_tweak (req, iv); + ret =chcr_update_tweak (req, iv,0 ); else if (subtype == CRYPTO_ALG_SUB_TYPE_CBC) {if (reqctx->op) sg_pcopy_to_buffer(req->src, sg_nents(req->src), iv,
@@ -1096,7 +1098,7 @@ static int chcr_final_cipher_iv(struct ablkcipher_request *req,ctr_add_iv (iv, req->info, (reqctx->processed /AES_BLOCK_SIZE )); else if (subtype == CRYPTO_ALG_SUB_TYPE_XTS) - ret =chcr_update_tweak (req, iv); + ret =chcr_update_tweak (req, iv,1 ); else if (subtype == CRYPTO_ALG_SUB_TYPE_CBC) {if (reqctx->op) sg_pcopy_to_buffer(req->src, sg_nents(req->src), iv,
Signature · 1 line
2.1.4
PATCH 4/5 crypto: chelsio - Add authenc versions of ctr and sha
In reply to Harsh JainAdd ctr and sha combination of algo in authenc mode.
--- drivers/crypto/chelsio/chcr_algo.c | 215 +++++++++++++++++++++++++++++++---- drivers/crypto/chelsio/chcr_crypto.h | 7 +- 2 files changed, 199 insertions(+), 23 deletions(-) mode change 100755 => 100644 drivers/crypto/chelsio/chcr_algo.c
drivers/crypto/chelsio/chcr_algo.c +194 -21
@@ -2090,7 +2090,7 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,struct cpl_rx_phys_dsgl *phys_cpl;struct ulptx_sgl *ulptx;unsigned int transhdr_len; -unsigned int dst_size =0 , temp; +unsigned int dst_size =0 , temp, subtype =get_aead_subtype (tfm);unsigned int kctx_len =0 , dnents;unsigned int assoclen = req->assoclen;unsigned int authsize =crypto_aead_authsize (tfm);
@@ -2104,7 +2104,8 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,return NULL ; reqctx->b0_dma =0 ; -if (get_aead_subtype (tfm) ==CRYPTO_ALG_SUB_TYPE_AEAD_NULL ) { +if (subtype ==CRYPTO_ALG_SUB_TYPE_CBC_NULL || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL ) { null =1 ; assoclen =0 ; }
@@ -2169,16 +2170,23 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req, temp &0xF , null ?0 : assoclen +IV +1 , temp, temp); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_SHA ) + temp =CHCR_SCMD_CIPHER_MODE_AES_CTR ; +else + temp =CHCR_SCMD_CIPHER_MODE_AES_CBC ; chcr_req->sec_cpl.seqno_numivs =FILL_SEC_CPL_SCMD0_SEQNO (op_type, (op_type ==CHCR_ENCRYPT_OP ) ?1 :0 , -CHCR_SCMD_CIPHER_MODE_AES_CBC , + temp, actx->auth_mode, aeadctx->hmac_ctrl,IV >>1 ); chcr_req->sec_cpl.ivgen_hdrlen =FILL_SEC_CPL_IVGEN_HDRLEN (0 ,0 ,1 ,0 ,0 , dst_size); chcr_req->key_ctx.ctx_hdr = aeadctx->key_ctx_hdr; -if (op_type ==CHCR_ENCRYPT_OP ) +if (op_type ==CHCR_ENCRYPT_OP || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL )memcpy (chcr_req->key_ctx.key, aeadctx->key, aeadctx->enckey_len);else
@@ -2188,7 +2196,16 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req,memcpy (chcr_req->key_ctx.key + (DIV_ROUND_UP (aeadctx->enckey_len,16 ) <<4 ), actx->h_iopad, kctx_len - (DIV_ROUND_UP (aeadctx->enckey_len,16 ) <<4 )); -memcpy (reqctx->iv, req->iv,IV ); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CTR_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL ) { +memcpy (reqctx->iv, aeadctx->nonce,CTR_RFC3686_NONCE_SIZE ); +memcpy (reqctx->iv +CTR_RFC3686_NONCE_SIZE , req->iv, +CTR_RFC3686_IV_SIZE ); + *(__be32 *)(reqctx->iv +CTR_RFC3686_NONCE_SIZE + +CTR_RFC3686_IV_SIZE ) =cpu_to_be32 (1 ); + }else { +memcpy (reqctx->iv, req->iv,IV ); + } phys_cpl = (struct cpl_rx_phys_dsgl *)((u8 *)(chcr_req +1 ) + kctx_len); ulptx = (struct ulptx_sgl *)((u8 *)(phys_cpl +1 ) + dst_size);chcr_add_aead_dst_ent (req, phys_cpl, assoclen, op_type, qid);
@@ -3216,7 +3233,7 @@ static int chcr_authenc_setkey(struct crypto_aead *authenc, const u8 *key,struct chcr_authenc_ctx *actx =AUTHENC_CTX (aeadctx);/* it contains auth and cipher key both*/ struct crypto_authenc_keys keys; -unsigned int bs; +unsigned int bs, subtype;unsigned int max_authsize =crypto_aead_alg (authenc)->maxauthsize;int err =0 , i, key_ctx_len =0 ;unsigned char ck_size =0 ;
@@ -3245,6 +3262,15 @@ static int chcr_authenc_setkey(struct crypto_aead *authenc, const u8 *key,pr_err ("chcr : Unsupported digest size\n" ); goto out; } + subtype =get_aead_subtype (authenc); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CTR_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL ) { +if (keys.enckeylen <CTR_RFC3686_NONCE_SIZE ) + goto out; +memcpy (aeadctx->nonce, keys.enckey + (keys.enckeylen + -CTR_RFC3686_NONCE_SIZE ),CTR_RFC3686_NONCE_SIZE ); + keys.enckeylen -=CTR_RFC3686_NONCE_SIZE ; + }if (keys.enckeylen ==AES_KEYSIZE_128 ) { ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_128 ; }else if (keys.enckeylen ==AES_KEYSIZE_192 ) {
@@ -3262,9 +3288,12 @@ static int chcr_authenc_setkey(struct crypto_aead *authenc, const u8 *key,*/ memcpy (aeadctx->key, keys.enckey, keys.enckeylen); aeadctx->enckey_len = keys.enckeylen; -get_aes_decrypt_key (actx->dec_rrkey, aeadctx->key, - aeadctx->enckey_len <<3 ); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CBC_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CBC_NULL ) { +get_aes_decrypt_key (actx->dec_rrkey, aeadctx->key, + aeadctx->enckey_len <<3 ); + } base_hash =chcr_alloc_shash (max_authsize);if (IS_ERR (base_hash)) {pr_err ("chcr : Base driver cannot be loaded\n" );
@@ -3337,6 +3366,7 @@ static int chcr_aead_digest_null_setkey(struct crypto_aead *authenc,struct crypto_authenc_keys keys;int err;/* it contains auth and cipher key both*/ +unsigned int subtype;int key_ctx_len =0 ;unsigned char ck_size =0 ;
@@ -3354,6 +3384,15 @@ static int chcr_aead_digest_null_setkey(struct crypto_aead *authenc,crypto_aead_set_flags (authenc,CRYPTO_TFM_RES_BAD_KEY_LEN ); goto out; } + subtype =get_aead_subtype (authenc); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CTR_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CTR_NULL ) { +if (keys.enckeylen <CTR_RFC3686_NONCE_SIZE ) + goto out; +memcpy (aeadctx->nonce, keys.enckey + (keys.enckeylen + -CTR_RFC3686_NONCE_SIZE ),CTR_RFC3686_NONCE_SIZE ); + keys.enckeylen -=CTR_RFC3686_NONCE_SIZE ; + }if (keys.enckeylen ==AES_KEYSIZE_128 ) { ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_128 ; }else if (keys.enckeylen ==AES_KEYSIZE_192 ) {
@@ -3361,13 +3400,16 @@ static int chcr_aead_digest_null_setkey(struct crypto_aead *authenc, }else if (keys.enckeylen ==AES_KEYSIZE_256 ) { ck_size =CHCR_KEYCTX_CIPHER_KEY_SIZE_256 ; }else { -pr_err ("chcr : Unsupported cipher key\n" ); +pr_err ("chcr : Unsupported cipher key %d\n" , keys.enckeylen); goto out; }memcpy (aeadctx->key, keys.enckey, keys.enckeylen); aeadctx->enckey_len = keys.enckeylen; -get_aes_decrypt_key (actx->dec_rrkey, aeadctx->key, - aeadctx->enckey_len <<3 ); +if (subtype ==CRYPTO_ALG_SUB_TYPE_CBC_SHA || + subtype ==CRYPTO_ALG_SUB_TYPE_CBC_NULL ) { +get_aes_decrypt_key (actx->dec_rrkey, aeadctx->key, + aeadctx->enckey_len <<3 ); + } key_ctx_len =sizeof (struct _key_ctx ) + ((DIV_ROUND_UP (keys.enckeylen,16 )) <<4 );
@@ -3421,8 +3463,10 @@ static int chcr_aead_encrypt(struct aead_request *req) reqctx->verify =VERIFY_HW ;switch (get_aead_subtype (tfm)) { -case CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC : -case CRYPTO_ALG_SUB_TYPE_AEAD_NULL : +case CRYPTO_ALG_SUB_TYPE_CTR_SHA : +case CRYPTO_ALG_SUB_TYPE_CBC_SHA : +case CRYPTO_ALG_SUB_TYPE_CBC_NULL : +case CRYPTO_ALG_SUB_TYPE_CTR_NULL :return chcr_aead_op (req,CHCR_ENCRYPT_OP ,0 , create_authenc_wr);case CRYPTO_ALG_SUB_TYPE_AEAD_CCM :
@@ -3451,8 +3495,10 @@ static int chcr_aead_decrypt(struct aead_request *req) }switch (get_aead_subtype (tfm)) { -case CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC : -case CRYPTO_ALG_SUB_TYPE_AEAD_NULL : +case CRYPTO_ALG_SUB_TYPE_CBC_SHA : +case CRYPTO_ALG_SUB_TYPE_CTR_SHA : +case CRYPTO_ALG_SUB_TYPE_CBC_NULL : +case CRYPTO_ALG_SUB_TYPE_CTR_NULL :return chcr_aead_op (req,CHCR_DECRYPT_OP , size, create_authenc_wr);case CRYPTO_ALG_SUB_TYPE_AEAD_CCM :
@@ -3748,7 +3794,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_SHA, .is_registered = 0, .alg.aead = { .base = {
@@ -3769,7 +3815,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_SHA, .is_registered = 0, .alg.aead = { .base = {
@@ -3791,7 +3837,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_SHA, .is_registered = 0, .alg.aead = { .base = {
@@ -3811,7 +3857,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_SHA, .is_registered = 0, .alg.aead = { .base = {
@@ -3832,7 +3878,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_SHA, .is_registered = 0, .alg.aead = { .base = {
@@ -3853,7 +3899,7 @@ static struct chcr_alg_template driver_algs[] = { } }, { - .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_AEAD_NULL, + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CBC_NULL, .is_registered = 0, .alg.aead = { .base = {
@@ -3873,6 +3919,133 @@ static struct chcr_alg_template driver_algs[] = { .setauthsize = chcr_authenc_null_setauthsize, } }, + { + .type = CRYPTO_ALG_TYPE_AEAD | CRYPTO_ALG_SUB_TYPE_CTR_SHA, + .is_registered = 0, + .alg.aead = { + .base = { + .cra_name = "authenc(hmac(sha1),rfc3686(ctr(aes)))", + .cra_driver_name = + "authenc-hmac-sha1-rfc3686-ctr-aes-chcr", + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize =sizeof (struct chcr_context ) + +sizeof (struct chcr_aead_ctx ) + +sizeof (struct chcr_authenc_ctx ), + + }, + .ivsize = CTR_RFC3686_IV_SIZE, + .maxauthsize = SHA1_DIGEST_SIZE, + .setkey = chcr_authenc_setkey, + .setauthsize = chcr_authenc_setauthsize, + } + }, + { + .type =CRYPTO_ALG_TYPE_AEAD |CRYPTO_ALG_SUB_TYPE_CTR_SHA , + .is_registered = 0, + .alg.aead = { + .base = { + + .cra_name ="authenc(hmac(sha256),rfc3686(ctr(aes)))" , + .cra_driver_name = +"authenc-hmac-sha256-rfc3686-ctr-aes-chcr" , + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize = sizeof(struct chcr_context) + +sizeof (struct chcr_aead_ctx ) + +sizeof (struct chcr_authenc_ctx ), + + }, + .ivsize = CTR_RFC3686_IV_SIZE, + .maxauthsize = SHA256_DIGEST_SIZE, + .setkey = chcr_authenc_setkey, + .setauthsize = chcr_authenc_setauthsize, + } + }, + { + .type =CRYPTO_ALG_TYPE_AEAD |CRYPTO_ALG_SUB_TYPE_CTR_SHA , + .is_registered = 0, + .alg.aead = { + .base = { + .cra_name ="authenc(hmac(sha224),rfc3686(ctr(aes)))" , + .cra_driver_name = +"authenc-hmac-sha224-rfc3686-ctr-aes-chcr" , + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize = sizeof(struct chcr_context) + +sizeof (struct chcr_aead_ctx ) + + sizeof(struct chcr_authenc_ctx), + }, + .ivsize =CTR_RFC3686_IV_SIZE , + .maxauthsize = SHA224_DIGEST_SIZE, + .setkey = chcr_authenc_setkey, + .setauthsize = chcr_authenc_setauthsize, + } + }, + { + .type =CRYPTO_ALG_TYPE_AEAD |CRYPTO_ALG_SUB_TYPE_CTR_SHA , + .is_registered = 0, + .alg.aead = { + .base = { + .cra_name ="authenc(hmac(sha384),rfc3686(ctr(aes)))" , + .cra_driver_name = +"authenc-hmac-sha384-rfc3686-ctr-aes-chcr" , + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize = sizeof(struct chcr_context) + +sizeof (struct chcr_aead_ctx ) + +sizeof (struct chcr_authenc_ctx ), + + }, + .ivsize = CTR_RFC3686_IV_SIZE, + .maxauthsize = SHA384_DIGEST_SIZE, + .setkey = chcr_authenc_setkey, + .setauthsize = chcr_authenc_setauthsize, + } + }, + { + .type =CRYPTO_ALG_TYPE_AEAD |CRYPTO_ALG_SUB_TYPE_CTR_SHA , + .is_registered = 0, + .alg.aead = { + .base = { + .cra_name ="authenc(hmac(sha512),rfc3686(ctr(aes)))" , + .cra_driver_name = +"authenc-hmac-sha512-rfc3686-ctr-aes-chcr" , + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize = sizeof(struct chcr_context) + +sizeof (struct chcr_aead_ctx ) + +sizeof (struct chcr_authenc_ctx ), + + }, + .ivsize = CTR_RFC3686_IV_SIZE, + .maxauthsize = SHA512_DIGEST_SIZE, + .setkey = chcr_authenc_setkey, + .setauthsize = chcr_authenc_setauthsize, + } + }, + { + .type =CRYPTO_ALG_TYPE_AEAD |CRYPTO_ALG_SUB_TYPE_CTR_NULL , + .is_registered = 0, + .alg.aead = { + .base = { + .cra_name ="authenc(digest_null,rfc3686(ctr(aes)))" , + .cra_driver_name = +"authenc-digest_null-rfc3686-ctr-aes-chcr" , + .cra_blocksize = 1, + .cra_priority = CHCR_AEAD_PRIORITY, + .cra_ctxsize = sizeof(struct chcr_context) + +sizeof (struct chcr_aead_ctx ) + +sizeof (struct chcr_authenc_ctx ), + + }, + .ivsize = CTR_RFC3686_IV_SIZE, + .maxauthsize = 0, + .setkey = chcr_aead_digest_null_setkey, + .setauthsize = chcr_authenc_null_setauthsize, + } + }, + };/*
drivers/crypto/chelsio/chcr_crypto.h +5 -2
@@ -134,14 +134,16 @@#define CRYPTO_ALG_SUB_TYPE_HASH_HMAC 0x01000000#define CRYPTO_ALG_SUB_TYPE_AEAD_RFC4106 0x02000000#define CRYPTO_ALG_SUB_TYPE_AEAD_GCM 0x03000000 -#define CRYPTO_ALG_SUB_TYPE_AEAD_AUTHENC 0x04000000 +#define CRYPTO_ALG_SUB_TYPE_CBC_SHA 0x04000000#define CRYPTO_ALG_SUB_TYPE_AEAD_CCM 0x05000000#define CRYPTO_ALG_SUB_TYPE_AEAD_RFC4309 0x06000000 -#define CRYPTO_ALG_SUB_TYPE_AEAD_NULL 0x07000000 +#define CRYPTO_ALG_SUB_TYPE_CBC_NULL 0x07000000#define CRYPTO_ALG_SUB_TYPE_CTR 0x08000000#define CRYPTO_ALG_SUB_TYPE_CTR_RFC3686 0x09000000#define CRYPTO_ALG_SUB_TYPE_XTS 0x0a000000#define CRYPTO_ALG_SUB_TYPE_CBC 0x0b000000 +#define CRYPTO_ALG_SUB_TYPE_CTR_SHA 0x0c000000 +#define CRYPTO_ALG_SUB_TYPE_CTR_NULL 0x0d000000#define CRYPTO_ALG_TYPE_HMAC (CRYPTO_ALG_TYPE_AHASH |\ CRYPTO_ALG_SUB_TYPE_HASH_HMAC)
@@ -231,6 +233,7 @@ struct chcr_aead_ctx {struct crypto_aead *sw_cipher;u8 salt[MAX_SALT ];u8 key[CHCR_AES_MAX_KEY_LEN ]; +u8 nonce[4 ];u16 hmac_ctrl;u16 mayverify;struct __aead_ctx ctx[0 ];
Signature · 1 line
2.1.4
PATCH 5/5 crypto: chelsio - Remove dst sg size zero check
In reply to Harsh Jainsg_nents_xlen will take care of zero length sg list. Remove Destination sg list size zero check.
--- drivers/crypto/chelsio/chcr_algo.c | 43 ++++++++++++-------------------------- 1 file changed, 13 insertions(+), 30 deletions(-)
drivers/crypto/chelsio/chcr_algo.c +13 -30
@@ -2109,20 +2109,14 @@ static struct sk_buff *create_authenc_wr(struct aead_request *req, null =1 ; assoclen =0 ; } - dst_size = assoclen + req->cryptlen + (op_type ? -authsize : - authsize); error =chcr_aead_common_init (req, op_type);if (error)return ERR_PTR (error); -if (dst_size) { dnents =sg_nents_xlen (req->dst, assoclen,CHCR_DST_SG_SIZE ,0 ); dnents +=sg_nents_xlen (req->dst, req->cryptlen + (op_type ? -authsize : authsize),CHCR_DST_SG_SIZE , req->assoclen); dnents +=MIN_AUTH_SG ;// For IV - }else { - dnents =0 ; - } dst_size =get_space_for_phys_dsgl (dnents); kctx_len = (ntohl (KEY_CONTEXT_CTX_LEN_V (aeadctx->key_ctx_hdr)) <<4 )
@@ -2687,8 +2681,6 @@ static struct sk_buff *create_aead_ccm_wr(struct aead_request *req, sub_type =get_aead_subtype (tfm);if (sub_type ==CRYPTO_ALG_SUB_TYPE_AEAD_RFC4309 ) assoclen -=8 ; - dst_size = assoclen + req->cryptlen + (op_type ? -authsize : - authsize); error =chcr_aead_common_init (req, op_type);if (error)return ERR_PTR (error);
@@ -2698,15 +2690,11 @@ static struct sk_buff *create_aead_ccm_wr(struct aead_request *req, error =aead_ccm_validate_input (op_type, req, aeadctx, sub_type);if (error) goto err; -if (dst_size) { - dnents =sg_nents_xlen (req->dst, assoclen,CHCR_DST_SG_SIZE ,0 ); - dnents +=sg_nents_xlen (req->dst, req->cryptlen - + (op_type ? -authsize : authsize), -CHCR_DST_SG_SIZE , req->assoclen); - dnents +=MIN_CCM_SG ;// For IV and B0 - }else { - dnents =0 ; - } + dnents =sg_nents_xlen (req->dst, assoclen,CHCR_DST_SG_SIZE ,0 ); + dnents +=sg_nents_xlen (req->dst, req->cryptlen + + (op_type ? -authsize : authsize), +CHCR_DST_SG_SIZE , req->assoclen); + dnents +=MIN_CCM_SG ;// For IV and B0 dst_size =get_space_for_phys_dsgl (dnents); kctx_len = ((DIV_ROUND_UP (aeadctx->enckey_len,16 )) <<4 ) *2 ; transhdr_len =CIPHER_TRANSHDR_SIZE (kctx_len, dst_size);
@@ -2801,19 +2789,14 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req, assoclen = req->assoclen -8 ; reqctx->b0_dma =0 ; - dst_size = assoclen + req->cryptlen + (op_type ? -authsize : authsize); error =chcr_aead_common_init (req, op_type); -if (error) -return ERR_PTR (error); -if (dst_size) { - dnents =sg_nents_xlen (req->dst, assoclen,CHCR_DST_SG_SIZE ,0 ); - dnents +=sg_nents_xlen (req->dst, - req->cryptlen + (op_type ? -authsize : authsize), +if (error) +return ERR_PTR (error); + dnents =sg_nents_xlen (req->dst, assoclen,CHCR_DST_SG_SIZE ,0 ); + dnents +=sg_nents_xlen (req->dst, req->cryptlen + + (op_type ? -authsize : authsize),CHCR_DST_SG_SIZE , req->assoclen); - dnents +=MIN_GCM_SG ;// For IV - }else { - dnents =0 ; - } + dnents +=MIN_GCM_SG ;// For IV dst_size =get_space_for_phys_dsgl (dnents); kctx_len = ((DIV_ROUND_UP (aeadctx->enckey_len,16 )) <<4 ) +AEAD_H_SIZE ;
@@ -2850,10 +2833,10 @@ static struct sk_buff *create_gcm_wr(struct aead_request *req, chcr_req->sec_cpl.aadstart_cipherstop_hi =FILL_SEC_CPL_CIPHERSTOP_HI ( assoclen ?1 :0 , assoclen, assoclen +IV +1 ,0 ); - chcr_req->sec_cpl.cipherstop_lo_authinsert = + chcr_req->sec_cpl.cipherstop_lo_authinsert =FILL_SEC_CPL_AUTHINSERT (0 , assoclen +IV +1 , temp, temp); - chcr_req->sec_cpl.seqno_numivs = + chcr_req->sec_cpl.seqno_numivs = FILL_SEC_CPL_SCMD0_SEQNO(op_type, (op_type == CHCR_ENCRYPT_OP) ? 1 : 0, CHCR_SCMD_CIPHER_MODE_AES_GCM,
Signature · 1 line
2.1.4
Herbert Xu
maintainerQuoted 10 lines · Harsh Jain
This series include cleanup, bug fixes and authenc algo supporting
ctr(aes)-sha operation.Harsh Jain (5):
crypto: chelsio - Fix Indentation
crypto: chelsio - check for sg null
crypto: chelsio - Fix IV updated in XTS operation
crypto: chelsio - Add authenc versions of ctr and sha
crypto: chelsio - Remove dst sg size zero check
Quoted 3 lines
drivers/crypto/chelsio/chcr_algo.c | 299 ++++++++++++++++++++++++++--------- drivers/crypto/chelsio/chcr_crypto.h | 7 +- 2 files changed, 233 insertions(+), 73 deletions(-)
All applied. Thanks.
Signature · 3 lines
Email: Herbert Xu <[email protected]> Home Page: http://gondor.apana.org.au/~herbert/ PGP Key: http://gondor.apana.org.au/~herbert/pubkey.txt