Commit d2d9e6fd authored by Pascal van Leeuwen's avatar Pascal van Leeuwen Committed by Herbert Xu

crypto: inside-secure - Minor code cleanup and optimizations

Some minor cleanup changing e.g. "if (!x) A else B" to "if (x) B else A",
merging some back-to-back if's with the same condition, collapsing some
back-to-back assignments to the same variable and replacing some weird
assignments with proper symbolics.
Signed-off-by: default avatarPascal van Leeuwen <pvanleeuwen@verimatrix.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 493e289c
...@@ -126,9 +126,6 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv, ...@@ -126,9 +126,6 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv,
safexcel_cipher_token(ctx, iv, cdesc); safexcel_cipher_token(ctx, iv, cdesc);
if (direction == SAFEXCEL_DECRYPT)
cryptlen -= digestsize;
if (direction == SAFEXCEL_ENCRYPT) { if (direction == SAFEXCEL_ENCRYPT) {
/* align end of instruction sequence to end of token */ /* align end of instruction sequence to end of token */
token = (struct safexcel_token *)(cdesc->control_data.token + token = (struct safexcel_token *)(cdesc->control_data.token +
...@@ -141,6 +138,8 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv, ...@@ -141,6 +138,8 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv,
token[2].instructions = EIP197_TOKEN_INS_TYPE_OUTPUT | token[2].instructions = EIP197_TOKEN_INS_TYPE_OUTPUT |
EIP197_TOKEN_INS_INSERT_HASH_DIGEST; EIP197_TOKEN_INS_INSERT_HASH_DIGEST;
} else { } else {
cryptlen -= digestsize;
/* align end of instruction sequence to end of token */ /* align end of instruction sequence to end of token */
token = (struct safexcel_token *)(cdesc->control_data.token + token = (struct safexcel_token *)(cdesc->control_data.token +
EIP197_MAX_TOKENS - 4); EIP197_MAX_TOKENS - 4);
...@@ -159,13 +158,7 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv, ...@@ -159,13 +158,7 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv,
token[3].instructions = EIP197_TOKEN_INS_TYPE_OUTPUT; token[3].instructions = EIP197_TOKEN_INS_TYPE_OUTPUT;
} }
if (unlikely(!cryptlen)) { if (likely(cryptlen)) {
token[1].opcode = EIP197_TOKEN_OPCODE_DIRECTION;
token[1].packet_length = assoclen;
token[1].stat = EIP197_TOKEN_STAT_LAST_HASH;
token[1].instructions = EIP197_TOKEN_INS_LAST |
EIP197_TOKEN_INS_TYPE_HASH;
} else {
if (likely(assoclen)) { if (likely(assoclen)) {
token[0].opcode = EIP197_TOKEN_OPCODE_DIRECTION; token[0].opcode = EIP197_TOKEN_OPCODE_DIRECTION;
token[0].packet_length = assoclen; token[0].packet_length = assoclen;
...@@ -179,6 +172,12 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv, ...@@ -179,6 +172,12 @@ static void safexcel_aead_token(struct safexcel_cipher_ctx *ctx, u8 *iv,
EIP197_TOKEN_INS_TYPE_CRYPTO | EIP197_TOKEN_INS_TYPE_CRYPTO |
EIP197_TOKEN_INS_TYPE_HASH | EIP197_TOKEN_INS_TYPE_HASH |
EIP197_TOKEN_INS_TYPE_OUTPUT; EIP197_TOKEN_INS_TYPE_OUTPUT;
} else {
token[1].opcode = EIP197_TOKEN_OPCODE_DIRECTION;
token[1].packet_length = assoclen;
token[1].stat = EIP197_TOKEN_STAT_LAST_HASH;
token[1].instructions = EIP197_TOKEN_INS_LAST |
EIP197_TOKEN_INS_TYPE_HASH;
} }
} }
...@@ -325,45 +324,60 @@ static int safexcel_context_control(struct safexcel_cipher_ctx *ctx, ...@@ -325,45 +324,60 @@ static int safexcel_context_control(struct safexcel_cipher_ctx *ctx,
struct safexcel_command_desc *cdesc) struct safexcel_command_desc *cdesc)
{ {
struct safexcel_crypto_priv *priv = ctx->priv; struct safexcel_crypto_priv *priv = ctx->priv;
int ctrl_size; int ctrl_size = ctx->key_len / sizeof(u32);
cdesc->control_data.control1 = ctx->mode;
if (ctx->aead) { if (ctx->aead) {
/* Take in account the ipad+opad digests */
ctrl_size += ctx->state_sz / sizeof(u32) * 2;
if (sreq->direction == SAFEXCEL_ENCRYPT) if (sreq->direction == SAFEXCEL_ENCRYPT)
cdesc->control_data.control0 |= CONTEXT_CONTROL_TYPE_ENCRYPT_HASH_OUT; cdesc->control_data.control0 =
CONTEXT_CONTROL_TYPE_ENCRYPT_HASH_OUT |
CONTEXT_CONTROL_DIGEST_HMAC |
CONTEXT_CONTROL_KEY_EN |
ctx->hash_alg |
CONTEXT_CONTROL_SIZE(ctrl_size);
else else
cdesc->control_data.control0 |= CONTEXT_CONTROL_TYPE_HASH_DECRYPT_IN; cdesc->control_data.control0 =
CONTEXT_CONTROL_TYPE_HASH_DECRYPT_IN |
CONTEXT_CONTROL_DIGEST_HMAC |
CONTEXT_CONTROL_KEY_EN |
ctx->hash_alg |
CONTEXT_CONTROL_SIZE(ctrl_size);
} else { } else {
cdesc->control_data.control0 |= CONTEXT_CONTROL_TYPE_CRYPTO_OUT; if (sreq->direction == SAFEXCEL_ENCRYPT)
cdesc->control_data.control0 =
/* The decryption control type is a combination of the CONTEXT_CONTROL_TYPE_CRYPTO_OUT |
* encryption type and CONTEXT_CONTROL_TYPE_NULL_IN, for all CONTEXT_CONTROL_KEY_EN |
* types. CONTEXT_CONTROL_SIZE(ctrl_size);
*/ else
if (sreq->direction == SAFEXCEL_DECRYPT) cdesc->control_data.control0 =
cdesc->control_data.control0 |= CONTEXT_CONTROL_TYPE_NULL_IN; CONTEXT_CONTROL_TYPE_CRYPTO_IN |
CONTEXT_CONTROL_KEY_EN |
CONTEXT_CONTROL_SIZE(ctrl_size);
} }
cdesc->control_data.control0 |= CONTEXT_CONTROL_KEY_EN;
cdesc->control_data.control1 |= ctx->mode;
if (ctx->aead)
cdesc->control_data.control0 |= CONTEXT_CONTROL_DIGEST_HMAC |
ctx->hash_alg;
if (ctx->alg == SAFEXCEL_DES) { if (ctx->alg == SAFEXCEL_DES) {
cdesc->control_data.control0 |= CONTEXT_CONTROL_CRYPTO_ALG_DES; cdesc->control_data.control0 |=
CONTEXT_CONTROL_CRYPTO_ALG_DES;
} else if (ctx->alg == SAFEXCEL_3DES) { } else if (ctx->alg == SAFEXCEL_3DES) {
cdesc->control_data.control0 |= CONTEXT_CONTROL_CRYPTO_ALG_3DES; cdesc->control_data.control0 |=
CONTEXT_CONTROL_CRYPTO_ALG_3DES;
} else if (ctx->alg == SAFEXCEL_AES) { } else if (ctx->alg == SAFEXCEL_AES) {
switch (ctx->key_len >> ctx->xts) { switch (ctx->key_len >> ctx->xts) {
case AES_KEYSIZE_128: case AES_KEYSIZE_128:
cdesc->control_data.control0 |= CONTEXT_CONTROL_CRYPTO_ALG_AES128; cdesc->control_data.control0 |=
CONTEXT_CONTROL_CRYPTO_ALG_AES128;
break; break;
case AES_KEYSIZE_192: case AES_KEYSIZE_192:
cdesc->control_data.control0 |= CONTEXT_CONTROL_CRYPTO_ALG_AES192; cdesc->control_data.control0 |=
CONTEXT_CONTROL_CRYPTO_ALG_AES192;
break; break;
case AES_KEYSIZE_256: case AES_KEYSIZE_256:
cdesc->control_data.control0 |= CONTEXT_CONTROL_CRYPTO_ALG_AES256; cdesc->control_data.control0 |=
CONTEXT_CONTROL_CRYPTO_ALG_AES256;
break; break;
default: default:
dev_err(priv->dev, "aes keysize not supported: %u\n", dev_err(priv->dev, "aes keysize not supported: %u\n",
...@@ -372,12 +386,6 @@ static int safexcel_context_control(struct safexcel_cipher_ctx *ctx, ...@@ -372,12 +386,6 @@ static int safexcel_context_control(struct safexcel_cipher_ctx *ctx,
} }
} }
ctrl_size = ctx->key_len / sizeof(u32);
if (ctx->aead)
/* Take in account the ipad+opad digests */
ctrl_size += ctx->state_sz / sizeof(u32) * 2;
cdesc->control_data.control0 |= CONTEXT_CONTROL_SIZE(ctrl_size);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment