Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit de1a00ac authored by Harsh Jain's avatar Harsh Jain Committed by Herbert Xu
Browse files

crypto: chelsio - Use x8_ble gf multiplication to calculate IV.



gf128mul_x8_ble() will reduce gf Multiplication iteration by 8.

Signed-off-by: default avatarHarsh Jain <harsh@chelsio.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent acfc5878
Loading
Loading
Loading
Loading
+9 −2
Original line number Diff line number Diff line
@@ -889,9 +889,11 @@ static int chcr_update_tweak(struct ablkcipher_request *req, u8 *iv)
	int ret, i;
	u8 *key;
	unsigned int keylen;
	int round = reqctx->last_req_len / AES_BLOCK_SIZE;
	int round8 = round / 8;

	cipher = ablkctx->aes_generic;
	memcpy(iv, req->info, AES_BLOCK_SIZE);
	memcpy(iv, reqctx->iv, AES_BLOCK_SIZE);

	keylen = ablkctx->enckey_len / 2;
	key = ablkctx->key + keylen;
@@ -900,7 +902,10 @@ static int chcr_update_tweak(struct ablkcipher_request *req, u8 *iv)
		goto out;

	crypto_cipher_encrypt_one(cipher, iv, iv);
	for (i = 0; i < (reqctx->processed / AES_BLOCK_SIZE); i++)
	for (i = 0; i < round8; i++)
		gf128mul_x8_ble((le128 *)iv, (le128 *)iv);

	for (i = 0; i < (round % 8); i++)
		gf128mul_x_ble((le128 *)iv, (le128 *)iv);

	crypto_cipher_decrypt_one(cipher, iv, iv);
@@ -1041,6 +1046,7 @@ static int chcr_handle_cipher_resp(struct ablkcipher_request *req,
	    CRYPTO_ALG_SUB_TYPE_CTR)
		bytes = adjust_ctr_overflow(reqctx->iv, bytes);
	reqctx->processed += bytes;
	reqctx->last_req_len = bytes;
	wrparam.qid = u_ctx->lldi.rxq_ids[ctx->rx_qidx];
	wrparam.req = req;
	wrparam.bytes = bytes;
@@ -1133,6 +1139,7 @@ static int process_cipher(struct ablkcipher_request *req,
		goto error;
	}
	reqctx->processed = bytes;
	reqctx->last_req_len = bytes;
	reqctx->dst = reqctx->dstsg;
	reqctx->op = op_type;
	wrparam.qid = qid;
+1 −0
Original line number Diff line number Diff line
@@ -247,6 +247,7 @@ struct chcr_blkcipher_req_ctx {
	struct scatterlist *dst;
	struct scatterlist *newdstsg;
	unsigned int processed;
	unsigned int last_req_len;
	unsigned int op;
	short int dst_nents;
	u8 iv[CHCR_MAX_CRYPTO_IV_LEN];