|
@@ -93,14 +93,6 @@ out:
|
|
|
return rc;
|
|
|
}
|
|
|
|
|
|
-static int gcm_aes_nx_setauthsize(struct crypto_aead *tfm,
|
|
|
- unsigned int authsize)
|
|
|
-{
|
|
|
- crypto_aead_crt(tfm)->authsize = authsize;
|
|
|
-
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
static int gcm4106_aes_nx_setauthsize(struct crypto_aead *tfm,
|
|
|
unsigned int authsize)
|
|
|
{
|
|
@@ -113,8 +105,6 @@ static int gcm4106_aes_nx_setauthsize(struct crypto_aead *tfm,
|
|
|
return -EINVAL;
|
|
|
}
|
|
|
|
|
|
- crypto_aead_crt(tfm)->authsize = authsize;
|
|
|
-
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
@@ -131,7 +121,7 @@ static int nx_gca(struct nx_crypto_ctx *nx_ctx,
|
|
|
unsigned int max_sg_len;
|
|
|
|
|
|
if (nbytes <= AES_BLOCK_SIZE) {
|
|
|
- scatterwalk_start(&walk, req->assoc);
|
|
|
+ scatterwalk_start(&walk, req->src);
|
|
|
scatterwalk_copychunks(out, &walk, nbytes, SCATTERWALK_FROM_SG);
|
|
|
scatterwalk_done(&walk, SCATTERWALK_FROM_SG, 0);
|
|
|
return 0;
|
|
@@ -156,7 +146,7 @@ static int nx_gca(struct nx_crypto_ctx *nx_ctx,
|
|
|
NX_PAGE_SIZE * (max_sg_len - 1));
|
|
|
|
|
|
nx_sg = nx_walk_and_build(nx_ctx->in_sg, max_sg_len,
|
|
|
- req->assoc, processed, &to_process);
|
|
|
+ req->src, processed, &to_process);
|
|
|
|
|
|
if ((to_process + processed) < nbytes)
|
|
|
NX_CPB_FDM(csbcpb_aead) |= NX_FDM_INTERMEDIATE;
|
|
@@ -222,7 +212,7 @@ static int gmac(struct aead_request *req, struct blkcipher_desc *desc)
|
|
|
NX_PAGE_SIZE * (max_sg_len - 1));
|
|
|
|
|
|
nx_sg = nx_walk_and_build(nx_ctx->in_sg, max_sg_len,
|
|
|
- req->assoc, processed, &to_process);
|
|
|
+ req->src, processed, &to_process);
|
|
|
|
|
|
if ((to_process + processed) < nbytes)
|
|
|
NX_CPB_FDM(csbcpb) |= NX_FDM_INTERMEDIATE;
|
|
@@ -374,7 +364,8 @@ static int gcm_aes_nx_crypt(struct aead_request *req, int enc)
|
|
|
csbcpb->cpb.aes_gcm.bit_length_data = nbytes * 8;
|
|
|
desc.tfm = (struct crypto_blkcipher *) req->base.tfm;
|
|
|
rc = nx_build_sg_lists(nx_ctx, &desc, req->dst,
|
|
|
- req->src, &to_process, processed,
|
|
|
+ req->src, &to_process,
|
|
|
+ processed + req->assoclen,
|
|
|
csbcpb->cpb.aes_gcm.iv_or_cnt);
|
|
|
|
|
|
if (rc)
|
|
@@ -409,17 +400,19 @@ static int gcm_aes_nx_crypt(struct aead_request *req, int enc)
|
|
|
mac:
|
|
|
if (enc) {
|
|
|
/* copy out the auth tag */
|
|
|
- scatterwalk_map_and_copy(csbcpb->cpb.aes_gcm.out_pat_or_mac,
|
|
|
- req->dst, nbytes,
|
|
|
- crypto_aead_authsize(crypto_aead_reqtfm(req)),
|
|
|
- SCATTERWALK_TO_SG);
|
|
|
+ scatterwalk_map_and_copy(
|
|
|
+ csbcpb->cpb.aes_gcm.out_pat_or_mac,
|
|
|
+ req->dst, req->assoclen + nbytes,
|
|
|
+ crypto_aead_authsize(crypto_aead_reqtfm(req)),
|
|
|
+ SCATTERWALK_TO_SG);
|
|
|
} else {
|
|
|
u8 *itag = nx_ctx->priv.gcm.iauth_tag;
|
|
|
u8 *otag = csbcpb->cpb.aes_gcm.out_pat_or_mac;
|
|
|
|
|
|
- scatterwalk_map_and_copy(itag, req->src, nbytes,
|
|
|
- crypto_aead_authsize(crypto_aead_reqtfm(req)),
|
|
|
- SCATTERWALK_FROM_SG);
|
|
|
+ scatterwalk_map_and_copy(
|
|
|
+ itag, req->src, req->assoclen + nbytes,
|
|
|
+ crypto_aead_authsize(crypto_aead_reqtfm(req)),
|
|
|
+ SCATTERWALK_FROM_SG);
|
|
|
rc = memcmp(itag, otag,
|
|
|
crypto_aead_authsize(crypto_aead_reqtfm(req))) ?
|
|
|
-EBADMSG : 0;
|
|
@@ -478,45 +471,39 @@ static int gcm4106_aes_nx_decrypt(struct aead_request *req)
|
|
|
* during encrypt/decrypt doesn't solve this problem, because it calls
|
|
|
* blkcipher_walk_done under the covers, which doesn't use walk->blocksize,
|
|
|
* but instead uses this tfm->blocksize. */
|
|
|
-struct crypto_alg nx_gcm_aes_alg = {
|
|
|
- .cra_name = "gcm(aes)",
|
|
|
- .cra_driver_name = "gcm-aes-nx",
|
|
|
- .cra_priority = 300,
|
|
|
- .cra_flags = CRYPTO_ALG_TYPE_AEAD,
|
|
|
- .cra_blocksize = 1,
|
|
|
- .cra_ctxsize = sizeof(struct nx_crypto_ctx),
|
|
|
- .cra_type = &crypto_aead_type,
|
|
|
- .cra_module = THIS_MODULE,
|
|
|
- .cra_init = nx_crypto_ctx_aes_gcm_init,
|
|
|
- .cra_exit = nx_crypto_ctx_exit,
|
|
|
- .cra_aead = {
|
|
|
- .ivsize = AES_BLOCK_SIZE,
|
|
|
- .maxauthsize = AES_BLOCK_SIZE,
|
|
|
- .setkey = gcm_aes_nx_set_key,
|
|
|
- .setauthsize = gcm_aes_nx_setauthsize,
|
|
|
- .encrypt = gcm_aes_nx_encrypt,
|
|
|
- .decrypt = gcm_aes_nx_decrypt,
|
|
|
- }
|
|
|
+struct aead_alg nx_gcm_aes_alg = {
|
|
|
+ .base = {
|
|
|
+ .cra_name = "gcm(aes)",
|
|
|
+ .cra_driver_name = "gcm-aes-nx",
|
|
|
+ .cra_priority = 300,
|
|
|
+ .cra_blocksize = 1,
|
|
|
+ .cra_ctxsize = sizeof(struct nx_crypto_ctx),
|
|
|
+ .cra_module = THIS_MODULE,
|
|
|
+ },
|
|
|
+ .init = nx_crypto_ctx_aes_gcm_init,
|
|
|
+ .exit = nx_crypto_ctx_aead_exit,
|
|
|
+ .ivsize = 12,
|
|
|
+ .maxauthsize = AES_BLOCK_SIZE,
|
|
|
+ .setkey = gcm_aes_nx_set_key,
|
|
|
+ .encrypt = gcm_aes_nx_encrypt,
|
|
|
+ .decrypt = gcm_aes_nx_decrypt,
|
|
|
};
|
|
|
|
|
|
-struct crypto_alg nx_gcm4106_aes_alg = {
|
|
|
- .cra_name = "rfc4106(gcm(aes))",
|
|
|
- .cra_driver_name = "rfc4106-gcm-aes-nx",
|
|
|
- .cra_priority = 300,
|
|
|
- .cra_flags = CRYPTO_ALG_TYPE_AEAD,
|
|
|
- .cra_blocksize = 1,
|
|
|
- .cra_ctxsize = sizeof(struct nx_crypto_ctx),
|
|
|
- .cra_type = &crypto_nivaead_type,
|
|
|
- .cra_module = THIS_MODULE,
|
|
|
- .cra_init = nx_crypto_ctx_aes_gcm_init,
|
|
|
- .cra_exit = nx_crypto_ctx_exit,
|
|
|
- .cra_aead = {
|
|
|
- .ivsize = 8,
|
|
|
- .maxauthsize = AES_BLOCK_SIZE,
|
|
|
- .geniv = "seqiv",
|
|
|
- .setkey = gcm4106_aes_nx_set_key,
|
|
|
- .setauthsize = gcm4106_aes_nx_setauthsize,
|
|
|
- .encrypt = gcm4106_aes_nx_encrypt,
|
|
|
- .decrypt = gcm4106_aes_nx_decrypt,
|
|
|
- }
|
|
|
+struct aead_alg nx_gcm4106_aes_alg = {
|
|
|
+ .base = {
|
|
|
+ .cra_name = "rfc4106(gcm(aes))",
|
|
|
+ .cra_driver_name = "rfc4106-gcm-aes-nx",
|
|
|
+ .cra_priority = 300,
|
|
|
+ .cra_blocksize = 1,
|
|
|
+ .cra_ctxsize = sizeof(struct nx_crypto_ctx),
|
|
|
+ .cra_module = THIS_MODULE,
|
|
|
+ },
|
|
|
+ .init = nx_crypto_ctx_aes_gcm_init,
|
|
|
+ .exit = nx_crypto_ctx_aead_exit,
|
|
|
+ .ivsize = 8,
|
|
|
+ .maxauthsize = AES_BLOCK_SIZE,
|
|
|
+ .setkey = gcm4106_aes_nx_set_key,
|
|
|
+ .setauthsize = gcm4106_aes_nx_setauthsize,
|
|
|
+ .encrypt = gcm4106_aes_nx_encrypt,
|
|
|
+ .decrypt = gcm4106_aes_nx_decrypt,
|
|
|
};
|