Index: openssl/crypto/camellia/cmll_cbc.c |
=================================================================== |
--- openssl/crypto/camellia/cmll_cbc.c (revision 105093) |
+++ openssl/crypto/camellia/cmll_cbc.c (working copy) |
@@ -49,225 +49,16 @@ |
* |
*/ |
-#ifndef CAMELLIA_DEBUG |
-# ifndef NDEBUG |
-# define NDEBUG |
-# endif |
-#endif |
-#include <assert.h> |
-#include <stdio.h> |
-#include <string.h> |
- |
#include <openssl/camellia.h> |
-#include "cmll_locl.h" |
+#include <openssl/modes.h> |
void Camellia_cbc_encrypt(const unsigned char *in, unsigned char *out, |
- const unsigned long length, const CAMELLIA_KEY *key, |
- unsigned char *ivec, const int enc) { |
+ size_t len, const CAMELLIA_KEY *key, |
+ unsigned char *ivec, const int enc) |
+ { |
- unsigned long n; |
- unsigned long len = length; |
- const unsigned char *iv = ivec; |
- union { u32 t32[CAMELLIA_BLOCK_SIZE/sizeof(u32)]; |
- u8 t8 [CAMELLIA_BLOCK_SIZE]; } tmp; |
- const union { long one; char little; } camellia_endian = {1}; |
- |
- |
- assert(in && out && key && ivec); |
- assert((CAMELLIA_ENCRYPT == enc)||(CAMELLIA_DECRYPT == enc)); |
- |
- if(((size_t)in|(size_t)out|(size_t)ivec) % sizeof(u32) == 0) |
- { |
- if (CAMELLIA_ENCRYPT == enc) |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- XOR4WORD2((u32 *)out, |
- (u32 *)in, (u32 *)iv); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- key->enc(key->rd_key, (u32 *)out); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- iv = out; |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- for(n=0; n < len; ++n) |
- out[n] = in[n] ^ iv[n]; |
- for(n=len; n < CAMELLIA_BLOCK_SIZE; ++n) |
- out[n] = iv[n]; |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- key->enc(key->rd_key, (u32 *)out); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- iv = out; |
- } |
- memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE); |
- } |
- else if (in != out) |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- memcpy(out,in,CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- key->dec(key->rd_key,(u32 *)out); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- XOR4WORD((u32 *)out, (u32 *)iv); |
- iv = in; |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->dec(key->rd_key, tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- for(n=0; n < len; ++n) |
- out[n] = tmp.t8[n] ^ iv[n]; |
- iv = in; |
- } |
- memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE); |
- } |
- else /* in == out */ |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- key->dec(key->rd_key, (u32 *)out); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- XOR4WORD((u32 *)out, (u32 *)ivec); |
- memcpy(ivec, tmp.t8, CAMELLIA_BLOCK_SIZE); |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- key->dec(key->rd_key,(u32 *)out); |
- if (camellia_endian.little) |
- SWAP4WORD((u32 *)out); |
- for(n=0; n < len; ++n) |
- out[n] ^= ivec[n]; |
- for(n=len; n < CAMELLIA_BLOCK_SIZE; ++n) |
- out[n] = tmp.t8[n]; |
- memcpy(ivec, tmp.t8, CAMELLIA_BLOCK_SIZE); |
- } |
- } |
- } |
- else /* no aligned */ |
- { |
- if (CAMELLIA_ENCRYPT == enc) |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- for(n=0; n < CAMELLIA_BLOCK_SIZE; ++n) |
- tmp.t8[n] = in[n] ^ iv[n]; |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->enc(key->rd_key, tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- memcpy(out, tmp.t8, CAMELLIA_BLOCK_SIZE); |
- iv = out; |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- for(n=0; n < len; ++n) |
- tmp.t8[n] = in[n] ^ iv[n]; |
- for(n=len; n < CAMELLIA_BLOCK_SIZE; ++n) |
- tmp.t8[n] = iv[n]; |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->enc(key->rd_key, tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- memcpy(out, tmp.t8, CAMELLIA_BLOCK_SIZE); |
- iv = out; |
- } |
- memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE); |
- } |
- else if (in != out) |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- memcpy(tmp.t8,in,CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->dec(key->rd_key,tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- for(n=0; n < CAMELLIA_BLOCK_SIZE; ++n) |
- out[n] = tmp.t8[n] ^ iv[n]; |
- iv = in; |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->dec(key->rd_key, tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- for(n=0; n < len; ++n) |
- out[n] = tmp.t8[n] ^ iv[n]; |
- iv = in; |
- } |
- memcpy(ivec,iv,CAMELLIA_BLOCK_SIZE); |
- } |
- else |
- { |
- while (len >= CAMELLIA_BLOCK_SIZE) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->dec(key->rd_key, tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- for(n=0; n < CAMELLIA_BLOCK_SIZE; ++n) |
- tmp.t8[n] ^= ivec[n]; |
- memcpy(ivec, in, CAMELLIA_BLOCK_SIZE); |
- memcpy(out, tmp.t8, CAMELLIA_BLOCK_SIZE); |
- len -= CAMELLIA_BLOCK_SIZE; |
- in += CAMELLIA_BLOCK_SIZE; |
- out += CAMELLIA_BLOCK_SIZE; |
- } |
- if (len) |
- { |
- memcpy(tmp.t8, in, CAMELLIA_BLOCK_SIZE); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- key->dec(key->rd_key,tmp.t32); |
- if (camellia_endian.little) |
- SWAP4WORD(tmp.t32); |
- for(n=0; n < len; ++n) |
- tmp.t8[n] ^= ivec[n]; |
- memcpy(ivec, in, CAMELLIA_BLOCK_SIZE); |
- memcpy(out,tmp.t8,len); |
- } |
- } |
- } |
-} |
+ if (enc) |
+ CRYPTO_cbc128_encrypt(in,out,len,key,ivec,(block128_f)Camellia_encrypt); |
+ else |
+ CRYPTO_cbc128_decrypt(in,out,len,key,ivec,(block128_f)Camellia_decrypt); |
+ } |