1160814Ssimon/* crypto/sha/sha256t.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 13160814Ssimon#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA256) 14160814Ssimonint main(int argc, char *argv[]) 15160814Ssimon{ 16160814Ssimon printf("No SHA256 support\n"); 17280304Sjkim return (0); 18160814Ssimon} 19160814Ssimon#else 20160814Ssimon 21160814Ssimonunsigned char app_b1[SHA256_DIGEST_LENGTH] = { 22280304Sjkim 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 23280304Sjkim 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 24280304Sjkim 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 25280304Sjkim 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad 26280304Sjkim}; 27160814Ssimon 28160814Ssimonunsigned char app_b2[SHA256_DIGEST_LENGTH] = { 29280304Sjkim 0x24, 0x8d, 0x6a, 0x61, 0xd2, 0x06, 0x38, 0xb8, 30280304Sjkim 0xe5, 0xc0, 0x26, 0x93, 0x0c, 0x3e, 0x60, 0x39, 31280304Sjkim 0xa3, 0x3c, 0xe4, 0x59, 0x64, 0xff, 0x21, 0x67, 32280304Sjkim 0xf6, 0xec, 0xed, 0xd4, 0x19, 0xdb, 0x06, 0xc1 33280304Sjkim}; 34160814Ssimon 35160814Ssimonunsigned char app_b3[SHA256_DIGEST_LENGTH] = { 36280304Sjkim 0xcd, 0xc7, 0x6e, 0x5c, 0x99, 0x14, 0xfb, 0x92, 37280304Sjkim 0x81, 0xa1, 0xc7, 0xe2, 0x84, 0xd7, 0x3e, 0x67, 38280304Sjkim 0xf1, 0x80, 0x9a, 0x48, 0xa4, 0x97, 0x20, 0x0e, 39280304Sjkim 0x04, 0x6d, 0x39, 0xcc, 0xc7, 0x11, 0x2c, 0xd0 40280304Sjkim}; 41160814Ssimon 42160814Ssimonunsigned char addenum_1[SHA224_DIGEST_LENGTH] = { 43280304Sjkim 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22, 44280304Sjkim 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3, 45280304Sjkim 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7, 46280304Sjkim 0xe3, 0x6c, 0x9d, 0xa7 47280304Sjkim}; 48160814Ssimon 49160814Ssimonunsigned char addenum_2[SHA224_DIGEST_LENGTH] = { 50280304Sjkim 0x75, 0x38, 0x8b, 0x16, 0x51, 0x27, 0x76, 0xcc, 51280304Sjkim 0x5d, 0xba, 0x5d, 0xa1, 0xfd, 0x89, 0x01, 0x50, 52280304Sjkim 0xb0, 0xc6, 0x45, 0x5c, 0xb4, 0xf5, 0x8b, 0x19, 53280304Sjkim 0x52, 0x52, 0x25, 0x25 54280304Sjkim}; 55160814Ssimon 56160814Ssimonunsigned char addenum_3[SHA224_DIGEST_LENGTH] = { 57280304Sjkim 0x20, 0x79, 0x46, 0x55, 0x98, 0x0c, 0x91, 0xd8, 58280304Sjkim 0xbb, 0xb4, 0xc1, 0xea, 0x97, 0x61, 0x8a, 0x4b, 59280304Sjkim 0xf0, 0x3f, 0x42, 0x58, 0x19, 0x48, 0xb2, 0xee, 60280304Sjkim 0x4e, 0xe7, 0xad, 0x67 61280304Sjkim}; 62160814Ssimon 63280304Sjkimint main(int argc, char **argv) 64280304Sjkim{ 65280304Sjkim unsigned char md[SHA256_DIGEST_LENGTH]; 66280304Sjkim int i; 67280304Sjkim EVP_MD_CTX evp; 68160814Ssimon 69280304Sjkim fprintf(stdout, "Testing SHA-256 "); 70160814Ssimon 71280304Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha256(), NULL); 72280304Sjkim if (memcmp(md, app_b1, sizeof(app_b1))) { 73280304Sjkim fflush(stdout); 74280304Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 75280304Sjkim return 1; 76280304Sjkim } else 77280304Sjkim fprintf(stdout, "."); 78280304Sjkim fflush(stdout); 79160814Ssimon 80280304Sjkim EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" 81280304Sjkim "ijkljklm" "klmnlmno" "mnopnopq", 56, md, NULL, EVP_sha256(), 82280304Sjkim NULL); 83280304Sjkim if (memcmp(md, app_b2, sizeof(app_b2))) { 84280304Sjkim fflush(stdout); 85280304Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 86280304Sjkim return 1; 87280304Sjkim } else 88280304Sjkim fprintf(stdout, "."); 89280304Sjkim fflush(stdout); 90160814Ssimon 91280304Sjkim EVP_MD_CTX_init(&evp); 92280304Sjkim EVP_DigestInit_ex(&evp, EVP_sha256(), NULL); 93280304Sjkim for (i = 0; i < 1000000; i += 160) 94280304Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 95280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 96280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 97280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 98280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 99280304Sjkim (1000000 - i) < 160 ? 1000000 - i : 160); 100280304Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 101280304Sjkim EVP_MD_CTX_cleanup(&evp); 102160814Ssimon 103280304Sjkim if (memcmp(md, app_b3, sizeof(app_b3))) { 104280304Sjkim fflush(stdout); 105280304Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 106280304Sjkim return 1; 107280304Sjkim } else 108280304Sjkim fprintf(stdout, "."); 109280304Sjkim fflush(stdout); 110160814Ssimon 111280304Sjkim fprintf(stdout, " passed.\n"); 112280304Sjkim fflush(stdout); 113160814Ssimon 114280304Sjkim fprintf(stdout, "Testing SHA-224 "); 115160814Ssimon 116280304Sjkim EVP_Digest("abc", 3, md, NULL, EVP_sha224(), NULL); 117280304Sjkim if (memcmp(md, addenum_1, sizeof(addenum_1))) { 118280304Sjkim fflush(stdout); 119280304Sjkim fprintf(stderr, "\nTEST 1 of 3 failed.\n"); 120280304Sjkim return 1; 121280304Sjkim } else 122280304Sjkim fprintf(stdout, "."); 123280304Sjkim fflush(stdout); 124160814Ssimon 125280304Sjkim EVP_Digest("abcdbcde" "cdefdefg" "efghfghi" "ghijhijk" 126280304Sjkim "ijkljklm" "klmnlmno" "mnopnopq", 56, md, NULL, EVP_sha224(), 127280304Sjkim NULL); 128280304Sjkim if (memcmp(md, addenum_2, sizeof(addenum_2))) { 129280304Sjkim fflush(stdout); 130280304Sjkim fprintf(stderr, "\nTEST 2 of 3 failed.\n"); 131280304Sjkim return 1; 132280304Sjkim } else 133280304Sjkim fprintf(stdout, "."); 134280304Sjkim fflush(stdout); 135160814Ssimon 136280304Sjkim EVP_MD_CTX_init(&evp); 137280304Sjkim EVP_DigestInit_ex(&evp, EVP_sha224(), NULL); 138280304Sjkim for (i = 0; i < 1000000; i += 64) 139280304Sjkim EVP_DigestUpdate(&evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" 140280304Sjkim "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa", 141280304Sjkim (1000000 - i) < 64 ? 1000000 - i : 64); 142280304Sjkim EVP_DigestFinal_ex(&evp, md, NULL); 143280304Sjkim EVP_MD_CTX_cleanup(&evp); 144160814Ssimon 145280304Sjkim if (memcmp(md, addenum_3, sizeof(addenum_3))) { 146280304Sjkim fflush(stdout); 147280304Sjkim fprintf(stderr, "\nTEST 3 of 3 failed.\n"); 148280304Sjkim return 1; 149280304Sjkim } else 150280304Sjkim fprintf(stdout, "."); 151280304Sjkim fflush(stdout); 152160814Ssimon 153280304Sjkim fprintf(stdout, " passed.\n"); 154280304Sjkim fflush(stdout); 155160814Ssimon 156280304Sjkim return 0; 157160814Ssimon} 158160814Ssimon#endif 159