Home | History | Annotate | Line # | Download | only in test
      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