add malloc fail check & fix memory leak
[openssl.git] / test / sha512t.c
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 static const unsigned char app_c1[SHA512_DIGEST_LENGTH] = {
15     0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
16     0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
17     0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
18     0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
19     0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
20     0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
21     0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
22     0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
23 };
24
25 static const unsigned char app_c2[SHA512_DIGEST_LENGTH] = {
26     0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
27     0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
28     0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
29     0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
30     0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
31     0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
32     0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
33     0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
34 };
35
36 static const unsigned char app_c3[SHA512_DIGEST_LENGTH] = {
37     0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
38     0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
39     0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
40     0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
41     0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
42     0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
43     0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
44     0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
45 };
46
47 static const unsigned char app_d1[SHA384_DIGEST_LENGTH] = {
48     0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
49     0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
50     0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
51     0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
52     0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
53     0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
54 };
55
56 static const unsigned char app_d2[SHA384_DIGEST_LENGTH] = {
57     0x09, 0x33, 0x0c, 0x33, 0xf7, 0x11, 0x47, 0xe8,
58     0x3d, 0x19, 0x2f, 0xc7, 0x82, 0xcd, 0x1b, 0x47,
59     0x53, 0x11, 0x1b, 0x17, 0x3b, 0x3b, 0x05, 0xd2,
60     0x2f, 0xa0, 0x80, 0x86, 0xe3, 0xb0, 0xf7, 0x12,
61     0xfc, 0xc7, 0xc7, 0x1a, 0x55, 0x7e, 0x2d, 0xb9,
62     0x66, 0xc3, 0xe9, 0xfa, 0x91, 0x74, 0x60, 0x39
63 };
64
65 static const unsigned char app_d3[SHA384_DIGEST_LENGTH] = {
66     0x9d, 0x0e, 0x18, 0x09, 0x71, 0x64, 0x74, 0xcb,
67     0x08, 0x6e, 0x83, 0x4e, 0x31, 0x0a, 0x4a, 0x1c,
68     0xed, 0x14, 0x9e, 0x9c, 0x00, 0xf2, 0x48, 0x52,
69     0x79, 0x72, 0xce, 0xc5, 0x70, 0x4c, 0x2a, 0x5b,
70     0x07, 0xb8, 0xb3, 0xdc, 0x38, 0xec, 0xc4, 0xeb,
71     0xae, 0x97, 0xdd, 0xd8, 0x7f, 0x3d, 0x89, 0x85
72 };
73
74 int main(int argc, char **argv)
75 {
76     unsigned char md[SHA512_DIGEST_LENGTH];
77     int i;
78     EVP_MD_CTX *evp;
79
80 # ifdef OPENSSL_IA32_SSE2
81     /*
82      * Alternative to this is to call OpenSSL_add_all_algorithms... The below
83      * code is retained exclusively for debugging purposes.
84      */
85     {
86         char *env;
87
88         if ((env = getenv("OPENSSL_ia32cap")))
89             OPENSSL_ia32cap = strtoul(env, NULL, 0);
90     }
91 # endif
92
93     fprintf(stdout, "Testing SHA-512 ");
94
95     EVP_Digest("abc", 3, md, NULL, EVP_sha512(), NULL);
96     if (memcmp(md, app_c1, sizeof(app_c1))) {
97         fflush(stdout);
98         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
99         return 1;
100     } else
101         fprintf(stdout, ".");
102     fflush(stdout);
103
104     EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
105                "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
106                "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
107                "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha512(), NULL);
108     if (memcmp(md, app_c2, sizeof(app_c2))) {
109         fflush(stdout);
110         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
111         return 1;
112     } else
113         fprintf(stdout, ".");
114     fflush(stdout);
115
116     evp = EVP_MD_CTX_new();
117     if (evp == NULL) {
118         fflush(stdout);
119         fprintf(stderr, "\nTEST 3 of 3 failed. (malloc failure)\n");
120         return 1;
121     }
122     EVP_DigestInit_ex(evp, EVP_sha512(), NULL);
123     for (i = 0; i < 1000000; i += 288)
124         EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
125                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
126                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
127                          "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                          (1000000 - i) < 288 ? 1000000 - i : 288);
134     EVP_DigestFinal_ex(evp, md, NULL);
135     EVP_MD_CTX_reset(evp);
136
137     if (memcmp(md, app_c3, sizeof(app_c3))) {
138         fflush(stdout);
139         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
140         return 1;
141     } else
142         fprintf(stdout, ".");
143     fflush(stdout);
144
145     fprintf(stdout, " passed.\n");
146     fflush(stdout);
147
148     fprintf(stdout, "Testing SHA-384 ");
149
150     EVP_Digest("abc", 3, md, NULL, EVP_sha384(), NULL);
151     if (memcmp(md, app_d1, sizeof(app_d1))) {
152         fflush(stdout);
153         fprintf(stderr, "\nTEST 1 of 3 failed.\n");
154         return 1;
155     } else
156         fprintf(stdout, ".");
157     fflush(stdout);
158
159     EVP_Digest("abcdefgh" "bcdefghi" "cdefghij" "defghijk"
160                "efghijkl" "fghijklm" "ghijklmn" "hijklmno"
161                "ijklmnop" "jklmnopq" "klmnopqr" "lmnopqrs"
162                "mnopqrst" "nopqrstu", 112, md, NULL, EVP_sha384(), NULL);
163     if (memcmp(md, app_d2, sizeof(app_d2))) {
164         fflush(stdout);
165         fprintf(stderr, "\nTEST 2 of 3 failed.\n");
166         return 1;
167     } else
168         fprintf(stdout, ".");
169     fflush(stdout);
170
171     EVP_DigestInit_ex(evp, EVP_sha384(), NULL);
172     for (i = 0; i < 1000000; i += 64)
173         EVP_DigestUpdate(evp, "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa"
174                          "aaaaaaaa" "aaaaaaaa" "aaaaaaaa" "aaaaaaaa",
175                          (1000000 - i) < 64 ? 1000000 - i : 64);
176     EVP_DigestFinal_ex(evp, md, NULL);
177     EVP_MD_CTX_free(evp);
178
179     if (memcmp(md, app_d3, sizeof(app_d3))) {
180         fflush(stdout);
181         fprintf(stderr, "\nTEST 3 of 3 failed.\n");
182         return 1;
183     } else
184         fprintf(stdout, ".");
185     fflush(stdout);
186
187     fprintf(stdout, " passed.\n");
188     fflush(stdout);
189
190     return 0;
191 }