Fix bugs in Camellia CBC routine.
[openssl.git] / crypto / camellia / cmll_cbc.c
index 22c6ebfb058ce2e4eeaa5214561918cc7607897a..2e96b007265eb51882dd185335200576e305b22f 100644 (file)
@@ -199,11 +199,13 @@ void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,
                                        out[n] = in[n] ^ iv[n];
                                for(n=len; n < CAMELLIA_BLOCK_SIZE; ++n)
                                        out[n] = iv[n];
+                               memcpy(t32, out, CAMELLIA_BLOCK_SIZE);
                                if (camellia_endian.little)
-                                       SWAP4WORD((u32 *)out);
-                               key->enc(key->rd_key, (u32 *)out);
+                                       SWAP4WORD(t32);
+                               key->enc(key->rd_key, t32);
                                if (camellia_endian.little)
-                                       SWAP4WORD((u32 *)out);
+                                       SWAP4WORD(t32);
+                               memcpy(out, t32, CAMELLIA_BLOCK_SIZE);
                                iv = out;
                                }
                        memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE);
@@ -228,7 +230,6 @@ void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,
                                }
                        if (len)
                                {
-                               memcpy(tmp, in, CAMELLIA_BLOCK_SIZE);
                                memcpy(t32, in, CAMELLIA_BLOCK_SIZE);
                                if (camellia_endian.little)
                                        SWAP4WORD(t32);
@@ -237,7 +238,7 @@ void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out,
                                        SWAP4WORD(t32);
                                memcpy(out, t32, CAMELLIA_BLOCK_SIZE);
                                for(n=0; n < len; ++n)
-                                       out[n] = tmp[n] ^ iv[n];
+                                       out[n] ^= iv[n];
                                iv = in;
                                }
                        memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE);