Index: openssl/crypto/camellia/cmll_cfb.c |
=================================================================== |
--- openssl/crypto/camellia/cmll_cfb.c (revision 105093) |
+++ openssl/crypto/camellia/cmll_cfb.c (working copy) |
@@ -105,17 +105,8 @@ |
* [including the GNU Public Licence.] |
*/ |
-#ifndef CAMELLIA_DEBUG |
-# ifndef NDEBUG |
-# define NDEBUG |
-# endif |
-#endif |
-#include <assert.h> |
-#include <string.h> |
- |
#include <openssl/camellia.h> |
-#include "cmll_locl.h" |
-#include "e_os.h" |
+#include <openssl/modes.h> |
/* The input and output encrypted as though 128bit cfb mode is being |
@@ -124,112 +115,25 @@ |
*/ |
void Camellia_cfb128_encrypt(const unsigned char *in, unsigned char *out, |
- const unsigned long length, const CAMELLIA_KEY *key, |
+ size_t length, const CAMELLIA_KEY *key, |
unsigned char *ivec, int *num, const int enc) |
{ |
- unsigned int n; |
- unsigned long l = length; |
- unsigned char c; |
- |
- assert(in && out && key && ivec && num); |
- |
- n = *num; |
- |
- if (enc) |
- { |
- while (l--) |
- { |
- if (n == 0) |
- { |
- Camellia_encrypt(ivec, ivec, key); |
- } |
- ivec[n] = *(out++) = *(in++) ^ ivec[n]; |
- n = (n+1) % CAMELLIA_BLOCK_SIZE; |
- } |
- } |
- else |
- { |
- while (l--) |
- { |
- if (n == 0) |
- { |
- Camellia_encrypt(ivec, ivec, key); |
- } |
- c = *(in); |
- *(out++) = *(in++) ^ ivec[n]; |
- ivec[n] = c; |
- n = (n+1) % CAMELLIA_BLOCK_SIZE; |
- } |
- } |
- |
- *num=n; |
+ CRYPTO_cfb128_encrypt(in,out,length,key,ivec,num,enc,(block128_f)Camellia_encrypt); |
} |
-/* This expects a single block of size nbits for both in and out. Note that |
- it corrupts any extra bits in the last byte of out */ |
-void Camellia_cfbr_encrypt_block(const unsigned char *in,unsigned char *out, |
- const int nbits,const CAMELLIA_KEY *key, |
- unsigned char *ivec,const int enc) |
- { |
- int n,rem,num; |
- unsigned char ovec[CAMELLIA_BLOCK_SIZE*2]; |
- |
- if (nbits<=0 || nbits>128) return; |
- |
- /* fill in the first half of the new IV with the current IV */ |
- memcpy(ovec,ivec,CAMELLIA_BLOCK_SIZE); |
- /* construct the new IV */ |
- Camellia_encrypt(ivec,ivec,key); |
- num = (nbits+7)/8; |
- if (enc) /* encrypt the input */ |
- for(n=0 ; n < num ; ++n) |
- out[n] = (ovec[CAMELLIA_BLOCK_SIZE+n] = in[n] ^ ivec[n]); |
- else /* decrypt the input */ |
- for(n=0 ; n < num ; ++n) |
- out[n] = (ovec[CAMELLIA_BLOCK_SIZE+n] = in[n]) ^ ivec[n]; |
- /* shift ovec left... */ |
- rem = nbits%8; |
- num = nbits/8; |
- if(rem==0) |
- memcpy(ivec,ovec+num,CAMELLIA_BLOCK_SIZE); |
- else |
- for(n=0 ; n < CAMELLIA_BLOCK_SIZE ; ++n) |
- ivec[n] = ovec[n+num]<<rem | ovec[n+num+1]>>(8-rem); |
- |
- /* it is not necessary to cleanse ovec, since the IV is not secret */ |
- } |
- |
/* N.B. This expects the input to be packed, MS bit first */ |
void Camellia_cfb1_encrypt(const unsigned char *in, unsigned char *out, |
- const unsigned long length, const CAMELLIA_KEY *key, |
+ size_t length, const CAMELLIA_KEY *key, |
unsigned char *ivec, int *num, const int enc) |
{ |
- unsigned int n; |
- unsigned char c[1],d[1]; |
- |
- assert(in && out && key && ivec && num); |
- assert(*num == 0); |
- |
- memset(out,0,(length+7)/8); |
- for(n=0 ; n < length ; ++n) |
- { |
- c[0]=(in[n/8]&(1 << (7-n%8))) ? 0x80 : 0; |
- Camellia_cfbr_encrypt_block(c,d,1,key,ivec,enc); |
- out[n/8]=(out[n/8]&~(1 << (7-n%8)))|((d[0]&0x80) >> (n%8)); |
- } |
+ CRYPTO_cfb128_1_encrypt(in,out,length,key,ivec,num,enc,(block128_f)Camellia_encrypt); |
} |
void Camellia_cfb8_encrypt(const unsigned char *in, unsigned char *out, |
- const unsigned long length, const CAMELLIA_KEY *key, |
+ size_t length, const CAMELLIA_KEY *key, |
unsigned char *ivec, int *num, const int enc) |
{ |
- unsigned int n; |
- |
- assert(in && out && key && ivec && num); |
- assert(*num == 0); |
- |
- for(n=0 ; n < length ; ++n) |
- Camellia_cfbr_encrypt_block(&in[n],&out[n],8,key,ivec,enc); |
+ CRYPTO_cfb128_8_encrypt(in,out,length,key,ivec,num,enc,(block128_f)Camellia_encrypt); |
} |