summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/sha
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/sha')
-rw-r--r--src/lib/libcrypto/sha/sha.c19
-rw-r--r--src/lib/libcrypto/sha/sha1.c18
-rw-r--r--src/lib/libcrypto/sha/sha1s.cpp7
-rw-r--r--src/lib/libcrypto/sha/sha1test.c59
-rw-r--r--src/lib/libcrypto/sha/sha_dgst.c385
-rw-r--r--src/lib/libcrypto/sha/sha_one.c9
-rw-r--r--src/lib/libcrypto/sha/shatest.c59
7 files changed, 102 insertions, 454 deletions
diff --git a/src/lib/libcrypto/sha/sha.c b/src/lib/libcrypto/sha/sha.c
index 713fec3610..42126551d1 100644
--- a/src/lib/libcrypto/sha/sha.c
+++ b/src/lib/libcrypto/sha/sha.c
@@ -58,23 +58,14 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include "sha.h" 61#include <openssl/sha.h>
62 62
63#define BUFSIZE 1024*16 63#define BUFSIZE 1024*16
64 64
65#ifndef NOPROTO
66void do_fp(FILE *f); 65void do_fp(FILE *f);
67void pt(unsigned char *md); 66void pt(unsigned char *md);
68int read(int, void *, unsigned int); 67int read(int, void *, unsigned int);
69#else 68int main(int argc, char **argv)
70void do_fp();
71void pt();
72int read();
73#endif
74
75int main(argc, argv)
76int argc;
77char **argv;
78 { 69 {
79 int i,err=0; 70 int i,err=0;
80 FILE *IN; 71 FILE *IN;
@@ -102,8 +93,7 @@ char **argv;
102 exit(err); 93 exit(err);
103 } 94 }
104 95
105void do_fp(f) 96void do_fp(FILE *f)
106FILE *f;
107 { 97 {
108 SHA_CTX c; 98 SHA_CTX c;
109 unsigned char md[SHA_DIGEST_LENGTH]; 99 unsigned char md[SHA_DIGEST_LENGTH];
@@ -123,8 +113,7 @@ FILE *f;
123 pt(md); 113 pt(md);
124 } 114 }
125 115
126void pt(md) 116void pt(unsigned char *md)
127unsigned char *md;
128 { 117 {
129 int i; 118 int i;
130 119
diff --git a/src/lib/libcrypto/sha/sha1.c b/src/lib/libcrypto/sha/sha1.c
index a4739ac9fd..d350c88ee4 100644
--- a/src/lib/libcrypto/sha/sha1.c
+++ b/src/lib/libcrypto/sha/sha1.c
@@ -58,23 +58,17 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <stdlib.h> 60#include <stdlib.h>
61#include "sha.h" 61#include <openssl/sha.h>
62 62
63#define BUFSIZE 1024*16 63#define BUFSIZE 1024*16
64 64
65#ifndef NOPROTO
66void do_fp(FILE *f); 65void do_fp(FILE *f);
67void pt(unsigned char *md); 66void pt(unsigned char *md);
67#ifndef _OSD_POSIX
68int read(int, void *, unsigned int); 68int read(int, void *, unsigned int);
69#else
70void do_fp();
71void pt();
72int read();
73#endif 69#endif
74 70
75int main(argc, argv) 71int main(int argc, char **argv)
76int argc;
77char **argv;
78 { 72 {
79 int i,err=0; 73 int i,err=0;
80 FILE *IN; 74 FILE *IN;
@@ -102,8 +96,7 @@ char **argv;
102 exit(err); 96 exit(err);
103 } 97 }
104 98
105void do_fp(f) 99void do_fp(FILE *f)
106FILE *f;
107 { 100 {
108 SHA_CTX c; 101 SHA_CTX c;
109 unsigned char md[SHA_DIGEST_LENGTH]; 102 unsigned char md[SHA_DIGEST_LENGTH];
@@ -123,8 +116,7 @@ FILE *f;
123 pt(md); 116 pt(md);
124 } 117 }
125 118
126void pt(md) 119void pt(unsigned char *md)
127unsigned char *md;
128 { 120 {
129 int i; 121 int i;
130 122
diff --git a/src/lib/libcrypto/sha/sha1s.cpp b/src/lib/libcrypto/sha/sha1s.cpp
index 0163377de6..af23d1e0f2 100644
--- a/src/lib/libcrypto/sha/sha1s.cpp
+++ b/src/lib/libcrypto/sha/sha1s.cpp
@@ -32,8 +32,9 @@ void GetTSC(unsigned long& tsc)
32 32
33#include <stdio.h> 33#include <stdio.h>
34#include <stdlib.h> 34#include <stdlib.h>
35#include "sha.h" 35#include <openssl/sha.h>
36 36
37#define sha1_block_x86 sha1_block_asm_data_order
37extern "C" { 38extern "C" {
38void sha1_block_x86(SHA_CTX *ctx, unsigned char *buffer,int num); 39void sha1_block_x86(SHA_CTX *ctx, unsigned char *buffer,int num);
39} 40}
@@ -55,8 +56,10 @@ void main(int argc,char *argv[])
55 if (num == 0) num=16; 56 if (num == 0) num=16;
56 if (num > 250) num=16; 57 if (num > 250) num=16;
57 numm=num+2; 58 numm=num+2;
59#if 0
58 num*=64; 60 num*=64;
59 numm*=64; 61 numm*=64;
62#endif
60 63
61 for (j=0; j<6; j++) 64 for (j=0; j<6; j++)
62 { 65 {
@@ -72,7 +75,7 @@ void main(int argc,char *argv[])
72 sha1_block_x86(&ctx,buffer,num); 75 sha1_block_x86(&ctx,buffer,num);
73 } 76 }
74 77
75 printf("sha1 (%d bytes) %d %d (%.2f)\n",num, 78 printf("sha1 (%d bytes) %d %d (%.2f)\n",num*64,
76 e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2); 79 e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
77 } 80 }
78 } 81 }
diff --git a/src/lib/libcrypto/sha/sha1test.c b/src/lib/libcrypto/sha/sha1test.c
index 3c62a218b4..499a1cf5af 100644
--- a/src/lib/libcrypto/sha/sha1test.c
+++ b/src/lib/libcrypto/sha/sha1test.c
@@ -59,57 +59,70 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <string.h> 60#include <string.h>
61#include <stdlib.h> 61#include <stdlib.h>
62#include "sha.h" 62
63#ifdef OPENSSL_NO_SHA
64int main(int argc, char *argv[])
65{
66 printf("No SHA support\n");
67 return(0);
68}
69#else
70#include <openssl/evp.h>
71#include <openssl/sha.h>
72
73#ifdef CHARSET_EBCDIC
74#include <openssl/ebcdic.h>
75#endif
63 76
64#undef SHA_0 /* FIPS 180 */ 77#undef SHA_0 /* FIPS 180 */
65#define SHA_1 /* FIPS 180-1 */ 78#define SHA_1 /* FIPS 180-1 */
66 79
67char *test[]={ 80static char *test[]={
68 "abc", 81 "abc",
69 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 82 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
70 NULL, 83 NULL,
71 }; 84 };
72 85
73#ifdef SHA_0 86#ifdef SHA_0
74char *ret[]={ 87static char *ret[]={
75 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", 88 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
76 "d2516ee1acfa5baf33dfc1c471e438449ef134c8", 89 "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
77 }; 90 };
78char *bigret= 91static char *bigret=
79 "3232affa48628a26653b5aaa44541fd90d690603"; 92 "3232affa48628a26653b5aaa44541fd90d690603";
80#endif 93#endif
81#ifdef SHA_1 94#ifdef SHA_1
82char *ret[]={ 95static char *ret[]={
83 "a9993e364706816aba3e25717850c26c9cd0d89d", 96 "a9993e364706816aba3e25717850c26c9cd0d89d",
84 "84983e441c3bd26ebaae4aa1f95129e5e54670f1", 97 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
85 }; 98 };
86char *bigret= 99static char *bigret=
87 "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; 100 "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
88#endif 101#endif
89 102
90#ifndef NOPROTO
91static char *pt(unsigned char *md); 103static char *pt(unsigned char *md);
92#else 104int main(int argc, char *argv[])
93static char *pt();
94#endif
95
96int main(argc,argv)
97int argc;
98char *argv[];
99 { 105 {
100 int i,err=0; 106 int i,err=0;
101 unsigned char **P,**R; 107 unsigned char **P,**R;
102 static unsigned char buf[1000]; 108 static unsigned char buf[1000];
103 char *p,*r; 109 char *p,*r;
104 SHA_CTX c; 110 EVP_MD_CTX c;
105 unsigned char md[SHA_DIGEST_LENGTH]; 111 unsigned char md[SHA_DIGEST_LENGTH];
106 112
113#ifdef CHARSET_EBCDIC
114 ebcdic2ascii(test[0], test[0], strlen(test[0]));
115 ebcdic2ascii(test[1], test[1], strlen(test[1]));
116#endif
117
118 EVP_MD_CTX_init(&c);
107 P=(unsigned char **)test; 119 P=(unsigned char **)test;
108 R=(unsigned char **)ret; 120 R=(unsigned char **)ret;
109 i=1; 121 i=1;
110 while (*P != NULL) 122 while (*P != NULL)
111 { 123 {
112 p=pt(SHA1(*P,(unsigned long)strlen((char *)*P),NULL)); 124 EVP_Digest(*P,(unsigned long)strlen((char *)*P),md,NULL,EVP_sha1(), NULL);
125 p=pt(md);
113 if (strcmp(p,(char *)*R) != 0) 126 if (strcmp(p,(char *)*R) != 0)
114 { 127 {
115 printf("error calculating SHA1 on '%s'\n",*P); 128 printf("error calculating SHA1 on '%s'\n",*P);
@@ -124,10 +137,13 @@ char *argv[];
124 } 137 }
125 138
126 memset(buf,'a',1000); 139 memset(buf,'a',1000);
127 SHA1_Init(&c); 140#ifdef CHARSET_EBCDIC
141 ebcdic2ascii(buf, buf, 1000);
142#endif /*CHARSET_EBCDIC*/
143 EVP_DigestInit_ex(&c,EVP_sha1(), NULL);
128 for (i=0; i<1000; i++) 144 for (i=0; i<1000; i++)
129 SHA1_Update(&c,buf,1000); 145 EVP_DigestUpdate(&c,buf,1000);
130 SHA1_Final(md,&c); 146 EVP_DigestFinal_ex(&c,md,NULL);
131 p=pt(md); 147 p=pt(md);
132 148
133 r=bigret; 149 r=bigret;
@@ -140,11 +156,11 @@ char *argv[];
140 else 156 else
141 printf("test 3 ok\n"); 157 printf("test 3 ok\n");
142 exit(err); 158 exit(err);
159 EVP_MD_CTX_cleanup(&c);
143 return(0); 160 return(0);
144 } 161 }
145 162
146static char *pt(md) 163static char *pt(unsigned char *md)
147unsigned char *md;
148 { 164 {
149 int i; 165 int i;
150 static char buf[80]; 166 static char buf[80];
@@ -153,3 +169,4 @@ unsigned char *md;
153 sprintf(&(buf[i*2]),"%02x",md[i]); 169 sprintf(&(buf[i*2]),"%02x",md[i]);
154 return(buf); 170 return(buf);
155 } 171 }
172#endif
diff --git a/src/lib/libcrypto/sha/sha_dgst.c b/src/lib/libcrypto/sha/sha_dgst.c
index 8ed533ea26..5a4b3ab204 100644
--- a/src/lib/libcrypto/sha/sha_dgst.c
+++ b/src/lib/libcrypto/sha/sha_dgst.c
@@ -1,4 +1,4 @@
1/* crypto/sha/sha_dgst.c */ 1/* crypto/sha/sha1dgst.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved. 3 * All rights reserved.
4 * 4 *
@@ -56,387 +56,18 @@
56 * [including the GNU Public Licence.] 56 * [including the GNU Public Licence.]
57 */ 57 */
58 58
59#include <stdio.h> 59#if !defined(OPENSSL_NO_SHA0) && !defined(OPENSSL_NO_SHA)
60#include <string.h>
61#define SHA_0
62#undef SHA_1
63#include "sha.h"
64#include "sha_locl.h"
65
66char *SHA_version="SHA part of SSLeay 0.9.0b 29-Jun-1998";
67
68/* Implemented from SHA-0 document - The Secure Hash Algorithm
69 */
70
71#define INIT_DATA_h0 (unsigned long)0x67452301L
72#define INIT_DATA_h1 (unsigned long)0xefcdab89L
73#define INIT_DATA_h2 (unsigned long)0x98badcfeL
74#define INIT_DATA_h3 (unsigned long)0x10325476L
75#define INIT_DATA_h4 (unsigned long)0xc3d2e1f0L
76
77#define K_00_19 0x5a827999L
78#define K_20_39 0x6ed9eba1L
79#define K_40_59 0x8f1bbcdcL
80#define K_60_79 0xca62c1d6L
81
82#ifndef NOPROTO
83 void sha_block(SHA_CTX *c, register unsigned long *p, int num);
84#else
85 void sha_block();
86#endif
87
88#define M_c2nl c2nl
89#define M_p_c2nl p_c2nl
90#define M_c2nl_p c2nl_p
91#define M_p_c2nl_p p_c2nl_p
92#define M_nl2c nl2c
93
94void SHA_Init(c)
95SHA_CTX *c;
96 {
97 c->h0=INIT_DATA_h0;
98 c->h1=INIT_DATA_h1;
99 c->h2=INIT_DATA_h2;
100 c->h3=INIT_DATA_h3;
101 c->h4=INIT_DATA_h4;
102 c->Nl=0;
103 c->Nh=0;
104 c->num=0;
105 }
106
107void SHA_Update(c, data, len)
108SHA_CTX *c;
109register unsigned char *data;
110unsigned long len;
111 {
112 register ULONG *p;
113 int ew,ec,sw,sc;
114 ULONG l;
115
116 if (len == 0) return;
117
118 l=(c->Nl+(len<<3))&0xffffffffL;
119 if (l < c->Nl) /* overflow */
120 c->Nh++;
121 c->Nh+=(len>>29);
122 c->Nl=l;
123
124 if (c->num != 0)
125 {
126 p=c->data;
127 sw=c->num>>2;
128 sc=c->num&0x03;
129
130 if ((c->num+len) >= SHA_CBLOCK)
131 {
132 l= p[sw];
133 M_p_c2nl(data,l,sc);
134 p[sw++]=l;
135 for (; sw<SHA_LBLOCK; sw++)
136 {
137 M_c2nl(data,l);
138 p[sw]=l;
139 }
140 len-=(SHA_CBLOCK-c->num);
141
142 sha_block(c,p,64);
143 c->num=0;
144 /* drop through and do the rest */
145 }
146 else
147 {
148 c->num+=(int)len;
149 if ((sc+len) < 4) /* ugly, add char's to a word */
150 {
151 l= p[sw];
152 M_p_c2nl_p(data,l,sc,len);
153 p[sw]=l;
154 }
155 else
156 {
157 ew=(c->num>>2);
158 ec=(c->num&0x03);
159 l= p[sw];
160 M_p_c2nl(data,l,sc);
161 p[sw++]=l;
162 for (; sw < ew; sw++)
163 { M_c2nl(data,l); p[sw]=l; }
164 if (ec)
165 {
166 M_c2nl_p(data,l,ec);
167 p[sw]=l;
168 }
169 }
170 return;
171 }
172 }
173 /* We can only do the following code for assember, the reason
174 * being that the sha_block 'C' version changes the values
175 * in the 'data' array. The assember code avoids this and
176 * copies it to a local array. I should be able to do this for
177 * the C version as well....
178 */
179#if 1
180#if defined(B_ENDIAN) || defined(SHA_ASM)
181 if ((((unsigned int)data)%sizeof(ULONG)) == 0)
182 {
183 sw=len/SHA_CBLOCK;
184 if (sw)
185 {
186 sw*=SHA_CBLOCK;
187 sha_block(c,(ULONG *)data,sw);
188 data+=sw;
189 len-=sw;
190 }
191 }
192#endif
193#endif
194 /* we now can process the input data in blocks of SHA_CBLOCK
195 * chars and save the leftovers to c->data. */
196 p=c->data;
197 while (len >= SHA_CBLOCK)
198 {
199#if defined(B_ENDIAN) || defined(L_ENDIAN)
200 if (p != (unsigned long *)data)
201 memcpy(p,data,SHA_CBLOCK);
202 data+=SHA_CBLOCK;
203# ifdef L_ENDIAN
204# ifndef SHA_ASM /* Will not happen */
205 for (sw=(SHA_LBLOCK/4); sw; sw--)
206 {
207 Endian_Reverse32(p[0]);
208 Endian_Reverse32(p[1]);
209 Endian_Reverse32(p[2]);
210 Endian_Reverse32(p[3]);
211 p+=4;
212 }
213 p=c->data;
214# endif
215# endif
216#else
217 for (sw=(SHA_BLOCK/4); sw; sw--)
218 {
219 M_c2nl(data,l); *(p++)=l;
220 M_c2nl(data,l); *(p++)=l;
221 M_c2nl(data,l); *(p++)=l;
222 M_c2nl(data,l); *(p++)=l;
223 }
224 p=c->data;
225#endif
226 sha_block(c,p,64);
227 len-=SHA_CBLOCK;
228 }
229 ec=(int)len;
230 c->num=ec;
231 ew=(ec>>2);
232 ec&=0x03;
233
234 for (sw=0; sw < ew; sw++)
235 { M_c2nl(data,l); p[sw]=l; }
236 M_c2nl_p(data,l,ec);
237 p[sw]=l;
238 }
239
240void SHA_Transform(c,b)
241SHA_CTX *c;
242unsigned char *b;
243 {
244 ULONG p[16];
245#if !defined(B_ENDIAN)
246 ULONG *q;
247 int i;
248#endif
249
250#if defined(B_ENDIAN) || defined(L_ENDIAN)
251 memcpy(p,b,64);
252#ifdef L_ENDIAN
253 q=p;
254 for (i=(SHA_LBLOCK/4); i; i--)
255 {
256 Endian_Reverse32(q[0]);
257 Endian_Reverse32(q[1]);
258 Endian_Reverse32(q[2]);
259 Endian_Reverse32(q[3]);
260 q+=4;
261 }
262#endif
263#else
264 q=p;
265 for (i=(SHA_LBLOCK/4); i; i--)
266 {
267 ULONG l;
268 c2nl(b,l); *(q++)=l;
269 c2nl(b,l); *(q++)=l;
270 c2nl(b,l); *(q++)=l;
271 c2nl(b,l); *(q++)=l;
272 }
273#endif
274 sha_block(c,p,64);
275 }
276
277void sha_block(c, W, num)
278SHA_CTX *c;
279register unsigned long *W;
280int num;
281 {
282 register ULONG A,B,C,D,E,T;
283 ULONG X[16];
284
285 A=c->h0;
286 B=c->h1;
287 C=c->h2;
288 D=c->h3;
289 E=c->h4;
290
291 for (;;)
292 {
293 BODY_00_15( 0,A,B,C,D,E,T,W);
294 BODY_00_15( 1,T,A,B,C,D,E,W);
295 BODY_00_15( 2,E,T,A,B,C,D,W);
296 BODY_00_15( 3,D,E,T,A,B,C,W);
297 BODY_00_15( 4,C,D,E,T,A,B,W);
298 BODY_00_15( 5,B,C,D,E,T,A,W);
299 BODY_00_15( 6,A,B,C,D,E,T,W);
300 BODY_00_15( 7,T,A,B,C,D,E,W);
301 BODY_00_15( 8,E,T,A,B,C,D,W);
302 BODY_00_15( 9,D,E,T,A,B,C,W);
303 BODY_00_15(10,C,D,E,T,A,B,W);
304 BODY_00_15(11,B,C,D,E,T,A,W);
305 BODY_00_15(12,A,B,C,D,E,T,W);
306 BODY_00_15(13,T,A,B,C,D,E,W);
307 BODY_00_15(14,E,T,A,B,C,D,W);
308 BODY_00_15(15,D,E,T,A,B,C,W);
309 BODY_16_19(16,C,D,E,T,A,B,W,W,W,W);
310 BODY_16_19(17,B,C,D,E,T,A,W,W,W,W);
311 BODY_16_19(18,A,B,C,D,E,T,W,W,W,W);
312 BODY_16_19(19,T,A,B,C,D,E,W,W,W,X);
313 60
314 BODY_20_31(20,E,T,A,B,C,D,W,W,W,X); 61#undef SHA_1
315 BODY_20_31(21,D,E,T,A,B,C,W,W,W,X); 62#define SHA_0
316 BODY_20_31(22,C,D,E,T,A,B,W,W,W,X);
317 BODY_20_31(23,B,C,D,E,T,A,W,W,W,X);
318 BODY_20_31(24,A,B,C,D,E,T,W,W,X,X);
319 BODY_20_31(25,T,A,B,C,D,E,W,W,X,X);
320 BODY_20_31(26,E,T,A,B,C,D,W,W,X,X);
321 BODY_20_31(27,D,E,T,A,B,C,W,W,X,X);
322 BODY_20_31(28,C,D,E,T,A,B,W,W,X,X);
323 BODY_20_31(29,B,C,D,E,T,A,W,W,X,X);
324 BODY_20_31(30,A,B,C,D,E,T,W,X,X,X);
325 BODY_20_31(31,T,A,B,C,D,E,W,X,X,X);
326 BODY_32_39(32,E,T,A,B,C,D,X);
327 BODY_32_39(33,D,E,T,A,B,C,X);
328 BODY_32_39(34,C,D,E,T,A,B,X);
329 BODY_32_39(35,B,C,D,E,T,A,X);
330 BODY_32_39(36,A,B,C,D,E,T,X);
331 BODY_32_39(37,T,A,B,C,D,E,X);
332 BODY_32_39(38,E,T,A,B,C,D,X);
333 BODY_32_39(39,D,E,T,A,B,C,X);
334 63
335 BODY_40_59(40,C,D,E,T,A,B,X); 64#include <openssl/opensslv.h>
336 BODY_40_59(41,B,C,D,E,T,A,X);
337 BODY_40_59(42,A,B,C,D,E,T,X);
338 BODY_40_59(43,T,A,B,C,D,E,X);
339 BODY_40_59(44,E,T,A,B,C,D,X);
340 BODY_40_59(45,D,E,T,A,B,C,X);
341 BODY_40_59(46,C,D,E,T,A,B,X);
342 BODY_40_59(47,B,C,D,E,T,A,X);
343 BODY_40_59(48,A,B,C,D,E,T,X);
344 BODY_40_59(49,T,A,B,C,D,E,X);
345 BODY_40_59(50,E,T,A,B,C,D,X);
346 BODY_40_59(51,D,E,T,A,B,C,X);
347 BODY_40_59(52,C,D,E,T,A,B,X);
348 BODY_40_59(53,B,C,D,E,T,A,X);
349 BODY_40_59(54,A,B,C,D,E,T,X);
350 BODY_40_59(55,T,A,B,C,D,E,X);
351 BODY_40_59(56,E,T,A,B,C,D,X);
352 BODY_40_59(57,D,E,T,A,B,C,X);
353 BODY_40_59(58,C,D,E,T,A,B,X);
354 BODY_40_59(59,B,C,D,E,T,A,X);
355 65
356 BODY_60_79(60,A,B,C,D,E,T,X); 66const char *SHA_version="SHA" OPENSSL_VERSION_PTEXT;
357 BODY_60_79(61,T,A,B,C,D,E,X);
358 BODY_60_79(62,E,T,A,B,C,D,X);
359 BODY_60_79(63,D,E,T,A,B,C,X);
360 BODY_60_79(64,C,D,E,T,A,B,X);
361 BODY_60_79(65,B,C,D,E,T,A,X);
362 BODY_60_79(66,A,B,C,D,E,T,X);
363 BODY_60_79(67,T,A,B,C,D,E,X);
364 BODY_60_79(68,E,T,A,B,C,D,X);
365 BODY_60_79(69,D,E,T,A,B,C,X);
366 BODY_60_79(70,C,D,E,T,A,B,X);
367 BODY_60_79(71,B,C,D,E,T,A,X);
368 BODY_60_79(72,A,B,C,D,E,T,X);
369 BODY_60_79(73,T,A,B,C,D,E,X);
370 BODY_60_79(74,E,T,A,B,C,D,X);
371 BODY_60_79(75,D,E,T,A,B,C,X);
372 BODY_60_79(76,C,D,E,T,A,B,X);
373 BODY_60_79(77,B,C,D,E,T,A,X);
374 BODY_60_79(78,A,B,C,D,E,T,X);
375 BODY_60_79(79,T,A,B,C,D,E,X);
376
377 c->h0=(c->h0+E)&0xffffffffL;
378 c->h1=(c->h1+T)&0xffffffffL;
379 c->h2=(c->h2+A)&0xffffffffL;
380 c->h3=(c->h3+B)&0xffffffffL;
381 c->h4=(c->h4+C)&0xffffffffL;
382 67
383 num-=64; 68/* The implementation is in ../md32_common.h */
384 if (num <= 0) break;
385 69
386 A=c->h0; 70#include "sha_locl.h"
387 B=c->h1;
388 C=c->h2;
389 D=c->h3;
390 E=c->h4;
391
392 W+=16;
393 }
394 }
395
396void SHA_Final(md, c)
397unsigned char *md;
398SHA_CTX *c;
399 {
400 register int i,j;
401 register ULONG l;
402 register ULONG *p;
403 static unsigned char end[4]={0x80,0x00,0x00,0x00};
404 unsigned char *cp=end;
405 71
406 /* c->num should definitly have room for at least one more byte. */
407 p=c->data;
408 j=c->num;
409 i=j>>2;
410#ifdef PURIFY
411 if ((j&0x03) == 0) p[i]=0;
412#endif 72#endif
413 l=p[i];
414 M_p_c2nl(cp,l,j&0x03);
415 p[i]=l;
416 i++;
417 /* i is the next 'undefined word' */
418 if (c->num >= SHA_LAST_BLOCK)
419 {
420 for (; i<SHA_LBLOCK; i++)
421 p[i]=0;
422 sha_block(c,p,64);
423 i=0;
424 }
425 for (; i<(SHA_LBLOCK-2); i++)
426 p[i]=0;
427 p[SHA_LBLOCK-2]=c->Nh;
428 p[SHA_LBLOCK-1]=c->Nl;
429 sha_block(c,p,64);
430 cp=md;
431 l=c->h0; nl2c(l,cp);
432 l=c->h1; nl2c(l,cp);
433 l=c->h2; nl2c(l,cp);
434 l=c->h3; nl2c(l,cp);
435 l=c->h4; nl2c(l,cp);
436
437 /* clear stuff, sha_block may be leaving some stuff on the stack
438 * but I'm not worried :-) */
439 c->num=0;
440/* memset((char *)&c,0,sizeof(c));*/
441 }
442 73
diff --git a/src/lib/libcrypto/sha/sha_one.c b/src/lib/libcrypto/sha/sha_one.c
index 18ab7f61bc..5426faae4a 100644
--- a/src/lib/libcrypto/sha/sha_one.c
+++ b/src/lib/libcrypto/sha/sha_one.c
@@ -58,12 +58,10 @@
58 58
59#include <stdio.h> 59#include <stdio.h>
60#include <string.h> 60#include <string.h>
61#include "sha.h" 61#include <openssl/sha.h>
62 62
63unsigned char *SHA(d, n, md) 63#ifndef OPENSSL_NO_SHA0
64unsigned char *d; 64unsigned char *SHA(const unsigned char *d, unsigned long n, unsigned char *md)
65unsigned long n;
66unsigned char *md;
67 { 65 {
68 SHA_CTX c; 66 SHA_CTX c;
69 static unsigned char m[SHA_DIGEST_LENGTH]; 67 static unsigned char m[SHA_DIGEST_LENGTH];
@@ -75,3 +73,4 @@ unsigned char *md;
75 memset(&c,0,sizeof(c)); 73 memset(&c,0,sizeof(c));
76 return(md); 74 return(md);
77 } 75 }
76#endif
diff --git a/src/lib/libcrypto/sha/shatest.c b/src/lib/libcrypto/sha/shatest.c
index 03816e9b39..331294a74f 100644
--- a/src/lib/libcrypto/sha/shatest.c
+++ b/src/lib/libcrypto/sha/shatest.c
@@ -59,57 +59,70 @@
59#include <stdio.h> 59#include <stdio.h>
60#include <string.h> 60#include <string.h>
61#include <stdlib.h> 61#include <stdlib.h>
62#include "sha.h" 62
63#ifdef OPENSSL_NO_SHA
64int main(int argc, char *argv[])
65{
66 printf("No SHA support\n");
67 return(0);
68}
69#else
70#include <openssl/evp.h>
71#include <openssl/sha.h>
72
73#ifdef CHARSET_EBCDIC
74#include <openssl/ebcdic.h>
75#endif
63 76
64#define SHA_0 /* FIPS 180 */ 77#define SHA_0 /* FIPS 180 */
65#undef SHA_1 /* FIPS 180-1 */ 78#undef SHA_1 /* FIPS 180-1 */
66 79
67char *test[]={ 80static char *test[]={
68 "abc", 81 "abc",
69 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 82 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
70 NULL, 83 NULL,
71 }; 84 };
72 85
73#ifdef SHA_0 86#ifdef SHA_0
74char *ret[]={ 87static char *ret[]={
75 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", 88 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
76 "d2516ee1acfa5baf33dfc1c471e438449ef134c8", 89 "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
77 }; 90 };
78char *bigret= 91static char *bigret=
79 "3232affa48628a26653b5aaa44541fd90d690603"; 92 "3232affa48628a26653b5aaa44541fd90d690603";
80#endif 93#endif
81#ifdef SHA_1 94#ifdef SHA_1
82char *ret[]={ 95static char *ret[]={
83 "a9993e364706816aba3e25717850c26c9cd0d89d", 96 "a9993e364706816aba3e25717850c26c9cd0d89d",
84 "84983e441c3bd26ebaae4aa1f95129e5e54670f1", 97 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
85 }; 98 };
86char *bigret= 99static char *bigret=
87 "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; 100 "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
88#endif 101#endif
89 102
90#ifndef NOPROTO
91static char *pt(unsigned char *md); 103static char *pt(unsigned char *md);
92#else 104int main(int argc, char *argv[])
93static char *pt();
94#endif
95
96int main(argc,argv)
97int argc;
98char *argv[];
99 { 105 {
100 int i,err=0; 106 int i,err=0;
101 unsigned char **P,**R; 107 unsigned char **P,**R;
102 static unsigned char buf[1000]; 108 static unsigned char buf[1000];
103 char *p,*r; 109 char *p,*r;
104 SHA_CTX c; 110 EVP_MD_CTX c;
105 unsigned char md[SHA_DIGEST_LENGTH]; 111 unsigned char md[SHA_DIGEST_LENGTH];
106 112
113#ifdef CHARSET_EBCDIC
114 ebcdic2ascii(test[0], test[0], strlen(test[0]));
115 ebcdic2ascii(test[1], test[1], strlen(test[1]));
116#endif
117
118 EVP_MD_CTX_init(&c);
107 P=(unsigned char **)test; 119 P=(unsigned char **)test;
108 R=(unsigned char **)ret; 120 R=(unsigned char **)ret;
109 i=1; 121 i=1;
110 while (*P != NULL) 122 while (*P != NULL)
111 { 123 {
112 p=pt(SHA(*P,(unsigned long)strlen((char *)*P),NULL)); 124 EVP_Digest(*P,(unsigned long)strlen((char *)*P),md,NULL,EVP_sha(), NULL);
125 p=pt(md);
113 if (strcmp(p,(char *)*R) != 0) 126 if (strcmp(p,(char *)*R) != 0)
114 { 127 {
115 printf("error calculating SHA on '%s'\n",*P); 128 printf("error calculating SHA on '%s'\n",*P);
@@ -124,10 +137,13 @@ char *argv[];
124 } 137 }
125 138
126 memset(buf,'a',1000); 139 memset(buf,'a',1000);
127 SHA_Init(&c); 140#ifdef CHARSET_EBCDIC
141 ebcdic2ascii(buf, buf, 1000);
142#endif /*CHARSET_EBCDIC*/
143 EVP_DigestInit_ex(&c,EVP_sha(), NULL);
128 for (i=0; i<1000; i++) 144 for (i=0; i<1000; i++)
129 SHA_Update(&c,buf,1000); 145 EVP_DigestUpdate(&c,buf,1000);
130 SHA_Final(md,&c); 146 EVP_DigestFinal_ex(&c,md,NULL);
131 p=pt(md); 147 p=pt(md);
132 148
133 r=bigret; 149 r=bigret;
@@ -139,12 +155,12 @@ char *argv[];
139 } 155 }
140 else 156 else
141 printf("test 3 ok\n"); 157 printf("test 3 ok\n");
158 EVP_MD_CTX_cleanup(&c);
142 exit(err); 159 exit(err);
143 return(0); 160 return(0);
144 } 161 }
145 162
146static char *pt(md) 163static char *pt(unsigned char *md)
147unsigned char *md;
148 { 164 {
149 int i; 165 int i;
150 static char buf[80]; 166 static char buf[80];
@@ -153,3 +169,4 @@ unsigned char *md;
153 sprintf(&(buf[i*2]),"%02x",md[i]); 169 sprintf(&(buf[i*2]),"%02x",md[i]);
154 return(buf); 170 return(buf);
155 } 171 }
172#endif