summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/sha
diff options
context:
space:
mode:
authorcvs2svn <admin@example.com>1999-10-10 21:32:03 +0000
committercvs2svn <admin@example.com>1999-10-10 21:32:03 +0000
commit14e61fef302fbc25ab63e38bd35445637ca68139 (patch)
treedae5e50679bccd1ed8d7d4041fbb9f3d96bbc98c /src/lib/libcrypto/sha
parent3ef9529fbf0c1f8f1c9da1172e92ad3370d5fcfe (diff)
downloadopenbsd-OPENBSD_2_6_BASE.tar.gz
openbsd-OPENBSD_2_6_BASE.tar.bz2
openbsd-OPENBSD_2_6_BASE.zip
This commit was manufactured by cvs2git to create tag 'OPENBSD_2_6_BASE'.OPENBSD_2_6_BASE
Diffstat (limited to 'src/lib/libcrypto/sha')
-rw-r--r--src/lib/libcrypto/sha/asm/sha1-586.pl491
-rw-r--r--src/lib/libcrypto/sha/sha.h119
-rw-r--r--src/lib/libcrypto/sha/sha1_one.c76
-rw-r--r--src/lib/libcrypto/sha/sha1dgst.c498
-rw-r--r--src/lib/libcrypto/sha/sha_locl.h288
5 files changed, 0 insertions, 1472 deletions
diff --git a/src/lib/libcrypto/sha/asm/sha1-586.pl b/src/lib/libcrypto/sha/asm/sha1-586.pl
deleted file mode 100644
index 04e42ab09f..0000000000
--- a/src/lib/libcrypto/sha/asm/sha1-586.pl
+++ /dev/null
@@ -1,491 +0,0 @@
1#!/usr/local/bin/perl
2
3$normal=0;
4
5push(@INC,"perlasm","../../perlasm");
6require "x86asm.pl";
7
8&asm_init($ARGV[0],"sha1-586.pl",$ARGV[$#ARGV] eq "386");
9
10$A="eax";
11$B="ebx";
12$C="ecx";
13$D="edx";
14$E="edi";
15$T="esi";
16$tmp1="ebp";
17
18$off=9*4;
19
20@K=(0x5a827999,0x6ed9eba1,0x8f1bbcdc,0xca62c1d6);
21
22&sha1_block("sha1_block_x86");
23
24&asm_finish();
25
26sub Nn
27 {
28 local($p)=@_;
29 local(%n)=($A,$T,$B,$A,$C,$B,$D,$C,$E,$D,$T,$E);
30 return($n{$p});
31 }
32
33sub Np
34 {
35 local($p)=@_;
36 local(%n)=($A,$T,$B,$A,$C,$B,$D,$C,$E,$D,$T,$E);
37 local(%n)=($A,$B,$B,$C,$C,$D,$D,$E,$E,$T,$T,$A);
38 return($n{$p});
39 }
40
41sub Na
42 {
43 local($n)=@_;
44 return( (($n )&0x0f),
45 (($n+ 2)&0x0f),
46 (($n+ 8)&0x0f),
47 (($n+13)&0x0f),
48 (($n+ 1)&0x0f));
49 }
50
51sub X_expand
52 {
53 local($in)=@_;
54
55 &comment("First, load the words onto the stack in network byte order");
56 for ($i=0; $i<16; $i++)
57 {
58 &mov("eax",&DWP(($i+0)*4,$in,"",0)) unless $i == 0;
59 &bswap("eax");
60 &mov(&swtmp($i+0),"eax");
61 }
62
63 &comment("We now have the X array on the stack");
64 &comment("starting at sp-4");
65 }
66
67# Rules of engagement
68# F is always trashable at the start, the running total.
69# E becomes the next F so it can be trashed after it has been 'accumulated'
70# F becomes A in the next round. We don't need to access it much.
71# During the X update part, the result ends up in $X[$n0].
72
73sub BODY_00_15
74 {
75 local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
76
77return if $n & 1;
78 &comment("00_15 $n");
79
80 &mov($f,$c);
81
82 &mov($tmp1,$a);
83 &xor($f,$d); # F2
84
85 &rotl($tmp1,5); # A2
86
87 &and($f,$b); # F3
88 &add($tmp1,$e);
89
90 &rotr($b,1); # B1 <- F
91 &mov($e,&swtmp($n)); # G1
92
93 &rotr($b,1); # B1 <- F
94 &xor($f,$d); # F4
95
96 &lea($tmp1,&DWP($K,$tmp1,$e,1));
97
98############################
99# &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
100# &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
101$n++;
102 local($n0,$n1,$n2,$n3,$np)=&Na($n);
103 ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
104
105 &mov($f,$c);
106
107 &add($a,$tmp1); # MOVED DOWN
108 &xor($f,$d); # F2
109
110 &mov($tmp1,$a);
111 &and($f,$b); # F3
112
113 &rotl($tmp1,5); # A2
114
115 &add($tmp1,$e);
116 &mov($e,&swtmp($n)); # G1
117
118 &rotr($b,1); # B1 <- F
119 &xor($f,$d); # F4
120
121 &rotr($b,1); # B1 <- F
122 &lea($tmp1,&DWP($K,$tmp1,$e,1));
123
124 &add($f,$tmp1);
125 }
126
127sub BODY_16_19
128 {
129 local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
130 local($n0,$n1,$n2,$n3,$np)=&Na($n);
131
132return if $n & 1;
133 &comment("16_19 $n");
134
135 &nop() if ($pos < 0);
136&mov($tmp1,&swtmp($n0)); # X1
137 &mov($f,&swtmp($n1)); # X2
138&xor($f,$tmp1); # X3
139 &mov($tmp1,&swtmp($n2)); # X4
140&xor($f,$tmp1); # X5
141 &mov($tmp1,&swtmp($n3)); # X6
142&xor($f,$tmp1); # X7 - slot
143 &mov($tmp1,$c); # F1
144&rotl($f,1); # X8 - slot
145 &xor($tmp1,$d); # F2
146&mov(&swtmp($n0),$f); # X9 - anytime
147 &and($tmp1,$b); # F3
148&lea($f,&DWP($K,$f,$e,1)); # tot=X+K+e
149 &xor($tmp1,$d); # F4
150&mov($e,$a); # A1
151 &add($f,$tmp1); # tot+=F();
152
153&rotl($e,5); # A2
154
155&rotr($b,1); # B1 <- F
156 &add($f,$e); # tot+=a
157
158############################
159# &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
160# &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
161$n++;
162 local($n0,$n1,$n2,$n3,$np)=&Na($n);
163 ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
164
165
166&mov($f,&swtmp($n0)); # X1
167 &mov($tmp1,&swtmp($n1)); # X2
168&xor($f,$tmp1); # X3
169 &mov($tmp1,&swtmp($n2)); # X4
170&xor($f,$tmp1); # X5
171 &mov($tmp1,&swtmp($n3)); # X6
172&rotr($c,1); #&rotr($b,1); # B1 <- F # MOVED DOWN
173 &xor($f,$tmp1); # X7 - slot
174&rotl($f,1); # X8 - slot
175 &mov($tmp1,$c); # F1
176&xor($tmp1,$d); # F2
177 &mov(&swtmp($n0),$f); # X9 - anytime
178&and($tmp1,$b); # F3
179 &lea($f,&DWP($K,$f,$e,1)); # tot=X+K+e
180
181&xor($tmp1,$d); # F4
182 &mov($e,$a); # A1
183
184&rotl($e,5); # A2
185
186&rotr($b,1); # B1 <- F
187 &add($f,$e); # tot+=a
188
189&rotr($b,1); # B1 <- F
190 &add($f,$tmp1); # tot+=F();
191
192 }
193
194sub BODY_20_39
195 {
196 local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
197
198 &comment("20_39 $n");
199 local($n0,$n1,$n2,$n3,$np)=&Na($n);
200
201&mov($f,&swtmp($n0)); # X1
202 &mov($tmp1,&swtmp($n1)); # X2
203&xor($f,$tmp1); # X3
204 &mov($tmp1,&swtmp($n2)); # X4
205&xor($f,$tmp1); # X5
206 &mov($tmp1,&swtmp($n3)); # X6
207&xor($f,$tmp1); # X7 - slot
208 &mov($tmp1,$b); # F1
209&rotl($f,1); # X8 - slot
210 &xor($tmp1,$c); # F2
211&mov(&swtmp($n0),$f); # X9 - anytime
212 &xor($tmp1,$d); # F3
213
214&lea($f,&DWP($K,$f,$e,1)); # tot=X+K+e
215 &mov($e,$a); # A1
216
217&rotl($e,5); # A2
218
219if ($n != 79) # last loop
220 {
221 &rotr($b,1); # B1 <- F
222 &add($e,$tmp1); # tmp1=F()+a
223
224 &rotr($b,1); # B2 <- F
225 &add($f,$e); # tot+=tmp1;
226 }
227else
228 {
229 &add($e,$tmp1); # tmp1=F()+a
230 &mov($tmp1,&wparam(0));
231
232 &rotr($b,1); # B1 <- F
233 &add($f,$e); # tot+=tmp1;
234
235 &rotr($b,1); # B2 <- F
236 }
237 }
238
239sub BODY_40_59
240 {
241 local($pos,$K,$X,$n,$a,$b,$c,$d,$e,$f)=@_;
242
243 &comment("40_59 $n");
244 return if $n & 1;
245 local($n0,$n1,$n2,$n3,$np)=&Na($n);
246
247&mov($f,&swtmp($n0)); # X1
248 &mov($tmp1,&swtmp($n1)); # X2
249&xor($f,$tmp1); # X3
250 &mov($tmp1,&swtmp($n2)); # X4
251&xor($f,$tmp1); # X5
252 &mov($tmp1,&swtmp($n3)); # X6
253&xor($f,$tmp1); # X7 - slot
254 &mov($tmp1,$b); # F1
255&rotl($f,1); # X8 - slot
256 &or($tmp1,$c); # F2
257&mov(&swtmp($n0),$f); # X9 - anytime
258 &and($tmp1,$d); # F3
259
260&lea($f,&DWP($K,$f,$e,1)); # tot=X+K+e
261 &mov($e,$b); # F4
262
263&rotr($b,1); # B1 <- F
264 &and($e,$c); # F5
265
266&or($tmp1,$e); # F6
267 &mov($e,$a); # A1
268
269&rotl($e,5); # A2
270
271&add($tmp1,$e); # tmp1=F()+a
272
273############################
274# &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
275# &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
276$n++;
277 local($n0,$n1,$n2,$n3,$np)=&Na($n);
278 ($b,$c,$d,$e,$f,$a)=($a,$b,$c,$d,$e,$f);
279
280 &mov($f,&swtmp($n0)); # X1
281&add($a,$tmp1); # tot+=tmp1; # moved was add f,tmp1
282 &mov($tmp1,&swtmp($n1)); # X2
283&xor($f,$tmp1); # X3
284 &mov($tmp1,&swtmp($n2)); # X4
285&xor($f,$tmp1); # X5
286 &mov($tmp1,&swtmp($n3)); # X6
287&rotr($c,1); # B2 <- F # moved was rotr b,1
288 &xor($f,$tmp1); # X7 - slot
289&rotl($f,1); # X8 - slot
290 &mov($tmp1,$b); # F1
291&mov(&swtmp($n0),$f); # X9 - anytime
292 &or($tmp1,$c); # F2
293&lea($f,&DWP($K,$f,$e,1)); # tot=X+K+e
294 &mov($e,$b); # F4
295&and($tmp1,$d); # F3
296 &and($e,$c); # F5
297
298&or($tmp1,$e); # F6
299 &mov($e,$a); # A1
300
301&rotl($e,5); # A2
302
303&rotr($b,1); # B1 <- F
304 &add($tmp1,$e); # tmp1=F()+a
305
306&rotr($b,1); # B2 <- F
307 &add($f,$tmp1); # tot+=tmp1;
308 }
309
310sub BODY_60_79
311 {
312 &BODY_20_39(@_);
313 }
314
315sub sha1_block
316 {
317 local($name)=@_;
318
319 &function_begin_B($name,"");
320
321 # parameter 1 is the MD5_CTX structure.
322 # A 0
323 # B 4
324 # C 8
325 # D 12
326 # E 16
327
328 &push("esi");
329 &push("ebp");
330 &mov("eax", &wparam(2));
331 &mov("esi", &wparam(1));
332 &add("eax", "esi"); # offset to leave on
333 &mov("ebp", &wparam(0));
334 &push("ebx");
335 &sub("eax", 64);
336 &push("edi");
337 &mov($B, &DWP( 4,"ebp","",0));
338 &stack_push(18);
339 &mov($D, &DWP(12,"ebp","",0));
340 &mov($E, &DWP(16,"ebp","",0));
341 &mov($C, &DWP( 8,"ebp","",0));
342 &mov(&swtmp(17),"eax");
343
344 &comment("First we need to setup the X array");
345 &mov("eax",&DWP(0,"esi","",0)); # pulled out of X_expand
346
347 &set_label("start") unless $normal;
348
349 &X_expand("esi");
350 &mov(&swtmp(16),"esi");
351
352 &comment("");
353 &comment("Start processing");
354
355 # odd start
356 &mov($A, &DWP( 0,"ebp","",0));
357 $X="esp";
358 &BODY_00_15(-2,$K[0],$X, 0,$A,$B,$C,$D,$E,$T);
359 &BODY_00_15( 0,$K[0],$X, 1,$T,$A,$B,$C,$D,$E);
360 &BODY_00_15( 0,$K[0],$X, 2,$E,$T,$A,$B,$C,$D);
361 &BODY_00_15( 0,$K[0],$X, 3,$D,$E,$T,$A,$B,$C);
362 &BODY_00_15( 0,$K[0],$X, 4,$C,$D,$E,$T,$A,$B);
363 &BODY_00_15( 0,$K[0],$X, 5,$B,$C,$D,$E,$T,$A);
364 &BODY_00_15( 0,$K[0],$X, 6,$A,$B,$C,$D,$E,$T);
365 &BODY_00_15( 0,$K[0],$X, 7,$T,$A,$B,$C,$D,$E);
366 &BODY_00_15( 0,$K[0],$X, 8,$E,$T,$A,$B,$C,$D);
367 &BODY_00_15( 0,$K[0],$X, 9,$D,$E,$T,$A,$B,$C);
368 &BODY_00_15( 0,$K[0],$X,10,$C,$D,$E,$T,$A,$B);
369 &BODY_00_15( 0,$K[0],$X,11,$B,$C,$D,$E,$T,$A);
370 &BODY_00_15( 0,$K[0],$X,12,$A,$B,$C,$D,$E,$T);
371 &BODY_00_15( 0,$K[0],$X,13,$T,$A,$B,$C,$D,$E);
372 &BODY_00_15( 0,$K[0],$X,14,$E,$T,$A,$B,$C,$D);
373 &BODY_00_15( 1,$K[0],$X,15,$D,$E,$T,$A,$B,$C);
374 &BODY_16_19(-1,$K[0],$X,16,$C,$D,$E,$T,$A,$B);
375 &BODY_16_19( 0,$K[0],$X,17,$B,$C,$D,$E,$T,$A);
376 &BODY_16_19( 0,$K[0],$X,18,$A,$B,$C,$D,$E,$T);
377 &BODY_16_19( 1,$K[0],$X,19,$T,$A,$B,$C,$D,$E);
378
379 &BODY_20_39(-1,$K[1],$X,20,$E,$T,$A,$B,$C,$D);
380 &BODY_20_39( 0,$K[1],$X,21,$D,$E,$T,$A,$B,$C);
381 &BODY_20_39( 0,$K[1],$X,22,$C,$D,$E,$T,$A,$B);
382 &BODY_20_39( 0,$K[1],$X,23,$B,$C,$D,$E,$T,$A);
383 &BODY_20_39( 0,$K[1],$X,24,$A,$B,$C,$D,$E,$T);
384 &BODY_20_39( 0,$K[1],$X,25,$T,$A,$B,$C,$D,$E);
385 &BODY_20_39( 0,$K[1],$X,26,$E,$T,$A,$B,$C,$D);
386 &BODY_20_39( 0,$K[1],$X,27,$D,$E,$T,$A,$B,$C);
387 &BODY_20_39( 0,$K[1],$X,28,$C,$D,$E,$T,$A,$B);
388 &BODY_20_39( 0,$K[1],$X,29,$B,$C,$D,$E,$T,$A);
389 &BODY_20_39( 0,$K[1],$X,30,$A,$B,$C,$D,$E,$T);
390 &BODY_20_39( 0,$K[1],$X,31,$T,$A,$B,$C,$D,$E);
391 &BODY_20_39( 0,$K[1],$X,32,$E,$T,$A,$B,$C,$D);
392 &BODY_20_39( 0,$K[1],$X,33,$D,$E,$T,$A,$B,$C);
393 &BODY_20_39( 0,$K[1],$X,34,$C,$D,$E,$T,$A,$B);
394 &BODY_20_39( 0,$K[1],$X,35,$B,$C,$D,$E,$T,$A);
395 &BODY_20_39( 0,$K[1],$X,36,$A,$B,$C,$D,$E,$T);
396 &BODY_20_39( 0,$K[1],$X,37,$T,$A,$B,$C,$D,$E);
397 &BODY_20_39( 0,$K[1],$X,38,$E,$T,$A,$B,$C,$D);
398 &BODY_20_39( 1,$K[1],$X,39,$D,$E,$T,$A,$B,$C);
399
400 &BODY_40_59(-1,$K[2],$X,40,$C,$D,$E,$T,$A,$B);
401 &BODY_40_59( 0,$K[2],$X,41,$B,$C,$D,$E,$T,$A);
402 &BODY_40_59( 0,$K[2],$X,42,$A,$B,$C,$D,$E,$T);
403 &BODY_40_59( 0,$K[2],$X,43,$T,$A,$B,$C,$D,$E);
404 &BODY_40_59( 0,$K[2],$X,44,$E,$T,$A,$B,$C,$D);
405 &BODY_40_59( 0,$K[2],$X,45,$D,$E,$T,$A,$B,$C);
406 &BODY_40_59( 0,$K[2],$X,46,$C,$D,$E,$T,$A,$B);
407 &BODY_40_59( 0,$K[2],$X,47,$B,$C,$D,$E,$T,$A);
408 &BODY_40_59( 0,$K[2],$X,48,$A,$B,$C,$D,$E,$T);
409 &BODY_40_59( 0,$K[2],$X,49,$T,$A,$B,$C,$D,$E);
410 &BODY_40_59( 0,$K[2],$X,50,$E,$T,$A,$B,$C,$D);
411 &BODY_40_59( 0,$K[2],$X,51,$D,$E,$T,$A,$B,$C);
412 &BODY_40_59( 0,$K[2],$X,52,$C,$D,$E,$T,$A,$B);
413 &BODY_40_59( 0,$K[2],$X,53,$B,$C,$D,$E,$T,$A);
414 &BODY_40_59( 0,$K[2],$X,54,$A,$B,$C,$D,$E,$T);
415 &BODY_40_59( 0,$K[2],$X,55,$T,$A,$B,$C,$D,$E);
416 &BODY_40_59( 0,$K[2],$X,56,$E,$T,$A,$B,$C,$D);
417 &BODY_40_59( 0,$K[2],$X,57,$D,$E,$T,$A,$B,$C);
418 &BODY_40_59( 0,$K[2],$X,58,$C,$D,$E,$T,$A,$B);
419 &BODY_40_59( 1,$K[2],$X,59,$B,$C,$D,$E,$T,$A);
420
421 &BODY_60_79(-1,$K[3],$X,60,$A,$B,$C,$D,$E,$T);
422 &BODY_60_79( 0,$K[3],$X,61,$T,$A,$B,$C,$D,$E);
423 &BODY_60_79( 0,$K[3],$X,62,$E,$T,$A,$B,$C,$D);
424 &BODY_60_79( 0,$K[3],$X,63,$D,$E,$T,$A,$B,$C);
425 &BODY_60_79( 0,$K[3],$X,64,$C,$D,$E,$T,$A,$B);
426 &BODY_60_79( 0,$K[3],$X,65,$B,$C,$D,$E,$T,$A);
427 &BODY_60_79( 0,$K[3],$X,66,$A,$B,$C,$D,$E,$T);
428 &BODY_60_79( 0,$K[3],$X,67,$T,$A,$B,$C,$D,$E);
429 &BODY_60_79( 0,$K[3],$X,68,$E,$T,$A,$B,$C,$D);
430 &BODY_60_79( 0,$K[3],$X,69,$D,$E,$T,$A,$B,$C);
431 &BODY_60_79( 0,$K[3],$X,70,$C,$D,$E,$T,$A,$B);
432 &BODY_60_79( 0,$K[3],$X,71,$B,$C,$D,$E,$T,$A);
433 &BODY_60_79( 0,$K[3],$X,72,$A,$B,$C,$D,$E,$T);
434 &BODY_60_79( 0,$K[3],$X,73,$T,$A,$B,$C,$D,$E);
435 &BODY_60_79( 0,$K[3],$X,74,$E,$T,$A,$B,$C,$D);
436 &BODY_60_79( 0,$K[3],$X,75,$D,$E,$T,$A,$B,$C);
437 &BODY_60_79( 0,$K[3],$X,76,$C,$D,$E,$T,$A,$B);
438 &BODY_60_79( 0,$K[3],$X,77,$B,$C,$D,$E,$T,$A);
439 &BODY_60_79( 0,$K[3],$X,78,$A,$B,$C,$D,$E,$T);
440 &BODY_60_79( 2,$K[3],$X,79,$T,$A,$B,$C,$D,$E);
441
442 &comment("End processing");
443 &comment("");
444 # D is the tmp value
445
446 # E -> A
447 # T -> B
448 # A -> C
449 # B -> D
450 # C -> E
451 # D -> T
452
453 # The last 2 have been moved into the last loop
454 # &mov($tmp1,&wparam(0));
455
456 &mov($D, &DWP(12,$tmp1,"",0));
457 &add($D,$B);
458 &mov($B, &DWP( 4,$tmp1,"",0));
459 &add($B,$T);
460 &mov($T, $A);
461 &mov($A, &DWP( 0,$tmp1,"",0));
462 &mov(&DWP(12,$tmp1,"",0),$D);
463
464 &add($A,$E);
465 &mov($E, &DWP(16,$tmp1,"",0));
466 &add($E,$C);
467 &mov($C, &DWP( 8,$tmp1,"",0));
468 &add($C,$T);
469
470 &mov(&DWP( 0,$tmp1,"",0),$A);
471 &mov("esi",&swtmp(16));
472 &mov(&DWP( 8,$tmp1,"",0),$C); # This is for looping
473 &add("esi",64);
474 &mov("eax",&swtmp(17));
475 &mov(&DWP(16,$tmp1,"",0),$E);
476 &cmp("eax","esi");
477 &mov(&DWP( 4,$tmp1,"",0),$B); # This is for looping
478 &jl(&label("end"));
479 &mov("eax",&DWP(0,"esi","",0)); # Pulled down from
480 &jmp(&label("start"));
481
482 &set_label("end");
483 &stack_pop(18);
484 &pop("edi");
485 &pop("ebx");
486 &pop("ebp");
487 &pop("esi");
488 &ret();
489 &function_end_B($name);
490 }
491
diff --git a/src/lib/libcrypto/sha/sha.h b/src/lib/libcrypto/sha/sha.h
deleted file mode 100644
index cd6960ee1a..0000000000
--- a/src/lib/libcrypto/sha/sha.h
+++ /dev/null
@@ -1,119 +0,0 @@
1/* crypto/sha/sha.h */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#ifndef HEADER_SHA_H
60#define HEADER_SHA_H
61
62#ifdef __cplusplus
63extern "C" {
64#endif
65
66#ifdef NO_SHA
67#error SHA is disabled.
68#endif
69
70/*
71 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
72 * ! SHA_LONG has to be at least 32 bits wide. If it's wider, then !
73 * ! SHA_LONG_LOG2 has to be defined along. !
74 * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
75 */
76
77#if defined(WIN16) || defined(__LP32__)
78#define SHA_LONG unsigned long
79#elif defined(_CRAY) || defined(__ILP64__)
80#define SHA_LONG unsigned long
81#define SHA_LONG_LOG2 3
82#else
83#define SHA_LONG unsigned int
84#endif
85
86#define SHA_LBLOCK 16
87#define SHA_CBLOCK (SHA_LBLOCK*4) /* SHA treats input data as a
88 * contiguous array of 32 bit
89 * wide big-endian values. */
90#define SHA_LAST_BLOCK (SHA_CBLOCK-8)
91#define SHA_DIGEST_LENGTH 20
92
93typedef struct SHAstate_st
94 {
95 SHA_LONG h0,h1,h2,h3,h4;
96 SHA_LONG Nl,Nh;
97 SHA_LONG data[SHA_LBLOCK];
98 int num;
99 } SHA_CTX;
100
101#ifndef NO_SHA0
102void SHA_Init(SHA_CTX *c);
103void SHA_Update(SHA_CTX *c, const unsigned char *data, unsigned long len);
104void SHA_Final(unsigned char *md, SHA_CTX *c);
105unsigned char *SHA(const unsigned char *d, unsigned long n,unsigned char *md);
106void SHA_Transform(SHA_CTX *c, unsigned char *data);
107#endif
108#ifndef NO_SHA1
109void SHA1_Init(SHA_CTX *c);
110void SHA1_Update(SHA_CTX *c, const unsigned char *data, unsigned long len);
111void SHA1_Final(unsigned char *md, SHA_CTX *c);
112unsigned char *SHA1(const unsigned char *d, unsigned long n,unsigned char *md);
113void SHA1_Transform(SHA_CTX *c, unsigned char *data);
114#endif
115#ifdef __cplusplus
116}
117#endif
118
119#endif
diff --git a/src/lib/libcrypto/sha/sha1_one.c b/src/lib/libcrypto/sha/sha1_one.c
deleted file mode 100644
index 861752eaa7..0000000000
--- a/src/lib/libcrypto/sha/sha1_one.c
+++ /dev/null
@@ -1,76 +0,0 @@
1/* crypto/sha/sha1_one.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <string.h>
61#include <openssl/sha.h>
62
63#ifndef NO_SHA1
64unsigned char *SHA1(const unsigned char *d, unsigned long n, unsigned char *md)
65 {
66 SHA_CTX c;
67 static unsigned char m[SHA_DIGEST_LENGTH];
68
69 if (md == NULL) md=m;
70 SHA1_Init(&c);
71 SHA1_Update(&c,d,n);
72 SHA1_Final(md,&c);
73 memset(&c,0,sizeof(c));
74 return(md);
75 }
76#endif
diff --git a/src/lib/libcrypto/sha/sha1dgst.c b/src/lib/libcrypto/sha/sha1dgst.c
deleted file mode 100644
index 66e885dd76..0000000000
--- a/src/lib/libcrypto/sha/sha1dgst.c
+++ /dev/null
@@ -1,498 +0,0 @@
1/* crypto/sha/sha1dgst.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdio.h>
60#include <string.h>
61#undef SHA_0
62#define SHA_1
63#include <openssl/sha.h>
64#include "sha_locl.h"
65#include <openssl/opensslv.h>
66
67#ifndef NO_SHA1
68char *SHA1_version="SHA1" OPENSSL_VERSION_PTEXT;
69
70/* Implemented from SHA-1 document - The Secure Hash Algorithm
71 */
72
73#define INIT_DATA_h0 0x67452301UL
74#define INIT_DATA_h1 0xefcdab89UL
75#define INIT_DATA_h2 0x98badcfeUL
76#define INIT_DATA_h3 0x10325476UL
77#define INIT_DATA_h4 0xc3d2e1f0UL
78
79#define K_00_19 0x5a827999UL
80#define K_20_39 0x6ed9eba1UL
81#define K_40_59 0x8f1bbcdcUL
82#define K_60_79 0xca62c1d6UL
83
84#ifdef SHA1_ASM
85 void sha1_block_x86(SHA_CTX *c, register SHA_LONG *p, int num);
86# define sha1_block(c,p,n) sha1_block_x86((c),(p),(n)*SHA_CBLOCK)
87#else
88 static void sha1_block(SHA_CTX *c, register SHA_LONG *p, int num);
89#endif
90
91#if !defined(B_ENDIAN) && defined(SHA1_ASM)
92# define M_c2nl c2l
93# define M_p_c2nl p_c2l
94# define M_c2nl_p c2l_p
95# define M_p_c2nl_p p_c2l_p
96# define M_nl2c l2c
97#else
98# define M_c2nl c2nl
99# define M_p_c2nl p_c2nl
100# define M_c2nl_p c2nl_p
101# define M_p_c2nl_p p_c2nl_p
102# define M_nl2c nl2c
103#endif
104
105void SHA1_Init(SHA_CTX *c)
106 {
107 c->h0=INIT_DATA_h0;
108 c->h1=INIT_DATA_h1;
109 c->h2=INIT_DATA_h2;
110 c->h3=INIT_DATA_h3;
111 c->h4=INIT_DATA_h4;
112 c->Nl=0;
113 c->Nh=0;
114 c->num=0;
115 }
116
117void SHA1_Update(SHA_CTX *c, register const unsigned char *data,
118 unsigned long len)
119 {
120 register SHA_LONG *p;
121 int ew,ec,sw,sc;
122 SHA_LONG l;
123
124 if (len == 0) return;
125
126 l=(c->Nl+(len<<3))&0xffffffffL;
127 if (l < c->Nl) /* overflow */
128 c->Nh++;
129 c->Nh+=(len>>29);
130 c->Nl=l;
131
132 if (c->num != 0)
133 {
134 p=c->data;
135 sw=c->num>>2;
136 sc=c->num&0x03;
137
138 if ((c->num+len) >= SHA_CBLOCK)
139 {
140 l= p[sw];
141 M_p_c2nl(data,l,sc);
142 p[sw++]=l;
143 for (; sw<SHA_LBLOCK; sw++)
144 {
145 M_c2nl(data,l);
146 p[sw]=l;
147 }
148 len-=(SHA_CBLOCK-c->num);
149
150 sha1_block(c,p,1);
151 c->num=0;
152 /* drop through and do the rest */
153 }
154 else
155 {
156 c->num+=(int)len;
157 if ((sc+len) < 4) /* ugly, add char's to a word */
158 {
159 l= p[sw];
160 M_p_c2nl_p(data,l,sc,len);
161 p[sw]=l;
162 }
163 else
164 {
165 ew=(c->num>>2);
166 ec=(c->num&0x03);
167 l= p[sw];
168 M_p_c2nl(data,l,sc);
169 p[sw++]=l;
170 for (; sw < ew; sw++)
171 { M_c2nl(data,l); p[sw]=l; }
172 if (ec)
173 {
174 M_c2nl_p(data,l,ec);
175 p[sw]=l;
176 }
177 }
178 return;
179 }
180 }
181 /* We can only do the following code for assember, the reason
182 * being that the sha1_block 'C' version changes the values
183 * in the 'data' array. The assember code avoids this and
184 * copies it to a local array. I should be able to do this for
185 * the C version as well....
186 */
187#if SHA_LONG_LOG2==2
188#if defined(B_ENDIAN) || defined(SHA1_ASM)
189 if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
190 {
191 sw=len/SHA_CBLOCK;
192 if (sw)
193 {
194 sha1_block(c,(SHA_LONG *)data,sw);
195 sw*=SHA_CBLOCK;
196 data+=sw;
197 len-=sw;
198 }
199 }
200#endif
201#endif
202 /* we now can process the input data in blocks of SHA_CBLOCK
203 * chars and save the leftovers to c->data. */
204 p=c->data;
205 while (len >= SHA_CBLOCK)
206 {
207#if SHA_LONG_LOG2==2
208#if defined(B_ENDIAN) || defined(SHA1_ASM)
209#define SHA_NO_TAIL_CODE
210 /*
211 * Basically we get here only when data happens
212 * to be unaligned.
213 */
214 if (p != (SHA_LONG *)data)
215 memcpy(p,data,SHA_CBLOCK);
216 data+=SHA_CBLOCK;
217 sha1_block(c,p=c->data,1);
218 len-=SHA_CBLOCK;
219#elif defined(L_ENDIAN)
220#define BE_COPY(dst,src,i) { \
221 l = ((SHA_LONG *)src)[i]; \
222 Endian_Reverse32(l); \
223 dst[i] = l; \
224 }
225 if ((((unsigned long)data)%sizeof(SHA_LONG)) == 0)
226 {
227 for (sw=(SHA_LBLOCK/4); sw; sw--)
228 {
229 BE_COPY(p,data,0);
230 BE_COPY(p,data,1);
231 BE_COPY(p,data,2);
232 BE_COPY(p,data,3);
233 p+=4;
234 data += 4*sizeof(SHA_LONG);
235 }
236 sha1_block(c,p=c->data,1);
237 len-=SHA_CBLOCK;
238 continue;
239 }
240#endif
241#endif
242#ifndef SHA_NO_TAIL_CODE
243 /*
244 * In addition to "sizeof(SHA_LONG)!= 4" case the
245 * following code covers unaligned access cases on
246 * little-endian machines.
247 * <appro@fy.chalmers.se>
248 */
249 p=c->data;
250 for (sw=(SHA_LBLOCK/4); sw; sw--)
251 {
252 M_c2nl(data,l); p[0]=l;
253 M_c2nl(data,l); p[1]=l;
254 M_c2nl(data,l); p[2]=l;
255 M_c2nl(data,l); p[3]=l;
256 p+=4;
257 }
258 p=c->data;
259 sha1_block(c,p,1);
260 len-=SHA_CBLOCK;
261#endif
262 }
263 ec=(int)len;
264 c->num=ec;
265 ew=(ec>>2);
266 ec&=0x03;
267
268 for (sw=0; sw < ew; sw++)
269 { M_c2nl(data,l); p[sw]=l; }
270 M_c2nl_p(data,l,ec);
271 p[sw]=l;
272 }
273
274void SHA1_Transform(SHA_CTX *c, unsigned char *b)
275 {
276 SHA_LONG p[SHA_LBLOCK];
277
278#if SHA_LONG_LOG2==2
279#if defined(B_ENDIAN) || defined(SHA1_ASM)
280 memcpy(p,b,SHA_CBLOCK);
281 sha1_block(c,p,1);
282 return;
283#elif defined(L_ENDIAN)
284 if (((unsigned long)b%sizeof(SHA_LONG)) == 0)
285 {
286 SHA_LONG *q;
287 int i;
288
289 q=p;
290 for (i=(SHA_LBLOCK/4); i; i--)
291 {
292 unsigned long l;
293 BE_COPY(q,b,0); /* BE_COPY was defined above */
294 BE_COPY(q,b,1);
295 BE_COPY(q,b,2);
296 BE_COPY(q,b,3);
297 q+=4;
298 b+=4*sizeof(SHA_LONG);
299 }
300 sha1_block(c,p,1);
301 return;
302 }
303#endif
304#endif
305#ifndef SHA_NO_TAIL_CODE /* defined above, see comment */
306 {
307 SHA_LONG *q;
308 int i;
309
310 q=p;
311 for (i=(SHA_LBLOCK/4); i; i--)
312 {
313 SHA_LONG l;
314 c2nl(b,l); *(q++)=l;
315 c2nl(b,l); *(q++)=l;
316 c2nl(b,l); *(q++)=l;
317 c2nl(b,l); *(q++)=l;
318 }
319 sha1_block(c,p,1);
320 }
321#endif
322 }
323
324#ifndef SHA1_ASM
325static void sha1_block(SHA_CTX *c, register SHA_LONG *W, int num)
326 {
327 register SHA_LONG A,B,C,D,E,T;
328 SHA_LONG X[SHA_LBLOCK];
329
330 A=c->h0;
331 B=c->h1;
332 C=c->h2;
333 D=c->h3;
334 E=c->h4;
335
336 for (;;)
337 {
338 BODY_00_15( 0,A,B,C,D,E,T,W);
339 BODY_00_15( 1,T,A,B,C,D,E,W);
340 BODY_00_15( 2,E,T,A,B,C,D,W);
341 BODY_00_15( 3,D,E,T,A,B,C,W);
342 BODY_00_15( 4,C,D,E,T,A,B,W);
343 BODY_00_15( 5,B,C,D,E,T,A,W);
344 BODY_00_15( 6,A,B,C,D,E,T,W);
345 BODY_00_15( 7,T,A,B,C,D,E,W);
346 BODY_00_15( 8,E,T,A,B,C,D,W);
347 BODY_00_15( 9,D,E,T,A,B,C,W);
348 BODY_00_15(10,C,D,E,T,A,B,W);
349 BODY_00_15(11,B,C,D,E,T,A,W);
350 BODY_00_15(12,A,B,C,D,E,T,W);
351 BODY_00_15(13,T,A,B,C,D,E,W);
352 BODY_00_15(14,E,T,A,B,C,D,W);
353 BODY_00_15(15,D,E,T,A,B,C,W);
354 BODY_16_19(16,C,D,E,T,A,B,W,W,W,W);
355 BODY_16_19(17,B,C,D,E,T,A,W,W,W,W);
356 BODY_16_19(18,A,B,C,D,E,T,W,W,W,W);
357 BODY_16_19(19,T,A,B,C,D,E,W,W,W,X);
358
359 BODY_20_31(20,E,T,A,B,C,D,W,W,W,X);
360 BODY_20_31(21,D,E,T,A,B,C,W,W,W,X);
361 BODY_20_31(22,C,D,E,T,A,B,W,W,W,X);
362 BODY_20_31(23,B,C,D,E,T,A,W,W,W,X);
363 BODY_20_31(24,A,B,C,D,E,T,W,W,X,X);
364 BODY_20_31(25,T,A,B,C,D,E,W,W,X,X);
365 BODY_20_31(26,E,T,A,B,C,D,W,W,X,X);
366 BODY_20_31(27,D,E,T,A,B,C,W,W,X,X);
367 BODY_20_31(28,C,D,E,T,A,B,W,W,X,X);
368 BODY_20_31(29,B,C,D,E,T,A,W,W,X,X);
369 BODY_20_31(30,A,B,C,D,E,T,W,X,X,X);
370 BODY_20_31(31,T,A,B,C,D,E,W,X,X,X);
371 BODY_32_39(32,E,T,A,B,C,D,X);
372 BODY_32_39(33,D,E,T,A,B,C,X);
373 BODY_32_39(34,C,D,E,T,A,B,X);
374 BODY_32_39(35,B,C,D,E,T,A,X);
375 BODY_32_39(36,A,B,C,D,E,T,X);
376 BODY_32_39(37,T,A,B,C,D,E,X);
377 BODY_32_39(38,E,T,A,B,C,D,X);
378 BODY_32_39(39,D,E,T,A,B,C,X);
379
380 BODY_40_59(40,C,D,E,T,A,B,X);
381 BODY_40_59(41,B,C,D,E,T,A,X);
382 BODY_40_59(42,A,B,C,D,E,T,X);
383 BODY_40_59(43,T,A,B,C,D,E,X);
384 BODY_40_59(44,E,T,A,B,C,D,X);
385 BODY_40_59(45,D,E,T,A,B,C,X);
386 BODY_40_59(46,C,D,E,T,A,B,X);
387 BODY_40_59(47,B,C,D,E,T,A,X);
388 BODY_40_59(48,A,B,C,D,E,T,X);
389 BODY_40_59(49,T,A,B,C,D,E,X);
390 BODY_40_59(50,E,T,A,B,C,D,X);
391 BODY_40_59(51,D,E,T,A,B,C,X);
392 BODY_40_59(52,C,D,E,T,A,B,X);
393 BODY_40_59(53,B,C,D,E,T,A,X);
394 BODY_40_59(54,A,B,C,D,E,T,X);
395 BODY_40_59(55,T,A,B,C,D,E,X);
396 BODY_40_59(56,E,T,A,B,C,D,X);
397 BODY_40_59(57,D,E,T,A,B,C,X);
398 BODY_40_59(58,C,D,E,T,A,B,X);
399 BODY_40_59(59,B,C,D,E,T,A,X);
400
401 BODY_60_79(60,A,B,C,D,E,T,X);
402 BODY_60_79(61,T,A,B,C,D,E,X);
403 BODY_60_79(62,E,T,A,B,C,D,X);
404 BODY_60_79(63,D,E,T,A,B,C,X);
405 BODY_60_79(64,C,D,E,T,A,B,X);
406 BODY_60_79(65,B,C,D,E,T,A,X);
407 BODY_60_79(66,A,B,C,D,E,T,X);
408 BODY_60_79(67,T,A,B,C,D,E,X);
409 BODY_60_79(68,E,T,A,B,C,D,X);
410 BODY_60_79(69,D,E,T,A,B,C,X);
411 BODY_60_79(70,C,D,E,T,A,B,X);
412 BODY_60_79(71,B,C,D,E,T,A,X);
413 BODY_60_79(72,A,B,C,D,E,T,X);
414 BODY_60_79(73,T,A,B,C,D,E,X);
415 BODY_60_79(74,E,T,A,B,C,D,X);
416 BODY_60_79(75,D,E,T,A,B,C,X);
417 BODY_60_79(76,C,D,E,T,A,B,X);
418 BODY_60_79(77,B,C,D,E,T,A,X);
419 BODY_60_79(78,A,B,C,D,E,T,X);
420 BODY_60_79(79,T,A,B,C,D,E,X);
421
422 c->h0=(c->h0+E)&0xffffffffL;
423 c->h1=(c->h1+T)&0xffffffffL;
424 c->h2=(c->h2+A)&0xffffffffL;
425 c->h3=(c->h3+B)&0xffffffffL;
426 c->h4=(c->h4+C)&0xffffffffL;
427
428 if (--num <= 0) break;
429
430 A=c->h0;
431 B=c->h1;
432 C=c->h2;
433 D=c->h3;
434 E=c->h4;
435
436 W+=SHA_LBLOCK; /* Note! This can happen only when sizeof(SHA_LONG)
437 * is 4. Whenever it's not the actual case this
438 * function is never called with num larger than 1
439 * and we never advance down here.
440 * <appro@fy.chalmers.se>
441 */
442 }
443 }
444#endif
445
446void SHA1_Final(unsigned char *md, SHA_CTX *c)
447 {
448 register int i,j;
449 register SHA_LONG l;
450 register SHA_LONG *p;
451 static unsigned char end[4]={0x80,0x00,0x00,0x00};
452 unsigned char *cp=end;
453
454 /* c->num should definitly have room for at least one more byte. */
455 p=c->data;
456 j=c->num;
457 i=j>>2;
458#ifdef PURIFY
459 if ((j&0x03) == 0) p[i]=0;
460#endif
461 l=p[i];
462 M_p_c2nl(cp,l,j&0x03);
463 p[i]=l;
464 i++;
465 /* i is the next 'undefined word' */
466 if (c->num >= SHA_LAST_BLOCK)
467 {
468 for (; i<SHA_LBLOCK; i++)
469 p[i]=0;
470 sha1_block(c,p,1);
471 i=0;
472 }
473 for (; i<(SHA_LBLOCK-2); i++)
474 p[i]=0;
475 p[SHA_LBLOCK-2]=c->Nh;
476 p[SHA_LBLOCK-1]=c->Nl;
477#if SHA_LONG_LOG2==2
478#if !defined(B_ENDIAN) && defined(SHA1_ASM)
479 Endian_Reverse32(p[SHA_LBLOCK-2]);
480 Endian_Reverse32(p[SHA_LBLOCK-1]);
481#endif
482#endif
483 sha1_block(c,p,1);
484 cp=md;
485 l=c->h0; nl2c(l,cp);
486 l=c->h1; nl2c(l,cp);
487 l=c->h2; nl2c(l,cp);
488 l=c->h3; nl2c(l,cp);
489 l=c->h4; nl2c(l,cp);
490
491 c->num=0;
492 /* sha_block may be leaving some stuff on the stack
493 * but I'm not worried :-)
494 memset((void *)c,0,sizeof(SHA_CTX));
495 */
496 }
497#endif
498
diff --git a/src/lib/libcrypto/sha/sha_locl.h b/src/lib/libcrypto/sha/sha_locl.h
deleted file mode 100644
index 6646a8915b..0000000000
--- a/src/lib/libcrypto/sha/sha_locl.h
+++ /dev/null
@@ -1,288 +0,0 @@
1/* crypto/sha/sha_locl.h */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58
59#include <stdlib.h>
60#include <string.h>
61
62#include <openssl/opensslconf.h>
63
64#ifdef undef
65/* one or the other needs to be defined */
66#ifndef SHA_1 /* FIPE 180-1 */
67#define SHA_0 /* FIPS 180 */
68#endif
69#endif
70
71#undef c2nl
72#define c2nl(c,l) (l =(((unsigned long)(*((c)++)))<<24), \
73 l|=(((unsigned long)(*((c)++)))<<16), \
74 l|=(((unsigned long)(*((c)++)))<< 8), \
75 l|=(((unsigned long)(*((c)++))) ))
76
77#undef p_c2nl
78#define p_c2nl(c,l,n) { \
79 switch (n) { \
80 case 0: l =((unsigned long)(*((c)++)))<<24; \
81 case 1: l|=((unsigned long)(*((c)++)))<<16; \
82 case 2: l|=((unsigned long)(*((c)++)))<< 8; \
83 case 3: l|=((unsigned long)(*((c)++))); \
84 } \
85 }
86
87#undef c2nl_p
88/* NOTE the pointer is not incremented at the end of this */
89#define c2nl_p(c,l,n) { \
90 l=0; \
91 (c)+=n; \
92 switch (n) { \
93 case 3: l =((unsigned long)(*(--(c))))<< 8; \
94 case 2: l|=((unsigned long)(*(--(c))))<<16; \
95 case 1: l|=((unsigned long)(*(--(c))))<<24; \
96 } \
97 }
98
99#undef p_c2nl_p
100#define p_c2nl_p(c,l,sc,len) { \
101 switch (sc) \
102 { \
103 case 0: l =((unsigned long)(*((c)++)))<<24; \
104 if (--len == 0) break; \
105 case 1: l|=((unsigned long)(*((c)++)))<<16; \
106 if (--len == 0) break; \
107 case 2: l|=((unsigned long)(*((c)++)))<< 8; \
108 } \
109 }
110
111#undef nl2c
112#define nl2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \
113 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
114 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
115 *((c)++)=(unsigned char)(((l) )&0xff))
116
117#undef c2l
118#define c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \
119 l|=(((unsigned long)(*((c)++)))<< 8), \
120 l|=(((unsigned long)(*((c)++)))<<16), \
121 l|=(((unsigned long)(*((c)++)))<<24))
122
123#undef p_c2l
124#define p_c2l(c,l,n) { \
125 switch (n) { \
126 case 0: l =((unsigned long)(*((c)++))); \
127 case 1: l|=((unsigned long)(*((c)++)))<< 8; \
128 case 2: l|=((unsigned long)(*((c)++)))<<16; \
129 case 3: l|=((unsigned long)(*((c)++)))<<24; \
130 } \
131 }
132
133#undef c2l_p
134/* NOTE the pointer is not incremented at the end of this */
135#define c2l_p(c,l,n) { \
136 l=0; \
137 (c)+=n; \
138 switch (n) { \
139 case 3: l =((unsigned long)(*(--(c))))<<16; \
140 case 2: l|=((unsigned long)(*(--(c))))<< 8; \
141 case 1: l|=((unsigned long)(*(--(c)))); \
142 } \
143 }
144
145#undef p_c2l_p
146#define p_c2l_p(c,l,sc,len) { \
147 switch (sc) \
148 { \
149 case 0: l =((unsigned long)(*((c)++))); \
150 if (--len == 0) break; \
151 case 1: l|=((unsigned long)(*((c)++)))<< 8; \
152 if (--len == 0) break; \
153 case 2: l|=((unsigned long)(*((c)++)))<<16; \
154 } \
155 }
156
157#undef l2c
158#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
159 *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
160 *((c)++)=(unsigned char)(((l)>>16)&0xff), \
161 *((c)++)=(unsigned char)(((l)>>24)&0xff))
162
163#ifndef SHA_LONG_LOG2
164#define SHA_LONG_LOG2 2 /* default to 32 bits */
165#endif
166
167#undef ROTATE
168#undef Endian_Reverse32
169#if defined(WIN32)
170#define ROTATE(a,n) _lrotl(a,n)
171#elif defined(__GNUC__) && !defined(PEDANTIC)
172/* some inline assembler templates by <appro@fy.chalmers.se> */
173#if defined(__i386) && !defined(NO_ASM)
174#define ROTATE(a,n) ({ register unsigned int ret; \
175 asm ("roll %1,%0" \
176 : "=r"(ret) \
177 : "I"(n), "0"(a) \
178 : "cc"); \
179 ret; \
180 })
181#ifndef I386_ONLY
182#define Endian_Reverse32(a) \
183 { register unsigned int ltmp=(a); \
184 asm ("bswapl %0" \
185 : "=r"(ltmp) : "0"(ltmp)); \
186 (a)=ltmp; \
187 }
188#endif
189#elif defined(__powerpc)
190#define ROTATE(a,n) ({ register unsigned int ret; \
191 asm ("rlwinm %0,%1,%2,0,31" \
192 : "=r"(ret) \
193 : "r"(a), "I"(n)); \
194 ret; \
195 })
196/* Endian_Reverse32 is not needed for PowerPC */
197#endif
198#endif
199
200/* A nice byte order reversal from Wei Dai <weidai@eskimo.com> */
201#ifdef ROTATE
202#ifndef Endian_Reverse32
203/* 5 instructions with rotate instruction, else 9 */
204#define Endian_Reverse32(a) \
205 { \
206 unsigned long t=(a); \
207 (a)=((ROTATE(t,8)&0x00FF00FF)|(ROTATE((t&0x00FF00FF),24))); \
208 }
209#endif
210#else
211#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n))))
212#ifndef Endian_Reverse32
213/* 6 instructions with rotate instruction, else 8 */
214#define Endian_Reverse32(a) \
215 { \
216 unsigned long t=(a); \
217 t=(((t>>8)&0x00FF00FF)|((t&0x00FF00FF)<<8)); \
218 (a)=ROTATE(t,16); \
219 }
220#endif
221/*
222 * Originally the middle line started with l=(((l&0xFF00FF00)>>8)|...
223 * It's rewritten as above for two reasons:
224 * - RISCs aren't good at long constants and have to explicitely
225 * compose 'em with several (well, usually 2) instructions in a
226 * register before performing the actual operation and (as you
227 * already realized:-) having same constant should inspire the
228 * compiler to permanently allocate the only register for it;
229 * - most modern CPUs have two ALUs, but usually only one has
230 * circuitry for shifts:-( this minor tweak inspires compiler
231 * to schedule shift instructions in a better way...
232 *
233 * <appro@fy.chalmers.se>
234 */
235#endif
236
237/* As pointed out by Wei Dai <weidai@eskimo.com>, F() below can be
238 * simplified to the code in F_00_19. Wei attributes these optimisations
239 * to Peter Gutmann's SHS code, and he attributes it to Rich Schroeppel.
240 * #define F(x,y,z) (((x) & (y)) | ((~(x)) & (z)))
241 * I've just become aware of another tweak to be made, again from Wei Dai,
242 * in F_40_59, (x&a)|(y&a) -> (x|y)&a
243 */
244#define F_00_19(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
245#define F_20_39(b,c,d) ((b) ^ (c) ^ (d))
246#define F_40_59(b,c,d) (((b) & (c)) | (((b)|(c)) & (d)))
247#define F_60_79(b,c,d) F_20_39(b,c,d)
248
249#undef Xupdate
250#ifdef SHA_0
251#define Xupdate(a,i,ia,ib,ic,id) X[(i)&0x0f]=(a)=\
252 (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);
253#endif
254#ifdef SHA_1
255#define Xupdate(a,i,ia,ib,ic,id) (a)=\
256 (ia[(i)&0x0f]^ib[((i)+2)&0x0f]^ic[((i)+8)&0x0f]^id[((i)+13)&0x0f]);\
257 X[(i)&0x0f]=(a)=ROTATE((a),1);
258#endif
259
260#define BODY_00_15(i,a,b,c,d,e,f,xa) \
261 (f)=xa[i]+(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
262 (b)=ROTATE((b),30);
263
264#define BODY_16_19(i,a,b,c,d,e,f,xa,xb,xc,xd) \
265 Xupdate(f,i,xa,xb,xc,xd); \
266 (f)+=(e)+K_00_19+ROTATE((a),5)+F_00_19((b),(c),(d)); \
267 (b)=ROTATE((b),30);
268
269#define BODY_20_31(i,a,b,c,d,e,f,xa,xb,xc,xd) \
270 Xupdate(f,i,xa,xb,xc,xd); \
271 (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
272 (b)=ROTATE((b),30);
273
274#define BODY_32_39(i,a,b,c,d,e,f,xa) \
275 Xupdate(f,i,xa,xa,xa,xa); \
276 (f)+=(e)+K_20_39+ROTATE((a),5)+F_20_39((b),(c),(d)); \
277 (b)=ROTATE((b),30);
278
279#define BODY_40_59(i,a,b,c,d,e,f,xa) \
280 Xupdate(f,i,xa,xa,xa,xa); \
281 (f)+=(e)+K_40_59+ROTATE((a),5)+F_40_59((b),(c),(d)); \
282 (b)=ROTATE((b),30);
283
284#define BODY_60_79(i,a,b,c,d,e,f,xa) \
285 Xupdate(f,i,xa,xa,xa,xa); \
286 (f)=X[(i)&0x0f]+(e)+K_60_79+ROTATE((a),5)+F_60_79((b),(c),(d)); \
287 (b)=ROTATE((b),30);
288