This commit is contained in:
Zhi Guan
2015-08-15 15:02:15 +08:00
parent 06df2fab54
commit 3bdc0ea895
2536 changed files with 417052 additions and 271997 deletions

View File

@@ -69,6 +69,8 @@ tests:
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
update: depend
depend:
@[ -n "$(MAKEDEPEND)" ] # should be set by upper Makefile...
$(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -57,59 +57,56 @@
*/
#ifndef HEADER_RC5_H
#define HEADER_RC5_H
# define HEADER_RC5_H
#include <openssl/opensslconf.h> /* OPENSSL_NO_RC5 */
# include <openssl/opensslconf.h>/* OPENSSL_NO_RC5 */
#ifdef __cplusplus
extern "C" {
#endif
#ifdef OPENSSL_NO_RC5
#error RC5 is disabled.
#endif
# ifdef OPENSSL_NO_RC5
# error RC5 is disabled.
# endif
#define RC5_ENCRYPT 1
#define RC5_DECRYPT 0
# define RC5_ENCRYPT 1
# define RC5_DECRYPT 0
/* 32 bit. For Alpha, things may get weird */
#define RC5_32_INT unsigned long
# define RC5_32_INT unsigned long
#define RC5_32_BLOCK 8
#define RC5_32_KEY_LENGTH 16 /* This is a default, max is 255 */
# define RC5_32_BLOCK 8
# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */
/* This are the only values supported. Tweak the code if you want more
* The most supported modes will be
* RC5-32/12/16
* RC5-32/16/8
/*
* This are the only values supported. Tweak the code if you want more The
* most supported modes will be RC5-32/12/16 RC5-32/16/8
*/
#define RC5_8_ROUNDS 8
#define RC5_12_ROUNDS 12
#define RC5_16_ROUNDS 16
# define RC5_8_ROUNDS 8
# define RC5_12_ROUNDS 12
# define RC5_16_ROUNDS 16
typedef struct rc5_key_st
{
/* Number of rounds */
int rounds;
RC5_32_INT data[2*(RC5_16_ROUNDS+1)];
} RC5_32_KEY;
typedef struct rc5_key_st {
/* Number of rounds */
int rounds;
RC5_32_INT data[2 * (RC5_16_ROUNDS + 1)];
} RC5_32_KEY;
void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data,
int rounds);
void RC5_32_ecb_encrypt(const unsigned char *in,unsigned char *out,RC5_32_KEY *key,
int enc);
void RC5_32_encrypt(unsigned long *data,RC5_32_KEY *key);
void RC5_32_decrypt(unsigned long *data,RC5_32_KEY *key);
int rounds);
void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out,
RC5_32_KEY *key, int enc);
void RC5_32_encrypt(unsigned long *data, RC5_32_KEY *key);
void RC5_32_decrypt(unsigned long *data, RC5_32_KEY *key);
void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *ks, unsigned char *iv,
int enc);
long length, RC5_32_KEY *ks, unsigned char *iv,
int enc);
void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num, int enc);
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num, int enc);
void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num);
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num);
#ifdef __cplusplus
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -60,21 +60,24 @@
#include "rc5_locl.h"
#include <openssl/opensslv.h>
const char RC5_version[]="RC5" OPENSSL_VERSION_PTEXT;
const char RC5_version[] = "RC5" OPENSSL_VERSION_PTEXT;
void RC5_32_ecb_encrypt(const unsigned char *in, unsigned char *out,
RC5_32_KEY *ks, int encrypt)
{
unsigned long l,d[2];
c2l(in,l); d[0]=l;
c2l(in,l); d[1]=l;
if (encrypt)
RC5_32_encrypt(d,ks);
else
RC5_32_decrypt(d,ks);
l=d[0]; l2c(l,out);
l=d[1]; l2c(l,out);
l=d[0]=d[1]=0;
}
RC5_32_KEY *ks, int encrypt)
{
unsigned long l, d[2];
c2l(in, l);
d[0] = l;
c2l(in, l);
d[1] = l;
if (encrypt)
RC5_32_encrypt(d, ks);
else
RC5_32_decrypt(d, ks);
l = d[0];
l2c(l, out);
l = d[1];
l2c(l, out);
l = d[0] = d[1] = 0;
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -61,155 +61,149 @@
#include "rc5_locl.h"
void RC5_32_cbc_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *ks, unsigned char *iv,
int encrypt)
{
register unsigned long tin0,tin1;
register unsigned long tout0,tout1,xor0,xor1;
register long l=length;
unsigned long tin[2];
long length, RC5_32_KEY *ks, unsigned char *iv,
int encrypt)
{
register unsigned long tin0, tin1;
register unsigned long tout0, tout1, xor0, xor1;
register long l = length;
unsigned long tin[2];
if (encrypt)
{
c2l(iv,tout0);
c2l(iv,tout1);
iv-=8;
for (l-=8; l>=0; l-=8)
{
c2l(in,tin0);
c2l(in,tin1);
tin0^=tout0;
tin1^=tout1;
tin[0]=tin0;
tin[1]=tin1;
RC5_32_encrypt(tin,ks);
tout0=tin[0]; l2c(tout0,out);
tout1=tin[1]; l2c(tout1,out);
}
if (l != -8)
{
c2ln(in,tin0,tin1,l+8);
tin0^=tout0;
tin1^=tout1;
tin[0]=tin0;
tin[1]=tin1;
RC5_32_encrypt(tin,ks);
tout0=tin[0]; l2c(tout0,out);
tout1=tin[1]; l2c(tout1,out);
}
l2c(tout0,iv);
l2c(tout1,iv);
}
else
{
c2l(iv,xor0);
c2l(iv,xor1);
iv-=8;
for (l-=8; l>=0; l-=8)
{
c2l(in,tin0); tin[0]=tin0;
c2l(in,tin1); tin[1]=tin1;
RC5_32_decrypt(tin,ks);
tout0=tin[0]^xor0;
tout1=tin[1]^xor1;
l2c(tout0,out);
l2c(tout1,out);
xor0=tin0;
xor1=tin1;
}
if (l != -8)
{
c2l(in,tin0); tin[0]=tin0;
c2l(in,tin1); tin[1]=tin1;
RC5_32_decrypt(tin,ks);
tout0=tin[0]^xor0;
tout1=tin[1]^xor1;
l2cn(tout0,tout1,out,l+8);
xor0=tin0;
xor1=tin1;
}
l2c(xor0,iv);
l2c(xor1,iv);
}
tin0=tin1=tout0=tout1=xor0=xor1=0;
tin[0]=tin[1]=0;
}
if (encrypt) {
c2l(iv, tout0);
c2l(iv, tout1);
iv -= 8;
for (l -= 8; l >= 0; l -= 8) {
c2l(in, tin0);
c2l(in, tin1);
tin0 ^= tout0;
tin1 ^= tout1;
tin[0] = tin0;
tin[1] = tin1;
RC5_32_encrypt(tin, ks);
tout0 = tin[0];
l2c(tout0, out);
tout1 = tin[1];
l2c(tout1, out);
}
if (l != -8) {
c2ln(in, tin0, tin1, l + 8);
tin0 ^= tout0;
tin1 ^= tout1;
tin[0] = tin0;
tin[1] = tin1;
RC5_32_encrypt(tin, ks);
tout0 = tin[0];
l2c(tout0, out);
tout1 = tin[1];
l2c(tout1, out);
}
l2c(tout0, iv);
l2c(tout1, iv);
} else {
c2l(iv, xor0);
c2l(iv, xor1);
iv -= 8;
for (l -= 8; l >= 0; l -= 8) {
c2l(in, tin0);
tin[0] = tin0;
c2l(in, tin1);
tin[1] = tin1;
RC5_32_decrypt(tin, ks);
tout0 = tin[0] ^ xor0;
tout1 = tin[1] ^ xor1;
l2c(tout0, out);
l2c(tout1, out);
xor0 = tin0;
xor1 = tin1;
}
if (l != -8) {
c2l(in, tin0);
tin[0] = tin0;
c2l(in, tin1);
tin[1] = tin1;
RC5_32_decrypt(tin, ks);
tout0 = tin[0] ^ xor0;
tout1 = tin[1] ^ xor1;
l2cn(tout0, tout1, out, l + 8);
xor0 = tin0;
xor1 = tin1;
}
l2c(xor0, iv);
l2c(xor1, iv);
}
tin0 = tin1 = tout0 = tout1 = xor0 = xor1 = 0;
tin[0] = tin[1] = 0;
}
void RC5_32_encrypt(unsigned long *d, RC5_32_KEY *key)
{
RC5_32_INT a,b,*s;
{
RC5_32_INT a, b, *s;
s=key->data;
s = key->data;
a=d[0]+s[0];
b=d[1]+s[1];
E_RC5_32(a,b,s, 2);
E_RC5_32(a,b,s, 4);
E_RC5_32(a,b,s, 6);
E_RC5_32(a,b,s, 8);
E_RC5_32(a,b,s,10);
E_RC5_32(a,b,s,12);
E_RC5_32(a,b,s,14);
E_RC5_32(a,b,s,16);
if (key->rounds == 12)
{
E_RC5_32(a,b,s,18);
E_RC5_32(a,b,s,20);
E_RC5_32(a,b,s,22);
E_RC5_32(a,b,s,24);
}
else if (key->rounds == 16)
{
/* Do a full expansion to avoid a jump */
E_RC5_32(a,b,s,18);
E_RC5_32(a,b,s,20);
E_RC5_32(a,b,s,22);
E_RC5_32(a,b,s,24);
E_RC5_32(a,b,s,26);
E_RC5_32(a,b,s,28);
E_RC5_32(a,b,s,30);
E_RC5_32(a,b,s,32);
}
d[0]=a;
d[1]=b;
}
a = d[0] + s[0];
b = d[1] + s[1];
E_RC5_32(a, b, s, 2);
E_RC5_32(a, b, s, 4);
E_RC5_32(a, b, s, 6);
E_RC5_32(a, b, s, 8);
E_RC5_32(a, b, s, 10);
E_RC5_32(a, b, s, 12);
E_RC5_32(a, b, s, 14);
E_RC5_32(a, b, s, 16);
if (key->rounds == 12) {
E_RC5_32(a, b, s, 18);
E_RC5_32(a, b, s, 20);
E_RC5_32(a, b, s, 22);
E_RC5_32(a, b, s, 24);
} else if (key->rounds == 16) {
/* Do a full expansion to avoid a jump */
E_RC5_32(a, b, s, 18);
E_RC5_32(a, b, s, 20);
E_RC5_32(a, b, s, 22);
E_RC5_32(a, b, s, 24);
E_RC5_32(a, b, s, 26);
E_RC5_32(a, b, s, 28);
E_RC5_32(a, b, s, 30);
E_RC5_32(a, b, s, 32);
}
d[0] = a;
d[1] = b;
}
void RC5_32_decrypt(unsigned long *d, RC5_32_KEY *key)
{
RC5_32_INT a,b,*s;
{
RC5_32_INT a, b, *s;
s=key->data;
a=d[0];
b=d[1];
if (key->rounds == 16)
{
D_RC5_32(a,b,s,32);
D_RC5_32(a,b,s,30);
D_RC5_32(a,b,s,28);
D_RC5_32(a,b,s,26);
/* Do a full expansion to avoid a jump */
D_RC5_32(a,b,s,24);
D_RC5_32(a,b,s,22);
D_RC5_32(a,b,s,20);
D_RC5_32(a,b,s,18);
}
else if (key->rounds == 12)
{
D_RC5_32(a,b,s,24);
D_RC5_32(a,b,s,22);
D_RC5_32(a,b,s,20);
D_RC5_32(a,b,s,18);
}
D_RC5_32(a,b,s,16);
D_RC5_32(a,b,s,14);
D_RC5_32(a,b,s,12);
D_RC5_32(a,b,s,10);
D_RC5_32(a,b,s, 8);
D_RC5_32(a,b,s, 6);
D_RC5_32(a,b,s, 4);
D_RC5_32(a,b,s, 2);
d[0]=a-s[0];
d[1]=b-s[1];
}
s = key->data;
a = d[0];
b = d[1];
if (key->rounds == 16) {
D_RC5_32(a, b, s, 32);
D_RC5_32(a, b, s, 30);
D_RC5_32(a, b, s, 28);
D_RC5_32(a, b, s, 26);
/* Do a full expansion to avoid a jump */
D_RC5_32(a, b, s, 24);
D_RC5_32(a, b, s, 22);
D_RC5_32(a, b, s, 20);
D_RC5_32(a, b, s, 18);
} else if (key->rounds == 12) {
D_RC5_32(a, b, s, 24);
D_RC5_32(a, b, s, 22);
D_RC5_32(a, b, s, 20);
D_RC5_32(a, b, s, 18);
}
D_RC5_32(a, b, s, 16);
D_RC5_32(a, b, s, 14);
D_RC5_32(a, b, s, 12);
D_RC5_32(a, b, s, 10);
D_RC5_32(a, b, s, 8);
D_RC5_32(a, b, s, 6);
D_RC5_32(a, b, s, 4);
D_RC5_32(a, b, s, 2);
d[0] = a - s[0];
d[1] = b - s[1];
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -59,80 +59,80 @@
#include <stdlib.h>
#undef c2l
#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \
l|=((unsigned long)(*((c)++)))<< 8L, \
l|=((unsigned long)(*((c)++)))<<16L, \
l|=((unsigned long)(*((c)++)))<<24L)
#define c2l(c,l) (l =((unsigned long)(*((c)++))) , \
l|=((unsigned long)(*((c)++)))<< 8L, \
l|=((unsigned long)(*((c)++)))<<16L, \
l|=((unsigned long)(*((c)++)))<<24L)
/* NOTE - c is not incremented as per c2l */
#undef c2ln
#define c2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
case 5: l2|=((unsigned long)(*(--(c)))); \
case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
case 1: l1|=((unsigned long)(*(--(c)))); \
} \
}
#define c2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c))))<<24L; \
case 7: l2|=((unsigned long)(*(--(c))))<<16L; \
case 6: l2|=((unsigned long)(*(--(c))))<< 8L; \
case 5: l2|=((unsigned long)(*(--(c)))); \
case 4: l1 =((unsigned long)(*(--(c))))<<24L; \
case 3: l1|=((unsigned long)(*(--(c))))<<16L; \
case 2: l1|=((unsigned long)(*(--(c))))<< 8L; \
case 1: l1|=((unsigned long)(*(--(c)))); \
} \
}
#undef l2c
#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l)>>16L)&0xff), \
*((c)++)=(unsigned char)(((l)>>24L)&0xff))
/* NOTE - c is not incremented as per l2c */
#undef l2cn
#define l2cn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
} \
}
#define l2cn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2)>>24L)&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>>16L)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>> 8L)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 4: *(--(c))=(unsigned char)(((l1)>>24L)&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>>16L)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>> 8L)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \
} \
}
/* NOTE - c is not incremented as per n2l */
#define n2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c)))) ; \
case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
case 6: l2|=((unsigned long)(*(--(c))))<<16; \
case 5: l2|=((unsigned long)(*(--(c))))<<24; \
case 4: l1 =((unsigned long)(*(--(c)))) ; \
case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
case 2: l1|=((unsigned long)(*(--(c))))<<16; \
case 1: l1|=((unsigned long)(*(--(c))))<<24; \
} \
}
#define n2ln(c,l1,l2,n) { \
c+=n; \
l1=l2=0; \
switch (n) { \
case 8: l2 =((unsigned long)(*(--(c)))) ; \
case 7: l2|=((unsigned long)(*(--(c))))<< 8; \
case 6: l2|=((unsigned long)(*(--(c))))<<16; \
case 5: l2|=((unsigned long)(*(--(c))))<<24; \
case 4: l1 =((unsigned long)(*(--(c)))) ; \
case 3: l1|=((unsigned long)(*(--(c))))<< 8; \
case 2: l1|=((unsigned long)(*(--(c))))<<16; \
case 1: l1|=((unsigned long)(*(--(c))))<<24; \
} \
}
/* NOTE - c is not incremented as per l2n */
#define l2nn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
} \
}
#define l2nn(l1,l2,c,n) { \
c+=n; \
switch (n) { \
case 8: *(--(c))=(unsigned char)(((l2) )&0xff); \
case 7: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \
case 6: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \
case 5: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \
case 4: *(--(c))=(unsigned char)(((l1) )&0xff); \
case 3: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \
case 2: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \
case 1: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \
} \
}
#undef n2l
#define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24L, \
@@ -146,62 +146,62 @@
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l) )&0xff))
#if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)) || defined(__ICC)
#define ROTATE_l32(a,n) _lrotl(a,n)
#define ROTATE_r32(a,n) _lrotr(a,n)
#if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER))
# define ROTATE_l32(a,n) _lrotl(a,n)
# define ROTATE_r32(a,n) _lrotr(a,n)
#elif defined(__ICC)
# define ROTATE_l32(a,n) _rotl(a,n)
# define ROTATE_r32(a,n) _rotr(a,n)
#elif defined(__GNUC__) && __GNUC__>=2 && !defined(__STRICT_ANSI__) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC)
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
# define ROTATE_l32(a,n) ({ register unsigned int ret; \
asm ("roll %%cl,%0" \
: "=r"(ret) \
: "c"(n),"0"((unsigned int)(a)) \
: "cc"); \
ret; \
})
# define ROTATE_r32(a,n) ({ register unsigned int ret; \
asm ("rorl %%cl,%0" \
: "=r"(ret) \
: "c"(n),"0"((unsigned int)(a)) \
: "cc"); \
ret; \
})
# define ROTATE_l32(a,n) ({ register unsigned int ret; \
asm ("roll %%cl,%0" \
: "=r"(ret) \
: "c"(n),"0"((unsigned int)(a)) \
: "cc"); \
ret; \
})
# define ROTATE_r32(a,n) ({ register unsigned int ret; \
asm ("rorl %%cl,%0" \
: "=r"(ret) \
: "c"(n),"0"((unsigned int)(a)) \
: "cc"); \
ret; \
})
# endif
#endif
#ifndef ROTATE_l32
#define ROTATE_l32(a,n) (((a)<<(n&0x1f))|(((a)&0xffffffff)>>(32-(n&0x1f))))
# define ROTATE_l32(a,n) (((a)<<(n&0x1f))|(((a)&0xffffffff)>>(32-(n&0x1f))))
#endif
#ifndef ROTATE_r32
#define ROTATE_r32(a,n) (((a)<<(32-(n&0x1f)))|(((a)&0xffffffff)>>(n&0x1f)))
# define ROTATE_r32(a,n) (((a)<<(32-(n&0x1f)))|(((a)&0xffffffff)>>(n&0x1f)))
#endif
#define RC5_32_MASK 0xffffffffL
#define RC5_32_MASK 0xffffffffL
#define RC5_16_P 0xB7E1
#define RC5_16_Q 0x9E37
#define RC5_32_P 0xB7E15163L
#define RC5_32_Q 0x9E3779B9L
#define RC5_64_P 0xB7E151628AED2A6BLL
#define RC5_64_Q 0x9E3779B97F4A7C15LL
#define RC5_16_P 0xB7E1
#define RC5_16_Q 0x9E37
#define RC5_32_P 0xB7E15163L
#define RC5_32_Q 0x9E3779B9L
#define RC5_64_P 0xB7E151628AED2A6BLL
#define RC5_64_Q 0x9E3779B97F4A7C15LL
#define E_RC5_32(a,b,s,n) \
a^=b; \
a=ROTATE_l32(a,b); \
a+=s[n]; \
a&=RC5_32_MASK; \
b^=a; \
b=ROTATE_l32(b,a); \
b+=s[n+1]; \
b&=RC5_32_MASK;
a^=b; \
a=ROTATE_l32(a,b); \
a+=s[n]; \
a&=RC5_32_MASK; \
b^=a; \
b=ROTATE_l32(b,a); \
b+=s[n+1]; \
b&=RC5_32_MASK;
#define D_RC5_32(a,b,s,n) \
b-=s[n+1]; \
b&=RC5_32_MASK; \
b=ROTATE_r32(b,a); \
b^=a; \
a-=s[n]; \
a&=RC5_32_MASK; \
a=ROTATE_r32(a,b); \
a^=b;
b-=s[n+1]; \
b&=RC5_32_MASK; \
b=ROTATE_r32(b,a); \
b^=a; \
a-=s[n]; \
a&=RC5_32_MASK; \
a=ROTATE_r32(a,b); \
a^=b;

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -60,54 +60,51 @@
#include "rc5_locl.h"
void RC5_32_set_key(RC5_32_KEY *key, int len, const unsigned char *data,
int rounds)
{
RC5_32_INT L[64],l,ll,A,B,*S,k;
int i,j,m,c,t,ii,jj;
int rounds)
{
RC5_32_INT L[64], l, ll, A, B, *S, k;
int i, j, m, c, t, ii, jj;
if ( (rounds != RC5_16_ROUNDS) &&
(rounds != RC5_12_ROUNDS) &&
(rounds != RC5_8_ROUNDS))
rounds=RC5_16_ROUNDS;
if ((rounds != RC5_16_ROUNDS) &&
(rounds != RC5_12_ROUNDS) && (rounds != RC5_8_ROUNDS))
rounds = RC5_16_ROUNDS;
key->rounds=rounds;
S= &(key->data[0]);
j=0;
for (i=0; i<=(len-8); i+=8)
{
c2l(data,l);
L[j++]=l;
c2l(data,l);
L[j++]=l;
}
ii=len-i;
if (ii)
{
k=len&0x07;
c2ln(data,l,ll,k);
L[j+0]=l;
L[j+1]=ll;
}
key->rounds = rounds;
S = &(key->data[0]);
j = 0;
for (i = 0; i <= (len - 8); i += 8) {
c2l(data, l);
L[j++] = l;
c2l(data, l);
L[j++] = l;
}
ii = len - i;
if (ii) {
k = len & 0x07;
c2ln(data, l, ll, k);
L[j + 0] = l;
L[j + 1] = ll;
}
c=(len+3)/4;
t=(rounds+1)*2;
S[0]=RC5_32_P;
for (i=1; i<t; i++)
S[i]=(S[i-1]+RC5_32_Q)&RC5_32_MASK;
j=(t>c)?t:c;
j*=3;
ii=jj=0;
A=B=0;
for (i=0; i<j; i++)
{
k=(S[ii]+A+B)&RC5_32_MASK;
A=S[ii]=ROTATE_l32(k,3);
m=(int)(A+B);
k=(L[jj]+A+B)&RC5_32_MASK;
B=L[jj]=ROTATE_l32(k,m);
if (++ii >= t) ii=0;
if (++jj >= c) jj=0;
}
}
c = (len + 3) / 4;
t = (rounds + 1) * 2;
S[0] = RC5_32_P;
for (i = 1; i < t; i++)
S[i] = (S[i - 1] + RC5_32_Q) & RC5_32_MASK;
j = (t > c) ? t : c;
j *= 3;
ii = jj = 0;
A = B = 0;
for (i = 0; i < j; i++) {
k = (S[ii] + A + B) & RC5_32_MASK;
A = S[ii] = ROTATE_l32(k, 3);
m = (int)(A + B);
k = (L[jj] + A + B) & RC5_32_MASK;
B = L[jj] = ROTATE_l32(k, m);
if (++ii >= t)
ii = 0;
if (++jj >= c)
jj = 0;
}
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -59,64 +59,65 @@
#include <openssl/rc5.h>
#include "rc5_locl.h"
/* The input and output encrypted as though 64bit cfb mode is being
* used. The extra state information to record how much of the
* 64bit block we have used is contained in *num;
/*
* The input and output encrypted as though 64bit cfb mode is being used.
* The extra state information to record how much of the 64bit block we have
* used is contained in *num;
*/
void RC5_32_cfb64_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num, int encrypt)
{
register unsigned long v0,v1,t;
register int n= *num;
register long l=length;
unsigned long ti[2];
unsigned char *iv,c,cc;
iv=(unsigned char *)ivec;
if (encrypt)
{
while (l--)
{
if (n == 0)
{
c2l(iv,v0); ti[0]=v0;
c2l(iv,v1); ti[1]=v1;
RC5_32_encrypt((unsigned long *)ti,schedule);
iv=(unsigned char *)ivec;
t=ti[0]; l2c(t,iv);
t=ti[1]; l2c(t,iv);
iv=(unsigned char *)ivec;
}
c= *(in++)^iv[n];
*(out++)=c;
iv[n]=c;
n=(n+1)&0x07;
}
}
else
{
while (l--)
{
if (n == 0)
{
c2l(iv,v0); ti[0]=v0;
c2l(iv,v1); ti[1]=v1;
RC5_32_encrypt((unsigned long *)ti,schedule);
iv=(unsigned char *)ivec;
t=ti[0]; l2c(t,iv);
t=ti[1]; l2c(t,iv);
iv=(unsigned char *)ivec;
}
cc= *(in++);
c=iv[n];
iv[n]=cc;
*(out++)=c^cc;
n=(n+1)&0x07;
}
}
v0=v1=ti[0]=ti[1]=t=c=cc=0;
*num=n;
}
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num, int encrypt)
{
register unsigned long v0, v1, t;
register int n = *num;
register long l = length;
unsigned long ti[2];
unsigned char *iv, c, cc;
iv = (unsigned char *)ivec;
if (encrypt) {
while (l--) {
if (n == 0) {
c2l(iv, v0);
ti[0] = v0;
c2l(iv, v1);
ti[1] = v1;
RC5_32_encrypt((unsigned long *)ti, schedule);
iv = (unsigned char *)ivec;
t = ti[0];
l2c(t, iv);
t = ti[1];
l2c(t, iv);
iv = (unsigned char *)ivec;
}
c = *(in++) ^ iv[n];
*(out++) = c;
iv[n] = c;
n = (n + 1) & 0x07;
}
} else {
while (l--) {
if (n == 0) {
c2l(iv, v0);
ti[0] = v0;
c2l(iv, v1);
ti[1] = v1;
RC5_32_encrypt((unsigned long *)ti, schedule);
iv = (unsigned char *)ivec;
t = ti[0];
l2c(t, iv);
t = ti[1];
l2c(t, iv);
iv = (unsigned char *)ivec;
}
cc = *(in++);
c = iv[n];
iv[n] = cc;
*(out++) = c ^ cc;
n = (n + 1) & 0x07;
}
}
v0 = v1 = ti[0] = ti[1] = t = c = cc = 0;
*num = n;
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -59,53 +59,52 @@
#include <openssl/rc5.h>
#include "rc5_locl.h"
/* The input and output encrypted as though 64bit ofb mode is being
* used. The extra state information to record how much of the
* 64bit block we have used is contained in *num;
/*
* The input and output encrypted as though 64bit ofb mode is being used.
* The extra state information to record how much of the 64bit block we have
* used is contained in *num;
*/
void RC5_32_ofb64_encrypt(const unsigned char *in, unsigned char *out,
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num)
{
register unsigned long v0,v1,t;
register int n= *num;
register long l=length;
unsigned char d[8];
register char *dp;
unsigned long ti[2];
unsigned char *iv;
int save=0;
iv=(unsigned char *)ivec;
c2l(iv,v0);
c2l(iv,v1);
ti[0]=v0;
ti[1]=v1;
dp=(char *)d;
l2c(v0,dp);
l2c(v1,dp);
while (l--)
{
if (n == 0)
{
RC5_32_encrypt((unsigned long *)ti,schedule);
dp=(char *)d;
t=ti[0]; l2c(t,dp);
t=ti[1]; l2c(t,dp);
save++;
}
*(out++)= *(in++)^d[n];
n=(n+1)&0x07;
}
if (save)
{
v0=ti[0];
v1=ti[1];
iv=(unsigned char *)ivec;
l2c(v0,iv);
l2c(v1,iv);
}
t=v0=v1=ti[0]=ti[1]=0;
*num=n;
}
long length, RC5_32_KEY *schedule,
unsigned char *ivec, int *num)
{
register unsigned long v0, v1, t;
register int n = *num;
register long l = length;
unsigned char d[8];
register char *dp;
unsigned long ti[2];
unsigned char *iv;
int save = 0;
iv = (unsigned char *)ivec;
c2l(iv, v0);
c2l(iv, v1);
ti[0] = v0;
ti[1] = v1;
dp = (char *)d;
l2c(v0, dp);
l2c(v1, dp);
while (l--) {
if (n == 0) {
RC5_32_encrypt((unsigned long *)ti, schedule);
dp = (char *)d;
t = ti[0];
l2c(t, dp);
t = ti[1];
l2c(t, dp);
save++;
}
*(out++) = *(in++) ^ d[n];
n = (n + 1) & 0x07;
}
if (save) {
v0 = ti[0];
v1 = ti[1];
iv = (unsigned char *)ivec;
l2c(v0, iv);
l2c(v1, iv);
}
t = v0 = v1 = ti[0] = ti[1] = 0;
*num = n;
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,7 +49,7 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
@@ -60,7 +60,7 @@
/* 06-Apr-92 Luke Brennan Support for VMS and add extra signal calls */
#if !defined(OPENSSL_SYS_MSDOS) && (!defined(OPENSSL_SYS_VMS) || defined(__DECC)) && !defined(OPENSSL_SYS_MACOSX)
#define TIMES
# define TIMES
#endif
#include <stdio.h>
@@ -68,210 +68,198 @@
#include <openssl/e_os2.h>
#include OPENSSL_UNISTD_IO
OPENSSL_DECLARE_EXIT
#ifndef OPENSSL_SYS_NETWARE
#include <signal.h>
# include <signal.h>
#endif
#ifndef _IRIX
#include <time.h>
# include <time.h>
#endif
#ifdef TIMES
#include <sys/types.h>
#include <sys/times.h>
# include <sys/types.h>
# include <sys/times.h>
#endif
/* Depending on the VMS version, the tms structure is perhaps defined.
The __TMS macro will show if it was. If it wasn't defined, we should
undefine TIMES, since that tells the rest of the program how things
should be handled. -- Richard Levitte */
/*
* Depending on the VMS version, the tms structure is perhaps defined.
* The __TMS macro will show if it was. If it wasn't defined, we should
* undefine TIMES, since that tells the rest of the program how things
* should be handled. -- Richard Levitte
*/
#if defined(OPENSSL_SYS_VMS_DECC) && !defined(__TMS)
#undef TIMES
# undef TIMES
#endif
#ifndef TIMES
#include <sys/timeb.h>
# include <sys/timeb.h>
#endif
#if defined(sun) || defined(__ultrix)
#define _POSIX_SOURCE
#include <limits.h>
#include <sys/param.h>
# define _POSIX_SOURCE
# include <limits.h>
# include <sys/param.h>
#endif
#include <openssl/rc5.h>
/* The following if from times(3) man page. It may need to be changed */
#ifndef HZ
#ifndef CLK_TCK
#define HZ 100.0
#else /* CLK_TCK */
#define HZ ((double)CLK_TCK)
# ifndef CLK_TCK
# define HZ 100.0
# else /* CLK_TCK */
# define HZ ((double)CLK_TCK)
# endif
#endif
#endif
#define BUFSIZE ((long)1024)
long run=0;
#define BUFSIZE ((long)1024)
long run = 0;
double Time_F(int s);
#ifdef SIGALRM
#if defined(__STDC__) || defined(sgi) || defined(_AIX)
#define SIGRETTYPE void
#else
#define SIGRETTYPE int
#endif
# if defined(__STDC__) || defined(sgi) || defined(_AIX)
# define SIGRETTYPE void
# else
# define SIGRETTYPE int
# endif
SIGRETTYPE sig_done(int sig);
SIGRETTYPE sig_done(int sig)
{
signal(SIGALRM,sig_done);
run=0;
#ifdef LINT
sig=sig;
#endif
}
{
signal(SIGALRM, sig_done);
run = 0;
# ifdef LINT
sig = sig;
# endif
}
#endif
#define START 0
#define STOP 1
#define START 0
#define STOP 1
double Time_F(int s)
{
double ret;
{
double ret;
#ifdef TIMES
static struct tms tstart,tend;
static struct tms tstart, tend;
if (s == START)
{
times(&tstart);
return(0);
}
else
{
times(&tend);
ret=((double)(tend.tms_utime-tstart.tms_utime))/HZ;
return((ret == 0.0)?1e-6:ret);
}
#else /* !times() */
static struct timeb tstart,tend;
long i;
if (s == START) {
times(&tstart);
return (0);
} else {
times(&tend);
ret = ((double)(tend.tms_utime - tstart.tms_utime)) / HZ;
return ((ret == 0.0) ? 1e-6 : ret);
}
#else /* !times() */
static struct timeb tstart, tend;
long i;
if (s == START)
{
ftime(&tstart);
return(0);
}
else
{
ftime(&tend);
i=(long)tend.millitm-(long)tstart.millitm;
ret=((double)(tend.time-tstart.time))+((double)i)/1e3;
return((ret == 0.0)?1e-6:ret);
}
if (s == START) {
ftime(&tstart);
return (0);
} else {
ftime(&tend);
i = (long)tend.millitm - (long)tstart.millitm;
ret = ((double)(tend.time - tstart.time)) + ((double)i) / 1e3;
return ((ret == 0.0) ? 1e-6 : ret);
}
#endif
}
}
int main(int argc, char **argv)
{
long count;
static unsigned char buf[BUFSIZE];
static unsigned char key[] ={
0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
};
RC5_32_KEY sch;
double a,b,c,d;
{
long count;
static unsigned char buf[BUFSIZE];
static unsigned char key[] = {
0x12, 0x34, 0x56, 0x78, 0x9a, 0xbc, 0xde, 0xf0,
0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
};
RC5_32_KEY sch;
double a, b, c, d;
#ifndef SIGALRM
long ca,cb,cc;
long ca, cb, cc;
#endif
#ifndef TIMES
printf("To get the most accurate results, try to run this\n");
printf("program when this computer is idle.\n");
printf("To get the most accurate results, try to run this\n");
printf("program when this computer is idle.\n");
#endif
#ifndef SIGALRM
printf("First we calculate the approximate speed ...\n");
RC5_32_set_key(&sch,16,key,12);
count=10;
do {
long i;
unsigned long data[2];
printf("First we calculate the approximate speed ...\n");
RC5_32_set_key(&sch, 16, key, 12);
count = 10;
do {
long i;
unsigned long data[2];
count*=2;
Time_F(START);
for (i=count; i; i--)
RC5_32_encrypt(data,&sch);
d=Time_F(STOP);
} while (d < 3.0);
ca=count/512;
cb=count;
cc=count*8/BUFSIZE+1;
printf("Doing RC5_32_set_key %ld times\n",ca);
#define COND(d) (count != (d))
#define COUNT(d) (d)
count *= 2;
Time_F(START);
for (i = count; i; i--)
RC5_32_encrypt(data, &sch);
d = Time_F(STOP);
} while (d < 3.0);
ca = count / 512;
cb = count;
cc = count * 8 / BUFSIZE + 1;
printf("Doing RC5_32_set_key %ld times\n", ca);
# define COND(d) (count != (d))
# define COUNT(d) (d)
#else
#define COND(c) (run)
#define COUNT(d) (count)
signal(SIGALRM,sig_done);
printf("Doing RC5_32_set_key for 10 seconds\n");
alarm(10);
# define COND(c) (run)
# define COUNT(d) (count)
signal(SIGALRM, sig_done);
printf("Doing RC5_32_set_key for 10 seconds\n");
alarm(10);
#endif
Time_F(START);
for (count=0,run=1; COND(ca); count+=4)
{
RC5_32_set_key(&sch,16,key,12);
RC5_32_set_key(&sch,16,key,12);
RC5_32_set_key(&sch,16,key,12);
RC5_32_set_key(&sch,16,key,12);
}
d=Time_F(STOP);
printf("%ld RC5_32_set_key's in %.2f seconds\n",count,d);
a=((double)COUNT(ca))/d;
Time_F(START);
for (count = 0, run = 1; COND(ca); count += 4) {
RC5_32_set_key(&sch, 16, key, 12);
RC5_32_set_key(&sch, 16, key, 12);
RC5_32_set_key(&sch, 16, key, 12);
RC5_32_set_key(&sch, 16, key, 12);
}
d = Time_F(STOP);
printf("%ld RC5_32_set_key's in %.2f seconds\n", count, d);
a = ((double)COUNT(ca)) / d;
#ifdef SIGALRM
printf("Doing RC5_32_encrypt's for 10 seconds\n");
alarm(10);
printf("Doing RC5_32_encrypt's for 10 seconds\n");
alarm(10);
#else
printf("Doing RC5_32_encrypt %ld times\n",cb);
printf("Doing RC5_32_encrypt %ld times\n", cb);
#endif
Time_F(START);
for (count=0,run=1; COND(cb); count+=4)
{
unsigned long data[2];
Time_F(START);
for (count = 0, run = 1; COND(cb); count += 4) {
unsigned long data[2];
RC5_32_encrypt(data,&sch);
RC5_32_encrypt(data,&sch);
RC5_32_encrypt(data,&sch);
RC5_32_encrypt(data,&sch);
}
d=Time_F(STOP);
printf("%ld RC5_32_encrypt's in %.2f second\n",count,d);
b=((double)COUNT(cb)*8)/d;
RC5_32_encrypt(data, &sch);
RC5_32_encrypt(data, &sch);
RC5_32_encrypt(data, &sch);
RC5_32_encrypt(data, &sch);
}
d = Time_F(STOP);
printf("%ld RC5_32_encrypt's in %.2f second\n", count, d);
b = ((double)COUNT(cb) * 8) / d;
#ifdef SIGALRM
printf("Doing RC5_32_cbc_encrypt on %ld byte blocks for 10 seconds\n",
BUFSIZE);
alarm(10);
printf("Doing RC5_32_cbc_encrypt on %ld byte blocks for 10 seconds\n",
BUFSIZE);
alarm(10);
#else
printf("Doing RC5_32_cbc_encrypt %ld times on %ld byte blocks\n",cc,
BUFSIZE);
printf("Doing RC5_32_cbc_encrypt %ld times on %ld byte blocks\n", cc,
BUFSIZE);
#endif
Time_F(START);
for (count=0,run=1; COND(cc); count++)
RC5_32_cbc_encrypt(buf,buf,BUFSIZE,&sch,
&(key[0]),RC5_ENCRYPT);
d=Time_F(STOP);
printf("%ld RC5_32_cbc_encrypt's of %ld byte blocks in %.2f second\n",
count,BUFSIZE,d);
c=((double)COUNT(cc)*BUFSIZE)/d;
Time_F(START);
for (count = 0, run = 1; COND(cc); count++)
RC5_32_cbc_encrypt(buf, buf, BUFSIZE, &sch, &(key[0]), RC5_ENCRYPT);
d = Time_F(STOP);
printf("%ld RC5_32_cbc_encrypt's of %ld byte blocks in %.2f second\n",
count, BUFSIZE, d);
c = ((double)COUNT(cc) * BUFSIZE) / d;
printf("RC5_32/12/16 set_key per sec = %12.2f (%9.3fuS)\n",a,1.0e6/a);
printf("RC5_32/12/16 raw ecb bytes per sec = %12.2f (%9.3fuS)\n",b,8.0e6/b);
printf("RC5_32/12/16 cbc bytes per sec = %12.2f (%9.3fuS)\n",c,8.0e6/c);
exit(0);
printf("RC5_32/12/16 set_key per sec = %12.2f (%9.3fuS)\n", a,
1.0e6 / a);
printf("RC5_32/12/16 raw ecb bytes per sec = %12.2f (%9.3fuS)\n", b,
8.0e6 / b);
printf("RC5_32/12/16 cbc bytes per sec = %12.2f (%9.3fuS)\n", c,
8.0e6 / c);
exit(0);
#if defined(LINT) || defined(OPENSSL_SYS_MSDOS)
return(0);
return (0);
#endif
}
}

View File

@@ -5,21 +5,21 @@
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
*
* Copyright remains Eric Young's, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
@@ -34,10 +34,10 @@
* Eric Young (eay@cryptsoft.com)"
* The word 'cryptographic' can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows specific code (or a derivative thereof) from
* 4. If you include any Windows specific code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
*
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
@@ -49,15 +49,17 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
/* This has been a quickly hacked 'ideatest.c'. When I add tests for other
* RC5 modes, more of the code will be uncommented. */
/*
* This has been a quickly hacked 'ideatest.c'. When I add tests for other
* RC5 modes, more of the code will be uncommented.
*/
#include <stdio.h>
#include <string.h>
@@ -69,318 +71,311 @@
int main(int argc, char *argv[])
{
printf("No RC5 support\n");
return(0);
return (0);
}
#else
#include <openssl/rc5.h>
# include <openssl/rc5.h>
static unsigned char RC5key[5][16]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x91,0x5f,0x46,0x19,0xbe,0x41,0xb2,0x51,
0x63,0x55,0xa5,0x01,0x10,0xa9,0xce,0x91},
{0x78,0x33,0x48,0xe7,0x5a,0xeb,0x0f,0x2f,
0xd7,0xb1,0x69,0xbb,0x8d,0xc1,0x67,0x87},
{0xdc,0x49,0xdb,0x13,0x75,0xa5,0x58,0x4f,
0x64,0x85,0xb4,0x13,0xb5,0xf1,0x2b,0xaf},
{0x52,0x69,0xf1,0x49,0xd4,0x1b,0xa0,0x15,
0x24,0x97,0x57,0x4d,0x7f,0x15,0x31,0x25},
};
static unsigned char RC5key[5][16] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x91, 0x5f, 0x46, 0x19, 0xbe, 0x41, 0xb2, 0x51,
0x63, 0x55, 0xa5, 0x01, 0x10, 0xa9, 0xce, 0x91},
{0x78, 0x33, 0x48, 0xe7, 0x5a, 0xeb, 0x0f, 0x2f,
0xd7, 0xb1, 0x69, 0xbb, 0x8d, 0xc1, 0x67, 0x87},
{0xdc, 0x49, 0xdb, 0x13, 0x75, 0xa5, 0x58, 0x4f,
0x64, 0x85, 0xb4, 0x13, 0xb5, 0xf1, 0x2b, 0xaf},
{0x52, 0x69, 0xf1, 0x49, 0xd4, 0x1b, 0xa0, 0x15,
0x24, 0x97, 0x57, 0x4d, 0x7f, 0x15, 0x31, 0x25},
};
static unsigned char RC5plain[5][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x21,0xA5,0xDB,0xEE,0x15,0x4B,0x8F,0x6D},
{0xF7,0xC0,0x13,0xAC,0x5B,0x2B,0x89,0x52},
{0x2F,0x42,0xB3,0xB7,0x03,0x69,0xFC,0x92},
{0x65,0xC1,0x78,0xB2,0x84,0xD1,0x97,0xCC},
};
static unsigned char RC5plain[5][8] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
{0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
{0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
{0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
};
static unsigned char RC5cipher[5][8]={
{0x21,0xA5,0xDB,0xEE,0x15,0x4B,0x8F,0x6D},
{0xF7,0xC0,0x13,0xAC,0x5B,0x2B,0x89,0x52},
{0x2F,0x42,0xB3,0xB7,0x03,0x69,0xFC,0x92},
{0x65,0xC1,0x78,0xB2,0x84,0xD1,0x97,0xCC},
{0xEB,0x44,0xE4,0x15,0xDA,0x31,0x98,0x24},
};
static unsigned char RC5cipher[5][8] = {
{0x21, 0xA5, 0xDB, 0xEE, 0x15, 0x4B, 0x8F, 0x6D},
{0xF7, 0xC0, 0x13, 0xAC, 0x5B, 0x2B, 0x89, 0x52},
{0x2F, 0x42, 0xB3, 0xB7, 0x03, 0x69, 0xFC, 0x92},
{0x65, 0xC1, 0x78, 0xB2, 0x84, 0xD1, 0x97, 0xCC},
{0xEB, 0x44, 0xE4, 0x15, 0xDA, 0x31, 0x98, 0x24},
};
#define RC5_CBC_NUM 27
static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8]={
{0x7a,0x7b,0xba,0x4d,0x79,0x11,0x1d,0x1e},
{0x79,0x7b,0xba,0x4d,0x78,0x11,0x1d,0x1e},
{0x7a,0x7b,0xba,0x4d,0x79,0x11,0x1d,0x1f},
{0x7a,0x7b,0xba,0x4d,0x79,0x11,0x1d,0x1f},
{0x8b,0x9d,0xed,0x91,0xce,0x77,0x94,0xa6},
{0x2f,0x75,0x9f,0xe7,0xad,0x86,0xa3,0x78},
{0xdc,0xa2,0x69,0x4b,0xf4,0x0e,0x07,0x88},
{0xdc,0xa2,0x69,0x4b,0xf4,0x0e,0x07,0x88},
{0xdc,0xfe,0x09,0x85,0x77,0xec,0xa5,0xff},
{0x96,0x46,0xfb,0x77,0x63,0x8f,0x9c,0xa8},
{0xb2,0xb3,0x20,0x9d,0xb6,0x59,0x4d,0xa4},
{0x54,0x5f,0x7f,0x32,0xa5,0xfc,0x38,0x36},
{0x82,0x85,0xe7,0xc1,0xb5,0xbc,0x74,0x02},
{0xfc,0x58,0x6f,0x92,0xf7,0x08,0x09,0x34},
{0xcf,0x27,0x0e,0xf9,0x71,0x7f,0xf7,0xc4},
{0xe4,0x93,0xf1,0xc1,0xbb,0x4d,0x6e,0x8c},
{0x5c,0x4c,0x04,0x1e,0x0f,0x21,0x7a,0xc3},
{0x92,0x1f,0x12,0x48,0x53,0x73,0xb4,0xf7},
{0x5b,0xa0,0xca,0x6b,0xbe,0x7f,0x5f,0xad},
{0xc5,0x33,0x77,0x1c,0xd0,0x11,0x0e,0x63},
{0x29,0x4d,0xdb,0x46,0xb3,0x27,0x8d,0x60},
{0xda,0xd6,0xbd,0xa9,0xdf,0xe8,0xf7,0xe8},
{0x97,0xe0,0x78,0x78,0x37,0xed,0x31,0x7f},
{0x78,0x75,0xdb,0xf6,0x73,0x8c,0x64,0x78},
{0x8f,0x34,0xc3,0xc6,0x81,0xc9,0x96,0x95},
{0x7c,0xb3,0xf1,0xdf,0x34,0xf9,0x48,0x11},
{0x7f,0xd1,0xa0,0x23,0xa5,0xbb,0xa2,0x17},
};
# define RC5_CBC_NUM 27
static unsigned char rc5_cbc_cipher[RC5_CBC_NUM][8] = {
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1e},
{0x79, 0x7b, 0xba, 0x4d, 0x78, 0x11, 0x1d, 0x1e},
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
{0x7a, 0x7b, 0xba, 0x4d, 0x79, 0x11, 0x1d, 0x1f},
{0x8b, 0x9d, 0xed, 0x91, 0xce, 0x77, 0x94, 0xa6},
{0x2f, 0x75, 0x9f, 0xe7, 0xad, 0x86, 0xa3, 0x78},
{0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
{0xdc, 0xa2, 0x69, 0x4b, 0xf4, 0x0e, 0x07, 0x88},
{0xdc, 0xfe, 0x09, 0x85, 0x77, 0xec, 0xa5, 0xff},
{0x96, 0x46, 0xfb, 0x77, 0x63, 0x8f, 0x9c, 0xa8},
{0xb2, 0xb3, 0x20, 0x9d, 0xb6, 0x59, 0x4d, 0xa4},
{0x54, 0x5f, 0x7f, 0x32, 0xa5, 0xfc, 0x38, 0x36},
{0x82, 0x85, 0xe7, 0xc1, 0xb5, 0xbc, 0x74, 0x02},
{0xfc, 0x58, 0x6f, 0x92, 0xf7, 0x08, 0x09, 0x34},
{0xcf, 0x27, 0x0e, 0xf9, 0x71, 0x7f, 0xf7, 0xc4},
{0xe4, 0x93, 0xf1, 0xc1, 0xbb, 0x4d, 0x6e, 0x8c},
{0x5c, 0x4c, 0x04, 0x1e, 0x0f, 0x21, 0x7a, 0xc3},
{0x92, 0x1f, 0x12, 0x48, 0x53, 0x73, 0xb4, 0xf7},
{0x5b, 0xa0, 0xca, 0x6b, 0xbe, 0x7f, 0x5f, 0xad},
{0xc5, 0x33, 0x77, 0x1c, 0xd0, 0x11, 0x0e, 0x63},
{0x29, 0x4d, 0xdb, 0x46, 0xb3, 0x27, 0x8d, 0x60},
{0xda, 0xd6, 0xbd, 0xa9, 0xdf, 0xe8, 0xf7, 0xe8},
{0x97, 0xe0, 0x78, 0x78, 0x37, 0xed, 0x31, 0x7f},
{0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
{0x8f, 0x34, 0xc3, 0xc6, 0x81, 0xc9, 0x96, 0x95},
{0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
{0x7f, 0xd1, 0xa0, 0x23, 0xa5, 0xbb, 0xa2, 0x17},
};
static unsigned char rc5_cbc_key[RC5_CBC_NUM][17]={
{ 1,0x00},
{ 1,0x00},
{ 1,0x00},
{ 1,0x00},
{ 1,0x00},
{ 1,0x11},
{ 1,0x00},
{ 4,0x00,0x00,0x00,0x00},
{ 1,0x00},
{ 1,0x00},
{ 1,0x00},
{ 1,0x00},
{ 4,0x01,0x02,0x03,0x04},
{ 4,0x01,0x02,0x03,0x04},
{ 4,0x01,0x02,0x03,0x04},
{ 8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{ 8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{ 8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{ 8,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{16,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{16,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{16,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{ 5,0x01,0x02,0x03,0x04,0x05},
{ 5,0x01,0x02,0x03,0x04,0x05},
{ 5,0x01,0x02,0x03,0x04,0x05},
{ 5,0x01,0x02,0x03,0x04,0x05},
{ 5,0x01,0x02,0x03,0x04,0x05},
};
static unsigned char rc5_cbc_key[RC5_CBC_NUM][17] = {
{1, 0x00},
{1, 0x00},
{1, 0x00},
{1, 0x00},
{1, 0x00},
{1, 0x11},
{1, 0x00},
{4, 0x00, 0x00, 0x00, 0x00},
{1, 0x00},
{1, 0x00},
{1, 0x00},
{1, 0x00},
{4, 0x01, 0x02, 0x03, 0x04},
{4, 0x01, 0x02, 0x03, 0x04},
{4, 0x01, 0x02, 0x03, 0x04},
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{8, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{16, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
{5, 0x01, 0x02, 0x03, 0x04, 0x05},
};
static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0x10,0x20,0x30,0x40,0x50,0x60,0x70,0x80},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff},
{0x08,0x08,0x08,0x08,0x08,0x08,0x08,0x08},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x01},
};
static unsigned char rc5_cbc_plain[RC5_CBC_NUM][8] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0x10, 0x20, 0x30, 0x40, 0x50, 0x60, 0x70, 0x80},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff},
{0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x01},
};
static int rc5_cbc_rounds[RC5_CBC_NUM]={
0, 0, 0, 0, 0, 1, 2, 2,
8, 8,12,16, 8,12,16,12,
8,12,16, 8,12,16,12, 8,
8, 8, 8,
};
static int rc5_cbc_rounds[RC5_CBC_NUM] = {
0, 0, 0, 0, 0, 1, 2, 2,
8, 8, 12, 16, 8, 12, 16, 12,
8, 12, 16, 8, 12, 16, 12, 8,
8, 8, 8,
};
static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8]={
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x78,0x75,0xdb,0xf6,0x73,0x8c,0x64,0x78},
{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
{0x7c,0xb3,0xf1,0xdf,0x34,0xf9,0x48,0x11},
};
static unsigned char rc5_cbc_iv[RC5_CBC_NUM][8] = {
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x78, 0x75, 0xdb, 0xf6, 0x73, 0x8c, 0x64, 0x78},
{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
{0x7c, 0xb3, 0xf1, 0xdf, 0x34, 0xf9, 0x48, 0x11},
};
int main(int argc, char *argv[])
{
int i,n,err=0;
RC5_32_KEY key;
unsigned char buf[8],buf2[8],ivb[8];
{
int i, n, err = 0;
RC5_32_KEY key;
unsigned char buf[8], buf2[8], ivb[8];
for (n=0; n<5; n++)
{
RC5_32_set_key(&key,16,&(RC5key[n][0]),12);
for (n = 0; n < 5; n++) {
RC5_32_set_key(&key, 16, &(RC5key[n][0]), 12);
RC5_32_ecb_encrypt(&(RC5plain[n][0]),buf,&key,RC5_ENCRYPT);
if (memcmp(&(RC5cipher[n][0]),buf,8) != 0)
{
printf("ecb RC5 error encrypting (%d)\n",n+1);
printf("got :");
for (i=0; i<8; i++)
printf("%02X ",buf[i]);
printf("\n");
printf("expected:");
for (i=0; i<8; i++)
printf("%02X ",RC5cipher[n][i]);
err=20;
printf("\n");
}
RC5_32_ecb_encrypt(buf,buf2,&key,RC5_DECRYPT);
if (memcmp(&(RC5plain[n][0]),buf2,8) != 0)
{
printf("ecb RC5 error decrypting (%d)\n",n+1);
printf("got :");
for (i=0; i<8; i++)
printf("%02X ",buf2[i]);
printf("\n");
printf("expected:");
for (i=0; i<8; i++)
printf("%02X ",RC5plain[n][i]);
printf("\n");
err=3;
}
}
if (err == 0) printf("ecb RC5 ok\n");
for (n=0; n<RC5_CBC_NUM; n++)
{
i=rc5_cbc_rounds[n];
if (i < 8) continue;
RC5_32_set_key(&key,rc5_cbc_key[n][0],&(rc5_cbc_key[n][1]),i);
memcpy(ivb,&(rc5_cbc_iv[n][0]),8);
RC5_32_cbc_encrypt(&(rc5_cbc_plain[n][0]),buf,8,
&key,&(ivb[0]),RC5_ENCRYPT);
if (memcmp(&(rc5_cbc_cipher[n][0]),buf,8) != 0)
{
printf("cbc RC5 error encrypting (%d)\n",n+1);
printf("got :");
for (i=0; i<8; i++)
printf("%02X ",buf[i]);
printf("\n");
printf("expected:");
for (i=0; i<8; i++)
printf("%02X ",rc5_cbc_cipher[n][i]);
err=30;
printf("\n");
}
memcpy(ivb,&(rc5_cbc_iv[n][0]),8);
RC5_32_cbc_encrypt(buf,buf2,8,
&key,&(ivb[0]),RC5_DECRYPT);
if (memcmp(&(rc5_cbc_plain[n][0]),buf2,8) != 0)
{
printf("cbc RC5 error decrypting (%d)\n",n+1);
printf("got :");
for (i=0; i<8; i++)
printf("%02X ",buf2[i]);
printf("\n");
printf("expected:");
for (i=0; i<8; i++)
printf("%02X ",rc5_cbc_plain[n][i]);
printf("\n");
err=3;
}
}
if (err == 0) printf("cbc RC5 ok\n");
EXIT(err);
return(err);
}
#ifdef undef
static int cfb64_test(unsigned char *cfb_cipher)
{
IDEA_KEY_SCHEDULE eks,dks;
int err=0,i,n;
idea_set_encrypt_key(cfb_key,&eks);
idea_set_decrypt_key(&eks,&dks);
memcpy(cfb_tmp,cfb_iv,8);
n=0;
idea_cfb64_encrypt(plain,cfb_buf1,(long)12,&eks,
cfb_tmp,&n,IDEA_ENCRYPT);
idea_cfb64_encrypt(&(plain[12]),&(cfb_buf1[12]),
(long)CFB_TEST_SIZE-12,&eks,
cfb_tmp,&n,IDEA_ENCRYPT);
if (memcmp(cfb_cipher,cfb_buf1,CFB_TEST_SIZE) != 0)
{
err=1;
printf("idea_cfb64_encrypt encrypt error\n");
for (i=0; i<CFB_TEST_SIZE; i+=8)
printf("%s\n",pt(&(cfb_buf1[i])));
}
memcpy(cfb_tmp,cfb_iv,8);
n=0;
idea_cfb64_encrypt(cfb_buf1,cfb_buf2,(long)17,&eks,
cfb_tmp,&n,IDEA_DECRYPT);
idea_cfb64_encrypt(&(cfb_buf1[17]),&(cfb_buf2[17]),
(long)CFB_TEST_SIZE-17,&dks,
cfb_tmp,&n,IDEA_DECRYPT);
if (memcmp(plain,cfb_buf2,CFB_TEST_SIZE) != 0)
{
err=1;
printf("idea_cfb_encrypt decrypt error\n");
for (i=0; i<24; i+=8)
printf("%s\n",pt(&(cfb_buf2[i])));
}
return(err);
RC5_32_ecb_encrypt(&(RC5plain[n][0]), buf, &key, RC5_ENCRYPT);
if (memcmp(&(RC5cipher[n][0]), buf, 8) != 0) {
printf("ecb RC5 error encrypting (%d)\n", n + 1);
printf("got :");
for (i = 0; i < 8; i++)
printf("%02X ", buf[i]);
printf("\n");
printf("expected:");
for (i = 0; i < 8; i++)
printf("%02X ", RC5cipher[n][i]);
err = 20;
printf("\n");
}
static char *pt(unsigned char *p)
{
static char bufs[10][20];
static int bnum=0;
char *ret;
int i;
static char *f="0123456789ABCDEF";
RC5_32_ecb_encrypt(buf, buf2, &key, RC5_DECRYPT);
if (memcmp(&(RC5plain[n][0]), buf2, 8) != 0) {
printf("ecb RC5 error decrypting (%d)\n", n + 1);
printf("got :");
for (i = 0; i < 8; i++)
printf("%02X ", buf2[i]);
printf("\n");
printf("expected:");
for (i = 0; i < 8; i++)
printf("%02X ", RC5plain[n][i]);
printf("\n");
err = 3;
}
}
if (err == 0)
printf("ecb RC5 ok\n");
ret= &(bufs[bnum++][0]);
bnum%=10;
for (i=0; i<8; i++)
{
ret[i*2]=f[(p[i]>>4)&0xf];
ret[i*2+1]=f[p[i]&0xf];
}
ret[16]='\0';
return(ret);
}
#endif
for (n = 0; n < RC5_CBC_NUM; n++) {
i = rc5_cbc_rounds[n];
if (i < 8)
continue;
RC5_32_set_key(&key, rc5_cbc_key[n][0], &(rc5_cbc_key[n][1]), i);
memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
RC5_32_cbc_encrypt(&(rc5_cbc_plain[n][0]), buf, 8,
&key, &(ivb[0]), RC5_ENCRYPT);
if (memcmp(&(rc5_cbc_cipher[n][0]), buf, 8) != 0) {
printf("cbc RC5 error encrypting (%d)\n", n + 1);
printf("got :");
for (i = 0; i < 8; i++)
printf("%02X ", buf[i]);
printf("\n");
printf("expected:");
for (i = 0; i < 8; i++)
printf("%02X ", rc5_cbc_cipher[n][i]);
err = 30;
printf("\n");
}
memcpy(ivb, &(rc5_cbc_iv[n][0]), 8);
RC5_32_cbc_encrypt(buf, buf2, 8, &key, &(ivb[0]), RC5_DECRYPT);
if (memcmp(&(rc5_cbc_plain[n][0]), buf2, 8) != 0) {
printf("cbc RC5 error decrypting (%d)\n", n + 1);
printf("got :");
for (i = 0; i < 8; i++)
printf("%02X ", buf2[i]);
printf("\n");
printf("expected:");
for (i = 0; i < 8; i++)
printf("%02X ", rc5_cbc_plain[n][i]);
printf("\n");
err = 3;
}
}
if (err == 0)
printf("cbc RC5 ok\n");
EXIT(err);
return (err);
}
# ifdef undef
static int cfb64_test(unsigned char *cfb_cipher)
{
IDEA_KEY_SCHEDULE eks, dks;
int err = 0, i, n;
idea_set_encrypt_key(cfb_key, &eks);
idea_set_decrypt_key(&eks, &dks);
memcpy(cfb_tmp, cfb_iv, 8);
n = 0;
idea_cfb64_encrypt(plain, cfb_buf1, (long)12, &eks,
cfb_tmp, &n, IDEA_ENCRYPT);
idea_cfb64_encrypt(&(plain[12]), &(cfb_buf1[12]),
(long)CFB_TEST_SIZE - 12, &eks,
cfb_tmp, &n, IDEA_ENCRYPT);
if (memcmp(cfb_cipher, cfb_buf1, CFB_TEST_SIZE) != 0) {
err = 1;
printf("idea_cfb64_encrypt encrypt error\n");
for (i = 0; i < CFB_TEST_SIZE; i += 8)
printf("%s\n", pt(&(cfb_buf1[i])));
}
memcpy(cfb_tmp, cfb_iv, 8);
n = 0;
idea_cfb64_encrypt(cfb_buf1, cfb_buf2, (long)17, &eks,
cfb_tmp, &n, IDEA_DECRYPT);
idea_cfb64_encrypt(&(cfb_buf1[17]), &(cfb_buf2[17]),
(long)CFB_TEST_SIZE - 17, &dks,
cfb_tmp, &n, IDEA_DECRYPT);
if (memcmp(plain, cfb_buf2, CFB_TEST_SIZE) != 0) {
err = 1;
printf("idea_cfb_encrypt decrypt error\n");
for (i = 0; i < 24; i += 8)
printf("%s\n", pt(&(cfb_buf2[i])));
}
return (err);
}
static char *pt(unsigned char *p)
{
static char bufs[10][20];
static int bnum = 0;
char *ret;
int i;
static char *f = "0123456789ABCDEF";
ret = &(bufs[bnum++][0]);
bnum %= 10;
for (i = 0; i < 8; i++) {
ret[i * 2] = f[(p[i] >> 4) & 0xf];
ret[i * 2 + 1] = f[p[i] & 0xf];
}
ret[16] = '\0';
return (ret);
}
# endif
#endif