summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/des
diff options
context:
space:
mode:
authordjm <>2005-04-29 05:37:34 +0000
committerdjm <>2005-04-29 05:37:34 +0000
commita95585a25ab25668b931a78b7543f707a3354db8 (patch)
treef9e9febf7ac0c8f5d6df761fe70fd613aac06203 /src/lib/libcrypto/des
parent58c08aa241f168c84ce7cc3052454ea59a44eada (diff)
downloadopenbsd-a95585a25ab25668b931a78b7543f707a3354db8.tar.gz
openbsd-a95585a25ab25668b931a78b7543f707a3354db8.tar.bz2
openbsd-a95585a25ab25668b931a78b7543f707a3354db8.zip
import of openssl-0.9.7g; tested on platforms from alpha to zaurus, ok deraadt@
Diffstat (limited to 'src/lib/libcrypto/des')
-rw-r--r--src/lib/libcrypto/des/cfb64ede.c112
-rw-r--r--src/lib/libcrypto/des/des.h6
-rw-r--r--src/lib/libcrypto/des/des_enc.c8
-rw-r--r--src/lib/libcrypto/des/ecb3_enc.c4
-rw-r--r--src/lib/libcrypto/des/set_key.c4
5 files changed, 130 insertions, 4 deletions
diff --git a/src/lib/libcrypto/des/cfb64ede.c b/src/lib/libcrypto/des/cfb64ede.c
index 60c1aa08db..f3c6018528 100644
--- a/src/lib/libcrypto/des/cfb64ede.c
+++ b/src/lib/libcrypto/des/cfb64ede.c
@@ -57,6 +57,7 @@
57 */ 57 */
58 58
59#include "des_locl.h" 59#include "des_locl.h"
60#include "e_os.h"
60 61
61/* The input and output encrypted as though 64bit cfb mode is being 62/* The input and output encrypted as though 64bit cfb mode is being
62 * used. The extra state information to record how much of the 63 * used. The extra state information to record how much of the
@@ -140,3 +141,114 @@ void DES_ede2_cfb64_encrypt(unsigned char *in, unsigned char *out, long length,
140 DES_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,enc); 141 DES_ede3_cfb64_encrypt(in,out,length,ks1,ks2,ks1,ivec,num,enc);
141 } 142 }
142#endif 143#endif
144
145/* This is compatible with the single key CFB-r for DES, even thought that's
146 * not what EVP needs.
147 */
148
149void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
150 int numbits,long length,DES_key_schedule *ks1,
151 DES_key_schedule *ks2,DES_key_schedule *ks3,
152 DES_cblock *ivec,int enc)
153 {
154 register DES_LONG d0,d1,v0,v1;
155 register long l=length;
156 register int num=numbits,n=(numbits+7)/8,i;
157 DES_LONG ti[2];
158 unsigned char *iv;
159 unsigned char ovec[16];
160
161 if (num > 64) return;
162 iv = &(*ivec)[0];
163 c2l(iv,v0);
164 c2l(iv,v1);
165 if (enc)
166 {
167 while (l >= n)
168 {
169 l-=n;
170 ti[0]=v0;
171 ti[1]=v1;
172 DES_encrypt3(ti,ks1,ks2,ks3);
173 c2ln(in,d0,d1,n);
174 in+=n;
175 d0^=ti[0];
176 d1^=ti[1];
177 l2cn(d0,d1,out,n);
178 out+=n;
179 /* 30-08-94 - eay - changed because l>>32 and
180 * l<<32 are bad under gcc :-( */
181 if (num == 32)
182 { v0=v1; v1=d0; }
183 else if (num == 64)
184 { v0=d0; v1=d1; }
185 else
186 {
187 iv=&ovec[0];
188 l2c(v0,iv);
189 l2c(v1,iv);
190 l2c(d0,iv);
191 l2c(d1,iv);
192 /* shift ovec left most of the bits... */
193 memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
194 /* now the remaining bits */
195 if(num%8 != 0)
196 for(i=0 ; i < 8 ; ++i)
197 {
198 ovec[i]<<=num%8;
199 ovec[i]|=ovec[i+1]>>(8-num%8);
200 }
201 iv=&ovec[0];
202 c2l(iv,v0);
203 c2l(iv,v1);
204 }
205 }
206 }
207 else
208 {
209 while (l >= n)
210 {
211 l-=n;
212 ti[0]=v0;
213 ti[1]=v1;
214 DES_encrypt3(ti,ks1,ks2,ks3);
215 c2ln(in,d0,d1,n);
216 in+=n;
217 /* 30-08-94 - eay - changed because l>>32 and
218 * l<<32 are bad under gcc :-( */
219 if (num == 32)
220 { v0=v1; v1=d0; }
221 else if (num == 64)
222 { v0=d0; v1=d1; }
223 else
224 {
225 iv=&ovec[0];
226 l2c(v0,iv);
227 l2c(v1,iv);
228 l2c(d0,iv);
229 l2c(d1,iv);
230 /* shift ovec left most of the bits... */
231 memmove(ovec,ovec+num/8,8+(num%8 ? 1 : 0));
232 /* now the remaining bits */
233 if(num%8 != 0)
234 for(i=0 ; i < 8 ; ++i)
235 {
236 ovec[i]<<=num%8;
237 ovec[i]|=ovec[i+1]>>(8-num%8);
238 }
239 iv=&ovec[0];
240 c2l(iv,v0);
241 c2l(iv,v1);
242 }
243 d0^=ti[0];
244 d1^=ti[1];
245 l2cn(d0,d1,out,n);
246 out+=n;
247 }
248 }
249 iv = &(*ivec)[0];
250 l2c(v0,iv);
251 l2c(v1,iv);
252 v0=v1=d0=d1=ti[0]=ti[1]=0;
253 }
254
diff --git a/src/lib/libcrypto/des/des.h b/src/lib/libcrypto/des/des.h
index daaf239dbe..c5df1c9c7b 100644
--- a/src/lib/libcrypto/des/des.h
+++ b/src/lib/libcrypto/des/des.h
@@ -128,7 +128,7 @@ OPENSSL_DECLARE_GLOBAL(int,DES_rw_mode); /* defaults to DES_PCBC_MODE */
128#define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode) 128#define DES_rw_mode OPENSSL_GLOBAL_REF(DES_rw_mode)
129 129
130const char *DES_options(void); 130const char *DES_options(void);
131void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, 131void DES_ecb3_encrypt(const unsigned char *input, unsigned char *output,
132 DES_key_schedule *ks1,DES_key_schedule *ks2, 132 DES_key_schedule *ks1,DES_key_schedule *ks2,
133 DES_key_schedule *ks3, int enc); 133 DES_key_schedule *ks3, int enc);
134DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output, 134DES_LONG DES_cbc_cksum(const unsigned char *input,DES_cblock *output,
@@ -187,6 +187,10 @@ void DES_ede3_cfb64_encrypt(const unsigned char *in,unsigned char *out,
187 long length,DES_key_schedule *ks1, 187 long length,DES_key_schedule *ks1,
188 DES_key_schedule *ks2,DES_key_schedule *ks3, 188 DES_key_schedule *ks2,DES_key_schedule *ks3,
189 DES_cblock *ivec,int *num,int enc); 189 DES_cblock *ivec,int *num,int enc);
190void DES_ede3_cfb_encrypt(const unsigned char *in,unsigned char *out,
191 int numbits,long length,DES_key_schedule *ks1,
192 DES_key_schedule *ks2,DES_key_schedule *ks3,
193 DES_cblock *ivec,int enc);
190void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out, 194void DES_ede3_ofb64_encrypt(const unsigned char *in,unsigned char *out,
191 long length,DES_key_schedule *ks1, 195 long length,DES_key_schedule *ks1,
192 DES_key_schedule *ks2,DES_key_schedule *ks3, 196 DES_key_schedule *ks2,DES_key_schedule *ks3,
diff --git a/src/lib/libcrypto/des/des_enc.c b/src/lib/libcrypto/des/des_enc.c
index 1c37ab96d3..72be2d98d7 100644
--- a/src/lib/libcrypto/des/des_enc.c
+++ b/src/lib/libcrypto/des/des_enc.c
@@ -58,6 +58,8 @@
58 58
59#include "des_locl.h" 59#include "des_locl.h"
60 60
61#ifndef OPENSSL_FIPS
62
61void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc) 63void DES_encrypt1(DES_LONG *data, DES_key_schedule *ks, int enc)
62 { 64 {
63 register DES_LONG l,r,t,u; 65 register DES_LONG l,r,t,u;
@@ -287,8 +289,12 @@ void DES_decrypt3(DES_LONG *data, DES_key_schedule *ks1,
287 data[1]=r; 289 data[1]=r;
288 } 290 }
289 291
292#endif /* ndef OPENSSL_FIPS */
293
290#ifndef DES_DEFAULT_OPTIONS 294#ifndef DES_DEFAULT_OPTIONS
291 295
296#if !defined(OPENSSL_FIPS_DES_ASM)
297
292#undef CBC_ENC_C__DONT_UPDATE_IV 298#undef CBC_ENC_C__DONT_UPDATE_IV
293#include "ncbc_enc.c" /* DES_ncbc_encrypt */ 299#include "ncbc_enc.c" /* DES_ncbc_encrypt */
294 300
@@ -404,4 +410,6 @@ void DES_ede3_cbc_encrypt(const unsigned char *input, unsigned char *output,
404 tin[0]=tin[1]=0; 410 tin[0]=tin[1]=0;
405 } 411 }
406 412
413#endif /* !defined(OPENSSL_FIPS_DES_ASM) */
414
407#endif /* DES_DEFAULT_OPTIONS */ 415#endif /* DES_DEFAULT_OPTIONS */
diff --git a/src/lib/libcrypto/des/ecb3_enc.c b/src/lib/libcrypto/des/ecb3_enc.c
index c3437bc606..fa0c9c4d4f 100644
--- a/src/lib/libcrypto/des/ecb3_enc.c
+++ b/src/lib/libcrypto/des/ecb3_enc.c
@@ -58,15 +58,13 @@
58 58
59#include "des_locl.h" 59#include "des_locl.h"
60 60
61void DES_ecb3_encrypt(const_DES_cblock *input, DES_cblock *output, 61void DES_ecb3_encrypt(const unsigned char *in, unsigned char *out,
62 DES_key_schedule *ks1, DES_key_schedule *ks2, 62 DES_key_schedule *ks1, DES_key_schedule *ks2,
63 DES_key_schedule *ks3, 63 DES_key_schedule *ks3,
64 int enc) 64 int enc)
65 { 65 {
66 register DES_LONG l0,l1; 66 register DES_LONG l0,l1;
67 DES_LONG ll[2]; 67 DES_LONG ll[2];
68 const unsigned char *in = &(*input)[0];
69 unsigned char *out = &(*output)[0];
70 68
71 c2l(in,l0); 69 c2l(in,l0);
72 c2l(in,l1); 70 c2l(in,l1);
diff --git a/src/lib/libcrypto/des/set_key.c b/src/lib/libcrypto/des/set_key.c
index 143008ed9c..8881d46a7a 100644
--- a/src/lib/libcrypto/des/set_key.c
+++ b/src/lib/libcrypto/des/set_key.c
@@ -65,6 +65,8 @@
65 */ 65 */
66#include "des_locl.h" 66#include "des_locl.h"
67 67
68#ifndef OPENSSL_FIPS
69
68OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */ 70OPENSSL_IMPLEMENT_GLOBAL(int,DES_check_key); /* defaults to false */
69 71
70static const unsigned char odd_parity[256]={ 72static const unsigned char odd_parity[256]={
@@ -405,3 +407,5 @@ void des_fixup_key_parity(des_cblock *key)
405 des_set_odd_parity(key); 407 des_set_odd_parity(key);
406 } 408 }
407*/ 409*/
410
411#endif /* ndef OPENSSL_FIPS */