1/* crypto/sha/sha512t.c */ 2/* ==================================================================== 3 * Copyright (c) 2004 The OpenSSL Project. All rights reserved. 4 * ==================================================================== 5 */ 6#include <stdio.h> 7#include <string.h> 8#include <stdlib.h> 9 10#include <openssl/sha.h> 11#include <openssl/evp.h> 12#include <openssl/crypto.h> 13 14#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512) 15int main(int argc, char *argv[]) 16{ 17 printf("No SHA512 support\n"); 18 return (0); 19} 20#else 21 22unsigned char app_c1[SHA512_DIGEST_LENGTH] = { 23 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 24 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 25 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 26 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 27 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 28 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 29 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 30 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f 31}; 32 33unsigned char app_c2[SHA512_DIGEST_LENGTH] = { 34 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 35 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, 36 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, 37 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, 38 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, 39 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, 40 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, 41 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 42}; 43 44unsigned char app_c3[SHA512_DIGEST_LENGTH] = { 45 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64, 46 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63, 47 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28, 48 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb, 49 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a, 50 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b, 51 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e, 52 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b 53}; 54 55unsigned char app_d1[SHA384_DIGEST_LENGTH] = { 56 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 57 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 58 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 59 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 60 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 61 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 62}; 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