ChangeSet 1.2199.14.25, 2005/03/23 12:07:31-08:00, [EMAIL PROTECTED]

        [CRYPTO]: Handle in_place flag in crypt()
        
        Move the handling of in_place into crypt() itself.  This means that we 
only
        need two temporary buffers instead of three.  It also allows us to 
simplify
        the check in scatterwalk_samebuf.
        
        Signed-off-by: David S. Miller <[EMAIL PROTECTED]>



 cipher.c      |   25 ++++++++++---------------
 scatterwalk.h |    6 ++----
 2 files changed, 12 insertions(+), 19 deletions(-)


diff -Nru a/crypto/cipher.c b/crypto/cipher.c
--- a/crypto/cipher.c   2005-03-26 17:23:00 -08:00
+++ b/crypto/cipher.c   2005-03-26 17:23:00 -08:00
@@ -23,7 +23,7 @@
 
 typedef void (cryptfn_t)(void *, u8 *, const u8 *);
 typedef void (procfn_t)(struct crypto_tfm *, u8 *,
-                        u8*, cryptfn_t, int enc, void *, int);
+                        u8*, cryptfn_t, int enc, void *);
 
 static inline void xor_64(u8 *a, const u8 *b)
 {
@@ -74,22 +74,22 @@
                scatterwalk_map(&walk_in, 0);
                scatterwalk_map(&walk_out, 1);
 
+               in_place = scatterwalk_samebuf(&walk_in, &walk_out);
+
                src_p = walk_in.data;
                if (unlikely(scatterwalk_across_pages(&walk_in, bsize)))
                        src_p = tmp_src;
 
                dst_p = walk_out.data;
-               if (unlikely(scatterwalk_across_pages(&walk_out, bsize)))
+               if (unlikely(scatterwalk_across_pages(&walk_out, bsize)) ||
+                   in_place)
                        dst_p = tmp_dst;
 
-               in_place = scatterwalk_samebuf(&walk_in, &walk_out,
-                                              src_p, dst_p);
-
                nbytes -= bsize;
 
                scatterwalk_copychunks(src_p, &walk_in, bsize, 0);
 
-               prfn(tfm, dst_p, src_p, crfn, enc, info, in_place);
+               prfn(tfm, dst_p, src_p, crfn, enc, info);
 
                scatterwalk_done(&walk_in, 0, nbytes);
 
@@ -104,7 +104,7 @@
 }
 
 static void cbc_process(struct crypto_tfm *tfm, u8 *dst, u8 *src,
-                       cryptfn_t fn, int enc, void *info, int in_place)
+                       cryptfn_t fn, int enc, void *info)
 {
        u8 *iv = info;
        
@@ -117,19 +117,14 @@
                fn(crypto_tfm_ctx(tfm), dst, iv);
                memcpy(iv, dst, crypto_tfm_alg_blocksize(tfm));
        } else {
-               u8 stack[in_place ? crypto_tfm_alg_blocksize(tfm) : 0];
-               u8 *buf = in_place ? stack : dst;
-
-               fn(crypto_tfm_ctx(tfm), buf, src);
-               tfm->crt_u.cipher.cit_xor_block(buf, iv);
+               fn(crypto_tfm_ctx(tfm), dst, src);
+               tfm->crt_u.cipher.cit_xor_block(dst, iv);
                memcpy(iv, src, crypto_tfm_alg_blocksize(tfm));
-               if (buf != dst)
-                       memcpy(dst, buf, crypto_tfm_alg_blocksize(tfm));
        }
 }
 
 static void ecb_process(struct crypto_tfm *tfm, u8 *dst, u8 *src,
-                       cryptfn_t fn, int enc, void *info, int in_place)
+                       cryptfn_t fn, int enc, void *info)
 {
        fn(crypto_tfm_ctx(tfm), dst, src);
 }
diff -Nru a/crypto/scatterwalk.h b/crypto/scatterwalk.h
--- a/crypto/scatterwalk.h      2005-03-26 17:23:00 -08:00
+++ b/crypto/scatterwalk.h      2005-03-26 17:23:00 -08:00
@@ -34,12 +34,10 @@
 }
 
 static inline int scatterwalk_samebuf(struct scatter_walk *walk_in,
-                                     struct scatter_walk *walk_out,
-                                     void *src_p, void *dst_p)
+                                     struct scatter_walk *walk_out)
 {
        return walk_in->page == walk_out->page &&
-              walk_in->offset == walk_out->offset &&
-              walk_in->data == src_p && walk_out->data == dst_p;
+              walk_in->offset == walk_out->offset;
 }
 
 static inline int scatterwalk_across_pages(struct scatter_walk *walk,
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to