1 1.1 christos /* 2 1.1 christos * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. 3 1.1 christos * 4 1.1 christos * Licensed under the Apache License 2.0 (the "License"). You may not use 5 1.1 christos * this file except in compliance with the License. You can obtain a copy 6 1.1 christos * in the file LICENSE in the source distribution or at 7 1.1 christos * https://www.openssl.org/source/license.html 8 1.1 christos */ 9 1.1 christos 10 1.1 christos #include <string.h> 11 1.1 christos #include <openssl/sha.h> 12 1.1 christos #include "testutil.h" 13 1.1 christos 14 1.1 christos static int test_static_sha_common(const char *input, size_t length, 15 1.1 christos const unsigned char *out, 16 1.1 christos unsigned char *(*md)(const unsigned char *d, 17 1.1 christos size_t n, 18 1.1 christos unsigned char *md)) 19 1.1 christos { 20 1.1 christos unsigned char buf[EVP_MAX_MD_SIZE], *sbuf; 21 1.1 christos const unsigned char *in = (unsigned char *)input; 22 1.1 christos const size_t in_len = strlen(input); 23 1.1 christos 24 1.1 christos sbuf = (*md)(in, in_len, buf); 25 1.1 christos if (!TEST_ptr(sbuf) 26 1.1 christos || !TEST_ptr_eq(sbuf, buf) 27 1.1 christos || !TEST_mem_eq(sbuf, length, out, length)) 28 1.1 christos return 0; 29 1.1 christos sbuf = (*md)(in, in_len, NULL); 30 1.1 christos if (!TEST_ptr(sbuf) 31 1.1 christos || !TEST_ptr_ne(sbuf, buf) 32 1.1 christos || !TEST_mem_eq(sbuf, length, out, length)) 33 1.1 christos return 0; 34 1.1 christos return 1; 35 1.1 christos } 36 1.1 christos 37 1.1 christos static int test_static_sha1(void) 38 1.1 christos { 39 1.1 christos static const unsigned char output[SHA_DIGEST_LENGTH] = { 40 1.1 christos 0xa9, 0x99, 0x3e, 0x36, 0x47, 0x06, 0x81, 0x6a, 41 1.1 christos 0xba, 0x3e, 0x25, 0x71, 0x78, 0x50, 0xc2, 0x6c, 42 1.1 christos 0x9c, 0xd0, 0xd8, 0x9d 43 1.1 christos }; 44 1.1 christos 45 1.1 christos return test_static_sha_common("abc", SHA_DIGEST_LENGTH, output, &SHA1); 46 1.1 christos } 47 1.1 christos 48 1.1 christos static int test_static_sha224(void) 49 1.1 christos { 50 1.1 christos static const unsigned char output[SHA224_DIGEST_LENGTH] = { 51 1.1 christos 0x23, 0x09, 0x7d, 0x22, 0x34, 0x05, 0xd8, 0x22, 52 1.1 christos 0x86, 0x42, 0xa4, 0x77, 0xbd, 0xa2, 0x55, 0xb3, 53 1.1 christos 0x2a, 0xad, 0xbc, 0xe4, 0xbd, 0xa0, 0xb3, 0xf7, 54 1.1 christos 0xe3, 0x6c, 0x9d, 0xa7 55 1.1 christos }; 56 1.1 christos 57 1.1 christos return test_static_sha_common("abc", SHA224_DIGEST_LENGTH, output, &SHA224); 58 1.1 christos } 59 1.1 christos 60 1.1 christos static int test_static_sha256(void) 61 1.1 christos { 62 1.1 christos static const unsigned char output[SHA256_DIGEST_LENGTH] = { 63 1.1 christos 0xba, 0x78, 0x16, 0xbf, 0x8f, 0x01, 0xcf, 0xea, 64 1.1 christos 0x41, 0x41, 0x40, 0xde, 0x5d, 0xae, 0x22, 0x23, 65 1.1 christos 0xb0, 0x03, 0x61, 0xa3, 0x96, 0x17, 0x7a, 0x9c, 66 1.1 christos 0xb4, 0x10, 0xff, 0x61, 0xf2, 0x00, 0x15, 0xad 67 1.1 christos }; 68 1.1 christos 69 1.1 christos return test_static_sha_common("abc", SHA256_DIGEST_LENGTH, output, &SHA256); 70 1.1 christos } 71 1.1 christos 72 1.1 christos static int test_static_sha384(void) 73 1.1 christos { 74 1.1 christos static const unsigned char output[SHA384_DIGEST_LENGTH] = { 75 1.1 christos 0xcb, 0x00, 0x75, 0x3f, 0x45, 0xa3, 0x5e, 0x8b, 76 1.1 christos 0xb5, 0xa0, 0x3d, 0x69, 0x9a, 0xc6, 0x50, 0x07, 77 1.1 christos 0x27, 0x2c, 0x32, 0xab, 0x0e, 0xde, 0xd1, 0x63, 78 1.1 christos 0x1a, 0x8b, 0x60, 0x5a, 0x43, 0xff, 0x5b, 0xed, 79 1.1 christos 0x80, 0x86, 0x07, 0x2b, 0xa1, 0xe7, 0xcc, 0x23, 80 1.1 christos 0x58, 0xba, 0xec, 0xa1, 0x34, 0xc8, 0x25, 0xa7 81 1.1 christos }; 82 1.1 christos 83 1.1 christos return test_static_sha_common("abc", SHA384_DIGEST_LENGTH, output, &SHA384); 84 1.1 christos } 85 1.1 christos 86 1.1 christos static int test_static_sha512(void) 87 1.1 christos { 88 1.1 christos static const unsigned char output[SHA512_DIGEST_LENGTH] = { 89 1.1 christos 0xdd, 0xaf, 0x35, 0xa1, 0x93, 0x61, 0x7a, 0xba, 90 1.1 christos 0xcc, 0x41, 0x73, 0x49, 0xae, 0x20, 0x41, 0x31, 91 1.1 christos 0x12, 0xe6, 0xfa, 0x4e, 0x89, 0xa9, 0x7e, 0xa2, 92 1.1 christos 0x0a, 0x9e, 0xee, 0xe6, 0x4b, 0x55, 0xd3, 0x9a, 93 1.1 christos 0x21, 0x92, 0x99, 0x2a, 0x27, 0x4f, 0xc1, 0xa8, 94 1.1 christos 0x36, 0xba, 0x3c, 0x23, 0xa3, 0xfe, 0xeb, 0xbd, 95 1.1 christos 0x45, 0x4d, 0x44, 0x23, 0x64, 0x3c, 0xe8, 0x0e, 96 1.1 christos 0x2a, 0x9a, 0xc9, 0x4f, 0xa5, 0x4c, 0xa4, 0x9f 97 1.1 christos }; 98 1.1 christos 99 1.1 christos return test_static_sha_common("abc", SHA512_DIGEST_LENGTH, output, &SHA512); 100 1.1 christos } 101 1.1 christos 102 1.1 christos int setup_tests(void) 103 1.1 christos { 104 1.1 christos ADD_TEST(test_static_sha1); 105 1.1 christos ADD_TEST(test_static_sha224); 106 1.1 christos ADD_TEST(test_static_sha256); 107 1.1 christos ADD_TEST(test_static_sha384); 108 1.1 christos ADD_TEST(test_static_sha512); 109 1.1 christos return 1; 110 1.1 christos } 111