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