sha256_test.c (2408B)
1 /********************************************************************* 2 * Filename: sha256.c 3 * Author: Brad Conte (brad AT bradconte.com) 4 * Copyright: 5 * Disclaimer: This code is presented "as is" without any guarantees. 6 * Details: Performs known-answer tests on the corresponding SHA1 7 implementation. These tests do not encompass the full 8 range of available test vectors, however, if the tests 9 pass it is very, very likely that the code is correct 10 and was compiled properly. This code also serves as 11 example usage of the functions. 12 *********************************************************************/ 13 14 /*************************** HEADER FILES ***************************/ 15 #include <stdio.h> 16 #include <memory.h> 17 #include <string.h> 18 #include "sha256.h" 19 20 /*********************** FUNCTION DEFINITIONS ***********************/ 21 int sha256_test() 22 { 23 BYTE text1[] = {"abc"}; 24 BYTE text2[] = {"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"}; 25 BYTE text3[] = {"aaaaaaaaaa"}; 26 BYTE hash1[SHA256_BLOCK_SIZE] = {0xba,0x78,0x16,0xbf,0x8f,0x01,0xcf,0xea,0x41,0x41,0x40,0xde,0x5d,0xae,0x22,0x23, 27 0xb0,0x03,0x61,0xa3,0x96,0x17,0x7a,0x9c,0xb4,0x10,0xff,0x61,0xf2,0x00,0x15,0xad}; 28 BYTE hash2[SHA256_BLOCK_SIZE] = {0x24,0x8d,0x6a,0x61,0xd2,0x06,0x38,0xb8,0xe5,0xc0,0x26,0x93,0x0c,0x3e,0x60,0x39, 29 0xa3,0x3c,0xe4,0x59,0x64,0xff,0x21,0x67,0xf6,0xec,0xed,0xd4,0x19,0xdb,0x06,0xc1}; 30 BYTE hash3[SHA256_BLOCK_SIZE] = {0xcd,0xc7,0x6e,0x5c,0x99,0x14,0xfb,0x92,0x81,0xa1,0xc7,0xe2,0x84,0xd7,0x3e,0x67, 31 0xf1,0x80,0x9a,0x48,0xa4,0x97,0x20,0x0e,0x04,0x6d,0x39,0xcc,0xc7,0x11,0x2c,0xd0}; 32 BYTE buf[SHA256_BLOCK_SIZE]; 33 SHA256_CTX ctx; 34 int idx; 35 int pass = 1; 36 37 sha256_init(&ctx); 38 sha256_update(&ctx, text1, strlen(text1)); 39 sha256_final(&ctx, buf); 40 pass = pass && !memcmp(hash1, buf, SHA256_BLOCK_SIZE); 41 42 sha256_init(&ctx); 43 sha256_update(&ctx, text2, strlen(text2)); 44 sha256_final(&ctx, buf); 45 pass = pass && !memcmp(hash2, buf, SHA256_BLOCK_SIZE); 46 47 sha256_init(&ctx); 48 for (idx = 0; idx < 100000; ++idx) 49 sha256_update(&ctx, text3, strlen(text3)); 50 sha256_final(&ctx, buf); 51 pass = pass && !memcmp(hash3, buf, SHA256_BLOCK_SIZE); 52 53 return(pass); 54 } 55 56 int main() 57 { 58 printf("SHA-256 tests: %s\n", sha256_test() ? "SUCCEEDED" : "FAILED"); 59 60 return(0); 61 }