You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.6 KiB
99 lines
2.6 KiB
/* 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; |
|
}
|
|
|