sha512t.c revision 296341
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