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"); 18280304Sjkim return (0); 19160814Ssimon} 20160814Ssimon#else 21160814Ssimon 22160814Ssimonunsigned char app_c1[SHA512_DIGEST_LENGTH] = { 23280304Sjkim 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 24280304Sjkim 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 25280304Sjkim 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 26280304Sjkim 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 27280304Sjkim 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 28280304Sjkim 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 29280304Sjkim 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 30280304Sjkim 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f 31280304Sjkim}; 32160814Ssimon 33160814Ssimonunsigned char app_c2[SHA512_DIGEST_LENGTH] = { 34280304Sjkim 0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda, 35280304Sjkim 0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f, 36280304Sjkim 0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1, 37280304Sjkim 0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18, 38280304Sjkim 0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4, 39280304Sjkim 0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a, 40280304Sjkim 0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54, 41280304Sjkim 0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09 42280304Sjkim}; 43160814Ssimon 44160814Ssimonunsigned char app_c3[SHA512_DIGEST_LENGTH] = { 45280304Sjkim 0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64, 46280304Sjkim 0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63, 47280304Sjkim 0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28, 48280304Sjkim 0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb, 49280304Sjkim 0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a, 50280304Sjkim 0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b, 51280304Sjkim 0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e, 52280304Sjkim 0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b 53280304Sjkim}; 54160814Ssimon 55160814Ssimonunsigned char app_d1[SHA384_DIGEST_LENGTH] = { 56280304Sjkim 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 57280304Sjkim 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 58280304Sjkim 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 59280304Sjkim 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 60280304Sjkim 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 61280304Sjkim 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 62280304Sjkim}; 63160814Ssimon 64160814Ssimonunsigned char app_d2[SHA384_DIGEST_LENGTH] = { 65280304Sjkim 0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8, 66280304Sjkim 0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47, 67280304Sjkim 0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2, 68280304Sjkim 0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12, 69280304Sjkim 0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9, 70280304Sjkim 0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39 71280304Sjkim}; 72160814Ssimon 73160814Ssimonunsigned char app_d3[SHA384_DIGEST_LENGTH] = { 74280304Sjkim 0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb, 75280304Sjkim 0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c, 76280304Sjkim 0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52, 77280304Sjkim 0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b, 78280304Sjkim 0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb, 79280304Sjkim 0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85 80280304Sjkim}; 81160814Ssimon 82280304Sjkimint main(int argc, char **argv) 83280304Sjkim{ 84280304Sjkim unsigned char md[SHA512_DIGEST_LENGTH]; 85280304Sjkim int i; 86280304Sjkim EVP_MD_CTX evp; 87160814Ssimon 88280304Sjkim# ifdef OPENSSL_IA32_SSE2 89280304Sjkim /* 90280304Sjkim * Alternative to this is to call OpenSSL_add_all_algorithms... The below 91280304Sjkim * code is retained exclusively for debugging purposes. 92280304Sjkim */ 93280304Sjkim { 94280304Sjkim char *env; 95160814Ssimon 96280304Sjkim if ((env = getenv("OPENSSL_ia32cap"))) 97280304Sjkim OPENSSL_ia32cap = strtoul(env, NULL, 0); 98160814Ssimon } 99280304Sjkim# endif 100160814Ssimon 101280304Sjkim fprintf(stdout, "Testing SHA-512 "); 102160814Ssimon 103280304Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL); 104280304Sjkim if (memcmp(md, app_c1, sizeof(app_c1))) { 105280304Sjkim fflush(stdout); 106280304Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 107280304Sjkim return 1; 108280304Sjkim } else 109280304Sjkim fprintf(stdout, "."); 110280304Sjkim fflush(stdout); 111160814Ssimon 112280304Sjkim EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 113280304Sjkim "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 114280304Sjkim "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 115280304Sjkim "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL); 116280304Sjkim if (memcmp(md, app_c2, sizeof(app_c2))) { 117280304Sjkim fflush(stdout); 118280304Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 119280304Sjkim return 1; 120280304Sjkim } else 121280304Sjkim fprintf(stdout, "."); 122280304Sjkim fflush(stdout); 123160814Ssimon 124280304Sjkim EVP_MD_CTX_init(&evp); 125280304Sjkim EVP_DigestInit_ex(&evp, EVP_sha512(), NULL); 126280304Sjkim for (i = 0; i < 1000000; i += 288) 127280304Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 128280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 129280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 130280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 131280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 132280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 133280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 134280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 135280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 136280304Sjkim (1000000 - i) < 288 ? 1000000 - i : 288); 137280304Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 138280304Sjkim EVP_MD_CTX_cleanup(&evp); 139160814Ssimon 140280304Sjkim if (memcmp(md, app_c3, sizeof(app_c3))) { 141280304Sjkim fflush(stdout); 142280304Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 143280304Sjkim return 1; 144280304Sjkim } else 145280304Sjkim fprintf(stdout, "."); 146280304Sjkim fflush(stdout); 147160814Ssimon 148280304Sjkim fprintf(stdout, " passed.\n"); 149280304Sjkim fflush(stdout); 150160814Ssimon 151280304Sjkim fprintf(stdout, "Testing SHA-384 "); 152160814Ssimon 153280304Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL); 154280304Sjkim if (memcmp(md, app_d1, sizeof(app_d1))) { 155280304Sjkim fflush(stdout); 156280304Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 157280304Sjkim return 1; 158280304Sjkim } else 159280304Sjkim fprintf(stdout, "."); 160280304Sjkim fflush(stdout); 161160814Ssimon 162280304Sjkim EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk" 163280304Sjkim "efghijkl" "fghijklm" "ghijklmn" "hijklmno" 164280304Sjkim "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs" 165280304Sjkim "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL); 166280304Sjkim if (memcmp(md, app_d2, sizeof(app_d2))) { 167280304Sjkim fflush(stdout); 168280304Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 169280304Sjkim return 1; 170280304Sjkim } else 171280304Sjkim fprintf(stdout, "."); 172280304Sjkim fflush(stdout); 173160814Ssimon 174280304Sjkim EVP_MD_CTX_init(&evp); 175280304Sjkim EVP_DigestInit_ex(&evp, EVP_sha384(), NULL); 176280304Sjkim for (i = 0; i < 1000000; i += 64) 177280304Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 178280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 179280304Sjkim (1000000 - i) < 64 ? 1000000 - i : 64); 180280304Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 181280304Sjkim EVP_MD_CTX_cleanup(&evp); 182160814Ssimon 183280304Sjkim if (memcmp(md, app_d3, sizeof(app_d3))) { 184280304Sjkim fflush(stdout); 185280304Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 186280304Sjkim return 1; 187280304Sjkim } else 188280304Sjkim fprintf(stdout, "."); 189280304Sjkim fflush(stdout); 190160814Ssimon 191280304Sjkim fprintf(stdout, " passed.\n"); 192280304Sjkim fflush(stdout); 193160814Ssimon 194280304Sjkim return 0; 195160814Ssimon} 196160814Ssimon#endif 197