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
commit9e77c62555877f9a64805c49d0dcd7dbfbb40f4e (patch)
tree2a6396b738ecede1e1dd3ad84c90e47e21d0bcbd /src/lib/libcrypto/sha
parentfe5d0717e2760d02faf23bf5a714f17b33ae4abb (diff)
parent536c76cbb863bab152f19842ab88772c01e922c7 (diff)
downloadopenbsd-9e77c62555877f9a64805c49d0dcd7dbfbb40f4e.tar.gz
openbsd-9e77c62555877f9a64805c49d0dcd7dbfbb40f4e.tar.bz2
openbsd-9e77c62555877f9a64805c49d0dcd7dbfbb40f4e.zip
This commit was generated by cvs2git to track changes on a CVS vendor
branch.
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 }