sha512t.c revision 296465
113546Sjulian/* crypto/sha/sha512t.c */
235509Sjb/* ====================================================================
313546Sjulian * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
413546Sjulian * ====================================================================
513546Sjulian */
613546Sjulian#include <stdio.h>
713546Sjulian#include <string.h>
813546Sjulian#include <stdlib.h>
913546Sjulian
1013546Sjulian#include <openssl/sha.h>
1113546Sjulian#include <openssl/evp.h>
1213546Sjulian#include <openssl/crypto.h>
1313546Sjulian
1413546Sjulian#if defined(OPENSSL_NO_SHA) || defined(OPENSSL_NO_SHA512)
1513546Sjulianint main(int argc, char *argv[])
1613546Sjulian{
1713546Sjulian    printf("No SHA512 support\n");
1813546Sjulian    return (0);
1913546Sjulian}
2013546Sjulian#else
2113546Sjulian
2213546Sjulianunsigned char app_c1[SHA512_DIGEST_LENGTH] = {
2349439Sdeischen    0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba,
2413546Sjulian    0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31,
2513546Sjulian    0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2,
2613546Sjulian    0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a,
2713546Sjulian    0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8,
2813546Sjulian    0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd,
2913546Sjulian    0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e,
3013546Sjulian    0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f
3113546Sjulian};
3250476Speter
3313546Sjulianunsigned char app_c2[SHA512_DIGEST_LENGTH] = {
3413546Sjulian    0x8e, 0x95, 0x9b, 0x75, 0xda, 0xe3, 0x13, 0xda,
3513546Sjulian    0x8c, 0xf4, 0xf7, 0x28, 0x14, 0xfc, 0x14, 0x3f,
3613546Sjulian    0x8f, 0x77, 0x79, 0xc6, 0xeb, 0x9f, 0x7f, 0xa1,
3713546Sjulian    0x72, 0x99, 0xae, 0xad, 0xb6, 0x88, 0x90, 0x18,
3813546Sjulian    0x50, 0x1d, 0x28, 0x9e, 0x49, 0x00, 0xf7, 0xe4,
3913546Sjulian    0x33, 0x1b, 0x99, 0xde, 0xc4, 0xb5, 0x43, 0x3a,
4056698Sjasone    0xc7, 0xd3, 0x29, 0xee, 0xb6, 0xdd, 0x26, 0x54,
4113546Sjulian    0x5e, 0x96, 0xe5, 0x5b, 0x87, 0x4b, 0xe9, 0x09
4256698Sjasone};
4313546Sjulian
4436830Sjbunsigned char app_c3[SHA512_DIGEST_LENGTH] = {
4513546Sjulian    0xe7, 0x18, 0x48, 0x3d, 0x0c, 0xe7, 0x69, 0x64,
4636830Sjb    0x4e, 0x2e, 0x42, 0xc7, 0xbc, 0x15, 0xb4, 0x63,
4713546Sjulian    0x8e, 0x1f, 0x98, 0xb1, 0x3b, 0x20, 0x44, 0x28,
4813546Sjulian    0x56, 0x32, 0xa8, 0x03, 0xaf, 0xa9, 0x73, 0xeb,
4913546Sjulian    0xde, 0x0f, 0xf2, 0x44, 0x87, 0x7e, 0xa6, 0x0a,
5055838Sjasone    0x4c, 0xb0, 0x43, 0x2c, 0xe5, 0x77, 0xc3, 0x1b,
5156698Sjasone    0xeb, 0x00, 0x9c, 0x5c, 0x2c, 0x49, 0xaa, 0x2e,
5256698Sjasone    0x4e, 0xad, 0xb2, 0x17, 0xad, 0x8c, 0xc0, 0x9b
5356698Sjasone};
5456698Sjasone
5556698Sjasoneunsigned char app_d1[SHA384_DIGEST_LENGTH] = {
5656698Sjasone    0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b,
5756698Sjasone    0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07,
5856698Sjasone    0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63,
5956698Sjasone    0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed,
6056698Sjasone    0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23,
6156698Sjasone    0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7
6213546Sjulian};
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