1 /* crypto/sha/sha1test.c */ 2 /* Copyright (C) 1995-1998 Eric Young (eay (at) cryptsoft.com) 3 * All rights reserved. 4 * 5 * This package is an SSL implementation written 6 * by Eric Young (eay (at) 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 (at) 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 (at) 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 (at) 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 63 #include "../e_os.h" 64 65 #ifdef OPENSSL_NO_SHA 66 int main(int argc, char *argv[]) 67 { 68 printf("No SHA support\n"); 69 return(0); 70 } 71 #else 72 #include <openssl/evp.h> 73 #include <openssl/sha.h> 74 75 #ifdef CHARSET_EBCDIC 76 #include <openssl/ebcdic.h> 77 #endif 78 79 #undef SHA_0 /* FIPS 180 */ 80 #define SHA_1 /* FIPS 180-1 */ 81 82 static char *test[]={ 83 "abc", 84 "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 85 NULL, 86 }; 87 88 #ifdef SHA_0 89 static char *ret[]={ 90 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", 91 "d2516ee1acfa5baf33dfc1c471e438449ef134c8", 92 }; 93 static char *bigret= 94 "3232affa48628a26653b5aaa44541fd90d690603"; 95 #endif 96 #ifdef SHA_1 97 static char *ret[]={ 98 "a9993e364706816aba3e25717850c26c9cd0d89d", 99 "84983e441c3bd26ebaae4aa1f95129e5e54670f1", 100 }; 101 static char *bigret= 102 "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; 103 #endif 104 105 static char *pt(unsigned char *md); 106 int main(int argc, char *argv[]) 107 { 108 int i,err=0; 109 char **P,**R; 110 static unsigned char buf[1000]; 111 char *p,*r; 112 EVP_MD_CTX c; 113 unsigned char md[SHA_DIGEST_LENGTH]; 114 115 #ifdef CHARSET_EBCDIC 116 ebcdic2ascii(test[0], test[0], strlen(test[0])); 117 ebcdic2ascii(test[1], test[1], strlen(test[1])); 118 #endif 119 120 EVP_MD_CTX_init(&c); 121 P=test; 122 R=ret; 123 i=1; 124 while (*P != NULL) 125 { 126 EVP_Digest(*P,strlen((char *)*P),md,NULL,EVP_sha1(), NULL); 127 p=pt(md); 128 if (strcmp(p,(char *)*R) != 0) 129 { 130 printf("error calculating SHA1 on '%s'\n",*P); 131 printf("got %s instead of %s\n",p,*R); 132 err++; 133 } 134 else 135 printf("test %d ok\n",i); 136 i++; 137 R++; 138 P++; 139 } 140 141 memset(buf,'a',1000); 142 #ifdef CHARSET_EBCDIC 143 ebcdic2ascii(buf, buf, 1000); 144 #endif /*CHARSET_EBCDIC*/ 145 EVP_DigestInit_ex(&c,EVP_sha1(), NULL); 146 for (i=0; i<1000; i++) 147 EVP_DigestUpdate(&c,buf,1000); 148 EVP_DigestFinal_ex(&c,md,NULL); 149 p=pt(md); 150 151 r=bigret; 152 if (strcmp(p,r) != 0) 153 { 154 printf("error calculating SHA1 on 'a' * 1000\n"); 155 printf("got %s instead of %s\n",p,r); 156 err++; 157 } 158 else 159 printf("test 3 ok\n"); 160 161 #ifdef OPENSSL_SYS_NETWARE 162 if (err) printf("ERROR: %d\n", err); 163 #endif 164 EXIT(err); 165 EVP_MD_CTX_cleanup(&c); 166 return(0); 167 } 168 169 static char *pt(unsigned char *md) 170 { 171 int i; 172 static char buf[80]; 173 174 for (i=0; i<SHA_DIGEST_LENGTH; i++) 175 sprintf(&(buf[i*2]),"%02x",md[i]); 176 return(buf); 177 } 178 #endif 179