diff options
author | Bodo Möller <bodo@openssl.org> | 1999-06-09 17:28:30 +0000 |
---|---|---|
committer | Bodo Möller <bodo@openssl.org> | 1999-06-09 17:28:30 +0000 |
commit | 3bcfce2881b8fa9d840e6a61d43843504064a562 (patch) | |
tree | 4208a2644e4ac31a07dee4b951d137ccbf7d7895 /crypto/des/ncbc_enc.c | |
parent | df63a389a5cae779e535a9dd3ba7a6bfaaf313ec (diff) | |
download | openssl-3bcfce2881b8fa9d840e6a61d43843504064a562.tar.gz |
Unify DES library: ncbc_enc.c wasn't used, but its content was almost
duplicated in cbc_enc.c (without IV updating) and in des_enc.c
As pointed out by others on the openssl-dev list, des_cbc_encrypt (without
IV updating; defined in cbc_enc.c) exists only for historical reasons:
des_ncbc_encrypt should be used instead (and the caller does not have
to manually update the IV).
If des_cbc_enrypt is not needed for backwards compatibility, the
definition of des_ncbc_encrypt should be put back into des_enc.c, and
both cbc_enc.c and ncbc_enc.c can be deleted.
If des_cbc_encrypt *is* needed for backwards compatibility, its behaviour
obviously should not change (i.e., don't add IV updating).
Diffstat (limited to 'crypto/des/ncbc_enc.c')
-rw-r--r-- | crypto/des/ncbc_enc.c | 36 |
1 files changed, 27 insertions, 9 deletions
diff --git a/crypto/des/ncbc_enc.c b/crypto/des/ncbc_enc.c index a13e4fc22b..e0e67a417d 100644 --- a/crypto/des/ncbc_enc.c +++ b/crypto/des/ncbc_enc.c @@ -58,19 +58,21 @@ #include "des_locl.h" -void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length, - des_key_schedule schedule, des_cblock (*ivec), int enc) +#ifdef CBC_ENC_C__DONT_UPDATE_IV +void des_cbc_encrypt(const unsigned char *in, unsigned char *out, long length, + des_key_schedule schedule, des_cblock *ivec, int enc) +#else +void des_ncbc_encrypt(const unsigned char *in, unsigned char *out, long length, + des_key_schedule schedule, des_cblock *ivec, int enc) +#endif { register DES_LONG tin0,tin1; register DES_LONG tout0,tout1,xor0,xor1; - register unsigned char *in,*out; register long l=length; DES_LONG tin[2]; unsigned char *iv; - in=(unsigned char *)input; - out=(unsigned char *)output; - iv=(unsigned char *)ivec; + iv = &(*ivec)[0]; if (enc) { @@ -95,9 +97,11 @@ void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length, tout0=tin[0]; l2c(tout0,out); tout1=tin[1]; l2c(tout1,out); } - iv=(unsigned char *)ivec; +#ifndef CBC_ENC_C__DONT_UPDATE_IV + iv = &(*ivec)[0]; l2c(tout0,iv); l2c(tout1,iv); +#endif } else { @@ -115,11 +119,25 @@ void des_ncbc_encrypt(des_cblock (*input), des_cblock (*output), long length, xor0=tin0; xor1=tin1; } - iv=(unsigned char *)ivec; + if (l != -8) + { + c2l(in,tin0); tin[0]=tin0; + c2l(in,tin1); tin[1]=tin1; + des_encrypt((DES_LONG *)tin,schedule,DES_DECRYPT); + tout0=tin[0]^xor0; + tout1=tin[1]^xor1; + l2cn(tout0,tout1,out,l+8); +#ifndef CBC_ENC_C__DONT_UPDATE_IV + xor0=tin0; + xor1=tin1; +#endif + } +#ifndef CBC_ENC_C__DONT_UPDATE_IV + iv = &(*ivec)[0]; l2c(xor0,iv); l2c(xor1,iv); +#endif } tin0=tin1=tout0=tout1=xor0=xor1=0; tin[0]=tin[1]=0; } - |