Rich Salz | 440e5d8 | 2016-05-17 14:20:24 -0400 | [diff] [blame] | 1 | /* |
Matt Caswell | 33388b4 | 2020-04-23 13:55:52 +0100 | [diff] [blame] | 2 | * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 3 | * |
Richard Levitte | 909f1a2 | 2018-12-06 13:05:25 +0100 | [diff] [blame] | 4 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
Rich Salz | 440e5d8 | 2016-05-17 14:20:24 -0400 | [diff] [blame] | 5 | * this file except in compliance with the License. You can obtain a copy |
| 6 | * in the file LICENSE in the source distribution or at |
| 7 | * https://www.openssl.org/source/license.html |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 8 | */ |
| 9 | |
Pauli | 33ee9ae | 2020-01-09 11:18:58 +1000 | [diff] [blame] | 10 | /* |
| 11 | * MDC2 low level APIs are deprecated for public use, but still ok for |
| 12 | * internal use. |
| 13 | */ |
| 14 | #include "internal/deprecated.h" |
| 15 | |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 16 | #include <string.h> |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 17 | #include <openssl/provider.h> |
| 18 | #include <openssl/params.h> |
Dr. Matthias St. Pierre | 50cd476 | 2019-09-28 00:45:46 +0200 | [diff] [blame] | 19 | #include <openssl/types.h> |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 20 | #include <openssl/core_names.h> |
Rich Salz | 176db6d | 2017-08-22 08:35:43 -0400 | [diff] [blame] | 21 | #include "internal/nelem.h" |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 22 | #include "testutil.h" |
Richard Levitte | 55f78ba | 2002-11-28 18:54:30 +0000 | [diff] [blame] | 23 | |
Richard Levitte | cf1b7d9 | 2001-02-19 16:06:34 +0000 | [diff] [blame] | 24 | #if defined(OPENSSL_NO_DES) && !defined(OPENSSL_NO_MDC2) |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 25 | # define OPENSSL_NO_MDC2 |
Ulf Möller | f5d7a03 | 1999-04-27 01:14:46 +0000 | [diff] [blame] | 26 | #endif |
| 27 | |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 28 | #ifndef OPENSSL_NO_MDC2 |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 29 | # include <openssl/evp.h> |
| 30 | # include <openssl/mdc2.h> |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 31 | |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 32 | # ifdef CHARSET_EBCDIC |
| 33 | # include <openssl/ebcdic.h> |
| 34 | # endif |
Ulf Möller | a53955d | 1999-06-04 21:35:58 +0000 | [diff] [blame] | 35 | |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 36 | static unsigned char pad1[16] = { |
| 37 | 0x42, 0xE5, 0x0C, 0xD2, 0x24, 0xBA, 0xCE, 0xBA, |
| 38 | 0x76, 0x0B, 0xDD, 0x2B, 0xD4, 0x09, 0x28, 0x1A |
| 39 | }; |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 40 | |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 41 | static unsigned char pad2[16] = { |
| 42 | 0x2E, 0x46, 0x79, 0xB5, 0xAD, 0xD9, 0xCA, 0x75, |
| 43 | 0x35, 0xD8, 0x7A, 0xFE, 0xAB, 0x33, 0xBE, 0xE2 |
| 44 | }; |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 45 | |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 46 | static int test_mdc2(void) |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 47 | { |
Shane Lontis | 1c3ace6 | 2019-09-05 11:23:57 +1000 | [diff] [blame] | 48 | int testresult = 0; |
| 49 | unsigned int pad_type = 2; |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 50 | unsigned char md[MDC2_DIGEST_LENGTH]; |
Jiasheng Jiang | 78c5f12 | 2022-02-18 09:15:50 +0800 | [diff] [blame] | 51 | EVP_MD_CTX *c = NULL; |
Matt Caswell | a1f4128 | 2016-04-29 14:46:07 +0100 | [diff] [blame] | 52 | static char text[] = "Now is the time for all "; |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 53 | size_t tlen = strlen(text), i = 0; |
| 54 | OSSL_PROVIDER *prov = NULL; |
| 55 | OSSL_PARAM params[2]; |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 56 | |
Shane Lontis | 1c3ace6 | 2019-09-05 11:23:57 +1000 | [diff] [blame] | 57 | params[i++] = OSSL_PARAM_construct_uint(OSSL_DIGEST_PARAM_PAD_TYPE, |
| 58 | &pad_type), |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 59 | params[i++] = OSSL_PARAM_construct_end(); |
| 60 | |
| 61 | prov = OSSL_PROVIDER_load(NULL, "legacy"); |
Jiasheng Jiang | 78c5f12 | 2022-02-18 09:15:50 +0800 | [diff] [blame] | 62 | if (!TEST_ptr(prov)) |
| 63 | goto end; |
| 64 | |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 65 | # ifdef CHARSET_EBCDIC |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 66 | ebcdic2ascii(text, text, tlen); |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 67 | # endif |
Ulf Möller | a53955d | 1999-06-04 21:35:58 +0000 | [diff] [blame] | 68 | |
Richard Levitte | bfb0641 | 2015-12-02 00:49:35 +0100 | [diff] [blame] | 69 | c = EVP_MD_CTX_new(); |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 70 | if (!TEST_ptr(c) |
| 71 | || !TEST_true(EVP_DigestInit_ex(c, EVP_mdc2(), NULL)) |
| 72 | || !TEST_true(EVP_DigestUpdate(c, (unsigned char *)text, tlen)) |
| 73 | || !TEST_true(EVP_DigestFinal_ex(c, &(md[0]), NULL)) |
| 74 | || !TEST_mem_eq(md, MDC2_DIGEST_LENGTH, pad1, MDC2_DIGEST_LENGTH) |
| 75 | || !TEST_true(EVP_DigestInit_ex(c, EVP_mdc2(), NULL))) |
| 76 | goto end; |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 77 | |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 78 | if (!TEST_int_gt(EVP_MD_CTX_set_params(c, params), 0) |
| 79 | || !TEST_true(EVP_DigestUpdate(c, (unsigned char *)text, tlen)) |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 80 | || !TEST_true(EVP_DigestFinal_ex(c, &(md[0]), NULL)) |
| 81 | || !TEST_mem_eq(md, MDC2_DIGEST_LENGTH, pad2, MDC2_DIGEST_LENGTH)) |
| 82 | goto end; |
Ralf S. Engelschall | d02b48c | 1998-12-21 10:52:47 +0000 | [diff] [blame] | 83 | |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 84 | testresult = 1; |
| 85 | end: |
Richard Levitte | bfb0641 | 2015-12-02 00:49:35 +0100 | [diff] [blame] | 86 | EVP_MD_CTX_free(c); |
Shane Lontis | d5e5e2f | 2019-04-11 20:27:59 +1000 | [diff] [blame] | 87 | OSSL_PROVIDER_unload(prov); |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 88 | return testresult; |
Matt Caswell | 0f113f3 | 2015-01-22 03:40:55 +0000 | [diff] [blame] | 89 | } |
Ulf Möller | f5d7a03 | 1999-04-27 01:14:46 +0000 | [diff] [blame] | 90 | #endif |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 91 | |
Pauli | ad88741 | 2017-07-18 11:48:27 +1000 | [diff] [blame] | 92 | int setup_tests(void) |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 93 | { |
| 94 | #ifndef OPENSSL_NO_MDC2 |
| 95 | ADD_TEST(test_mdc2); |
| 96 | #endif |
Pauli | ad88741 | 2017-07-18 11:48:27 +1000 | [diff] [blame] | 97 | return 1; |
Pauli | 850b55a | 2017-04-07 13:49:26 +1000 | [diff] [blame] | 98 | } |