|
@@ -455,16 +455,13 @@ static int generate_copy_rrkey(struct ablk_ctx *ablkctx,
|
|
struct _key_ctx *key_ctx)
|
|
struct _key_ctx *key_ctx)
|
|
{
|
|
{
|
|
if (ablkctx->ciph_mode == CHCR_SCMD_CIPHER_MODE_AES_CBC) {
|
|
if (ablkctx->ciph_mode == CHCR_SCMD_CIPHER_MODE_AES_CBC) {
|
|
- get_aes_decrypt_key(key_ctx->key, ablkctx->key,
|
|
|
|
- ablkctx->enckey_len << 3);
|
|
|
|
- memset(key_ctx->key + ablkctx->enckey_len, 0,
|
|
|
|
- CHCR_AES_MAX_KEY_LEN - ablkctx->enckey_len);
|
|
|
|
|
|
+ memcpy(key_ctx->key, ablkctx->rrkey, ablkctx->enckey_len);
|
|
} else {
|
|
} else {
|
|
memcpy(key_ctx->key,
|
|
memcpy(key_ctx->key,
|
|
ablkctx->key + (ablkctx->enckey_len >> 1),
|
|
ablkctx->key + (ablkctx->enckey_len >> 1),
|
|
ablkctx->enckey_len >> 1);
|
|
ablkctx->enckey_len >> 1);
|
|
- get_aes_decrypt_key(key_ctx->key + (ablkctx->enckey_len >> 1),
|
|
|
|
- ablkctx->key, ablkctx->enckey_len << 2);
|
|
|
|
|
|
+ memcpy(key_ctx->key + (ablkctx->enckey_len >> 1),
|
|
|
|
+ ablkctx->rrkey, ablkctx->enckey_len >> 1);
|
|
}
|
|
}
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
@@ -620,15 +617,9 @@ static int chcr_aes_cbc_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
|
|
{
|
|
{
|
|
struct chcr_context *ctx = crypto_ablkcipher_ctx(tfm);
|
|
struct chcr_context *ctx = crypto_ablkcipher_ctx(tfm);
|
|
struct ablk_ctx *ablkctx = ABLK_CTX(ctx);
|
|
struct ablk_ctx *ablkctx = ABLK_CTX(ctx);
|
|
- struct ablkcipher_alg *alg = crypto_ablkcipher_alg(tfm);
|
|
|
|
unsigned int ck_size, context_size;
|
|
unsigned int ck_size, context_size;
|
|
u16 alignment = 0;
|
|
u16 alignment = 0;
|
|
|
|
|
|
- if ((keylen < alg->min_keysize) || (keylen > alg->max_keysize))
|
|
|
|
- goto badkey_err;
|
|
|
|
-
|
|
|
|
- memcpy(ablkctx->key, key, keylen);
|
|
|
|
- ablkctx->enckey_len = keylen;
|
|
|
|
if (keylen == AES_KEYSIZE_128) {
|
|
if (keylen == AES_KEYSIZE_128) {
|
|
ck_size = CHCR_KEYCTX_CIPHER_KEY_SIZE_128;
|
|
ck_size = CHCR_KEYCTX_CIPHER_KEY_SIZE_128;
|
|
} else if (keylen == AES_KEYSIZE_192) {
|
|
} else if (keylen == AES_KEYSIZE_192) {
|
|
@@ -639,7 +630,9 @@ static int chcr_aes_cbc_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
|
|
} else {
|
|
} else {
|
|
goto badkey_err;
|
|
goto badkey_err;
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+ memcpy(ablkctx->key, key, keylen);
|
|
|
|
+ ablkctx->enckey_len = keylen;
|
|
|
|
+ get_aes_decrypt_key(ablkctx->rrkey, ablkctx->key, keylen << 3);
|
|
context_size = (KEY_CONTEXT_HDR_SALT_AND_PAD +
|
|
context_size = (KEY_CONTEXT_HDR_SALT_AND_PAD +
|
|
keylen + alignment) >> 4;
|
|
keylen + alignment) >> 4;
|
|
|
|
|
|
@@ -1172,28 +1165,29 @@ static int chcr_aes_xts_setkey(struct crypto_ablkcipher *tfm, const u8 *key,
|
|
{
|
|
{
|
|
struct chcr_context *ctx = crypto_ablkcipher_ctx(tfm);
|
|
struct chcr_context *ctx = crypto_ablkcipher_ctx(tfm);
|
|
struct ablk_ctx *ablkctx = ABLK_CTX(ctx);
|
|
struct ablk_ctx *ablkctx = ABLK_CTX(ctx);
|
|
- int status = 0;
|
|
|
|
unsigned short context_size = 0;
|
|
unsigned short context_size = 0;
|
|
|
|
|
|
- if ((key_len == (AES_KEYSIZE_128 << 1)) ||
|
|
|
|
- (key_len == (AES_KEYSIZE_256 << 1))) {
|
|
|
|
- memcpy(ablkctx->key, key, key_len);
|
|
|
|
- ablkctx->enckey_len = key_len;
|
|
|
|
- context_size = (KEY_CONTEXT_HDR_SALT_AND_PAD + key_len) >> 4;
|
|
|
|
- ablkctx->key_ctx_hdr =
|
|
|
|
- FILL_KEY_CTX_HDR((key_len == AES_KEYSIZE_256) ?
|
|
|
|
- CHCR_KEYCTX_CIPHER_KEY_SIZE_128 :
|
|
|
|
- CHCR_KEYCTX_CIPHER_KEY_SIZE_256,
|
|
|
|
- CHCR_KEYCTX_NO_KEY, 1,
|
|
|
|
- 0, context_size);
|
|
|
|
- ablkctx->ciph_mode = CHCR_SCMD_CIPHER_MODE_AES_XTS;
|
|
|
|
- } else {
|
|
|
|
|
|
+ if ((key_len != (AES_KEYSIZE_128 << 1)) &&
|
|
|
|
+ (key_len != (AES_KEYSIZE_256 << 1))) {
|
|
crypto_tfm_set_flags((struct crypto_tfm *)tfm,
|
|
crypto_tfm_set_flags((struct crypto_tfm *)tfm,
|
|
CRYPTO_TFM_RES_BAD_KEY_LEN);
|
|
CRYPTO_TFM_RES_BAD_KEY_LEN);
|
|
ablkctx->enckey_len = 0;
|
|
ablkctx->enckey_len = 0;
|
|
- status = -EINVAL;
|
|
|
|
|
|
+ return -EINVAL;
|
|
|
|
+
|
|
}
|
|
}
|
|
- return status;
|
|
|
|
|
|
+
|
|
|
|
+ memcpy(ablkctx->key, key, key_len);
|
|
|
|
+ ablkctx->enckey_len = key_len;
|
|
|
|
+ get_aes_decrypt_key(ablkctx->rrkey, ablkctx->key, key_len << 2);
|
|
|
|
+ context_size = (KEY_CONTEXT_HDR_SALT_AND_PAD + key_len) >> 4;
|
|
|
|
+ ablkctx->key_ctx_hdr =
|
|
|
|
+ FILL_KEY_CTX_HDR((key_len == AES_KEYSIZE_256) ?
|
|
|
|
+ CHCR_KEYCTX_CIPHER_KEY_SIZE_128 :
|
|
|
|
+ CHCR_KEYCTX_CIPHER_KEY_SIZE_256,
|
|
|
|
+ CHCR_KEYCTX_NO_KEY, 1,
|
|
|
|
+ 0, context_size);
|
|
|
|
+ ablkctx->ciph_mode = CHCR_SCMD_CIPHER_MODE_AES_XTS;
|
|
|
|
+ return 0;
|
|
}
|
|
}
|
|
|
|
|
|
static int chcr_sha_init(struct ahash_request *areq)
|
|
static int chcr_sha_init(struct ahash_request *areq)
|