| /* 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; |
| } |