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;
 };

Reply via email to