Convert IDEA cipher to use 64-bit modes helper functions.

Signed-off-by: Dmitry Baryshkov <dbarysh...@gmail.com>
---
 src/lib/libcrypto/idea/i_cbc.c   | 74 +++-----------------------------
 src/lib/libcrypto/idea/i_cfb64.c | 57 ++----------------------
 src/lib/libcrypto/idea/i_ofb64.c | 47 ++------------------
 3 files changed, 13 insertions(+), 165 deletions(-)

diff --git a/src/lib/libcrypto/idea/i_cbc.c b/src/lib/libcrypto/idea/i_cbc.c
index 5bb9640c3403..556a4aa5cbf3 100644
--- a/src/lib/libcrypto/idea/i_cbc.c
+++ b/src/lib/libcrypto/idea/i_cbc.c
@@ -57,81 +57,17 @@
  */
 
 #include <openssl/idea.h>
+#include <openssl/modes.h>
 #include "idea_lcl.h"
 
 void idea_cbc_encrypt(const unsigned char *in, unsigned char *out, long length,
             IDEA_KEY_SCHEDULE *ks, unsigned char *iv, int encrypt)
-       {
-       unsigned long tin0,tin1;
-       unsigned long tout0,tout1,xor0,xor1;
-       long l=length;
-       unsigned long tin[2];
-
+{
        if (encrypt)
-               {
-               n2l(iv,tout0);
-               n2l(iv,tout1);
-               iv-=8;
-               for (l-=8; l>=0; l-=8)
-                       {
-                       n2l(in,tin0);
-                       n2l(in,tin1);
-                       tin0^=tout0;
-                       tin1^=tout1;
-                       tin[0]=tin0;
-                       tin[1]=tin1;
-                       idea_encrypt(tin,ks);
-                       tout0=tin[0]; l2n(tout0,out);
-                       tout1=tin[1]; l2n(tout1,out);
-                       }
-               if (l != -8)
-                       {
-                       n2ln(in,tin0,tin1,l+8);
-                       tin0^=tout0;
-                       tin1^=tout1;
-                       tin[0]=tin0;
-                       tin[1]=tin1;
-                       idea_encrypt(tin,ks);
-                       tout0=tin[0]; l2n(tout0,out);
-                       tout1=tin[1]; l2n(tout1,out);
-                       }
-               l2n(tout0,iv);
-               l2n(tout1,iv);
-               }
+               CRYPTO_cbc64_encrypt(in, out, length, ks, iv, 
(block64_f)idea_ecb_encrypt);
        else
-               {
-               n2l(iv,xor0);
-               n2l(iv,xor1);
-               iv-=8;
-               for (l-=8; l>=0; l-=8)
-                       {
-                       n2l(in,tin0); tin[0]=tin0;
-                       n2l(in,tin1); tin[1]=tin1;
-                       idea_encrypt(tin,ks);
-                       tout0=tin[0]^xor0;
-                       tout1=tin[1]^xor1;
-                       l2n(tout0,out);
-                       l2n(tout1,out);
-                       xor0=tin0;
-                       xor1=tin1;
-                       }
-               if (l != -8)
-                       {
-                       n2l(in,tin0); tin[0]=tin0;
-                       n2l(in,tin1); tin[1]=tin1;
-                       idea_encrypt(tin,ks);
-                       tout0=tin[0]^xor0;
-                       tout1=tin[1]^xor1;
-                       l2nn(tout0,tout1,out,l+8);
-                       xor0=tin0;
-                       xor1=tin1;
-                       }
-               l2n(xor0,iv);
-               l2n(xor1,iv);
-               }
-       tin0=tin1=tout0=tout1=xor0=xor1=0;
-       tin[0]=tin[1]=0;
-       }
+               CRYPTO_cbc64_decrypt(in, out, length, ks, iv, 
(block64_f)idea_ecb_encrypt);
+}
 
 void idea_encrypt(unsigned long *d, IDEA_KEY_SCHEDULE *key)
        {
diff --git a/src/lib/libcrypto/idea/i_cfb64.c b/src/lib/libcrypto/idea/i_cfb64.c
index b979aaef8669..a74b50d82309 100644
--- a/src/lib/libcrypto/idea/i_cfb64.c
+++ b/src/lib/libcrypto/idea/i_cfb64.c
@@ -57,6 +57,7 @@
  */
 
 #include <openssl/idea.h>
+#include <openssl/modes.h>
 #include "idea_lcl.h"
 
 /* The input and output encrypted as though 64bit cfb mode is being
@@ -67,56 +68,6 @@
 void idea_cfb64_encrypt(const unsigned char *in, unsigned char *out,
                        long length, IDEA_KEY_SCHEDULE *schedule,
                        unsigned char *ivec, int *num, int encrypt)
-       {
-       unsigned long v0,v1,t;
-       int n= *num;
-       long l=length;
-       unsigned long ti[2];
-       unsigned char *iv,c,cc;
-
-       iv=(unsigned char *)ivec;
-       if (encrypt)
-               {
-               while (l--)
-                       {
-                       if (n == 0)
-                               {
-                               n2l(iv,v0); ti[0]=v0;
-                               n2l(iv,v1); ti[1]=v1;
-                               idea_encrypt((unsigned long *)ti,schedule);
-                               iv=(unsigned char *)ivec;
-                               t=ti[0]; l2n(t,iv);
-                               t=ti[1]; l2n(t,iv);
-                               iv=(unsigned char *)ivec;
-                               }
-                       c= *(in++)^iv[n];
-                       *(out++)=c;
-                       iv[n]=c;
-                       n=(n+1)&0x07;
-                       }
-               }
-       else
-               {
-               while (l--)
-                       {
-                       if (n == 0)
-                               {
-                               n2l(iv,v0); ti[0]=v0;
-                               n2l(iv,v1); ti[1]=v1;
-                               idea_encrypt((unsigned long *)ti,schedule);
-                               iv=(unsigned char *)ivec;
-                               t=ti[0]; l2n(t,iv);
-                               t=ti[1]; l2n(t,iv);
-                               iv=(unsigned char *)ivec;
-                               }
-                       cc= *(in++);
-                       c=iv[n];
-                       iv[n]=cc;
-                       *(out++)=c^cc;
-                       n=(n+1)&0x07;
-                       }
-               }
-       v0=v1=ti[0]=ti[1]=t=c=cc=0;
-       *num=n;
-       }
-
+{
+       CRYPTO_cfb64_encrypt(in, out, length, schedule, ivec, num, encrypt, 
(block64_f)idea_ecb_encrypt);
+}
diff --git a/src/lib/libcrypto/idea/i_ofb64.c b/src/lib/libcrypto/idea/i_ofb64.c
index 376dad9f6d91..9775bc211595 100644
--- a/src/lib/libcrypto/idea/i_ofb64.c
+++ b/src/lib/libcrypto/idea/i_ofb64.c
@@ -57,6 +57,7 @@
  */
 
 #include <openssl/idea.h>
+#include <openssl/modes.h>
 #include "idea_lcl.h"
 
 /* The input and output encrypted as though 64bit ofb mode is being
@@ -66,46 +67,6 @@
 void idea_ofb64_encrypt(const unsigned char *in, unsigned char *out,
                        long length, IDEA_KEY_SCHEDULE *schedule,
                        unsigned char *ivec, int *num)
-       {
-       unsigned long v0,v1,t;
-       int n= *num;
-       long l=length;
-       unsigned char d[8];
-       char *dp;
-       unsigned long ti[2];
-       unsigned char *iv;
-       int save=0;
-
-       iv=(unsigned char *)ivec;
-       n2l(iv,v0);
-       n2l(iv,v1);
-       ti[0]=v0;
-       ti[1]=v1;
-       dp=(char *)d;
-       l2n(v0,dp);
-       l2n(v1,dp);
-       while (l--)
-               {
-               if (n == 0)
-                       {
-                       idea_encrypt((unsigned long *)ti,schedule);
-                       dp=(char *)d;
-                       t=ti[0]; l2n(t,dp);
-                       t=ti[1]; l2n(t,dp);
-                       save++;
-                       }
-               *(out++)= *(in++)^d[n];
-               n=(n+1)&0x07;
-               }
-       if (save)
-               {
-               v0=ti[0];
-               v1=ti[1];
-               iv=(unsigned char *)ivec;
-               l2n(v0,iv);
-               l2n(v1,iv);
-               }
-       t=v0=v1=ti[0]=ti[1]=0;
-       *num=n;
-       }
-
+{
+       CRYPTO_ofb64_encrypt(in, out, length, schedule, ivec, num, 
(block64_f)idea_ecb_encrypt);
+}
-- 
2.27.0

Reply via email to