| Index: src/platform/vboot_reference/tests/sha_tests.c
|
| diff --git a/src/platform/vboot_reference/tests/sha_tests.c b/src/platform/vboot_reference/tests/sha_tests.c
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..2c07b3fcfa09d515f14fa40bdd2bc7c7945339ba
|
| --- /dev/null
|
| +++ b/src/platform/vboot_reference/tests/sha_tests.c
|
| @@ -0,0 +1,99 @@
|
| +/* Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
|
| + * Use of this source code is governed by a BSD-style license that can be
|
| + * found in the LICENSE file.
|
| + */
|
| +
|
| +/* FIPS 180-2 Tests for message digest functions. */
|
| +
|
| +#include <stdio.h>
|
| +#include <stdlib.h>
|
| +#include <string.h>
|
| +
|
| +#include "sha.h"
|
| +
|
| +#include "sha_test_vectors.h"
|
| +
|
| +int SHA1_tests(void) {
|
| + int i, success = 1;
|
| + uint8_t sha1_digest[SHA1_DIGEST_SIZE];
|
| + uint8_t* test_inputs[3];
|
| + test_inputs[0] = (uint8_t *) oneblock_msg;
|
| + test_inputs[1] = (uint8_t *) multiblock_msg1;
|
| + test_inputs[2] = (uint8_t *) long_msg;
|
| +
|
| + for (i = 0; i < 3; i++) {
|
| + SHA1(test_inputs[i], strlen((char *)test_inputs[i]),
|
| + sha1_digest);
|
| + if (!memcmp(sha1_digest, sha1_results[i], SHA1_DIGEST_SIZE)) {
|
| + fprintf(stderr, "Test vector %d PASSED for SHA-1\n", i+1);
|
| + }
|
| + else {
|
| + fprintf(stderr, "Test vector %d FAILED for SHA-1\n", i+1);
|
| + success = 0;
|
| + }
|
| + }
|
| + return success;
|
| +}
|
| +
|
| +int SHA256_tests(void) {
|
| + int i, success = 1;
|
| + uint8_t sha256_digest[SHA256_DIGEST_SIZE];
|
| + uint8_t* test_inputs[3];
|
| + test_inputs[0] = (uint8_t *) oneblock_msg;
|
| + test_inputs[1] = (uint8_t *) multiblock_msg1;
|
| + test_inputs[2] = (uint8_t *) long_msg;
|
| +
|
| + for (i = 0; i < 3; i++) {
|
| + SHA256(test_inputs[i], strlen((char *)test_inputs[i]),
|
| + sha256_digest);
|
| + if (!memcmp(sha256_digest, sha256_results[i], SHA256_DIGEST_SIZE)) {
|
| + fprintf(stderr, "Test vector %d PASSED for SHA-256\n", i+1);
|
| + }
|
| + else {
|
| + fprintf(stderr, "Test vector %d FAILED for SHA-256\n", i+1);
|
| + success = 0;
|
| + }
|
| + }
|
| + return success;
|
| +}
|
| +
|
| +int SHA512_tests(void) {
|
| + int i, success = 1;
|
| + uint8_t sha512_digest[SHA512_DIGEST_SIZE];
|
| + uint8_t* test_inputs[3];
|
| + test_inputs[0] = (uint8_t *) oneblock_msg;
|
| + test_inputs[1] = (uint8_t *) multiblock_msg2;
|
| + test_inputs[2] = (uint8_t *) long_msg;
|
| +
|
| + for (i = 0; i < 3; i++) {
|
| + SHA512(test_inputs[i], strlen((char *)test_inputs[i]),
|
| + sha512_digest);
|
| + if (!memcmp(sha512_digest, sha512_results[i], SHA512_DIGEST_SIZE)) {
|
| + fprintf(stderr, "Test vector %d PASSED for SHA-512\n", i+1);
|
| + }
|
| + else {
|
| + fprintf(stderr, "Test vector %d FAILED for SHA-512\n", i+1);
|
| + success = 0;
|
| + }
|
| + }
|
| + return success;
|
| +}
|
| +
|
| +int main(int argc, char* argv[]) {
|
| + int success = 1;
|
| + /* Initialize long_msg with 'a' x 1,000,000 */
|
| + long_msg = (char *) malloc(1000001);
|
| + memset(long_msg, 'a', 1000000);
|
| + long_msg[1000000]=0;
|
| +
|
| + if (!SHA1_tests())
|
| + success = 0;
|
| + if (!SHA256_tests())
|
| + success = 0;
|
| + if (!SHA512_tests())
|
| + success = 0;
|
| +
|
| + free(long_msg);
|
| +
|
| + return !success;
|
| +}
|
|
|