chiark / gitweb /
better core algorithm selection and new core alg suites
[chiark-tcl.git] / crypto / bcmode.c
index f6a2a4bddcedc3f41086476145a3058d3d9f4bfc..9a5ae928e1aed6dee25ddbe1bc1721379b2840f0 100644 (file)
@@ -9,16 +9,16 @@ static const char *mode_cbc_encrypt(Byte *data, int blocks,
                                    const void *sch) {
   int blocksize= alg->blocksize;
   memcpy(chain,iv,blocksize);
-  alg->byteswap(chain);
+  if (alg->byteswap) alg->byteswap(chain);
   
   while (blocks > 0) {
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
 
     memxor(data, chain, blocksize);
     alg->encrypt.crypt(sch, data, data);
     memcpy(chain, data, blocksize);
 
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
     blocks--; data += blocksize;
   }
   return 0;
@@ -32,17 +32,17 @@ static const char *mode_cbc_decrypt(Byte *data, int blocks,
   int cchain= 0;
 
   memcpy(chain,iv,blocksize);
-  alg->byteswap(chain);
+  if (alg->byteswap) alg->byteswap(chain);
   
   while (blocks > 0) {
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
     
     memcpy(chain + (cchain^blocksize), data, blocksize);
     alg->decrypt.crypt(sch, data, data);
     memxor(data, chain + cchain, blocksize);
     cchain ^= blocksize;
 
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
     blocks--; data += blocksize;
   }
   return 0;
@@ -55,11 +55,11 @@ static void cbcmac_core(const Byte *data, int blocks,
   int blocksize= alg->blocksize;
 
   memcpy(buf,iv,blocksize);
-  alg->byteswap(buf);
+  if (alg->byteswap) alg->byteswap(buf);
   
   while (blocks > 0) {
     memcpy(buf + blocksize, data, blocksize);
-    alg->byteswap(buf + blocksize);
+    if (alg->byteswap) alg->byteswap(buf + blocksize);
     memxor(buf, buf + blocksize, blocksize);
     
     alg->encrypt.crypt(sch, buf, buf);
@@ -73,7 +73,7 @@ static const char *mode_cbc_mac(const Byte *data, int blocks,
                                const BlockCipherAlgInfo *alg,
                                const void *sch) {
   cbcmac_core(data,blocks,iv,buf,alg,sch);
-  alg->byteswap(buf);
+  if (alg->byteswap) alg->byteswap(buf);
   return 0;
 }
 
@@ -83,7 +83,7 @@ static const char *mode_cbc_mac2(const Byte *data, int blocks,
                                 const void *sch) {
   cbcmac_core(data,blocks,iv,buf,alg,sch);
   alg->encrypt.crypt(sch, buf, buf);
-  alg->byteswap(buf);
+  if (alg->byteswap) alg->byteswap(buf);
   return 0;
 }
 
@@ -94,9 +94,9 @@ static const char *mode_ecb(Byte *data, int blocks,
   int blocksize= alg->blocksize;
   
   while (blocks > 0) {
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
     (encr ? &alg->encrypt : &alg->decrypt)->crypt(sch, data, data);
-    alg->byteswap(data);
+    if (alg->byteswap) alg->byteswap(data);
     blocks--; data += blocksize;
   }
   return 0;