/* 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 <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "cryptolib.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++) { internal_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++) { internal_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++) { internal_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; }