sha512t.c revision 296465
113546Sjulian/* crypto/sha/sha512t.c */ 235509Sjb/* ==================================================================== 313546Sjulian * Copyright (c) 2004 The OpenSSL Project. All rights reserved. 413546Sjulian * ==================================================================== 513546Sjulian */ 613546Sjulian#include <stdio.h> 713546Sjulian#include <string.h> 813546Sjulian#include <stdlib.h> 913546Sjulian 1013546Sjulian#include <openssl/sha.h> 1113546Sjulian#include <openssl/evp.h> 1213546Sjulian#include <openssl/crypto.h> 1313546Sjulian 1413546Sjulian#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512) 1513546Sjulianint main(int argc, char *argv[]) 1613546Sjulian{ 1713546Sjulian printf("No SHA512 support\n"); 1813546Sjulian return (0); 1913546Sjulian} 2013546Sjulian#else 2113546Sjulian 2213546Sjulianunsigned char app_c1[SHA512_DIGEST_LENGTH] = { 2349439Sdeischen 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 2413546Sjulian 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 2513546Sjulian 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 2613546Sjulian 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 2713546Sjulian 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 2813546Sjulian 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 2913546Sjulian 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 3013546Sjulian 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f 3113546Sjulian}; 3250476Speter 3313546Sjulianunsigned char app_c2[SHA512_DIGEST_LENGTH] = { 3413546Sjulian 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 3513546Sjulian 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, 3613546Sjulian 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, 3713546Sjulian 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, 3813546Sjulian 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, 3913546Sjulian 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, 4056698Sjasone 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, 4113546Sjulian 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 4256698Sjasone}; 4313546Sjulian 4436830Sjbunsigned char app_c3[SHA512_DIGEST_LENGTH] = { 4513546Sjulian 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64, 4636830Sjb 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63, 4713546Sjulian 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28, 4813546Sjulian 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb, 4913546Sjulian 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a, 5055838Sjasone 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b, 5156698Sjasone 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e, 5256698Sjasone 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b 5356698Sjasone}; 5456698Sjasone 5556698Sjasoneunsigned char app_d1[SHA384_DIGEST_LENGTH] = { 5656698Sjasone 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 5756698Sjasone 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 5856698Sjasone 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 5956698Sjasone 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 6056698Sjasone 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 6156698Sjasone 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 6213546Sjulian}; 63 64unsigned char app_d2[SHA384_DIGEST_LENGTH] = { 65 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, 66 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, 67 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, 68 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, 69 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, 70 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 71}; 72 73unsigned char app_d3[SHA384_DIGEST_LENGTH] = { 74 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb, 75 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c, 76 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52, 77 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b, 78 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb, 79 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85 80}; 81 82int main(int argc, char **argv) 83{ 84 unsigned char md[SHA512_DIGEST_LENGTH]; 85 int i; 86 EVP_MD_CTX evp; 87 88# ifdef OPENSSL_IA32_SSE2 89 /* 90 * Alternative to this is to call OpenSSL_add_all_algorithms... The below 91 * code is retained exclusively for debugging purposes. 92 */ 93 { 94 char *env; 95 96 if ((env = getenv("OPENSSL_ia32cap"))) 97 OPENSSL_ia32cap = strtoul(env, NULL, 0); 98 } 99# endif 100 101 fprintf(stdout, "Testing SHA-512 "); 102 103 EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL); 104 if (memcmp(md, app_c1, sizeof(app_c1))) { 105 fflush(stdout); 106 fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 107 return 1; 108 } else 109 fprintf(stdout, "."); 110 fflush(stdout); 111 112 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 113 "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 114 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 115 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL); 116 if (memcmp(md, app_c2, sizeof(app_c2))) { 117 fflush(stdout); 118 fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 119 return 1; 120 } else 121 fprintf(stdout, "."); 122 fflush(stdout); 123 124 EVP_MD_CTX_init(&evp); 125 EVP_DigestInit_ex(&evp, EVP_sha512(), NULL); 126 for (i = 0; i < 1000000; i += 288) 127 EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 128 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 129 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 130 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 131 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 132 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 133 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 134 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 135 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 136 (1000000 - i) < 288 ? 1000000 - i : 288); 137 EVP_DigestFinal_ex(&evp, md, NULL); 138 EVP_MD_CTX_cleanup(&evp); 139 140 if (memcmp(md, app_c3, sizeof(app_c3))) { 141 fflush(stdout); 142 fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 143 return 1; 144 } else 145 fprintf(stdout, "."); 146 fflush(stdout); 147 148 fprintf(stdout, " passed.\n"); 149 fflush(stdout); 150 151 fprintf(stdout, "Testing SHA-384 "); 152 153 EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL); 154 if (memcmp(md, app_d1, sizeof(app_d1))) { 155 fflush(stdout); 156 fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 157 return 1; 158 } else 159 fprintf(stdout, "."); 160 fflush(stdout); 161 162 EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 163 "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 164 "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 165 "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL); 166 if (memcmp(md, app_d2, sizeof(app_d2))) { 167 fflush(stdout); 168 fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 169 return 1; 170 } else 171 fprintf(stdout, "."); 172 fflush(stdout); 173 174 EVP_MD_CTX_init(&evp); 175 EVP_DigestInit_ex(&evp, EVP_sha384(), NULL); 176 for (i = 0; i < 1000000; i += 64) 177 EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 178 "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 179 (1000000 - i) < 64 ? 1000000 - i : 64); 180 EVP_DigestFinal_ex(&evp, md, NULL); 181 EVP_MD_CTX_cleanup(&evp); 182 183 if (memcmp(md, app_d3, sizeof(app_d3))) { 184 fflush(stdout); 185 fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 186 return 1; 187 } else 188 fprintf(stdout, "."); 189 fflush(stdout); 190 191 fprintf(stdout, " passed.\n"); 192 fflush(stdout); 193 194 return 0; 195} 196#endif 197