isakmpd is the only user of the cast cipher from the libc,
so i'd like to move it to the openssl version and remove
cast cipher from the libc.
diff is tested against patched and unpatched versions in
both initiator and responder modes.
OK?
Index: crypto.c
===================================================================
RCS file: /home/cvs/src/sbin/isakmpd/crypto.c,v
retrieving revision 1.30
diff -u -p -r1.30 crypto.c
--- crypto.c 15 Oct 2010 10:18:42 -0000 1.30
+++ crypto.c 18 Oct 2010 08:37:58 -0000
@@ -204,38 +204,25 @@ blf_decrypt(struct keystate *ks, u_int8_
enum cryptoerr
cast_init(struct keystate *ks, u_int8_t *key, u_int16_t len)
{
- cast_setkey(&ks->ks_cast, key, len);
+ CAST_set_key(&ks->ks_cast, len, key);
return EOKAY;
}
void
cast1_encrypt(struct keystate *ks, u_int8_t *data, u_int16_t len)
{
- u_int16_t i, blocksize = ks->xf->blocksize;
+ u_int16_t blocksize = ks->xf->blocksize;
u_int8_t *iv = ks->liv;
memcpy(iv, ks->riv, blocksize);
- for (i = 0; i < len; data += blocksize, i += blocksize) {
- XOR64(data, iv);
- cast_encrypt(&ks->ks_cast, data, data);
- SET64(iv, data);
- }
+ CAST_cbc_encrypt(data, data, len, &ks->ks_cast, iv, 1);
}
void
cast1_decrypt(struct keystate *ks, u_int8_t *data, u_int16_t len)
{
- u_int16_t i, blocksize = ks->xf->blocksize;
-
- data += len - blocksize;
- for (i = len - blocksize; i >= blocksize; data -= blocksize,
- i -= blocksize) {
- cast_decrypt(&ks->ks_cast, data, data);
- XOR64(data, data - blocksize);
- }
- cast_decrypt(&ks->ks_cast, data, data);
- XOR64(data, ks->riv);
+ CAST_cbc_encrypt(data, data, len, &ks->ks_cast, ks->riv, 0);
}
enum cryptoerr
Index: crypto.h
===================================================================
RCS file: /home/cvs/src/sbin/isakmpd/crypto.h,v
retrieving revision 1.19
diff -u -p -r1.19 crypto.h
--- crypto.h 15 Oct 2010 10:18:42 -0000 1.19
+++ crypto.h 18 Oct 2010 08:37:22 -0000
@@ -34,7 +34,7 @@
#include <openssl/des.h>
#include <blf.h>
-#include <cast.h>
+#include <openssl/cast.h>
#include <openssl/aes.h>
@@ -82,7 +82,7 @@ struct keystate {
union {
DES_key_schedule desks[3];
blf_ctx blfks;
- cast_key castks;
+ CAST_KEY castks;
AES_KEY aesks[2];
} keydata;
};