]> git.karo-electronics.de Git - linux-beck.git/commitdiff
crypto: nx - add offset to nx_build_sg_lists()
authorMarcelo Cerri <mhcerri@linux.vnet.ibm.com>
Thu, 29 Aug 2013 14:36:31 +0000 (11:36 -0300)
committerHerbert Xu <herbert@gondor.apana.org.au>
Mon, 2 Sep 2013 10:32:52 +0000 (20:32 +1000)
This patch includes one more parameter to nx_build_sg_lists() to skip
the given number of bytes from beginning of each sg list.

This is needed in order to implement the fixes for the AES modes to make
them able to process larger chunks of data.

Reviewed-by: Joy Latten <jmlatten@linux.vnet.ibm.com>
Signed-off-by: Marcelo Cerri <mhcerri@linux.vnet.ibm.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/nx/nx-aes-cbc.c
drivers/crypto/nx/nx-aes-ccm.c
drivers/crypto/nx/nx-aes-ctr.c
drivers/crypto/nx/nx-aes-ecb.c
drivers/crypto/nx/nx-aes-gcm.c
drivers/crypto/nx/nx.c
drivers/crypto/nx/nx.h

index 7c0237dae02db1cde29272f0d9695f59f2028acf..a9e76c6c37d893ad4143484769ac542691dd7fb6 100644 (file)
@@ -85,7 +85,7 @@ static int cbc_aes_nx_crypt(struct blkcipher_desc *desc,
        else
                NX_CPB_FDM(csbcpb) &= ~NX_FDM_ENDE_ENCRYPT;
 
-       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes,
+       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes, 0,
                               csbcpb->cpb.aes_cbc.iv);
        if (rc)
                goto out;
index 39d42245bc79a3d647ecff7556cb8831654be96f..666a35b1181a863281c1e7cc44cf2e3d6647a0d0 100644 (file)
@@ -293,7 +293,7 @@ static int ccm_nx_decrypt(struct aead_request   *req,
        if (rc)
                goto out;
 
-       rc = nx_build_sg_lists(nx_ctx, desc, req->dst, req->src, nbytes,
+       rc = nx_build_sg_lists(nx_ctx, desc, req->dst, req->src, nbytes, 0,
                               csbcpb->cpb.aes_ccm.iv_or_ctr);
        if (rc)
                goto out;
@@ -339,7 +339,7 @@ static int ccm_nx_encrypt(struct aead_request   *req,
        if (rc)
                goto out;
 
-       rc = nx_build_sg_lists(nx_ctx, desc, req->dst, req->src, nbytes,
+       rc = nx_build_sg_lists(nx_ctx, desc, req->dst, req->src, nbytes, 0,
                               csbcpb->cpb.aes_ccm.iv_or_ctr);
        if (rc)
                goto out;
index 762611b883cb9d1ff536138ebcef73e36662abe1..80dee8d5865966cce801831230e9933fb00bd1f0 100644 (file)
@@ -98,7 +98,7 @@ static int ctr_aes_nx_crypt(struct blkcipher_desc *desc,
                goto out;
        }
 
-       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes,
+       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes, 0,
                               csbcpb->cpb.aes_ctr.iv);
        if (rc)
                goto out;
index 77dbe084ba4168b1ca42fbedfe3ada9b9c9a19c1..fe0d803ed233e3b5c387e38d81642d290f358c29 100644 (file)
@@ -85,7 +85,7 @@ static int ecb_aes_nx_crypt(struct blkcipher_desc *desc,
        else
                NX_CPB_FDM(csbcpb) &= ~NX_FDM_ENDE_ENCRYPT;
 
-       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes, NULL);
+       rc = nx_build_sg_lists(nx_ctx, desc, dst, src, nbytes, 0, NULL);
        if (rc)
                goto out;
 
index 74feee10f943aa0acd87b6b9fb15c194e6f4787f..c2d6f76e3677ef9277b1d4a1446d90bd2bc2dad3 100644 (file)
@@ -226,7 +226,7 @@ static int gcm_aes_nx_crypt(struct aead_request *req, int enc)
 
        csbcpb->cpb.aes_gcm.bit_length_data = nbytes * 8;
 
-       rc = nx_build_sg_lists(nx_ctx, &desc, req->dst, req->src, nbytes,
+       rc = nx_build_sg_lists(nx_ctx, &desc, req->dst, req->src, nbytes, 0,
                               csbcpb->cpb.aes_gcm.iv_or_cnt);
        if (rc)
                goto out;
index bdf4990f9758a59b6b3f73e1857ca8c91169f2cd..5533fe31c90dff2acc68434b86a31d4497ad3553 100644 (file)
@@ -211,6 +211,8 @@ struct nx_sg *nx_walk_and_build(struct nx_sg       *nx_dst,
  * @dst: destination scatterlist
  * @src: source scatterlist
  * @nbytes: length of data described in the scatterlists
+ * @offset: number of bytes to fast-forward past at the beginning of
+ *          scatterlists.
  * @iv: destination for the iv data, if the algorithm requires it
  *
  * This is common code shared by all the AES algorithms. It uses the block
@@ -222,6 +224,7 @@ int nx_build_sg_lists(struct nx_crypto_ctx  *nx_ctx,
                      struct scatterlist    *dst,
                      struct scatterlist    *src,
                      unsigned int           nbytes,
+                     unsigned int           offset,
                      u8                    *iv)
 {
        struct nx_sg *nx_insg = nx_ctx->in_sg;
@@ -230,8 +233,10 @@ int nx_build_sg_lists(struct nx_crypto_ctx  *nx_ctx,
        if (iv)
                memcpy(iv, desc->info, AES_BLOCK_SIZE);
 
-       nx_insg = nx_walk_and_build(nx_insg, nx_ctx->ap->sglen, src, 0, nbytes);
-       nx_outsg = nx_walk_and_build(nx_outsg, nx_ctx->ap->sglen, dst, 0, nbytes);
+       nx_insg = nx_walk_and_build(nx_insg, nx_ctx->ap->sglen, src,
+                                   offset, nbytes);
+       nx_outsg = nx_walk_and_build(nx_outsg, nx_ctx->ap->sglen, dst,
+                                   offset, nbytes);
 
        /* these lengths should be negative, which will indicate to phyp that
         * the input and output parameters are scatterlists, not linear
index 14bb97f1c339ce40ea47f3795ff0ea4594361aea..befda07ca1da9e0978c59b9061cf79f2114bb9fb 100644 (file)
@@ -156,7 +156,7 @@ int nx_hcall_sync(struct nx_crypto_ctx *ctx, struct vio_pfo_op *op,
 struct nx_sg *nx_build_sg_list(struct nx_sg *, u8 *, unsigned int, u32);
 int nx_build_sg_lists(struct nx_crypto_ctx *, struct blkcipher_desc *,
                      struct scatterlist *, struct scatterlist *, unsigned int,
-                     u8 *);
+                     unsigned int, u8 *);
 struct nx_sg *nx_walk_and_build(struct nx_sg *, unsigned int,
                                struct scatterlist *, unsigned int,
                                unsigned int);