summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/sha
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:15 +0000
committerryker <>1998-10-05 20:13:15 +0000
commit536c76cbb863bab152f19842ab88772c01e922c7 (patch)
treedfecec371a097b73d605aae665887946d9982219 /src/lib/libcrypto/sha
downloadopenbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.gz
openbsd-536c76cbb863bab152f19842ab88772c01e922c7.tar.bz2
openbsd-536c76cbb863bab152f19842ab88772c01e922c7.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/sha')
-rw-r--r--src/lib/libcrypto/sha/asm/README1
-rw-r--r--src/lib/libcrypto/sha/sha.c135
-rw-r--r--src/lib/libcrypto/sha/sha1.c135
-rw-r--r--src/lib/libcrypto/sha/sha1s.cpp79
-rw-r--r--src/lib/libcrypto/sha/sha1test.c155
-rw-r--r--src/lib/libcrypto/sha/sha_dgst.c442
-rw-r--r--src/lib/libcrypto/sha/sha_one.c77
-rw-r--r--src/lib/libcrypto/sha/shatest.c155
8 files changed, 1179 insertions, 0 deletions
diff --git a/src/lib/libcrypto/sha/asm/README b/src/lib/libcrypto/sha/asm/README
new file mode 100644
index 0000000000..b7e755765f
--- /dev/null
+++ b/src/lib/libcrypto/sha/asm/README
@@ -0,0 +1 @@
C2.pl works
diff --git a/src/lib/libcrypto/sha/sha.c b/src/lib/libcrypto/sha/sha.c
new file mode 100644
index 0000000000..713fec3610
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha.c
@@ -0,0 +1,135 @@
1/* crypto/sha/sha.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 <stdlib.h>
61#include "sha.h"
62
63#define BUFSIZE 1024*16
64
65#ifndef NOPROTO
66void do_fp(FILE *f);
67void pt(unsigned char *md);
68int read(int, void *, unsigned int);
69#else
70void do_fp();
71void pt();
72int read();
73#endif
74
75int main(argc, argv)
76int argc;
77char **argv;
78 {
79 int i,err=0;
80 FILE *IN;
81
82 if (argc == 1)
83 {
84 do_fp(stdin);
85 }
86 else
87 {
88 for (i=1; i<argc; i++)
89 {
90 IN=fopen(argv[i],"r");
91 if (IN == NULL)
92 {
93 perror(argv[i]);
94 err++;
95 continue;
96 }
97 printf("SHA(%s)= ",argv[i]);
98 do_fp(IN);
99 fclose(IN);
100 }
101 }
102 exit(err);
103 }
104
105void do_fp(f)
106FILE *f;
107 {
108 SHA_CTX c;
109 unsigned char md[SHA_DIGEST_LENGTH];
110 int fd;
111 int i;
112 unsigned char buf[BUFSIZE];
113
114 fd=fileno(f);
115 SHA_Init(&c);
116 for (;;)
117 {
118 i=read(fd,buf,BUFSIZE);
119 if (i <= 0) break;
120 SHA_Update(&c,buf,(unsigned long)i);
121 }
122 SHA_Final(&(md[0]),&c);
123 pt(md);
124 }
125
126void pt(md)
127unsigned char *md;
128 {
129 int i;
130
131 for (i=0; i<SHA_DIGEST_LENGTH; i++)
132 printf("%02x",md[i]);
133 printf("\n");
134 }
135
diff --git a/src/lib/libcrypto/sha/sha1.c b/src/lib/libcrypto/sha/sha1.c
new file mode 100644
index 0000000000..a4739ac9fd
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha1.c
@@ -0,0 +1,135 @@
1/* crypto/sha/sha1.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 <stdlib.h>
61#include "sha.h"
62
63#define BUFSIZE 1024*16
64
65#ifndef NOPROTO
66void do_fp(FILE *f);
67void pt(unsigned char *md);
68int read(int, void *, unsigned int);
69#else
70void do_fp();
71void pt();
72int read();
73#endif
74
75int main(argc, argv)
76int argc;
77char **argv;
78 {
79 int i,err=0;
80 FILE *IN;
81
82 if (argc == 1)
83 {
84 do_fp(stdin);
85 }
86 else
87 {
88 for (i=1; i<argc; i++)
89 {
90 IN=fopen(argv[i],"r");
91 if (IN == NULL)
92 {
93 perror(argv[i]);
94 err++;
95 continue;
96 }
97 printf("SHA1(%s)= ",argv[i]);
98 do_fp(IN);
99 fclose(IN);
100 }
101 }
102 exit(err);
103 }
104
105void do_fp(f)
106FILE *f;
107 {
108 SHA_CTX c;
109 unsigned char md[SHA_DIGEST_LENGTH];
110 int fd;
111 int i;
112 unsigned char buf[BUFSIZE];
113
114 fd=fileno(f);
115 SHA1_Init(&c);
116 for (;;)
117 {
118 i=read(fd,buf,BUFSIZE);
119 if (i <= 0) break;
120 SHA1_Update(&c,buf,(unsigned long)i);
121 }
122 SHA1_Final(&(md[0]),&c);
123 pt(md);
124 }
125
126void pt(md)
127unsigned char *md;
128 {
129 int i;
130
131 for (i=0; i<SHA_DIGEST_LENGTH; i++)
132 printf("%02x",md[i]);
133 printf("\n");
134 }
135
diff --git a/src/lib/libcrypto/sha/sha1s.cpp b/src/lib/libcrypto/sha/sha1s.cpp
new file mode 100644
index 0000000000..0163377de6
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha1s.cpp
@@ -0,0 +1,79 @@
1//
2// gettsc.inl
3//
4// gives access to the Pentium's (secret) cycle counter
5//
6// This software was written by Leonard Janke (janke@unixg.ubc.ca)
7// in 1996-7 and is entered, by him, into the public domain.
8
9#if defined(__WATCOMC__)
10void GetTSC(unsigned long&);
11#pragma aux GetTSC = 0x0f 0x31 "mov [edi], eax" parm [edi] modify [edx eax];
12#elif defined(__GNUC__)
13inline
14void GetTSC(unsigned long& tsc)
15{
16 asm volatile(".byte 15, 49\n\t"
17 : "=eax" (tsc)
18 :
19 : "%edx", "%eax");
20}
21#elif defined(_MSC_VER)
22inline
23void GetTSC(unsigned long& tsc)
24{
25 unsigned long a;
26 __asm _emit 0fh
27 __asm _emit 31h
28 __asm mov a, eax;
29 tsc=a;
30}
31#endif
32
33#include <stdio.h>
34#include <stdlib.h>
35#include "sha.h"
36
37extern "C" {
38void sha1_block_x86(SHA_CTX *ctx, unsigned char *buffer,int num);
39}
40
41void main(int argc,char *argv[])
42 {
43 unsigned char buffer[64*256];
44 SHA_CTX ctx;
45 unsigned long s1,s2,e1,e2;
46 unsigned char k[16];
47 unsigned long data[2];
48 unsigned char iv[8];
49 int i,num=0,numm;
50 int j=0;
51
52 if (argc >= 2)
53 num=atoi(argv[1]);
54
55 if (num == 0) num=16;
56 if (num > 250) num=16;
57 numm=num+2;
58 num*=64;
59 numm*=64;
60
61 for (j=0; j<6; j++)
62 {
63 for (i=0; i<10; i++) /**/
64 {
65 sha1_block_x86(&ctx,buffer,numm);
66 GetTSC(s1);
67 sha1_block_x86(&ctx,buffer,numm);
68 GetTSC(e1);
69 GetTSC(s2);
70 sha1_block_x86(&ctx,buffer,num);
71 GetTSC(e2);
72 sha1_block_x86(&ctx,buffer,num);
73 }
74
75 printf("sha1 (%d bytes) %d %d (%.2f)\n",num,
76 e1-s1,e2-s2,(double)((e1-s1)-(e2-s2))/2);
77 }
78 }
79
diff --git a/src/lib/libcrypto/sha/sha1test.c b/src/lib/libcrypto/sha/sha1test.c
new file mode 100644
index 0000000000..3c62a218b4
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha1test.c
@@ -0,0 +1,155 @@
1/* crypto/sha/sha1test.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 <stdlib.h>
62#include "sha.h"
63
64#undef SHA_0 /* FIPS 180 */
65#define SHA_1 /* FIPS 180-1 */
66
67char *test[]={
68 "abc",
69 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
70 NULL,
71 };
72
73#ifdef SHA_0
74char *ret[]={
75 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
76 "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
77 };
78char *bigret=
79 "3232affa48628a26653b5aaa44541fd90d690603";
80#endif
81#ifdef SHA_1
82char *ret[]={
83 "a9993e364706816aba3e25717850c26c9cd0d89d",
84 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
85 };
86char *bigret=
87 "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
88#endif
89
90#ifndef NOPROTO
91static char *pt(unsigned char *md);
92#else
93static char *pt();
94#endif
95
96int main(argc,argv)
97int argc;
98char *argv[];
99 {
100 int i,err=0;
101 unsigned char **P,**R;
102 static unsigned char buf[1000];
103 char *p,*r;
104 SHA_CTX c;
105 unsigned char md[SHA_DIGEST_LENGTH];
106
107 P=(unsigned char **)test;
108 R=(unsigned char **)ret;
109 i=1;
110 while (*P != NULL)
111 {
112 p=pt(SHA1(*P,(unsigned long)strlen((char *)*P),NULL));
113 if (strcmp(p,(char *)*R) != 0)
114 {
115 printf("error calculating SHA1 on '%s'\n",*P);
116 printf("got %s instead of %s\n",p,*R);
117 err++;
118 }
119 else
120 printf("test %d ok\n",i);
121 i++;
122 R++;
123 P++;
124 }
125
126 memset(buf,'a',1000);
127 SHA1_Init(&c);
128 for (i=0; i<1000; i++)
129 SHA1_Update(&c,buf,1000);
130 SHA1_Final(md,&c);
131 p=pt(md);
132
133 r=bigret;
134 if (strcmp(p,r) != 0)
135 {
136 printf("error calculating SHA1 on 'a' * 1000\n");
137 printf("got %s instead of %s\n",p,r);
138 err++;
139 }
140 else
141 printf("test 3 ok\n");
142 exit(err);
143 return(0);
144 }
145
146static char *pt(md)
147unsigned char *md;
148 {
149 int i;
150 static char buf[80];
151
152 for (i=0; i<SHA_DIGEST_LENGTH; i++)
153 sprintf(&(buf[i*2]),"%02x",md[i]);
154 return(buf);
155 }
diff --git a/src/lib/libcrypto/sha/sha_dgst.c b/src/lib/libcrypto/sha/sha_dgst.c
new file mode 100644
index 0000000000..8ed533ea26
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha_dgst.c
@@ -0,0 +1,442 @@
1/* crypto/sha/sha_dgst.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#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
314 BODY_20_31(20,E,T,A,B,C,D,W,W,W,X);
315 BODY_20_31(21,D,E,T,A,B,C,W,W,W,X);
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
335 BODY_40_59(40,C,D,E,T,A,B,X);
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
356 BODY_60_79(60,A,B,C,D,E,T,X);
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
383 num-=64;
384 if (num <= 0) break;
385
386 A=c->h0;
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
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
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
diff --git a/src/lib/libcrypto/sha/sha_one.c b/src/lib/libcrypto/sha/sha_one.c
new file mode 100644
index 0000000000..18ab7f61bc
--- /dev/null
+++ b/src/lib/libcrypto/sha/sha_one.c
@@ -0,0 +1,77 @@
1/* crypto/sha/sha_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 "sha.h"
62
63unsigned char *SHA(d, n, md)
64unsigned char *d;
65unsigned long n;
66unsigned char *md;
67 {
68 SHA_CTX c;
69 static unsigned char m[SHA_DIGEST_LENGTH];
70
71 if (md == NULL) md=m;
72 SHA_Init(&c);
73 SHA_Update(&c,d,n);
74 SHA_Final(md,&c);
75 memset(&c,0,sizeof(c));
76 return(md);
77 }
diff --git a/src/lib/libcrypto/sha/shatest.c b/src/lib/libcrypto/sha/shatest.c
new file mode 100644
index 0000000000..03816e9b39
--- /dev/null
+++ b/src/lib/libcrypto/sha/shatest.c
@@ -0,0 +1,155 @@
1/* crypto/sha/shatest.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 <stdlib.h>
62#include "sha.h"
63
64#define SHA_0 /* FIPS 180 */
65#undef SHA_1 /* FIPS 180-1 */
66
67char *test[]={
68 "abc",
69 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
70 NULL,
71 };
72
73#ifdef SHA_0
74char *ret[]={
75 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880",
76 "d2516ee1acfa5baf33dfc1c471e438449ef134c8",
77 };
78char *bigret=
79 "3232affa48628a26653b5aaa44541fd90d690603";
80#endif
81#ifdef SHA_1
82char *ret[]={
83 "a9993e364706816aba3e25717850c26c9cd0d89d",
84 "84983e441c3bd26ebaae4aa1f95129e5e54670f1",
85 };
86char *bigret=
87 "34aa973cd4c4daa4f61eeb2bdbad27316534016f";
88#endif
89
90#ifndef NOPROTO
91static char *pt(unsigned char *md);
92#else
93static char *pt();
94#endif
95
96int main(argc,argv)
97int argc;
98char *argv[];
99 {
100 int i,err=0;
101 unsigned char **P,**R;
102 static unsigned char buf[1000];
103 char *p,*r;
104 SHA_CTX c;
105 unsigned char md[SHA_DIGEST_LENGTH];
106
107 P=(unsigned char **)test;
108 R=(unsigned char **)ret;
109 i=1;
110 while (*P != NULL)
111 {
112 p=pt(SHA(*P,(unsigned long)strlen((char *)*P),NULL));
113 if (strcmp(p,(char *)*R) != 0)
114 {
115 printf("error calculating SHA on '%s'\n",*P);
116 printf("got %s instead of %s\n",p,*R);
117 err++;
118 }
119 else
120 printf("test %d ok\n",i);
121 i++;
122 R++;
123 P++;
124 }
125
126 memset(buf,'a',1000);
127 SHA_Init(&c);
128 for (i=0; i<1000; i++)
129 SHA_Update(&c,buf,1000);
130 SHA_Final(md,&c);
131 p=pt(md);
132
133 r=bigret;
134 if (strcmp(p,r) != 0)
135 {
136 printf("error calculating SHA on '%s'\n",p);
137 printf("got %s instead of %s\n",p,r);
138 err++;
139 }
140 else
141 printf("test 3 ok\n");
142 exit(err);
143 return(0);
144 }
145
146static char *pt(md)
147unsigned char *md;
148 {
149 int i;
150 static char buf[80];
151
152 for (i=0; i<SHA_DIGEST_LENGTH; i++)
153 sprintf(&(buf[i*2]),"%02x",md[i]);
154 return(buf);
155 }