1 /* Copyright 2010 The ChromiumOS Authors
2 * Use of this source code is governed by a BSD-style license that can be
3 * found in the LICENSE file.
4 */
5
6 /* FIPS 180-2 Tests for message digest functions. */
7
8 #include <stdint.h>
9 #include <stdio.h>
10 #include <stdlib.h>
11 #include <string.h>
12
13 #include "sha_test_vectors.h"
14
SHA1_tests(void)15 int SHA1_tests(void) {
16 int i, success = 1;
17 uint8_t sha1_digest[SHA1_DIGEST_SIZE];
18 uint8_t* test_inputs[3];
19 test_inputs[0] = (uint8_t *) oneblock_msg;
20 test_inputs[1] = (uint8_t *) multiblock_msg1;
21 test_inputs[2] = (uint8_t *) long_msg;
22
23 for (i = 0; i < 3; i++) {
24 internal_SHA1(test_inputs[i], strlen((char *)test_inputs[i]),
25 sha1_digest);
26 if (!memcmp(sha1_digest, sha1_results[i],
27 SHA1_DIGEST_SIZE)) {
28 fprintf(stderr, "Test vector %d PASSED for SHA-1\n",
29 i+1);
30 }
31 else {
32 fprintf(stderr, "Test vector %d FAILED for SHA-1\n",
33 i+1);
34 success = 0;
35 }
36 }
37 return success;
38 }
39
SHA256_tests(void)40 int SHA256_tests(void) {
41 int i, success = 1;
42 uint8_t sha256_digest[SHA256_DIGEST_SIZE];
43 uint8_t* test_inputs[3];
44 test_inputs[0] = (uint8_t *) oneblock_msg;
45 test_inputs[1] = (uint8_t *) multiblock_msg1;
46 test_inputs[2] = (uint8_t *) long_msg;
47
48 for (i = 0; i < 3; i++) {
49 internal_SHA256(test_inputs[i], strlen((char *)test_inputs[i]),
50 sha256_digest);
51 if (!memcmp(sha256_digest, sha256_results[i],
52 SHA256_DIGEST_SIZE)) {
53 fprintf(stderr, "Test vector %d PASSED for SHA-256\n",
54 i+1);
55 }
56 else {
57 fprintf(stderr, "Test vector %d FAILED for SHA-256\n",
58 i+1);
59 success = 0;
60 }
61 }
62 return success;
63 }
64
SHA512_tests(void)65 int SHA512_tests(void) {
66 int i, success = 1;
67 uint8_t sha512_digest[SHA512_DIGEST_SIZE];
68 uint8_t* test_inputs[3];
69 test_inputs[0] = (uint8_t *) oneblock_msg;
70 test_inputs[1] = (uint8_t *) multiblock_msg2;
71 test_inputs[2] = (uint8_t *) long_msg;
72
73 for (i = 0; i < 3; i++) {
74 internal_SHA512(test_inputs[i], strlen((char *)test_inputs[i]),
75 sha512_digest);
76 if (!memcmp(sha512_digest, sha512_results[i],
77 SHA512_DIGEST_SIZE)) {
78 fprintf(stderr, "Test vector %d PASSED for SHA-512\n",
79 i+1);
80 }
81 else {
82 fprintf(stderr, "Test vector %d FAILED for SHA-512\n",
83 i+1);
84 success = 0;
85 }
86 }
87 return success;
88 }
89
main(int argc,char * argv[])90 int main(int argc, char* argv[]) {
91 int success = 1;
92 /* Initialize long_msg with 'a' x 1,000,000 */
93 long_msg = (char *) malloc(1000001);
94 memset(long_msg, 'a', 1000000);
95 long_msg[1000000]=0;
96
97 if (!SHA1_tests())
98 success = 0;
99 if (!SHA256_tests())
100 success = 0;
101 if (!SHA512_tests())
102 success = 0;
103
104 free(long_msg);
105
106 return !success;
107 }
108