X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=crypto%2Fdes%2Fofb_enc.c;h=a8f425a575a13bc2ff1cbd8a1f02da213d479359;hb=a53955d8abd68c604de02cc1e101c66169207fb7;hp=9b2ecb6749a324d9a514cf4d14bd2b7b17303d33;hpb=b7896b3cb86d80206af14a14d69b0717786f2729;p=oweals%2Fopenssl.git diff --git a/crypto/des/ofb_enc.c b/crypto/des/ofb_enc.c index 9b2ecb6749..a8f425a575 100644 --- a/crypto/des/ofb_enc.c +++ b/crypto/des/ofb_enc.c @@ -1,5 +1,5 @@ /* crypto/des/ofb_enc.c */ -/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com) +/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written @@ -64,15 +64,10 @@ * the second. The second 12 bits will come from the 3rd and half the 4th * byte. */ -void des_ofb_encrypt(in, out, numbits, length, schedule, ivec) -unsigned char *in; -unsigned char *out; -int numbits; -long length; -des_key_schedule schedule; -des_cblock (*ivec); +void des_ofb_encrypt(const unsigned char *in, unsigned char *out, int numbits, + long length, des_key_schedule schedule, des_cblock *ivec) { - register DES_LONG d0,d1,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 long l=length; register int num=numbits; @@ -94,29 +89,46 @@ des_cblock (*ivec); mask0=0xffffffffL; else mask0=(1L< 0) { + ti[0]=v0; + ti[1]=v1; des_encrypt((DES_LONG *)ti,schedule,DES_ENCRYPT); + vv0=ti[0]; + vv1=ti[1]; c2ln(in,d0,d1,n); in+=n; - d0=(d0^ti[0])&mask0; - d1=(d1^ti[1])&mask1; + d0=(d0^vv0)&mask0; + d1=(d1^vv1)&mask1; l2cn(d0,d1,out,n); out+=n; + + if (num == 32) + { v0=v1; v1=vv0; } + else if (num == 64) + { v0=vv0; v1=vv1; } + else if (num > 32) /* && num != 64 */ + { + v0=((v1>>(num-32))|(vv0<<(64-num)))&0xffffffffL; + v1=((vv0>>(num-32))|(vv1<<(64-num)))&0xffffffffL; + } + else /* num < 32 */ + { + v0=((v0>>num)|(v1<<(32-num)))&0xffffffffL; + v1=((v1>>num)|(vv0<<(32-num)))&0xffffffffL; + } } - v0=ti[0]; - v1=ti[1]; - iv=(unsigned char *)ivec; + iv = &(*ivec)[0]; l2c(v0,iv); l2c(v1,iv); - v0=v1=d0=d1=ti[0]=ti[1]=0; + v0=v1=d0=d1=ti[0]=ti[1]=vv0=vv1=0; }