1160814Ssimon/* crypto/sha/sha512t.c */ 2160814Ssimon/* ==================================================================== 3160814Ssimon * Copyright (c) 2004 The OpenSSL Project. All rights reserved. 4160814Ssimon * ==================================================================== 5160814Ssimon */ 6160814Ssimon#include <stdio.h> 7160814Ssimon#include <string.h> 8160814Ssimon#include <stdlib.h> 9160814Ssimon 10160814Ssimon#include <openssl/sha.h> 11160814Ssimon#include <openssl/evp.h> 12160814Ssimon#include <openssl/crypto.h> 13160814Ssimon 14160814Ssimon#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512) 15160814Ssimonint main(int argc, char *argv[]) 16160814Ssimon{ 17160814Ssimon printf("No SHA512 support\n"); 18280297Sjkim return (0); 19160814Ssimon} 20160814Ssimon#else 21160814Ssimon 22160814Ssimonunsigned char app_c1[SHA512_DIGEST_LENGTH] = { 23280297Sjkim 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 24280297Sjkim 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 25280297Sjkim 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 26280297Sjkim 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 27280297Sjkim 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 28280297Sjkim 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 29280297Sjkim 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 30280297Sjkim 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f 31280297Sjkim}; 32160814Ssimon 33160814Ssimonunsigned char app_c2[SHA512_DIGEST_LENGTH] = { 34280297Sjkim 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 35280297Sjkim 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, 36280297Sjkim 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, 37280297Sjkim 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, 38280297Sjkim 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, 39280297Sjkim 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, 40280297Sjkim 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, 41280297Sjkim 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 42280297Sjkim}; 43160814Ssimon 44160814Ssimonunsigned char app_c3[SHA512_DIGEST_LENGTH] = { 45280297Sjkim 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64, 46280297Sjkim 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63, 47280297Sjkim 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28, 48280297Sjkim 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb, 49280297Sjkim 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a, 50280297Sjkim 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b, 51280297Sjkim 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e, 52280297Sjkim 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b 53280297Sjkim}; 54160814Ssimon 55160814Ssimonunsigned char app_d1[SHA384_DIGEST_LENGTH] = { 56280297Sjkim 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 57280297Sjkim 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 58280297Sjkim 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 59280297Sjkim 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 60280297Sjkim 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 61280297Sjkim 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 62280297Sjkim}; 63160814Ssimon 64160814Ssimonunsigned char app_d2[SHA384_DIGEST_LENGTH] = { 65280297Sjkim 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, 66280297Sjkim 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, 67280297Sjkim 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, 68280297Sjkim 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, 69280297Sjkim 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, 70280297Sjkim 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 71280297Sjkim}; 72160814Ssimon 73160814Ssimonunsigned char app_d3[SHA384_DIGEST_LENGTH] = { 74280297Sjkim 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb, 75280297Sjkim 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c, 76280297Sjkim 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52, 77280297Sjkim 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b, 78280297Sjkim 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb, 79280297Sjkim 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85 80280297Sjkim}; 81160814Ssimon 82280297Sjkimint main(int argc, char **argv) 83280297Sjkim{ 84280297Sjkim unsigned char md[SHA512_DIGEST_LENGTH]; 85280297Sjkim int i; 86280297Sjkim EVP_MD_CTX evp; 87160814Ssimon 88280297Sjkim# ifdef OPENSSL_IA32_SSE2 89280297Sjkim /* 90280297Sjkim * Alternative to this is to call OpenSSL_add_all_algorithms... The below 91280297Sjkim * code is retained exclusively for debugging purposes. 92280297Sjkim */ 93280297Sjkim { 94280297Sjkim char *env; 95160814Ssimon 96280297Sjkim if ((env = getenv("OPENSSL_ia32cap"))) 97280297Sjkim OPENSSL_ia32cap = strtoul(env, NULL, 0); 98160814Ssimon } 99280297Sjkim# endif 100160814Ssimon 101280297Sjkim fprintf(stdout, "Testing SHA-512 "); 102160814Ssimon 103280297Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL); 104280297Sjkim if (memcmp(md, app_c1, sizeof(app_c1))) { 105280297Sjkim fflush(stdout); 106280297Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 107280297Sjkim return 1; 108280297Sjkim } else 109280297Sjkim fprintf(stdout, "."); 110280297Sjkim fflush(stdout); 111160814Ssimon 112280297Sjkim EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 113280297Sjkim "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 114280297Sjkim "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 115280297Sjkim "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL); 116280297Sjkim if (memcmp(md, app_c2, sizeof(app_c2))) { 117280297Sjkim fflush(stdout); 118280297Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 119280297Sjkim return 1; 120280297Sjkim } else 121280297Sjkim fprintf(stdout, "."); 122280297Sjkim fflush(stdout); 123160814Ssimon 124280297Sjkim EVP_MD_CTX_init(&evp); 125280297Sjkim EVP_DigestInit_ex(&evp, EVP_sha512(), NULL); 126280297Sjkim for (i = 0; i < 1000000; i += 288) 127280297Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 128280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 129280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 130280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 131280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 132280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 133280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 134280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 135280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 136280297Sjkim (1000000 - i) < 288 ? 1000000 - i : 288); 137280297Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 138280297Sjkim EVP_MD_CTX_cleanup(&evp); 139160814Ssimon 140280297Sjkim if (memcmp(md, app_c3, sizeof(app_c3))) { 141280297Sjkim fflush(stdout); 142280297Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 143280297Sjkim return 1; 144280297Sjkim } else 145280297Sjkim fprintf(stdout, "."); 146280297Sjkim fflush(stdout); 147160814Ssimon 148280297Sjkim fprintf(stdout, " passed.\n"); 149280297Sjkim fflush(stdout); 150160814Ssimon 151280297Sjkim fprintf(stdout, "Testing SHA-384 "); 152160814Ssimon 153280297Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL); 154280297Sjkim if (memcmp(md, app_d1, sizeof(app_d1))) { 155280297Sjkim fflush(stdout); 156280297Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 157280297Sjkim return 1; 158280297Sjkim } else 159280297Sjkim fprintf(stdout, "."); 160280297Sjkim fflush(stdout); 161160814Ssimon 162280297Sjkim EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 163280297Sjkim "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 164280297Sjkim "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 165280297Sjkim "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL); 166280297Sjkim if (memcmp(md, app_d2, sizeof(app_d2))) { 167280297Sjkim fflush(stdout); 168280297Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 169280297Sjkim return 1; 170280297Sjkim } else 171280297Sjkim fprintf(stdout, "."); 172280297Sjkim fflush(stdout); 173160814Ssimon 174280297Sjkim EVP_MD_CTX_init(&evp); 175280297Sjkim EVP_DigestInit_ex(&evp, EVP_sha384(), NULL); 176280297Sjkim for (i = 0; i < 1000000; i += 64) 177280297Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 178280297Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 179280297Sjkim (1000000 - i) < 64 ? 1000000 - i : 64); 180280297Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 181280297Sjkim EVP_MD_CTX_cleanup(&evp); 182160814Ssimon 183280297Sjkim if (memcmp(md, app_d3, sizeof(app_d3))) { 184280297Sjkim fflush(stdout); 185280297Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 186280297Sjkim return 1; 187280297Sjkim } else 188280297Sjkim fprintf(stdout, "."); 189280297Sjkim fflush(stdout); 190160814Ssimon 191280297Sjkim fprintf(stdout, " passed.\n"); 192280297Sjkim fflush(stdout); 193160814Ssimon 194280297Sjkim return 0; 195160814Ssimon} 196160814Ssimon#endif 197