shatest.c revision 160815
1135446Strhodes/* crypto/sha/shatest.c */ 2193149Sdougb/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 3135446Strhodes * All rights reserved. 4193149Sdougb * 5193149Sdougb * This package is an SSL implementation written 6193149Sdougb * by Eric Young (eay@cryptsoft.com). 7193149Sdougb * The implementation was written so as to conform with Netscapes SSL. 8193149Sdougb * 9193149Sdougb * This library is free for commercial and non-commercial use as long as 10193149Sdougb * the following conditions are aheared to. The following conditions 11193149Sdougb * apply to all code found in this distribution, be it the RC4, RSA, 12193149Sdougb * lhash, DES, etc., code; not just the SSL code. The SSL documentation 13193149Sdougb * included with this distribution is covered by the same copyright terms 14193149Sdougb * except that the holder is Tim Hudson (tjh@cryptsoft.com). 15193149Sdougb * 16193149Sdougb * Copyright remains Eric Young's, and as such any Copyright notices in 17135446Strhodes * the code are not to be removed. 18135446Strhodes * If this package is used in a product, Eric Young should be given attribution 19193149Sdougb * as the author of the parts of the library used. 20135446Strhodes * This can be in the form of a textual message at program startup or 21135446Strhodes * in documentation (online or textual) provided with the package. 22135446Strhodes * 23135446Strhodes * Redistribution and use in source and binary forms, with or without 24135446Strhodes * modification, are permitted provided that the following conditions 25135446Strhodes * are met: 26135446Strhodes * 1. Redistributions of source code must retain the copyright 27135446Strhodes * notice, this list of conditions and the following disclaimer. 28135446Strhodes * 2. Redistributions in binary form must reproduce the above copyright 29135446Strhodes * notice, this list of conditions and the following disclaimer in the 30135446Strhodes * documentation and/or other materials provided with the distribution. 31135446Strhodes * 3. All advertising materials mentioning features or use of this software 32234010Sdougb * must display the following acknowledgement: 33135446Strhodes * "This product includes cryptographic software written by 34170222Sdougb * Eric Young (eay@cryptsoft.com)" 35170222Sdougb * The word 'cryptographic' can be left out if the rouines from the library 36135446Strhodes * being used are not cryptographic related :-). 37135446Strhodes * 4. If you include any Windows specific code (or a derivative thereof) from 38135446Strhodes * the apps directory (application code) you must include an acknowledgement: 39135446Strhodes * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 40135446Strhodes * 41135446Strhodes * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 42135446Strhodes * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 43135446Strhodes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 44135446Strhodes * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 45135446Strhodes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 46135446Strhodes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 47135446Strhodes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 48135446Strhodes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 49135446Strhodes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 50135446Strhodes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 51135446Strhodes * SUCH DAMAGE. 52135446Strhodes * 53135446Strhodes * The licence and distribution terms for any publically available version or 54135446Strhodes * derivative of this code cannot be changed. i.e. this code cannot simply be 55135446Strhodes * copied and put under another distribution licence 56135446Strhodes * [including the GNU Public Licence.] 57135446Strhodes */ 58135446Strhodes 59135446Strhodes#include <stdio.h> 60135446Strhodes#include <string.h> 61135446Strhodes#include <stdlib.h> 62135446Strhodes 63135446Strhodes#include "../e_os.h" 64135446Strhodes 65135446Strhodes#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA0) 66135446Strhodesint main(int argc, char *argv[]) 67135446Strhodes{ 68135446Strhodes printf("No SHA0 support\n"); 69135446Strhodes return(0); 70135446Strhodes} 71135446Strhodes#else 72135446Strhodes#include <openssl/evp.h> 73135446Strhodes#include <openssl/sha.h> 74135446Strhodes 75135446Strhodes#ifdef CHARSET_EBCDIC 76135446Strhodes#include <openssl/ebcdic.h> 77135446Strhodes#endif 78135446Strhodes 79135446Strhodes#define SHA_0 /* FIPS 180 */ 80135446Strhodes#undef SHA_1 /* FIPS 180-1 */ 81135446Strhodes 82135446Strhodesstatic char *test[]={ 83135446Strhodes "abc", 84135446Strhodes "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", 85135446Strhodes NULL, 86 }; 87 88#ifdef SHA_0 89static char *ret[]={ 90 "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", 91 "d2516ee1acfa5baf33dfc1c471e438449ef134c8", 92 }; 93static char *bigret= 94 "3232affa48628a26653b5aaa44541fd90d690603"; 95#endif 96#ifdef SHA_1 97static char *ret[]={ 98 "a9993e364706816aba3e25717850c26c9cd0d89d", 99 "84983e441c3bd26ebaae4aa1f95129e5e54670f1", 100 }; 101static char *bigret= 102 "34aa973cd4c4daa4f61eeb2bdbad27316534016f"; 103#endif 104 105static char *pt(unsigned char *md); 106int main(int argc, char *argv[]) 107 { 108 int i,err=0; 109 unsigned 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=(unsigned char **)test; 122 R=(unsigned char **)ret; 123 i=1; 124 while (*P != NULL) 125 { 126 EVP_Digest(*P,strlen((char *)*P),md,NULL,EVP_sha(), NULL); 127 p=pt(md); 128 if (strcmp(p,(char *)*R) != 0) 129 { 130 printf("error calculating SHA 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_sha(), 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 SHA on '%s'\n",p); 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 EVP_MD_CTX_cleanup(&c); 165 EXIT(err); 166 return(0); 167 } 168 169static 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