Change type of various DES function arguments from des_cblock
(meaning pointer to char) to des_cblock * (meaning pointer to array with 8 char elements), which allows the compiler to do more typechecking. (The changed argument types were of type des_cblock * back in SSLeay, and a lot of ugly casts were used then to turn them into pointers to elements; but it can be done without those casts.) Introduce new type const_des_cblock -- before, the pointers rather than the elements pointed to were declared const, and for some reason gcc did not complain about this (but some other compilers did).
This commit is contained in:
parent
e186bf96b4
commit
edf0bfb52b
10
apps/speed.c
10
apps/speed.c
@ -580,9 +580,9 @@ int MAIN(int argc, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef NO_DES
|
#ifndef NO_DES
|
||||||
des_set_key(key,sch);
|
des_set_key(&key,sch);
|
||||||
des_set_key(key2,sch2);
|
des_set_key(&key2,sch2);
|
||||||
des_set_key(key3,sch3);
|
des_set_key(&key3,sch3);
|
||||||
#endif
|
#endif
|
||||||
#ifndef NO_IDEA
|
#ifndef NO_IDEA
|
||||||
idea_set_encrypt_key(key16,&idea_ks);
|
idea_set_encrypt_key(key16,&idea_ks);
|
||||||
@ -833,7 +833,7 @@ int MAIN(int argc, char **argv)
|
|||||||
Time_F(START);
|
Time_F(START);
|
||||||
for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
|
for (count=0,run=1; COND(c[D_CBC_DES][j]); count++)
|
||||||
des_ncbc_encrypt(buf,buf,lengths[j],sch,
|
des_ncbc_encrypt(buf,buf,lengths[j],sch,
|
||||||
&(iv[0]),DES_ENCRYPT);
|
&iv,DES_ENCRYPT);
|
||||||
d=Time_F(STOP);
|
d=Time_F(STOP);
|
||||||
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
|
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
|
||||||
count,names[D_CBC_DES],d);
|
count,names[D_CBC_DES],d);
|
||||||
@ -850,7 +850,7 @@ int MAIN(int argc, char **argv)
|
|||||||
for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
|
for (count=0,run=1; COND(c[D_EDE3_DES][j]); count++)
|
||||||
des_ede3_cbc_encrypt(buf,buf,lengths[j],
|
des_ede3_cbc_encrypt(buf,buf,lengths[j],
|
||||||
sch,sch2,sch3,
|
sch,sch2,sch3,
|
||||||
&(iv[0]),DES_ENCRYPT);
|
&iv,DES_ENCRYPT);
|
||||||
d=Time_F(STOP);
|
d=Time_F(STOP);
|
||||||
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
|
BIO_printf(bio_err,"%ld %s's in %.2fs\n",
|
||||||
count,names[D_EDE3_DES],d);
|
count,names[D_EDE3_DES],d);
|
||||||
|
@ -58,12 +58,15 @@
|
|||||||
|
|
||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
|
|
||||||
DES_LONG des_cbc_cksum(const unsigned char *in, des_cblock out, long length,
|
DES_LONG des_cbc_cksum(const unsigned char *in, des_cblock *output,
|
||||||
des_key_schedule schedule, const des_cblock iv)
|
long length,
|
||||||
|
des_key_schedule schedule, const_des_cblock *ivec)
|
||||||
{
|
{
|
||||||
register DES_LONG tout0,tout1,tin0,tin1;
|
register DES_LONG tout0,tout1,tin0,tin1;
|
||||||
register long l=length;
|
register long l=length;
|
||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
|
unsigned char *out = &(*output)[0];
|
||||||
|
const unsigned char *iv = &(*ivec)[0];
|
||||||
|
|
||||||
c2l(iv,tout0);
|
c2l(iv,tout0);
|
||||||
c2l(iv,tout1);
|
c2l(iv,tout1);
|
||||||
|
@ -61,7 +61,7 @@
|
|||||||
/* Note that this is inconsistent with other DES functions, in that it doesn't
|
/* Note that this is inconsistent with other DES functions, in that it doesn't
|
||||||
update ivec */
|
update ivec */
|
||||||
void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
||||||
des_key_schedule schedule, des_cblock ivec, int enc)
|
des_key_schedule schedule, des_cblock *ivec, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG tin0,tin1;
|
register DES_LONG tin0,tin1;
|
||||||
register DES_LONG tout0,tout1,xor0,xor1;
|
register DES_LONG tout0,tout1,xor0,xor1;
|
||||||
@ -69,7 +69,7 @@ void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
unsigned char *iv;
|
unsigned char *iv;
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
|
|
||||||
void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||||
long length, des_key_schedule ks1, des_key_schedule ks2,
|
long length, des_key_schedule ks1, des_key_schedule ks2,
|
||||||
des_key_schedule ks3, des_cblock ivec, int *num, int enc)
|
des_key_schedule ks3, des_cblock *ivec, int *num, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG v0,v1;
|
register DES_LONG v0,v1;
|
||||||
register long l=length;
|
register long l=length;
|
||||||
@ -73,7 +73,7 @@ void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
DES_LONG ti[2];
|
DES_LONG ti[2];
|
||||||
unsigned char *iv,c,cc;
|
unsigned char *iv,c,cc;
|
||||||
|
|
||||||
iv=ivec;
|
iv=&(*ivec)[0];
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
while (l--)
|
while (l--)
|
||||||
@ -89,10 +89,10 @@ void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
v0=ti[0];
|
v0=ti[0];
|
||||||
v1=ti[1];
|
v1=ti[1];
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
}
|
}
|
||||||
c= *(in++)^iv[n];
|
c= *(in++)^iv[n];
|
||||||
*(out++)=c;
|
*(out++)=c;
|
||||||
@ -115,10 +115,10 @@ void des_ede3_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
v0=ti[0];
|
v0=ti[0];
|
||||||
v1=ti[1];
|
v1=ti[1];
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
}
|
}
|
||||||
cc= *(in++);
|
cc= *(in++);
|
||||||
c=iv[n];
|
c=iv[n];
|
||||||
|
@ -64,8 +64,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
void des_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
void des_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
||||||
long length, des_key_schedule schedule, des_cblock ivec, int *num,
|
long length, des_key_schedule schedule, des_cblock *ivec,
|
||||||
int enc)
|
int *num, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG v0,v1;
|
register DES_LONG v0,v1;
|
||||||
register long l=length;
|
register long l=length;
|
||||||
@ -73,7 +73,7 @@ void des_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
DES_LONG ti[2];
|
DES_LONG ti[2];
|
||||||
unsigned char *iv,c,cc;
|
unsigned char *iv,c,cc;
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
while (l--)
|
while (l--)
|
||||||
@ -83,10 +83,10 @@ void des_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
c2l(iv,v0); ti[0]=v0;
|
c2l(iv,v0); ti[0]=v0;
|
||||||
c2l(iv,v1); ti[1]=v1;
|
c2l(iv,v1); ti[1]=v1;
|
||||||
des_encrypt(ti,schedule,DES_ENCRYPT);
|
des_encrypt(ti,schedule,DES_ENCRYPT);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
v0=ti[0]; l2c(v0,iv);
|
v0=ti[0]; l2c(v0,iv);
|
||||||
v0=ti[1]; l2c(v0,iv);
|
v0=ti[1]; l2c(v0,iv);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
}
|
}
|
||||||
c= *(in++)^iv[n];
|
c= *(in++)^iv[n];
|
||||||
*(out++)=c;
|
*(out++)=c;
|
||||||
@ -103,10 +103,10 @@ void des_cfb64_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
c2l(iv,v0); ti[0]=v0;
|
c2l(iv,v0); ti[0]=v0;
|
||||||
c2l(iv,v1); ti[1]=v1;
|
c2l(iv,v1); ti[1]=v1;
|
||||||
des_encrypt(ti,schedule,DES_ENCRYPT);
|
des_encrypt(ti,schedule,DES_ENCRYPT);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
v0=ti[0]; l2c(v0,iv);
|
v0=ti[0]; l2c(v0,iv);
|
||||||
v0=ti[1]; l2c(v0,iv);
|
v0=ti[1]; l2c(v0,iv);
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
}
|
}
|
||||||
cc= *(in++);
|
cc= *(in++);
|
||||||
c=iv[n];
|
c=iv[n];
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
* byte.
|
* byte.
|
||||||
*/
|
*/
|
||||||
void des_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
void des_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
||||||
long length, des_key_schedule schedule, des_cblock ivec, int enc)
|
long length, des_key_schedule schedule, des_cblock *ivec, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG d0,d1,v0,v1,n=(numbits+7)/8;
|
register DES_LONG d0,d1,v0,v1,n=(numbits+7)/8;
|
||||||
register DES_LONG mask0,mask1;
|
register DES_LONG mask0,mask1;
|
||||||
@ -90,7 +90,7 @@ void des_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
|||||||
mask1=0x00000000L;
|
mask1=0x00000000L;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
c2l(iv,v0);
|
c2l(iv,v0);
|
||||||
c2l(iv,v1);
|
c2l(iv,v1);
|
||||||
if (enc)
|
if (enc)
|
||||||
@ -157,7 +157,7 @@ void des_cfb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
|||||||
out+=n;
|
out+=n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
v0=v1=d0=d1=ti[0]=ti[1]=0;
|
v0=v1=d0=d1=ti[0]=ti[1]=0;
|
||||||
|
@ -77,8 +77,8 @@ extern "C" {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
typedef unsigned char des_cblock[8];
|
typedef unsigned char des_cblock[8];
|
||||||
typedef unsigned char *des_cblocks; /* Unfortunately there's no way to say that
|
typedef const unsigned char const_des_cblock[8];
|
||||||
we want a multiple of 8 */
|
|
||||||
typedef struct des_ks_struct
|
typedef struct des_ks_struct
|
||||||
{
|
{
|
||||||
union {
|
union {
|
||||||
@ -87,7 +87,9 @@ typedef struct des_ks_struct
|
|||||||
* 8 byte longs */
|
* 8 byte longs */
|
||||||
DES_LONG pad[2];
|
DES_LONG pad[2];
|
||||||
} ks;
|
} ks;
|
||||||
#undef _
|
#if defined _
|
||||||
|
# error "_ is defined, but some strange definition the DES library cannot handle that."
|
||||||
|
#endif
|
||||||
#define _ ks._
|
#define _ ks._
|
||||||
int weak_key;
|
int weak_key;
|
||||||
} des_key_schedule[16];
|
} des_key_schedule[16];
|
||||||
@ -143,25 +145,25 @@ OPENSSL_EXTERN int des_rw_mode; /* defaults to DES_PCBC_MODE */
|
|||||||
OPENSSL_EXTERN int des_set_weak_key_flag; /* set the weak key flag */
|
OPENSSL_EXTERN int des_set_weak_key_flag; /* set the weak key flag */
|
||||||
|
|
||||||
const char *des_options(void);
|
const char *des_options(void);
|
||||||
void des_ecb3_encrypt(const des_cblock input, des_cblock output,
|
void des_ecb3_encrypt(const_des_cblock *input, des_cblock *output,
|
||||||
des_key_schedule ks1,des_key_schedule ks2,
|
des_key_schedule ks1,des_key_schedule ks2,
|
||||||
des_key_schedule ks3, int enc);
|
des_key_schedule ks3, int enc);
|
||||||
DES_LONG des_cbc_cksum(const unsigned char *input,des_cblock output,
|
DES_LONG des_cbc_cksum(const unsigned char *input,des_cblock *output,
|
||||||
long length,des_key_schedule schedule,
|
long length,des_key_schedule schedule,
|
||||||
const des_cblock ivec);
|
const_des_cblock *ivec);
|
||||||
void des_cbc_encrypt(const unsigned char *input,unsigned char *output,
|
void des_cbc_encrypt(const unsigned char *input,unsigned char *output,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec,
|
long length,des_key_schedule schedule,des_cblock *ivec,
|
||||||
int enc);
|
int enc);
|
||||||
void des_ncbc_encrypt(const unsigned char *input,unsigned char *output,
|
void des_ncbc_encrypt(const unsigned char *input,unsigned char *output,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec,
|
long length,des_key_schedule schedule,des_cblock *ivec,
|
||||||
int enc);
|
int enc);
|
||||||
void des_xcbc_encrypt(const unsigned char *input,unsigned char *output,
|
void des_xcbc_encrypt(const unsigned char *input,unsigned char *output,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec,
|
long length,des_key_schedule schedule,des_cblock *ivec,
|
||||||
const des_cblock inw,const des_cblock outw,int enc);
|
const_des_cblock *inw,const_des_cblock *outw,int enc);
|
||||||
void des_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
|
void des_cfb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec,
|
long length,des_key_schedule schedule,des_cblock *ivec,
|
||||||
int enc);
|
int enc);
|
||||||
void des_ecb_encrypt(const des_cblock input,des_cblock output,
|
void des_ecb_encrypt(const_des_cblock *input,des_cblock *output,
|
||||||
des_key_schedule ks,int enc);
|
des_key_schedule ks,int enc);
|
||||||
void des_encrypt(DES_LONG *data,des_key_schedule ks, int enc);
|
void des_encrypt(DES_LONG *data,des_key_schedule ks, int enc);
|
||||||
void des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc);
|
void des_encrypt2(DES_LONG *data,des_key_schedule ks, int enc);
|
||||||
@ -172,29 +174,29 @@ void des_decrypt3(DES_LONG *data, des_key_schedule ks1,
|
|||||||
void des_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,
|
void des_ede3_cbc_encrypt(const unsigned char *input,unsigned char *output,
|
||||||
long length,
|
long length,
|
||||||
des_key_schedule ks1,des_key_schedule ks2,
|
des_key_schedule ks1,des_key_schedule ks2,
|
||||||
des_key_schedule ks3,des_cblock ivec,int enc);
|
des_key_schedule ks3,des_cblock *ivec,int enc);
|
||||||
void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
|
void des_ede3_cbcm_encrypt(const unsigned char *in,unsigned char *out,
|
||||||
long length,
|
long length,
|
||||||
des_key_schedule ks1,des_key_schedule ks2,
|
des_key_schedule ks1,des_key_schedule ks2,
|
||||||
des_key_schedule ks3,
|
des_key_schedule ks3,
|
||||||
des_cblock ivec1,des_cblock ivec2,
|
des_cblock *ivec1,des_cblock *ivec2,
|
||||||
int enc);
|
int enc);
|
||||||
void des_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
|
void des_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
|
||||||
long length,des_key_schedule ks1,
|
long length,des_key_schedule ks1,
|
||||||
des_key_schedule ks2,des_key_schedule ks3,
|
des_key_schedule ks2,des_key_schedule ks3,
|
||||||
des_cblock ivec,int *num,int enc);
|
des_cblock *ivec,int *num,int enc);
|
||||||
void des_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
|
void des_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
|
||||||
long length,des_key_schedule ks1,
|
long length,des_key_schedule ks1,
|
||||||
des_key_schedule ks2,des_key_schedule ks3,
|
des_key_schedule ks2,des_key_schedule ks3,
|
||||||
des_cblock ivec,int *num);
|
des_cblock *ivec,int *num);
|
||||||
|
|
||||||
void des_xwhite_in2out(const des_cblock des_key,const des_cblock in_white,
|
void des_xwhite_in2out(const_des_cblock *des_key,const_des_cblock *in_white,
|
||||||
des_cblock out_white);
|
des_cblock *out_white);
|
||||||
|
|
||||||
int des_enc_read(int fd,void *buf,int len,des_key_schedule sched,
|
int des_enc_read(int fd,void *buf,int len,des_key_schedule sched,
|
||||||
des_cblock iv);
|
des_cblock *iv);
|
||||||
int des_enc_write(int fd,const void *buf,int len,des_key_schedule sched,
|
int des_enc_write(int fd,const void *buf,int len,des_key_schedule sched,
|
||||||
des_cblock iv);
|
des_cblock *iv);
|
||||||
char *des_fcrypt(const char *buf,const char *salt, char *ret);
|
char *des_fcrypt(const char *buf,const char *salt, char *ret);
|
||||||
#if defined(PERL5) || defined(__FreeBSD__)
|
#if defined(PERL5) || defined(__FreeBSD__)
|
||||||
char *des_crypt(const char *buf,const char *salt);
|
char *des_crypt(const char *buf,const char *salt);
|
||||||
@ -208,33 +210,33 @@ char *crypt();
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
void des_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
|
void des_ofb_encrypt(const unsigned char *in,unsigned char *out,int numbits,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec);
|
long length,des_key_schedule schedule,des_cblock *ivec);
|
||||||
void des_pcbc_encrypt(const unsigned char *input,unsigned char *output,
|
void des_pcbc_encrypt(const unsigned char *input,unsigned char *output,
|
||||||
long length,des_key_schedule schedule,des_cblock ivec,
|
long length,des_key_schedule schedule,des_cblock *ivec,
|
||||||
int enc);
|
int enc);
|
||||||
DES_LONG des_quad_cksum(const unsigned char *input,des_cblocks output,
|
DES_LONG des_quad_cksum(const unsigned char *input,des_cblock output[],
|
||||||
long length,int out_count,des_cblock seed);
|
long length,int out_count,des_cblock *seed);
|
||||||
void des_random_seed(des_cblock key);
|
void des_random_seed(des_cblock *key);
|
||||||
void des_random_key(des_cblock ret);
|
void des_random_key(des_cblock *ret);
|
||||||
int des_read_password(des_cblock key,const char *prompt,int verify);
|
int des_read_password(des_cblock *key,const char *prompt,int verify);
|
||||||
int des_read_2passwords(des_cblock key1,des_cblock key2,
|
int des_read_2passwords(des_cblock *key1,des_cblock *key2,
|
||||||
const char *prompt,int verify);
|
const char *prompt,int verify);
|
||||||
int des_read_pw_string(char *buf,int length,const char *prompt,int verify);
|
int des_read_pw_string(char *buf,int length,const char *prompt,int verify);
|
||||||
void des_set_odd_parity(des_cblock key);
|
void des_set_odd_parity(des_cblock *key);
|
||||||
int des_is_weak_key(const des_cblock key);
|
int des_is_weak_key(const_des_cblock *key);
|
||||||
int des_set_key(const des_cblock key,des_key_schedule schedule);
|
int des_set_key(const_des_cblock *key,des_key_schedule schedule);
|
||||||
int des_key_sched(const des_cblock key,des_key_schedule schedule);
|
int des_key_sched(const_des_cblock *key,des_key_schedule schedule);
|
||||||
void des_string_to_key(const char *str,des_cblock key);
|
void des_string_to_key(const char *str,des_cblock *key);
|
||||||
void des_string_to_2keys(const char *str,des_cblock key1,des_cblock key2);
|
void des_string_to_2keys(const char *str,des_cblock *key1,des_cblock *key2);
|
||||||
void des_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length,
|
void des_cfb64_encrypt(const unsigned char *in,unsigned char *out,long length,
|
||||||
des_key_schedule schedule,des_cblock ivec,int *num,
|
des_key_schedule schedule,des_cblock *ivec,int *num,
|
||||||
int enc);
|
int enc);
|
||||||
void des_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length,
|
void des_ofb64_encrypt(const unsigned char *in,unsigned char *out,long length,
|
||||||
des_key_schedule schedule,des_cblock ivec,int *num);
|
des_key_schedule schedule,des_cblock *ivec,int *num);
|
||||||
int des_read_pw(char *buf,char *buff,int size,const char *prompt,int verify);
|
int des_read_pw(char *buf,char *buff,int size,const char *prompt,int verify);
|
||||||
|
|
||||||
/* Extra functions from Mark Murray <mark@grondar.za> */
|
/* Extra functions from Mark Murray <mark@grondar.za> */
|
||||||
void des_cblock_print_file(const des_cblock cb, FILE *fp);
|
void des_cblock_print_file(const_des_cblock *cb, FILE *fp);
|
||||||
|
|
||||||
#ifdef FreeBSD
|
#ifdef FreeBSD
|
||||||
/* The following functions are not in the normal unix build or the
|
/* The following functions are not in the normal unix build or the
|
||||||
|
@ -290,7 +290,7 @@ void des_decrypt3(DES_LONG *data, des_key_schedule ks1, des_key_schedule ks2,
|
|||||||
#ifndef DES_DEFAULT_OPTIONS
|
#ifndef DES_DEFAULT_OPTIONS
|
||||||
|
|
||||||
void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
||||||
des_key_schedule schedule, des_cblock ivec, int enc)
|
des_key_schedule schedule, des_cblock *ivec, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG tin0,tin1;
|
register DES_LONG tin0,tin1;
|
||||||
register DES_LONG tout0,tout1,xor0,xor1;
|
register DES_LONG tout0,tout1,xor0,xor1;
|
||||||
@ -298,7 +298,7 @@ void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
unsigned char *iv;
|
unsigned char *iv;
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
@ -323,7 +323,7 @@ void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
tout0=tin[0]; l2c(tout0,out);
|
tout0=tin[0]; l2c(tout0,out);
|
||||||
tout1=tin[1]; l2c(tout1,out);
|
tout1=tin[1]; l2c(tout1,out);
|
||||||
}
|
}
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(tout0,iv);
|
l2c(tout0,iv);
|
||||||
l2c(tout1,iv);
|
l2c(tout1,iv);
|
||||||
}
|
}
|
||||||
@ -355,7 +355,7 @@ void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
xor1=tin1;
|
xor1=tin1;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(xor0,iv);
|
l2c(xor0,iv);
|
||||||
l2c(xor1,iv);
|
l2c(xor1,iv);
|
||||||
}
|
}
|
||||||
@ -365,7 +365,7 @@ void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
|
|
||||||
void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
||||||
long length, des_key_schedule ks1, des_key_schedule ks2,
|
long length, des_key_schedule ks1, des_key_schedule ks2,
|
||||||
des_key_schedule ks3, des_cblock ivec, int enc)
|
des_key_schedule ks3, des_cblock *ivec, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG tin0,tin1;
|
register DES_LONG tin0,tin1;
|
||||||
register DES_LONG tout0,tout1,xor0,xor1;
|
register DES_LONG tout0,tout1,xor0,xor1;
|
||||||
@ -377,7 +377,7 @@ void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
|||||||
|
|
||||||
in=input;
|
in=input;
|
||||||
out=output;
|
out=output;
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
@ -414,7 +414,7 @@ void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
|||||||
l2c(tout0,out);
|
l2c(tout0,out);
|
||||||
l2c(tout1,out);
|
l2c(tout1,out);
|
||||||
}
|
}
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(tout0,iv);
|
l2c(tout0,iv);
|
||||||
l2c(tout1,iv);
|
l2c(tout1,iv);
|
||||||
}
|
}
|
||||||
@ -466,7 +466,7 @@ void des_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
|
|||||||
xor1=t1;
|
xor1=t1;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(xor0,iv);
|
l2c(xor0,iv);
|
||||||
l2c(xor1,iv);
|
l2c(xor1,iv);
|
||||||
}
|
}
|
||||||
|
@ -330,17 +330,17 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifndef NO_DESCBCM
|
#ifndef NO_DESCBCM
|
||||||
printf("Doing cbcm\n");
|
printf("Doing cbcm\n");
|
||||||
if ((j=des_key_sched(cbc_key,ks)) != 0)
|
if ((j=des_key_sched(&cbc_key,ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(cbc2_key,ks2)) != 0)
|
if ((j=des_key_sched(&cbc2_key,ks2)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(cbc3_key,ks3)) != 0)
|
if ((j=des_key_sched(&cbc3_key,ks3)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -352,10 +352,10 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
memset(iv2,'\0',sizeof iv2);
|
memset(iv2,'\0',sizeof iv2);
|
||||||
|
|
||||||
des_ede3_cbcm_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,iv3,iv2,
|
des_ede3_cbcm_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,&iv3,&iv2,
|
||||||
DES_ENCRYPT);
|
DES_ENCRYPT);
|
||||||
des_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,ks,ks2,ks3,
|
des_ede3_cbcm_encrypt(&cbc_data[16],&cbc_out[16],i-16,ks,ks2,ks3,
|
||||||
iv3,iv2,DES_ENCRYPT);
|
&iv3,&iv2,DES_ENCRYPT);
|
||||||
/* if (memcmp(cbc_out,cbc3_ok,
|
/* if (memcmp(cbc_out,cbc3_ok,
|
||||||
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
||||||
{
|
{
|
||||||
@ -365,7 +365,7 @@ int main(int argc, char *argv[])
|
|||||||
*/
|
*/
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
memset(iv2,'\0',sizeof iv2);
|
memset(iv2,'\0',sizeof iv2);
|
||||||
des_ede3_cbcm_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,iv3,iv2,DES_DECRYPT);
|
des_ede3_cbcm_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,&iv3,&iv2,DES_DECRYPT);
|
||||||
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
||||||
{
|
{
|
||||||
int n;
|
int n;
|
||||||
@ -384,7 +384,7 @@ int main(int argc, char *argv[])
|
|||||||
printf("Doing ecb\n");
|
printf("Doing ecb\n");
|
||||||
for (i=0; i<NUM_TESTS; i++)
|
for (i=0; i<NUM_TESTS; i++)
|
||||||
{
|
{
|
||||||
if ((j=des_key_sched(key_data[i],ks)) != 0)
|
if ((j=des_key_sched(&key_data[i],ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %2d:%d\n",i+1,j);
|
printf("Key error %2d:%d\n",i+1,j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -392,8 +392,8 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(in,plain_data[i],8);
|
memcpy(in,plain_data[i],8);
|
||||||
memset(out,0,8);
|
memset(out,0,8);
|
||||||
memset(outin,0,8);
|
memset(outin,0,8);
|
||||||
des_ecb_encrypt(in,out,ks,DES_ENCRYPT);
|
des_ecb_encrypt(&in,&out,ks,DES_ENCRYPT);
|
||||||
des_ecb_encrypt(out,outin,ks,DES_DECRYPT);
|
des_ecb_encrypt(&out,&outin,ks,DES_DECRYPT);
|
||||||
|
|
||||||
if (memcmp(out,cipher_data[i],8) != 0)
|
if (memcmp(out,cipher_data[i],8) != 0)
|
||||||
{
|
{
|
||||||
@ -414,17 +414,17 @@ int main(int argc, char *argv[])
|
|||||||
printf("Doing ede ecb\n");
|
printf("Doing ede ecb\n");
|
||||||
for (i=0; i<(NUM_TESTS-1); i++)
|
for (i=0; i<(NUM_TESTS-1); i++)
|
||||||
{
|
{
|
||||||
if ((j=des_key_sched(key_data[i],ks)) != 0)
|
if ((j=des_key_sched(&key_data[i],ks)) != 0)
|
||||||
{
|
{
|
||||||
err=1;
|
err=1;
|
||||||
printf("Key error %2d:%d\n",i+1,j);
|
printf("Key error %2d:%d\n",i+1,j);
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(key_data[i+1],ks2)) != 0)
|
if ((j=des_key_sched(&key_data[i+1],ks2)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %2d:%d\n",i+2,j);
|
printf("Key error %2d:%d\n",i+2,j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(key_data[i+2],ks3)) != 0)
|
if ((j=des_key_sched(&key_data[i+2],ks3)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %2d:%d\n",i+3,j);
|
printf("Key error %2d:%d\n",i+3,j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -432,8 +432,8 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(in,plain_data[i],8);
|
memcpy(in,plain_data[i],8);
|
||||||
memset(out,0,8);
|
memset(out,0,8);
|
||||||
memset(outin,0,8);
|
memset(outin,0,8);
|
||||||
des_ecb2_encrypt(in,out,ks,ks2,DES_ENCRYPT);
|
des_ecb2_encrypt(&in,&out,ks,ks2,DES_ENCRYPT);
|
||||||
des_ecb2_encrypt(out,outin,ks,ks2,DES_DECRYPT);
|
des_ecb2_encrypt(&out,&outin,ks,ks2,DES_DECRYPT);
|
||||||
|
|
||||||
if (memcmp(out,cipher_ecb2[i],8) != 0)
|
if (memcmp(out,cipher_ecb2[i],8) != 0)
|
||||||
{
|
{
|
||||||
@ -452,7 +452,7 @@ int main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("Doing cbc\n");
|
printf("Doing cbc\n");
|
||||||
if ((j=des_key_sched(cbc_key,ks)) != 0)
|
if ((j=des_key_sched(&cbc_key,ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -461,13 +461,13 @@ int main(int argc, char *argv[])
|
|||||||
memset(cbc_in,0,40);
|
memset(cbc_in,0,40);
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
des_ncbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
|
des_ncbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
|
||||||
iv3,DES_ENCRYPT);
|
&iv3,DES_ENCRYPT);
|
||||||
if (memcmp(cbc_out,cbc_ok,32) != 0)
|
if (memcmp(cbc_out,cbc_ok,32) != 0)
|
||||||
printf("cbc_encrypt encrypt error\n");
|
printf("cbc_encrypt encrypt error\n");
|
||||||
|
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
des_ncbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
|
des_ncbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
|
||||||
iv3,DES_DECRYPT);
|
&iv3,DES_DECRYPT);
|
||||||
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)) != 0)
|
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)) != 0)
|
||||||
{
|
{
|
||||||
printf("cbc_encrypt decrypt error\n");
|
printf("cbc_encrypt decrypt error\n");
|
||||||
@ -476,7 +476,7 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifndef LIBDES_LIT
|
#ifndef LIBDES_LIT
|
||||||
printf("Doing desx cbc\n");
|
printf("Doing desx cbc\n");
|
||||||
if ((j=des_key_sched(cbc_key,ks)) != 0)
|
if ((j=des_key_sched(&cbc_key,ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -485,14 +485,14 @@ int main(int argc, char *argv[])
|
|||||||
memset(cbc_in,0,40);
|
memset(cbc_in,0,40);
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
des_xcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
|
des_xcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
|
||||||
iv3,cbc2_key,cbc3_key, DES_ENCRYPT);
|
&iv3,&cbc2_key,&cbc3_key, DES_ENCRYPT);
|
||||||
if (memcmp(cbc_out,xcbc_ok,32) != 0)
|
if (memcmp(cbc_out,xcbc_ok,32) != 0)
|
||||||
{
|
{
|
||||||
printf("des_xcbc_encrypt encrypt error\n");
|
printf("des_xcbc_encrypt encrypt error\n");
|
||||||
}
|
}
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
des_xcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
|
des_xcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,
|
||||||
iv3,cbc2_key,cbc3_key, DES_DECRYPT);
|
&iv3,&cbc2_key,&cbc3_key, DES_DECRYPT);
|
||||||
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
||||||
{
|
{
|
||||||
printf("des_xcbc_encrypt decrypt error\n");
|
printf("des_xcbc_encrypt decrypt error\n");
|
||||||
@ -501,17 +501,17 @@ int main(int argc, char *argv[])
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
printf("Doing ede cbc\n");
|
printf("Doing ede cbc\n");
|
||||||
if ((j=des_key_sched(cbc_key,ks)) != 0)
|
if ((j=des_key_sched(&cbc_key,ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(cbc2_key,ks2)) != 0)
|
if ((j=des_key_sched(&cbc2_key,ks2)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
if ((j=des_key_sched(cbc3_key,ks3)) != 0)
|
if ((j=des_key_sched(&cbc3_key,ks3)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
@ -522,9 +522,9 @@ int main(int argc, char *argv[])
|
|||||||
/* i=((i+7)/8)*8; */
|
/* i=((i+7)/8)*8; */
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
|
|
||||||
des_ede3_cbc_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,iv3,DES_ENCRYPT);
|
des_ede3_cbc_encrypt(cbc_data,cbc_out,16L,ks,ks2,ks3,&iv3,DES_ENCRYPT);
|
||||||
des_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,ks,ks2,ks3,
|
des_ede3_cbc_encrypt(&(cbc_data[16]),&(cbc_out[16]),i-16,ks,ks2,ks3,
|
||||||
iv3,DES_ENCRYPT);
|
&iv3,DES_ENCRYPT);
|
||||||
if (memcmp(cbc_out,cbc3_ok,
|
if (memcmp(cbc_out,cbc3_ok,
|
||||||
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
(unsigned int)(strlen((char *)cbc_data)+1+7)/8*8) != 0)
|
||||||
{
|
{
|
||||||
@ -533,7 +533,7 @@ int main(int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
memcpy(iv3,cbc_iv,sizeof(cbc_iv));
|
||||||
des_ede3_cbc_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,iv3,DES_DECRYPT);
|
des_ede3_cbc_encrypt(cbc_out,cbc_in,i,ks,ks2,ks3,&iv3,DES_DECRYPT);
|
||||||
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
||||||
{
|
{
|
||||||
printf("des_ede3_cbc_encrypt decrypt error\n");
|
printf("des_ede3_cbc_encrypt decrypt error\n");
|
||||||
@ -542,21 +542,21 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
#ifndef LIBDES_LIT
|
#ifndef LIBDES_LIT
|
||||||
printf("Doing pcbc\n");
|
printf("Doing pcbc\n");
|
||||||
if ((j=des_key_sched(cbc_key,ks)) != 0)
|
if ((j=des_key_sched(&cbc_key,ks)) != 0)
|
||||||
{
|
{
|
||||||
printf("Key error %d\n",j);
|
printf("Key error %d\n",j);
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
memset(cbc_out,0,40);
|
memset(cbc_out,0,40);
|
||||||
memset(cbc_in,0,40);
|
memset(cbc_in,0,40);
|
||||||
des_pcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,cbc_iv,
|
des_pcbc_encrypt(cbc_data,cbc_out,strlen((char *)cbc_data)+1,ks,
|
||||||
DES_ENCRYPT);
|
&cbc_iv,DES_ENCRYPT);
|
||||||
if (memcmp(cbc_out,pcbc_ok,32) != 0)
|
if (memcmp(cbc_out,pcbc_ok,32) != 0)
|
||||||
{
|
{
|
||||||
printf("pcbc_encrypt encrypt error\n");
|
printf("pcbc_encrypt encrypt error\n");
|
||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
des_pcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,cbc_iv,
|
des_pcbc_encrypt(cbc_out,cbc_in,strlen((char *)cbc_data)+1,ks,&cbc_iv,
|
||||||
DES_DECRYPT);
|
DES_DECRYPT);
|
||||||
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
if (memcmp(cbc_in,cbc_data,strlen((char *)cbc_data)+1) != 0)
|
||||||
{
|
{
|
||||||
@ -582,7 +582,7 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
for (i=0; i<sizeof(plain); i++)
|
for (i=0; i<sizeof(plain); i++)
|
||||||
des_cfb_encrypt(&(plain[i]),&(cfb_buf1[i]),
|
des_cfb_encrypt(&(plain[i]),&(cfb_buf1[i]),
|
||||||
8,1,ks,cfb_tmp,DES_ENCRYPT);
|
8,1,ks,&cfb_tmp,DES_ENCRYPT);
|
||||||
if (memcmp(cfb_cipher8,cfb_buf1,sizeof(plain)) != 0)
|
if (memcmp(cfb_cipher8,cfb_buf1,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
printf("cfb_encrypt small encrypt error\n");
|
printf("cfb_encrypt small encrypt error\n");
|
||||||
@ -592,7 +592,7 @@ int main(int argc, char *argv[])
|
|||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
for (i=0; i<sizeof(plain); i++)
|
for (i=0; i<sizeof(plain); i++)
|
||||||
des_cfb_encrypt(&(cfb_buf1[i]),&(cfb_buf2[i]),
|
des_cfb_encrypt(&(cfb_buf1[i]),&(cfb_buf2[i]),
|
||||||
8,1,ks,cfb_tmp,DES_DECRYPT);
|
8,1,ks,&cfb_tmp,DES_DECRYPT);
|
||||||
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
printf("cfb_encrypt small decrypt error\n");
|
printf("cfb_encrypt small decrypt error\n");
|
||||||
@ -605,9 +605,9 @@ int main(int argc, char *argv[])
|
|||||||
printf("done\n");
|
printf("done\n");
|
||||||
|
|
||||||
printf("Doing ofb\n");
|
printf("Doing ofb\n");
|
||||||
des_key_sched(ofb_key,ks);
|
des_key_sched(&ofb_key,ks);
|
||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
des_ofb_encrypt(plain,ofb_buf1,64,sizeof(plain)/8,ks,ofb_tmp);
|
des_ofb_encrypt(plain,ofb_buf1,64,sizeof(plain)/8,ks,&ofb_tmp);
|
||||||
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
||||||
{
|
{
|
||||||
printf("ofb_encrypt encrypt error\n");
|
printf("ofb_encrypt encrypt error\n");
|
||||||
@ -620,7 +620,7 @@ ofb_buf1[8+4], ofb_cipher[8+5], ofb_cipher[8+6], ofb_cipher[8+7]);
|
|||||||
err=1;
|
err=1;
|
||||||
}
|
}
|
||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
des_ofb_encrypt(ofb_buf1,ofb_buf2,64,sizeof(ofb_buf1)/8,ks,ofb_tmp);
|
des_ofb_encrypt(ofb_buf1,ofb_buf2,64,sizeof(ofb_buf1)/8,ks,&ofb_tmp);
|
||||||
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
||||||
{
|
{
|
||||||
printf("ofb_encrypt decrypt error\n");
|
printf("ofb_encrypt decrypt error\n");
|
||||||
@ -634,14 +634,14 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("Doing ofb64\n");
|
printf("Doing ofb64\n");
|
||||||
des_key_sched(ofb_key,ks);
|
des_key_sched(&ofb_key,ks);
|
||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
memset(ofb_buf1,0,sizeof(ofb_buf1));
|
memset(ofb_buf1,0,sizeof(ofb_buf1));
|
||||||
memset(ofb_buf2,0,sizeof(ofb_buf1));
|
memset(ofb_buf2,0,sizeof(ofb_buf1));
|
||||||
num=0;
|
num=0;
|
||||||
for (i=0; i<sizeof(plain); i++)
|
for (i=0; i<sizeof(plain); i++)
|
||||||
{
|
{
|
||||||
des_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ofb_tmp,
|
des_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,&ofb_tmp,
|
||||||
&num);
|
&num);
|
||||||
}
|
}
|
||||||
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
||||||
@ -651,7 +651,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
}
|
}
|
||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
num=0;
|
num=0;
|
||||||
des_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,ofb_tmp,&num);
|
des_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,&ofb_tmp,&num);
|
||||||
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
||||||
{
|
{
|
||||||
printf("ofb64_encrypt decrypt error\n");
|
printf("ofb64_encrypt decrypt error\n");
|
||||||
@ -659,7 +659,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("Doing ede_ofb64\n");
|
printf("Doing ede_ofb64\n");
|
||||||
des_key_sched(ofb_key,ks);
|
des_key_sched(&ofb_key,ks);
|
||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
memset(ofb_buf1,0,sizeof(ofb_buf1));
|
memset(ofb_buf1,0,sizeof(ofb_buf1));
|
||||||
memset(ofb_buf2,0,sizeof(ofb_buf1));
|
memset(ofb_buf2,0,sizeof(ofb_buf1));
|
||||||
@ -667,7 +667,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
for (i=0; i<sizeof(plain); i++)
|
for (i=0; i<sizeof(plain); i++)
|
||||||
{
|
{
|
||||||
des_ede3_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ks,ks,
|
des_ede3_ofb64_encrypt(&(plain[i]),&(ofb_buf1[i]),1,ks,ks,ks,
|
||||||
ofb_tmp,&num);
|
&ofb_tmp,&num);
|
||||||
}
|
}
|
||||||
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
if (memcmp(ofb_cipher,ofb_buf1,sizeof(ofb_buf1)) != 0)
|
||||||
{
|
{
|
||||||
@ -677,7 +677,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
memcpy(ofb_tmp,ofb_iv,sizeof(ofb_iv));
|
||||||
num=0;
|
num=0;
|
||||||
des_ede3_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,
|
des_ede3_ofb64_encrypt(ofb_buf1,ofb_buf2,sizeof(ofb_buf1),ks,
|
||||||
ks,ks,ofb_tmp,&num);
|
ks,ks,&ofb_tmp,&num);
|
||||||
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
if (memcmp(plain,ofb_buf2,sizeof(ofb_buf2)) != 0)
|
||||||
{
|
{
|
||||||
printf("ede_ofb64_encrypt decrypt error\n");
|
printf("ede_ofb64_encrypt decrypt error\n");
|
||||||
@ -685,8 +685,8 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
}
|
}
|
||||||
|
|
||||||
printf("Doing cbc_cksum\n");
|
printf("Doing cbc_cksum\n");
|
||||||
des_key_sched(cbc_key,ks);
|
des_key_sched(&cbc_key,ks);
|
||||||
cs=des_cbc_cksum(cbc_data,cret,strlen((char *)cbc_data),ks,cbc_iv);
|
cs=des_cbc_cksum(cbc_data,&cret,strlen((char *)cbc_data),ks,&cbc_iv);
|
||||||
if (cs != cbc_cksum_ret)
|
if (cs != cbc_cksum_ret)
|
||||||
{
|
{
|
||||||
printf("bad return value (%08lX), should be %08lX\n",
|
printf("bad return value (%08lX), should be %08lX\n",
|
||||||
@ -704,8 +704,8 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
quad_cksum returns up to 4 groups of 8 bytes, this test gets it to
|
quad_cksum returns up to 4 groups of 8 bytes, this test gets it to
|
||||||
produce 2 groups then treats them as 4 groups of 4 bytes.
|
produce 2 groups then treats them as 4 groups of 4 bytes.
|
||||||
Ben 13 Feb 1999 */
|
Ben 13 Feb 1999 */
|
||||||
cs=quad_cksum(cbc_data,(des_cblocks)qret,strlen((char *)cbc_data),2,
|
cs=quad_cksum(cbc_data,(des_cblock *)qret,strlen((char *)cbc_data),2,
|
||||||
cbc_iv);
|
&cbc_iv);
|
||||||
|
|
||||||
{ /* Big-endian fix */
|
{ /* Big-endian fix */
|
||||||
static DES_LONG l=1;
|
static DES_LONG l=1;
|
||||||
@ -769,7 +769,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
printf(" %d",i);
|
printf(" %d",i);
|
||||||
des_ncbc_encrypt(&(cbc_out[i]),cbc_in,
|
des_ncbc_encrypt(&(cbc_out[i]),cbc_in,
|
||||||
strlen((char *)cbc_data)+1,ks,
|
strlen((char *)cbc_data)+1,ks,
|
||||||
cbc_iv,DES_ENCRYPT);
|
&cbc_iv,DES_ENCRYPT);
|
||||||
}
|
}
|
||||||
printf("\noutput word alignment test");
|
printf("\noutput word alignment test");
|
||||||
for (i=0; i<4; i++)
|
for (i=0; i<4; i++)
|
||||||
@ -777,7 +777,7 @@ plain[8+4], plain[8+5], plain[8+6], plain[8+7]);
|
|||||||
printf(" %d",i);
|
printf(" %d",i);
|
||||||
des_ncbc_encrypt(cbc_out,&(cbc_in[i]),
|
des_ncbc_encrypt(cbc_out,&(cbc_in[i]),
|
||||||
strlen((char *)cbc_data)+1,ks,
|
strlen((char *)cbc_data)+1,ks,
|
||||||
cbc_iv,DES_ENCRYPT);
|
&cbc_iv,DES_ENCRYPT);
|
||||||
}
|
}
|
||||||
printf("\n");
|
printf("\n");
|
||||||
printf("fast crypt test ");
|
printf("fast crypt test ");
|
||||||
@ -824,9 +824,9 @@ static int cfb_test(int bits, unsigned char *cfb_cipher)
|
|||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int i,err=0;
|
int i,err=0;
|
||||||
|
|
||||||
des_key_sched(cfb_key,ks);
|
des_key_sched(&cfb_key,ks);
|
||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
des_cfb_encrypt(plain,cfb_buf1,bits,sizeof(plain),ks,cfb_tmp,
|
des_cfb_encrypt(plain,cfb_buf1,bits,sizeof(plain),ks,&cfb_tmp,
|
||||||
DES_ENCRYPT);
|
DES_ENCRYPT);
|
||||||
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
@ -836,7 +836,7 @@ static int cfb_test(int bits, unsigned char *cfb_cipher)
|
|||||||
printf("%s\n",pt(&(cfb_buf1[i])));
|
printf("%s\n",pt(&(cfb_buf1[i])));
|
||||||
}
|
}
|
||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
des_cfb_encrypt(cfb_buf1,cfb_buf2,bits,sizeof(plain),ks,cfb_tmp,
|
des_cfb_encrypt(cfb_buf1,cfb_buf2,bits,sizeof(plain),ks,&cfb_tmp,
|
||||||
DES_DECRYPT);
|
DES_DECRYPT);
|
||||||
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
@ -853,12 +853,12 @@ static int cfb64_test(unsigned char *cfb_cipher)
|
|||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int err=0,i,n;
|
int err=0,i,n;
|
||||||
|
|
||||||
des_key_sched(cfb_key,ks);
|
des_key_sched(&cfb_key,ks);
|
||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
n=0;
|
n=0;
|
||||||
des_cfb64_encrypt(plain,cfb_buf1,12,ks,cfb_tmp,&n,DES_ENCRYPT);
|
des_cfb64_encrypt(plain,cfb_buf1,12,ks,&cfb_tmp,&n,DES_ENCRYPT);
|
||||||
des_cfb64_encrypt(&(plain[12]),&(cfb_buf1[12]),sizeof(plain)-12,ks,
|
des_cfb64_encrypt(&(plain[12]),&(cfb_buf1[12]),sizeof(plain)-12,ks,
|
||||||
cfb_tmp,&n,DES_ENCRYPT);
|
&cfb_tmp,&n,DES_ENCRYPT);
|
||||||
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
err=1;
|
err=1;
|
||||||
@ -868,9 +868,9 @@ static int cfb64_test(unsigned char *cfb_cipher)
|
|||||||
}
|
}
|
||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
n=0;
|
n=0;
|
||||||
des_cfb64_encrypt(cfb_buf1,cfb_buf2,17,ks,cfb_tmp,&n,DES_DECRYPT);
|
des_cfb64_encrypt(cfb_buf1,cfb_buf2,17,ks,&cfb_tmp,&n,DES_DECRYPT);
|
||||||
des_cfb64_encrypt(&(cfb_buf1[17]),&(cfb_buf2[17]),
|
des_cfb64_encrypt(&(cfb_buf1[17]),&(cfb_buf2[17]),
|
||||||
sizeof(plain)-17,ks,cfb_tmp,&n,DES_DECRYPT);
|
sizeof(plain)-17,ks,&cfb_tmp,&n,DES_DECRYPT);
|
||||||
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
err=1;
|
err=1;
|
||||||
@ -886,14 +886,14 @@ static int ede_cfb64_test(unsigned char *cfb_cipher)
|
|||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int err=0,i,n;
|
int err=0,i,n;
|
||||||
|
|
||||||
des_key_sched(cfb_key,ks);
|
des_key_sched(&cfb_key,ks);
|
||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
n=0;
|
n=0;
|
||||||
des_ede3_cfb64_encrypt(plain,cfb_buf1,12,ks,ks,ks,cfb_tmp,&n,
|
des_ede3_cfb64_encrypt(plain,cfb_buf1,12,ks,ks,ks,&cfb_tmp,&n,
|
||||||
DES_ENCRYPT);
|
DES_ENCRYPT);
|
||||||
des_ede3_cfb64_encrypt(&(plain[12]),&(cfb_buf1[12]),
|
des_ede3_cfb64_encrypt(&(plain[12]),&(cfb_buf1[12]),
|
||||||
sizeof(plain)-12,ks,ks,ks,
|
sizeof(plain)-12,ks,ks,ks,
|
||||||
cfb_tmp,&n,DES_ENCRYPT);
|
&cfb_tmp,&n,DES_ENCRYPT);
|
||||||
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
if (memcmp(cfb_cipher,cfb_buf1,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
err=1;
|
err=1;
|
||||||
@ -904,10 +904,10 @@ static int ede_cfb64_test(unsigned char *cfb_cipher)
|
|||||||
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
memcpy(cfb_tmp,cfb_iv,sizeof(cfb_iv));
|
||||||
n=0;
|
n=0;
|
||||||
des_ede3_cfb64_encrypt(cfb_buf1,cfb_buf2,(long)17,ks,ks,ks,
|
des_ede3_cfb64_encrypt(cfb_buf1,cfb_buf2,(long)17,ks,ks,ks,
|
||||||
cfb_tmp,&n,DES_DECRYPT);
|
&cfb_tmp,&n,DES_DECRYPT);
|
||||||
des_ede3_cfb64_encrypt(&(cfb_buf1[17]),&(cfb_buf2[17]),
|
des_ede3_cfb64_encrypt(&(cfb_buf1[17]),&(cfb_buf2[17]),
|
||||||
sizeof(plain)-17,ks,ks,ks,
|
sizeof(plain)-17,ks,ks,ks,
|
||||||
cfb_tmp,&n,DES_DECRYPT);
|
&cfb_tmp,&n,DES_DECRYPT);
|
||||||
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
if (memcmp(plain,cfb_buf2,sizeof(plain)) != 0)
|
||||||
{
|
{
|
||||||
err=1;
|
err=1;
|
||||||
|
@ -58,12 +58,14 @@
|
|||||||
|
|
||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
|
|
||||||
void des_ecb3_encrypt(const des_cblock in, des_cblock out,
|
void des_ecb3_encrypt(const_des_cblock *input, des_cblock *output,
|
||||||
des_key_schedule ks1, des_key_schedule ks2, des_key_schedule ks3,
|
des_key_schedule ks1, des_key_schedule ks2, des_key_schedule ks3,
|
||||||
int enc)
|
int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG l0,l1;
|
register DES_LONG l0,l1;
|
||||||
DES_LONG ll[2];
|
DES_LONG ll[2];
|
||||||
|
const unsigned char *in = &(*input)[0];
|
||||||
|
unsigned char *out = &(*output)[0];
|
||||||
|
|
||||||
c2l(in,l0);
|
c2l(in,l0);
|
||||||
c2l(in,l1);
|
c2l(in,l1);
|
||||||
|
@ -103,11 +103,14 @@ const char *des_options(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void des_ecb_encrypt(const des_cblock in, des_cblock out, des_key_schedule ks,
|
void des_ecb_encrypt(const_des_cblock *input, des_cblock *output,
|
||||||
|
des_key_schedule ks,
|
||||||
int enc)
|
int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG l;
|
register DES_LONG l;
|
||||||
DES_LONG ll[2];
|
DES_LONG ll[2];
|
||||||
|
const unsigned char *in = &(*input)[0];
|
||||||
|
unsigned char *out = &(*output)[0];
|
||||||
|
|
||||||
c2l(in,l); ll[0]=l;
|
c2l(in,l); ll[0]=l;
|
||||||
c2l(in,l); ll[1]=l;
|
c2l(in,l); ll[1]=l;
|
||||||
|
@ -73,7 +73,8 @@ http://www.cs.technion.ac.il/users/wwwb/cgi-bin/tr-get.cgi/1998/CS/CS0928.ps.gz
|
|||||||
|
|
||||||
void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
|
void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
|
||||||
long length, des_key_schedule ks1, des_key_schedule ks2,
|
long length, des_key_schedule ks1, des_key_schedule ks2,
|
||||||
des_key_schedule ks3, des_cblock ivec1, des_cblock ivec2, int enc)
|
des_key_schedule ks3, des_cblock *ivec1, des_cblock *ivec2,
|
||||||
|
int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG tin0,tin1;
|
register DES_LONG tin0,tin1;
|
||||||
register DES_LONG tout0,tout1,xor0,xor1,m0,m1;
|
register DES_LONG tout0,tout1,xor0,xor1,m0,m1;
|
||||||
@ -81,8 +82,8 @@ void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
unsigned char *iv1,*iv2;
|
unsigned char *iv1,*iv2;
|
||||||
|
|
||||||
iv1=ivec1;
|
iv1 = &(*ivec1)[0];
|
||||||
iv2=ivec2;
|
iv2 = &(*ivec2)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
@ -125,11 +126,11 @@ void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
l2c(tout0,out);
|
l2c(tout0,out);
|
||||||
l2c(tout1,out);
|
l2c(tout1,out);
|
||||||
}
|
}
|
||||||
iv1=ivec1;
|
iv1=&(*ivec1)[0];
|
||||||
l2c(m0,iv1);
|
l2c(m0,iv1);
|
||||||
l2c(m1,iv1);
|
l2c(m1,iv1);
|
||||||
|
|
||||||
iv2=ivec2;
|
iv2=&(*ivec2)[0];
|
||||||
l2c(tout0,iv2);
|
l2c(tout0,iv2);
|
||||||
l2c(tout1,iv2);
|
l2c(tout1,iv2);
|
||||||
}
|
}
|
||||||
@ -182,11 +183,11 @@ void des_ede3_cbcm_encrypt(const unsigned char *in, unsigned char *out,
|
|||||||
xor1=t1;
|
xor1=t1;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv1=ivec1;
|
iv1=&(*ivec1)[0];
|
||||||
l2c(m0,iv1);
|
l2c(m0,iv1);
|
||||||
l2c(m1,iv1);
|
l2c(m1,iv1);
|
||||||
|
|
||||||
iv2=ivec2;
|
iv2=&(*ivec2)[0];
|
||||||
l2c(xor0,iv2);
|
l2c(xor0,iv2);
|
||||||
l2c(xor1,iv2);
|
l2c(xor1,iv2);
|
||||||
}
|
}
|
||||||
|
@ -85,7 +85,7 @@ OPENSSL_GLOBAL int des_rw_mode=DES_PCBC_MODE;
|
|||||||
|
|
||||||
|
|
||||||
int des_enc_read(int fd, void *buf, int len, des_key_schedule sched,
|
int des_enc_read(int fd, void *buf, int len, des_key_schedule sched,
|
||||||
des_cblock iv)
|
des_cblock *iv)
|
||||||
{
|
{
|
||||||
/* data to be unencrypted */
|
/* data to be unencrypted */
|
||||||
int net_num=0;
|
int net_num=0;
|
||||||
|
@ -77,7 +77,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
int des_enc_write(int fd, const void *_buf, int len,
|
int des_enc_write(int fd, const void *_buf, int len,
|
||||||
des_key_schedule sched, des_cblock iv)
|
des_key_schedule sched, des_cblock *iv)
|
||||||
{
|
{
|
||||||
#ifdef _LIBC
|
#ifdef _LIBC
|
||||||
extern int srandom();
|
extern int srandom();
|
||||||
|
@ -108,7 +108,7 @@ r=(r+7)/8;
|
|||||||
for (; i<8; i++)
|
for (; i<8; i++)
|
||||||
key[i]=0;
|
key[i]=0;
|
||||||
|
|
||||||
des_set_key(key,ks);
|
des_set_key(&key,ks);
|
||||||
fcrypt_body(&(out[0]),ks,Eswap0,Eswap1);
|
fcrypt_body(&(out[0]),ks,Eswap0,Eswap1);
|
||||||
|
|
||||||
ll=out[0]; l2c(ll,b);
|
ll=out[0]; l2c(ll,b);
|
||||||
|
@ -64,7 +64,8 @@
|
|||||||
*/
|
*/
|
||||||
void des_ede3_ofb64_encrypt(register const unsigned char *in,
|
void des_ede3_ofb64_encrypt(register const unsigned char *in,
|
||||||
register unsigned char *out, long length, des_key_schedule k1,
|
register unsigned char *out, long length, des_key_schedule k1,
|
||||||
des_key_schedule k2, des_key_schedule k3, des_cblock ivec, int *num)
|
des_key_schedule k2, des_key_schedule k3, des_cblock *ivec,
|
||||||
|
int *num)
|
||||||
{
|
{
|
||||||
register DES_LONG v0,v1;
|
register DES_LONG v0,v1;
|
||||||
register int n= *num;
|
register int n= *num;
|
||||||
@ -75,7 +76,7 @@ void des_ede3_ofb64_encrypt(register const unsigned char *in,
|
|||||||
unsigned char *iv;
|
unsigned char *iv;
|
||||||
int save=0;
|
int save=0;
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
c2l(iv,v0);
|
c2l(iv,v0);
|
||||||
c2l(iv,v1);
|
c2l(iv,v1);
|
||||||
ti[0]=v0;
|
ti[0]=v0;
|
||||||
@ -105,7 +106,7 @@ void des_ede3_ofb64_encrypt(register const unsigned char *in,
|
|||||||
{
|
{
|
||||||
/* v0=ti[0];
|
/* v0=ti[0];
|
||||||
v1=ti[1];*/
|
v1=ti[1];*/
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
}
|
}
|
||||||
|
@ -64,7 +64,7 @@
|
|||||||
*/
|
*/
|
||||||
void des_ofb64_encrypt(register const unsigned char *in,
|
void des_ofb64_encrypt(register const unsigned char *in,
|
||||||
register unsigned char *out, long length, des_key_schedule schedule,
|
register unsigned char *out, long length, des_key_schedule schedule,
|
||||||
des_cblock ivec, int *num)
|
des_cblock *ivec, int *num)
|
||||||
{
|
{
|
||||||
register DES_LONG v0,v1,t;
|
register DES_LONG v0,v1,t;
|
||||||
register int n= *num;
|
register int n= *num;
|
||||||
@ -75,7 +75,7 @@ void des_ofb64_encrypt(register const unsigned char *in,
|
|||||||
unsigned char *iv;
|
unsigned char *iv;
|
||||||
int save=0;
|
int save=0;
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
c2l(iv,v0);
|
c2l(iv,v0);
|
||||||
c2l(iv,v1);
|
c2l(iv,v1);
|
||||||
ti[0]=v0;
|
ti[0]=v0;
|
||||||
@ -100,7 +100,7 @@ void des_ofb64_encrypt(register const unsigned char *in,
|
|||||||
{
|
{
|
||||||
v0=ti[0];
|
v0=ti[0];
|
||||||
v1=ti[1];
|
v1=ti[1];
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
}
|
}
|
||||||
|
@ -65,7 +65,7 @@
|
|||||||
* byte.
|
* byte.
|
||||||
*/
|
*/
|
||||||
void des_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
void des_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
||||||
long length, des_key_schedule schedule, des_cblock ivec)
|
long length, des_key_schedule schedule, des_cblock *ivec)
|
||||||
{
|
{
|
||||||
register DES_LONG d0,d1,vv0,vv1,v0,v1,n=(numbits+7)/8;
|
register DES_LONG d0,d1,vv0,vv1,v0,v1,n=(numbits+7)/8;
|
||||||
register DES_LONG mask0,mask1;
|
register DES_LONG mask0,mask1;
|
||||||
@ -92,7 +92,7 @@ void des_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
|||||||
mask1=0x00000000L;
|
mask1=0x00000000L;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
c2l(iv,v0);
|
c2l(iv,v0);
|
||||||
c2l(iv,v1);
|
c2l(iv,v1);
|
||||||
ti[0]=v0;
|
ti[0]=v0;
|
||||||
@ -126,7 +126,7 @@ void des_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits,
|
|||||||
v1=((v1>>num)|(vv0<<(32-num)))&0xffffffffL;
|
v1=((v1>>num)|(vv0<<(32-num)))&0xffffffffL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(v0,iv);
|
l2c(v0,iv);
|
||||||
l2c(v1,iv);
|
l2c(v1,iv);
|
||||||
v0=v1=d0=d1=ti[0]=ti[1]=vv0=vv1=0;
|
v0=v1=d0=d1=ti[0]=ti[1]=vv0=vv1=0;
|
||||||
|
@ -59,7 +59,7 @@
|
|||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
|
|
||||||
void des_pcbc_encrypt(const unsigned char *input, unsigned char *output,
|
void des_pcbc_encrypt(const unsigned char *input, unsigned char *output,
|
||||||
long length, des_key_schedule schedule, des_cblock ivec, int enc)
|
long length, des_key_schedule schedule, des_cblock *ivec, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG sin0,sin1,xor0,xor1,tout0,tout1;
|
register DES_LONG sin0,sin1,xor0,xor1,tout0,tout1;
|
||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
@ -68,7 +68,7 @@ void des_pcbc_encrypt(const unsigned char *input, unsigned char *output,
|
|||||||
|
|
||||||
in=input;
|
in=input;
|
||||||
out=output;
|
out=output;
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
|
@ -73,8 +73,8 @@
|
|||||||
/* Got the value MIT uses via brute force :-) 2/10/90 eay */
|
/* Got the value MIT uses via brute force :-) 2/10/90 eay */
|
||||||
#define NOISE ((DES_LONG)83653421L)
|
#define NOISE ((DES_LONG)83653421L)
|
||||||
|
|
||||||
DES_LONG des_quad_cksum(const unsigned char *input, des_cblocks output,
|
DES_LONG des_quad_cksum(const unsigned char *input, des_cblock output[],
|
||||||
long length, int out_count, des_cblock seed)
|
long length, int out_count, des_cblock *seed)
|
||||||
{
|
{
|
||||||
DES_LONG z0,z1,t0,t1;
|
DES_LONG z0,z1,t0,t1;
|
||||||
int i;
|
int i;
|
||||||
@ -83,10 +83,10 @@ DES_LONG des_quad_cksum(const unsigned char *input, des_cblocks output,
|
|||||||
unsigned char *lp;
|
unsigned char *lp;
|
||||||
|
|
||||||
if (out_count < 1) out_count=1;
|
if (out_count < 1) out_count=1;
|
||||||
lp=output;
|
lp = &(output[0])[0];
|
||||||
|
|
||||||
z0=Q_B0(seed[0])|Q_B1(seed[1])|Q_B2(seed[2])|Q_B3(seed[3]);
|
z0=Q_B0((*seed)[0])|Q_B1((*seed)[1])|Q_B2((*seed)[2])|Q_B3((*seed)[3]);
|
||||||
z1=Q_B0(seed[4])|Q_B1(seed[5])|Q_B2(seed[6])|Q_B3(seed[7]);
|
z1=Q_B0((*seed)[4])|Q_B1((*seed)[5])|Q_B2((*seed)[6])|Q_B3((*seed)[7]);
|
||||||
|
|
||||||
for (i=0; ((i<4)&&(i<out_count)); i++)
|
for (i=0; ((i<4)&&(i<out_count)); i++)
|
||||||
{
|
{
|
||||||
@ -129,7 +129,7 @@ DES_LONG des_quad_cksum(const unsigned char *input, des_cblocks output,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lp=&output[(out_count-i-1)*8];
|
lp = &(output[out_count-i-1])[0];
|
||||||
l2n(z1,lp);
|
l2n(z1,lp);
|
||||||
l2n(z0,lp);
|
l2n(z0,lp);
|
||||||
}
|
}
|
||||||
|
@ -62,13 +62,13 @@
|
|||||||
static int seed=0;
|
static int seed=0;
|
||||||
static des_cblock init;
|
static des_cblock init;
|
||||||
|
|
||||||
void des_random_seed(des_cblock key)
|
void des_random_seed(des_cblock *key)
|
||||||
{
|
{
|
||||||
memcpy(init,key,sizeof(des_cblock));
|
memcpy(&init,key,sizeof(des_cblock));
|
||||||
seed=1;
|
seed=1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void des_random_key(unsigned char *ret)
|
void des_random_key(des_cblock *ret)
|
||||||
{
|
{
|
||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
static DES_LONG c=0;
|
static DES_LONG c=0;
|
||||||
@ -99,13 +99,13 @@ void des_random_key(unsigned char *ret)
|
|||||||
t=(DES_LONG)((pid)|((c++)<<16));
|
t=(DES_LONG)((pid)|((c++)<<16));
|
||||||
l2c(t,p);
|
l2c(t,p);
|
||||||
|
|
||||||
des_set_odd_parity(data);
|
des_set_odd_parity(&data);
|
||||||
des_set_key(data,ks);
|
des_set_key(&data,ks);
|
||||||
des_cbc_cksum(key,key,sizeof(key),ks,data);
|
des_cbc_cksum(key,&key,sizeof(key),ks,&data);
|
||||||
|
|
||||||
des_set_odd_parity(key);
|
des_set_odd_parity(&key);
|
||||||
des_set_key(key,ks);
|
des_set_key(&key,ks);
|
||||||
des_cbc_cksum(key,data,sizeof(key),ks,key);
|
des_cbc_cksum(key,&data,sizeof(key),ks,&key);
|
||||||
|
|
||||||
memcpy(ret,data,sizeof(key));
|
memcpy(ret,data,sizeof(key));
|
||||||
memset(key,0,sizeof(key));
|
memset(key,0,sizeof(key));
|
||||||
|
@ -58,7 +58,7 @@
|
|||||||
|
|
||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
|
|
||||||
int des_read_password(des_cblock key, const char *prompt, int verify)
|
int des_read_password(des_cblock *key, const char *prompt, int verify)
|
||||||
{
|
{
|
||||||
int ok;
|
int ok;
|
||||||
char buf[BUFSIZ],buff[BUFSIZ];
|
char buf[BUFSIZ],buff[BUFSIZ];
|
||||||
@ -70,7 +70,7 @@ int des_read_password(des_cblock key, const char *prompt, int verify)
|
|||||||
return(ok);
|
return(ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
int des_read_2passwords(des_cblock key1, des_cblock key2, const char *prompt,
|
int des_read_2passwords(des_cblock *key1, des_cblock *key2, const char *prompt,
|
||||||
int verify)
|
int verify)
|
||||||
{
|
{
|
||||||
int ok;
|
int ok;
|
||||||
|
@ -66,16 +66,17 @@ int _des_crypt(char *buf, int len, struct desparams *desp)
|
|||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int enc;
|
int enc;
|
||||||
|
|
||||||
des_set_key(desp->des_key,ks);
|
des_set_key(&desp->des_key,ks);
|
||||||
enc=(desp->des_dir == ENCRYPT)?DES_ENCRYPT:DES_DECRYPT;
|
enc=(desp->des_dir == ENCRYPT)?DES_ENCRYPT:DES_DECRYPT;
|
||||||
|
|
||||||
if (desp->des_mode == CBC)
|
if (desp->des_mode == CBC)
|
||||||
des_ecb_encrypt(desp->UDES.UDES_buf,desp->UDES.UDES_buf,ks,
|
des_ecb_encrypt((const_des_cblock *)desp->UDES.UDES_buf,
|
||||||
|
(des_cblock *)desp->UDES.UDES_buf,ks,
|
||||||
enc);
|
enc);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
des_ncbc_encrypt(desp->UDES.UDES_buf,desp->UDES.UDES_buf,
|
des_ncbc_encrypt(desp->UDES.UDES_buf,desp->UDES.UDES_buf,
|
||||||
len,ks,desp->des_ivec,enc);
|
len,ks,&desp->des_ivec,enc);
|
||||||
#ifdef undef
|
#ifdef undef
|
||||||
/* len will always be %8 if called from common_crypt
|
/* len will always be %8 if called from common_crypt
|
||||||
* in secure_rpc.
|
* in secure_rpc.
|
||||||
|
@ -67,24 +67,24 @@
|
|||||||
#include "podd.h"
|
#include "podd.h"
|
||||||
#include "sk.h"
|
#include "sk.h"
|
||||||
|
|
||||||
static int check_parity(const des_cblock key);
|
static int check_parity(const_des_cblock *key);
|
||||||
OPENSSL_GLOBAL int des_check_key=0;
|
OPENSSL_GLOBAL int des_check_key=0;
|
||||||
|
|
||||||
void des_set_odd_parity(des_cblock key)
|
void des_set_odd_parity(des_cblock *key)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<DES_KEY_SZ; i++)
|
for (i=0; i<DES_KEY_SZ; i++)
|
||||||
key[i]=odd_parity[key[i]];
|
(*key)[i]=odd_parity[(*key)[i]];
|
||||||
}
|
}
|
||||||
|
|
||||||
static int check_parity(const des_cblock key)
|
static int check_parity(const_des_cblock *key)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
for (i=0; i<DES_KEY_SZ; i++)
|
for (i=0; i<DES_KEY_SZ; i++)
|
||||||
{
|
{
|
||||||
if (key[i] != odd_parity[key[i]])
|
if ((*key)[i] != odd_parity[(*key)[i]])
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
return(1);
|
return(1);
|
||||||
@ -120,7 +120,7 @@ static des_cblock weak_keys[NUM_WEAK_KEY]={
|
|||||||
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
|
{0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1,0xFE},
|
||||||
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};
|
{0xFE,0xE0,0xFE,0xE0,0xFE,0xF1,0xFE,0xF1}};
|
||||||
|
|
||||||
int des_is_weak_key(const des_cblock key)
|
int des_is_weak_key(const_des_cblock *key)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ int des_is_weak_key(const des_cblock key)
|
|||||||
* return -1 if key parity error,
|
* return -1 if key parity error,
|
||||||
* return -2 if illegal weak key.
|
* return -2 if illegal weak key.
|
||||||
*/
|
*/
|
||||||
int des_set_key(const des_cblock key, des_key_schedule schedule)
|
int des_set_key(const_des_cblock *key, des_key_schedule schedule)
|
||||||
{
|
{
|
||||||
static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
|
static int shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
|
||||||
register DES_LONG c,d,t,s,t2;
|
register DES_LONG c,d,t,s,t2;
|
||||||
@ -167,7 +167,7 @@ int des_set_key(const des_cblock key, des_key_schedule schedule)
|
|||||||
}
|
}
|
||||||
|
|
||||||
k=(DES_LONG *)schedule;
|
k=(DES_LONG *)schedule;
|
||||||
in=key;
|
in = &(*key)[0];
|
||||||
|
|
||||||
c2l(in,c);
|
c2l(in,c);
|
||||||
c2l(in,d);
|
c2l(in,d);
|
||||||
@ -228,7 +228,7 @@ int des_set_key(const des_cblock key, des_key_schedule schedule)
|
|||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
int des_key_sched(const des_cblock key, des_key_schedule schedule)
|
int des_key_sched(const_des_cblock *key, des_key_schedule schedule)
|
||||||
{
|
{
|
||||||
return(des_set_key(key,schedule));
|
return(des_set_key(key,schedule));
|
||||||
}
|
}
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
|
|
||||||
OPENSSL_EXTERN int des_check_key;
|
OPENSSL_EXTERN int des_check_key;
|
||||||
|
|
||||||
void des_string_to_key(const char *str, des_cblock key)
|
void des_string_to_key(const char *str, des_cblock *key)
|
||||||
{
|
{
|
||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int i,length;
|
int i,length;
|
||||||
@ -70,20 +70,20 @@ void des_string_to_key(const char *str, des_cblock key)
|
|||||||
length=strlen(str);
|
length=strlen(str);
|
||||||
#ifdef OLD_STR_TO_KEY
|
#ifdef OLD_STR_TO_KEY
|
||||||
for (i=0; i<length; i++)
|
for (i=0; i<length; i++)
|
||||||
key[i%8]^=(str[i]<<1);
|
(*key)[i%8]^=(str[i]<<1);
|
||||||
#else /* MIT COMPATIBLE */
|
#else /* MIT COMPATIBLE */
|
||||||
for (i=0; i<length; i++)
|
for (i=0; i<length; i++)
|
||||||
{
|
{
|
||||||
j=str[i];
|
j=str[i];
|
||||||
if ((i%16) < 8)
|
if ((i%16) < 8)
|
||||||
key[i%8]^=(j<<1);
|
(*key)[i%8]^=(j<<1);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Reverse the bit order 05/05/92 eay */
|
/* Reverse the bit order 05/05/92 eay */
|
||||||
j=((j<<4)&0xf0)|((j>>4)&0x0f);
|
j=((j<<4)&0xf0)|((j>>4)&0x0f);
|
||||||
j=((j<<2)&0xcc)|((j>>2)&0x33);
|
j=((j<<2)&0xcc)|((j>>2)&0x33);
|
||||||
j=((j<<1)&0xaa)|((j>>1)&0x55);
|
j=((j<<1)&0xaa)|((j>>1)&0x55);
|
||||||
key[7-(i%8)]^=j;
|
(*key)[7-(i%8)]^=j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -97,7 +97,7 @@ void des_string_to_key(const char *str, des_cblock key)
|
|||||||
des_set_odd_parity(key);
|
des_set_odd_parity(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
void des_string_to_2keys(const char *str, des_cblock key1, des_cblock key2)
|
void des_string_to_2keys(const char *str, des_cblock *key1, des_cblock *key2)
|
||||||
{
|
{
|
||||||
des_key_schedule ks;
|
des_key_schedule ks;
|
||||||
int i,length;
|
int i,length;
|
||||||
@ -111,7 +111,7 @@ void des_string_to_2keys(const char *str, des_cblock key1, des_cblock key2)
|
|||||||
{
|
{
|
||||||
for (i=0; i<length; i++)
|
for (i=0; i<length; i++)
|
||||||
{
|
{
|
||||||
key2[i]=key1[i]=(str[i]<<1);
|
(*key2)[i]=(*key1)[i]=(str[i]<<1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -119,9 +119,9 @@ void des_string_to_2keys(const char *str, des_cblock key1, des_cblock key2)
|
|||||||
for (i=0; i<length; i++)
|
for (i=0; i<length; i++)
|
||||||
{
|
{
|
||||||
if ((i/8)&1)
|
if ((i/8)&1)
|
||||||
key2[i%8]^=(str[i]<<1);
|
(*key2)[i%8]^=(str[i]<<1);
|
||||||
else
|
else
|
||||||
key1[i%8]^=(str[i]<<1);
|
(*key1)[i%8]^=(str[i]<<1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#else /* MIT COMPATIBLE */
|
#else /* MIT COMPATIBLE */
|
||||||
@ -131,9 +131,9 @@ void des_string_to_2keys(const char *str, des_cblock key1, des_cblock key2)
|
|||||||
if ((i%32) < 16)
|
if ((i%32) < 16)
|
||||||
{
|
{
|
||||||
if ((i%16) < 8)
|
if ((i%16) < 8)
|
||||||
key1[i%8]^=(j<<1);
|
(*key1)[i%8]^=(j<<1);
|
||||||
else
|
else
|
||||||
key2[i%8]^=(j<<1);
|
(*key2)[i%8]^=(j<<1);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -141,9 +141,9 @@ void des_string_to_2keys(const char *str, des_cblock key1, des_cblock key2)
|
|||||||
j=((j<<2)&0xcc)|((j>>2)&0x33);
|
j=((j<<2)&0xcc)|((j>>2)&0x33);
|
||||||
j=((j<<1)&0xaa)|((j>>1)&0x55);
|
j=((j<<1)&0xaa)|((j>>1)&0x55);
|
||||||
if ((i%16) < 8)
|
if ((i%16) < 8)
|
||||||
key1[7-(i%8)]^=j;
|
(*key1)[7-(i%8)]^=j;
|
||||||
else
|
else
|
||||||
key2[7-(i%8)]^=j;
|
(*key2)[7-(i%8)]^=j;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (length <= 8) memcpy(key2,key1,8);
|
if (length <= 8) memcpy(key2,key1,8);
|
||||||
|
@ -87,13 +87,13 @@
|
|||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: supp.c,v 1.4 1999/04/19 21:28:07 ulf Exp $
|
* $Id: supp.c,v 1.5 1999/05/16 12:25:45 bodo Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "des_locl.h"
|
#include "des_locl.h"
|
||||||
|
|
||||||
void des_cblock_print_file(const des_cblock cb, FILE *fp)
|
void des_cblock_print_file(const_des_cblock *cb, FILE *fp)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const unsigned int *p = (const unsigned int *)cb;
|
const unsigned int *p = (const unsigned int *)cb;
|
||||||
|
@ -79,11 +79,14 @@ static unsigned char desx_white_in2out[256]={
|
|||||||
0xA7,0x1C,0xC9,0x09,0x69,0x9A,0x83,0xCF,0x29,0x39,0xB9,0xE9,0x4C,0xFF,0x43,0xAB,
|
0xA7,0x1C,0xC9,0x09,0x69,0x9A,0x83,0xCF,0x29,0x39,0xB9,0xE9,0x4C,0xFF,0x43,0xAB,
|
||||||
};
|
};
|
||||||
|
|
||||||
void des_xwhite_in2out(const des_cblock key, const des_cblock in,
|
void des_xwhite_in2out(const_des_cblock *des_key, const_des_cblock *in_white,
|
||||||
des_cblock out)
|
des_cblock *out_white)
|
||||||
{
|
{
|
||||||
int out0,out1;
|
int out0,out1;
|
||||||
int i;
|
int i;
|
||||||
|
const unsigned char *key = &(*des_key)[0];
|
||||||
|
const unsigned char *in = &(*in_white)[0];
|
||||||
|
unsigned char *out = &(*out_white)[0];
|
||||||
|
|
||||||
out[0]=out[1]=out[2]=out[3]=out[4]=out[5]=out[6]=out[7]=0;
|
out[0]=out[1]=out[2]=out[3]=out[4]=out[5]=out[6]=out[7]=0;
|
||||||
out0=out1=0;
|
out0=out1=0;
|
||||||
@ -104,9 +107,9 @@ void des_xwhite_in2out(const des_cblock key, const des_cblock in,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void des_xcbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
void des_xcbc_encrypt(const unsigned char *in, unsigned char *out,
|
||||||
des_key_schedule schedule, des_cblock ivec, const des_cblock inw,
|
long length, des_key_schedule schedule, des_cblock *ivec,
|
||||||
const des_cblock outw, int enc)
|
const_des_cblock *inw, const_des_cblock *outw, int enc)
|
||||||
{
|
{
|
||||||
register DES_LONG tin0,tin1;
|
register DES_LONG tin0,tin1;
|
||||||
register DES_LONG tout0,tout1,xor0,xor1;
|
register DES_LONG tout0,tout1,xor0,xor1;
|
||||||
@ -116,14 +119,14 @@ void des_xcbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
DES_LONG tin[2];
|
DES_LONG tin[2];
|
||||||
unsigned char *iv;
|
unsigned char *iv;
|
||||||
|
|
||||||
in2=inw;
|
in2 = &(*inw)[0];
|
||||||
c2l(in2,inW0);
|
c2l(in2,inW0);
|
||||||
c2l(in2,inW1);
|
c2l(in2,inW1);
|
||||||
in2=outw;
|
in2 = &(*outw)[0];
|
||||||
c2l(in2,outW0);
|
c2l(in2,outW0);
|
||||||
c2l(in2,outW1);
|
c2l(in2,outW1);
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
|
|
||||||
if (enc)
|
if (enc)
|
||||||
{
|
{
|
||||||
@ -148,7 +151,7 @@ void des_xcbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
tout0=tin[0]^outW0; l2c(tout0,out);
|
tout0=tin[0]^outW0; l2c(tout0,out);
|
||||||
tout1=tin[1]^outW1; l2c(tout1,out);
|
tout1=tin[1]^outW1; l2c(tout1,out);
|
||||||
}
|
}
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(tout0,iv);
|
l2c(tout0,iv);
|
||||||
l2c(tout1,iv);
|
l2c(tout1,iv);
|
||||||
}
|
}
|
||||||
@ -180,7 +183,7 @@ void des_xcbc_encrypt(const unsigned char *in, unsigned char *out, long length,
|
|||||||
xor1=tin1;
|
xor1=tin1;
|
||||||
}
|
}
|
||||||
|
|
||||||
iv=ivec;
|
iv = &(*ivec)[0];
|
||||||
l2c(xor0,iv);
|
l2c(xor0,iv);
|
||||||
l2c(xor1,iv);
|
l2c(xor1,iv);
|
||||||
}
|
}
|
||||||
|
@ -107,14 +107,16 @@ EVP_CIPHER *EVP_des_ede3_cbc(void)
|
|||||||
static void des_cbc_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_cbc_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
|
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
memcpy( (char *)ctx->c.des_ede.ks3,
|
memcpy( (char *)ctx->c.des_ede.ks3,
|
||||||
(char *)ctx->c.des_ede.ks1,
|
(char *)ctx->c.des_ede.ks1,
|
||||||
sizeof(ctx->c.des_ede.ks1));
|
sizeof(ctx->c.des_ede.ks1));
|
||||||
@ -124,15 +126,17 @@ static void des_cbc_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
|||||||
static void des_cbc_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_cbc_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
|
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
des_set_key(&(key[16]),ctx->c.des_ede.ks3);
|
des_set_key(&deskey[2],ctx->c.des_ede.ks3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -141,7 +145,7 @@ static void des_cbc_ede_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
{
|
{
|
||||||
des_ede3_cbc_encrypt(in,out,inl, ctx->c.des_ede.ks1,
|
des_ede3_cbc_encrypt(in,out,inl, ctx->c.des_ede.ks1,
|
||||||
ctx->c.des_ede.ks2,ctx->c.des_ede.ks3,
|
ctx->c.des_ede.ks2,ctx->c.des_ede.ks3,
|
||||||
&(ctx->iv[0]),
|
(des_cblock *) &(ctx->iv[0]),
|
||||||
ctx->encrypt);
|
ctx->encrypt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,16 +87,20 @@ EVP_CIPHER *EVP_des_cbc(void)
|
|||||||
static void des_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
des_set_key(key,ctx->c.des_ks);
|
des_set_key(deskey,ctx->c.des_ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
static void des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||||
unsigned char *in, unsigned int inl)
|
unsigned char *in, unsigned int inl)
|
||||||
{
|
{
|
||||||
des_ncbc_encrypt(in,out,inl,ctx->c.des_ks,&(ctx->iv[0]),ctx->encrypt);
|
des_ncbc_encrypt(in,out,inl,ctx->c.des_ks,
|
||||||
|
(des_cblock *)&(ctx->iv[0]),
|
||||||
|
ctx->encrypt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -107,15 +107,17 @@ EVP_CIPHER *EVP_des_ede3_cfb(void)
|
|||||||
static void des_ede_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
memcpy( (char *)ctx->c.des_ede.ks3,
|
memcpy( (char *)ctx->c.des_ede.ks3,
|
||||||
(char *)ctx->c.des_ede.ks1,
|
(char *)ctx->c.des_ede.ks1,
|
||||||
sizeof(ctx->c.des_ede.ks1));
|
sizeof(ctx->c.des_ede.ks1));
|
||||||
@ -125,16 +127,18 @@ static void des_ede_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
|||||||
static void des_ede3_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede3_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
des_set_key(&(key[16]),ctx->c.des_ede.ks3);
|
des_set_key(&deskey[2],ctx->c.des_ede.ks3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +149,7 @@ static void des_ede_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
ctx->c.des_ede.ks1,
|
ctx->c.des_ede.ks1,
|
||||||
ctx->c.des_ede.ks2,
|
ctx->c.des_ede.ks2,
|
||||||
ctx->c.des_ede.ks3,
|
ctx->c.des_ede.ks3,
|
||||||
&(ctx->iv[0]),&ctx->num,ctx->encrypt);
|
(des_cblock*)&(ctx->iv[0]),
|
||||||
|
&ctx->num,ctx->encrypt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,13 +87,15 @@ EVP_CIPHER *EVP_des_cfb(void)
|
|||||||
static void des_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_cfb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
des_set_key(key,ctx->c.des_ks);
|
des_set_key(deskey,ctx->c.des_ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
static void des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||||
@ -102,7 +104,7 @@ static void des_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
des_cfb64_encrypt(
|
des_cfb64_encrypt(
|
||||||
in,out,
|
in,out,
|
||||||
(long)inl, ctx->c.des_ks,
|
(long)inl, ctx->c.des_ks,
|
||||||
&(ctx->iv[0]),
|
(des_cblock *)&(ctx->iv[0]),
|
||||||
&ctx->num,ctx->encrypt);
|
&ctx->num,ctx->encrypt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -106,10 +106,12 @@ EVP_CIPHER *EVP_des_ede3(void)
|
|||||||
static void des_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
if (key != NULL)
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
memcpy( (char *)ctx->c.des_ede.ks3,
|
memcpy( (char *)ctx->c.des_ede.ks3,
|
||||||
(char *)ctx->c.des_ede.ks1,
|
(char *)ctx->c.des_ede.ks1,
|
||||||
sizeof(ctx->c.des_ede.ks1));
|
sizeof(ctx->c.des_ede.ks1));
|
||||||
@ -119,11 +121,13 @@ static void des_ede_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
|||||||
static void des_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede3_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
if (key != NULL)
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
des_set_key(&(key[16]),ctx->c.des_ede.ks3);
|
des_set_key(&deskey[2],ctx->c.des_ede.ks3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -131,16 +135,24 @@ static void des_ede_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
unsigned char *in, unsigned int inl)
|
unsigned char *in, unsigned int inl)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
des_cblock *output /* = (des_cblock *)out */;
|
||||||
|
des_cblock *input /* = (des_cblock *)in */;
|
||||||
|
|
||||||
if (inl < 8) return;
|
if (inl < 8) return;
|
||||||
inl-=8;
|
inl-=8;
|
||||||
for (i=0; i<=inl; i+=8)
|
for (i=0; i<=inl; i+=8)
|
||||||
{
|
{
|
||||||
des_ecb3_encrypt(&(in[i]),&(out[i]),
|
output = (des_cblock *)(out + i);
|
||||||
|
input = (des_cblock *)(in + i);
|
||||||
|
|
||||||
|
des_ecb3_encrypt(input,output,
|
||||||
ctx->c.des_ede.ks1,
|
ctx->c.des_ede.ks1,
|
||||||
ctx->c.des_ede.ks2,
|
ctx->c.des_ede.ks2,
|
||||||
ctx->c.des_ede.ks3,
|
ctx->c.des_ede.ks3,
|
||||||
ctx->encrypt);
|
ctx->encrypt);
|
||||||
|
|
||||||
|
/* output++; */
|
||||||
|
/* input++; */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,20 +87,32 @@ EVP_CIPHER *EVP_des_ecb(void)
|
|||||||
static void des_ecb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ecb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
if (key != NULL)
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
des_set_key(key,ctx->c.des_ks);
|
|
||||||
|
if (deskey != NULL)
|
||||||
|
des_set_key(deskey,ctx->c.des_ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
static void des_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||||
unsigned char *in, unsigned int inl)
|
unsigned char *in, unsigned int inl)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
des_cblock *output /* = (des_cblock *)out */;
|
||||||
|
des_cblock *input /* = (des_cblock *)in */;
|
||||||
|
|
||||||
if (inl < 8) return;
|
if (inl < 8) return;
|
||||||
inl-=8;
|
inl-=8;
|
||||||
for (i=0; i<=inl; i+=8)
|
for (i=0; i<=inl; i+=8)
|
||||||
{
|
{
|
||||||
des_ecb_encrypt(&(in[i]),&(out[i]),ctx->c.des_ks,ctx->encrypt);
|
/* Either this ... */
|
||||||
|
output = (des_cblock *)(out + i);
|
||||||
|
input = (des_cblock *)(in + i);
|
||||||
|
|
||||||
|
des_ecb_encrypt(input,output,ctx->c.des_ks,ctx->encrypt);
|
||||||
|
|
||||||
|
/* ... or this. */
|
||||||
|
/* output++; */
|
||||||
|
/* input++; */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -107,15 +107,17 @@ EVP_CIPHER *EVP_des_ede3_ofb(void)
|
|||||||
static void des_ede_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
memcpy( (char *)ctx->c.des_ede.ks3,
|
memcpy( (char *)ctx->c.des_ede.ks3,
|
||||||
(char *)ctx->c.des_ede.ks1,
|
(char *)ctx->c.des_ede.ks1,
|
||||||
sizeof(ctx->c.des_ede.ks1));
|
sizeof(ctx->c.des_ede.ks1));
|
||||||
@ -125,16 +127,18 @@ static void des_ede_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
|||||||
static void des_ede3_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ede3_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.des_ede.ks1);
|
des_set_key(&deskey[0],ctx->c.des_ede.ks1);
|
||||||
des_set_key(&(key[8]),ctx->c.des_ede.ks2);
|
des_set_key(&deskey[1],ctx->c.des_ede.ks2);
|
||||||
des_set_key(&(key[16]),ctx->c.des_ede.ks3);
|
des_set_key(&deskey[2],ctx->c.des_ede.ks3);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +147,6 @@ static void des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
{
|
{
|
||||||
des_ede3_ofb64_encrypt(in,out,inl,ctx->c.des_ede.ks1,
|
des_ede3_ofb64_encrypt(in,out,inl,ctx->c.des_ede.ks1,
|
||||||
ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
|
ctx->c.des_ede.ks2, ctx->c.des_ede.ks3,
|
||||||
&(ctx->iv[0]),&ctx->num);
|
(des_cblock *)&(ctx->iv[0]),&ctx->num);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,18 +87,21 @@ EVP_CIPHER *EVP_des_ofb(void)
|
|||||||
static void des_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void des_ofb_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
ctx->num=0;
|
ctx->num=0;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
des_set_key(key,ctx->c.des_ks);
|
des_set_key(deskey,ctx->c.des_ks);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
static void des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
||||||
unsigned char *in, unsigned int inl)
|
unsigned char *in, unsigned int inl)
|
||||||
{
|
{
|
||||||
des_ofb64_encrypt(in,out,inl,ctx->c.des_ks,&(ctx->iv[0]),&ctx->num);
|
des_ofb64_encrypt(in,out,inl,ctx->c.des_ks,
|
||||||
|
(des_cblock *)&(ctx->iv[0]),&ctx->num);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -87,12 +87,14 @@ EVP_CIPHER *EVP_desx_cbc(void)
|
|||||||
static void desx_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
static void desx_cbc_init_key(EVP_CIPHER_CTX *ctx, unsigned char *key,
|
||||||
unsigned char *iv, int enc)
|
unsigned char *iv, int enc)
|
||||||
{
|
{
|
||||||
|
des_cblock *deskey = (des_cblock *)key;
|
||||||
|
|
||||||
if (iv != NULL)
|
if (iv != NULL)
|
||||||
memcpy(&(ctx->oiv[0]),iv,8);
|
memcpy(&(ctx->oiv[0]),iv,8);
|
||||||
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
memcpy(&(ctx->iv[0]),&(ctx->oiv[0]),8);
|
||||||
if (key != NULL)
|
if (deskey != NULL)
|
||||||
{
|
{
|
||||||
des_set_key(key,ctx->c.desx_cbc.ks);
|
des_set_key(deskey,ctx->c.desx_cbc.ks);
|
||||||
memcpy(&(ctx->c.desx_cbc.inw[0]),&(key[8]),8);
|
memcpy(&(ctx->c.desx_cbc.inw[0]),&(key[8]),8);
|
||||||
memcpy(&(ctx->c.desx_cbc.outw[0]),&(key[16]),8);
|
memcpy(&(ctx->c.desx_cbc.outw[0]),&(key[16]),8);
|
||||||
}
|
}
|
||||||
@ -102,9 +104,9 @@ static void desx_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
|
|||||||
unsigned char *in, unsigned int inl)
|
unsigned char *in, unsigned int inl)
|
||||||
{
|
{
|
||||||
des_xcbc_encrypt(in,out,inl,ctx->c.desx_cbc.ks,
|
des_xcbc_encrypt(in,out,inl,ctx->c.desx_cbc.ks,
|
||||||
&(ctx->iv[0]),
|
(des_cblock *)&(ctx->iv[0]),
|
||||||
&(ctx->c.desx_cbc.inw[0]),
|
&ctx->c.desx_cbc.inw,
|
||||||
&(ctx->c.desx_cbc.outw[0]),
|
&ctx->c.desx_cbc.outw,
|
||||||
ctx->encrypt);
|
ctx->encrypt);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -134,12 +134,12 @@ static void mdc2_body(MDC2_CTX *c, unsigned char *in, unsigned int len)
|
|||||||
c->h[0]=(c->h[0]&0x9f)|0x40;
|
c->h[0]=(c->h[0]&0x9f)|0x40;
|
||||||
c->hh[0]=(c->hh[0]&0x9f)|0x20;
|
c->hh[0]=(c->hh[0]&0x9f)|0x20;
|
||||||
|
|
||||||
des_set_odd_parity(c->h);
|
des_set_odd_parity(&c->h);
|
||||||
des_set_key(c->h,k);
|
des_set_key(&c->h,k);
|
||||||
des_encrypt(d,k,1);
|
des_encrypt(d,k,1);
|
||||||
|
|
||||||
des_set_odd_parity(c->hh);
|
des_set_odd_parity(&c->hh);
|
||||||
des_set_key(c->hh,k);
|
des_set_key(&c->hh,k);
|
||||||
des_encrypt(dd,k,1);
|
des_encrypt(dd,k,1);
|
||||||
|
|
||||||
ttin0=tin0^dd[0];
|
ttin0=tin0^dd[0];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user