1e1051a39Sopenharmony_ci/* 2e1051a39Sopenharmony_ci * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci * 4e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License"). You may not use 5e1051a39Sopenharmony_ci * this file except in compliance with the License. You can obtain a copy 6e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at 7e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html 8e1051a39Sopenharmony_ci */ 9e1051a39Sopenharmony_ci 10e1051a39Sopenharmony_ci/* 11e1051a39Sopenharmony_ci * This file tests deprecated APIs. Therefore we need to suppress deprecation 12e1051a39Sopenharmony_ci * warnings. 13e1051a39Sopenharmony_ci */ 14e1051a39Sopenharmony_ci#define OPENSSL_SUPPRESS_DEPRECATED 15e1051a39Sopenharmony_ci 16e1051a39Sopenharmony_ci#include <openssl/pem.h> 17e1051a39Sopenharmony_ci#include <openssl/bio.h> 18e1051a39Sopenharmony_ci#include <openssl/dh.h> 19e1051a39Sopenharmony_ci#include <openssl/dsa.h> 20e1051a39Sopenharmony_ci#include <openssl/rsa.h> 21e1051a39Sopenharmony_ci 22e1051a39Sopenharmony_ci#include "testutil.h" 23e1051a39Sopenharmony_ci 24e1051a39Sopenharmony_cistatic const char *datadir; 25e1051a39Sopenharmony_ci 26e1051a39Sopenharmony_cistatic BIO *getfile(const char *filename) 27e1051a39Sopenharmony_ci{ 28e1051a39Sopenharmony_ci char *paramsfile = test_mk_file_path(datadir, filename); 29e1051a39Sopenharmony_ci BIO *infile = NULL; 30e1051a39Sopenharmony_ci 31e1051a39Sopenharmony_ci if (!TEST_ptr(paramsfile)) 32e1051a39Sopenharmony_ci goto err; 33e1051a39Sopenharmony_ci infile = BIO_new_file(paramsfile, "r"); 34e1051a39Sopenharmony_ci 35e1051a39Sopenharmony_ci err: 36e1051a39Sopenharmony_ci OPENSSL_free(paramsfile); 37e1051a39Sopenharmony_ci return infile; 38e1051a39Sopenharmony_ci} 39e1051a39Sopenharmony_ci 40e1051a39Sopenharmony_ci#ifndef OPENSSL_NO_DH 41e1051a39Sopenharmony_cistatic int test_read_dh_params(void) 42e1051a39Sopenharmony_ci{ 43e1051a39Sopenharmony_ci int testresult = 0; 44e1051a39Sopenharmony_ci BIO *infile = getfile("dhparams.pem"); 45e1051a39Sopenharmony_ci DH *dh = NULL; 46e1051a39Sopenharmony_ci 47e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 48e1051a39Sopenharmony_ci goto err; 49e1051a39Sopenharmony_ci 50e1051a39Sopenharmony_ci dh = PEM_read_bio_DHparams(infile, NULL, NULL, NULL); 51e1051a39Sopenharmony_ci if (!TEST_ptr(dh)) 52e1051a39Sopenharmony_ci goto err; 53e1051a39Sopenharmony_ci 54e1051a39Sopenharmony_ci testresult = 1; 55e1051a39Sopenharmony_ci 56e1051a39Sopenharmony_ci err: 57e1051a39Sopenharmony_ci BIO_free(infile); 58e1051a39Sopenharmony_ci DH_free(dh); 59e1051a39Sopenharmony_ci return testresult; 60e1051a39Sopenharmony_ci} 61e1051a39Sopenharmony_ci 62e1051a39Sopenharmony_cistatic int test_read_dh_x942_params(void) 63e1051a39Sopenharmony_ci{ 64e1051a39Sopenharmony_ci int testresult = 0; 65e1051a39Sopenharmony_ci BIO *infile = getfile("x942params.pem"); 66e1051a39Sopenharmony_ci DH *dh = NULL; 67e1051a39Sopenharmony_ci 68e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 69e1051a39Sopenharmony_ci goto err; 70e1051a39Sopenharmony_ci 71e1051a39Sopenharmony_ci dh = PEM_read_bio_DHparams(infile, NULL, NULL, NULL); 72e1051a39Sopenharmony_ci if (!TEST_ptr(dh)) 73e1051a39Sopenharmony_ci goto err; 74e1051a39Sopenharmony_ci 75e1051a39Sopenharmony_ci testresult = 1; 76e1051a39Sopenharmony_ci 77e1051a39Sopenharmony_ci err: 78e1051a39Sopenharmony_ci BIO_free(infile); 79e1051a39Sopenharmony_ci DH_free(dh); 80e1051a39Sopenharmony_ci return testresult; 81e1051a39Sopenharmony_ci} 82e1051a39Sopenharmony_ci#endif 83e1051a39Sopenharmony_ci 84e1051a39Sopenharmony_ci#ifndef OPENSSL_NO_DSA 85e1051a39Sopenharmony_cistatic int test_read_dsa_params(void) 86e1051a39Sopenharmony_ci{ 87e1051a39Sopenharmony_ci int testresult = 0; 88e1051a39Sopenharmony_ci BIO *infile = getfile("dsaparams.pem"); 89e1051a39Sopenharmony_ci DSA *dsa = NULL; 90e1051a39Sopenharmony_ci 91e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 92e1051a39Sopenharmony_ci goto err; 93e1051a39Sopenharmony_ci 94e1051a39Sopenharmony_ci dsa = PEM_read_bio_DSAparams(infile, NULL, NULL, NULL); 95e1051a39Sopenharmony_ci if (!TEST_ptr(dsa)) 96e1051a39Sopenharmony_ci goto err; 97e1051a39Sopenharmony_ci 98e1051a39Sopenharmony_ci testresult = 1; 99e1051a39Sopenharmony_ci 100e1051a39Sopenharmony_ci err: 101e1051a39Sopenharmony_ci BIO_free(infile); 102e1051a39Sopenharmony_ci DSA_free(dsa); 103e1051a39Sopenharmony_ci return testresult; 104e1051a39Sopenharmony_ci} 105e1051a39Sopenharmony_ci 106e1051a39Sopenharmony_cistatic int test_read_dsa_private(void) 107e1051a39Sopenharmony_ci{ 108e1051a39Sopenharmony_ci int testresult = 0; 109e1051a39Sopenharmony_ci BIO *infile = getfile("dsaprivatekey.pem"); 110e1051a39Sopenharmony_ci DSA *dsa = NULL; 111e1051a39Sopenharmony_ci 112e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 113e1051a39Sopenharmony_ci goto err; 114e1051a39Sopenharmony_ci 115e1051a39Sopenharmony_ci dsa = PEM_read_bio_DSAPrivateKey(infile, NULL, NULL, NULL); 116e1051a39Sopenharmony_ci if (!TEST_ptr(dsa)) 117e1051a39Sopenharmony_ci goto err; 118e1051a39Sopenharmony_ci 119e1051a39Sopenharmony_ci testresult = 1; 120e1051a39Sopenharmony_ci 121e1051a39Sopenharmony_ci err: 122e1051a39Sopenharmony_ci BIO_free(infile); 123e1051a39Sopenharmony_ci DSA_free(dsa); 124e1051a39Sopenharmony_ci return testresult; 125e1051a39Sopenharmony_ci} 126e1051a39Sopenharmony_ci 127e1051a39Sopenharmony_cistatic int test_read_dsa_public(void) 128e1051a39Sopenharmony_ci{ 129e1051a39Sopenharmony_ci int testresult = 0; 130e1051a39Sopenharmony_ci BIO *infile = getfile("dsapublickey.pem"); 131e1051a39Sopenharmony_ci DSA *dsa = NULL; 132e1051a39Sopenharmony_ci 133e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 134e1051a39Sopenharmony_ci goto err; 135e1051a39Sopenharmony_ci 136e1051a39Sopenharmony_ci dsa = PEM_read_bio_DSA_PUBKEY(infile, NULL, NULL, NULL); 137e1051a39Sopenharmony_ci if (!TEST_ptr(dsa)) 138e1051a39Sopenharmony_ci goto err; 139e1051a39Sopenharmony_ci 140e1051a39Sopenharmony_ci testresult = 1; 141e1051a39Sopenharmony_ci 142e1051a39Sopenharmony_ci err: 143e1051a39Sopenharmony_ci BIO_free(infile); 144e1051a39Sopenharmony_ci DSA_free(dsa); 145e1051a39Sopenharmony_ci return testresult; 146e1051a39Sopenharmony_ci} 147e1051a39Sopenharmony_ci#endif 148e1051a39Sopenharmony_ci 149e1051a39Sopenharmony_cistatic int test_read_rsa_private(void) 150e1051a39Sopenharmony_ci{ 151e1051a39Sopenharmony_ci int testresult = 0; 152e1051a39Sopenharmony_ci BIO *infile = getfile("rsaprivatekey.pem"); 153e1051a39Sopenharmony_ci RSA *rsa = NULL; 154e1051a39Sopenharmony_ci 155e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 156e1051a39Sopenharmony_ci goto err; 157e1051a39Sopenharmony_ci 158e1051a39Sopenharmony_ci rsa = PEM_read_bio_RSAPrivateKey(infile, NULL, NULL, NULL); 159e1051a39Sopenharmony_ci if (!TEST_ptr(rsa)) 160e1051a39Sopenharmony_ci goto err; 161e1051a39Sopenharmony_ci 162e1051a39Sopenharmony_ci testresult = 1; 163e1051a39Sopenharmony_ci 164e1051a39Sopenharmony_ci err: 165e1051a39Sopenharmony_ci BIO_free(infile); 166e1051a39Sopenharmony_ci RSA_free(rsa); 167e1051a39Sopenharmony_ci return testresult; 168e1051a39Sopenharmony_ci} 169e1051a39Sopenharmony_ci 170e1051a39Sopenharmony_cistatic int test_read_rsa_public(void) 171e1051a39Sopenharmony_ci{ 172e1051a39Sopenharmony_ci int testresult = 0; 173e1051a39Sopenharmony_ci BIO *infile = getfile("rsapublickey.pem"); 174e1051a39Sopenharmony_ci RSA *rsa = NULL; 175e1051a39Sopenharmony_ci 176e1051a39Sopenharmony_ci if (!TEST_ptr(infile)) 177e1051a39Sopenharmony_ci goto err; 178e1051a39Sopenharmony_ci 179e1051a39Sopenharmony_ci rsa = PEM_read_bio_RSA_PUBKEY(infile, NULL, NULL, NULL); 180e1051a39Sopenharmony_ci if (!TEST_ptr(rsa)) 181e1051a39Sopenharmony_ci goto err; 182e1051a39Sopenharmony_ci 183e1051a39Sopenharmony_ci testresult = 1; 184e1051a39Sopenharmony_ci 185e1051a39Sopenharmony_ci err: 186e1051a39Sopenharmony_ci BIO_free(infile); 187e1051a39Sopenharmony_ci RSA_free(rsa); 188e1051a39Sopenharmony_ci return testresult; 189e1051a39Sopenharmony_ci} 190e1051a39Sopenharmony_ci 191e1051a39Sopenharmony_ciint setup_tests(void) 192e1051a39Sopenharmony_ci{ 193e1051a39Sopenharmony_ci if (!test_skip_common_options()) { 194e1051a39Sopenharmony_ci TEST_error("Error parsing test options\n"); 195e1051a39Sopenharmony_ci return 0; 196e1051a39Sopenharmony_ci } 197e1051a39Sopenharmony_ci 198e1051a39Sopenharmony_ci if (!TEST_ptr(datadir = test_get_argument(0))) { 199e1051a39Sopenharmony_ci TEST_error("Error getting data dir\n"); 200e1051a39Sopenharmony_ci return 0; 201e1051a39Sopenharmony_ci } 202e1051a39Sopenharmony_ci 203e1051a39Sopenharmony_ci#ifndef OPENSSL_NO_DH 204e1051a39Sopenharmony_ci ADD_TEST(test_read_dh_params); 205e1051a39Sopenharmony_ci ADD_TEST(test_read_dh_x942_params); 206e1051a39Sopenharmony_ci#endif 207e1051a39Sopenharmony_ci#ifndef OPENSSL_NO_DSA 208e1051a39Sopenharmony_ci ADD_TEST(test_read_dsa_params); 209e1051a39Sopenharmony_ci ADD_TEST(test_read_dsa_private); 210e1051a39Sopenharmony_ci ADD_TEST(test_read_dsa_public); 211e1051a39Sopenharmony_ci#endif 212e1051a39Sopenharmony_ci ADD_TEST(test_read_rsa_private); 213e1051a39Sopenharmony_ci ADD_TEST(test_read_rsa_public); 214e1051a39Sopenharmony_ci 215e1051a39Sopenharmony_ci return 1; 216e1051a39Sopenharmony_ci} 217