1d4afb5ceSopenharmony_ci// Copyright 2015-2016 Espressif Systems (Shanghai) PTE LTD 2d4afb5ceSopenharmony_ci// 3d4afb5ceSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4d4afb5ceSopenharmony_ci// you may not use this file except in compliance with the License. 5d4afb5ceSopenharmony_ci// You may obtain a copy of the License at 6d4afb5ceSopenharmony_ci 7d4afb5ceSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8d4afb5ceSopenharmony_ci// 9d4afb5ceSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10d4afb5ceSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 11d4afb5ceSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12d4afb5ceSopenharmony_ci// See the License for the specific language governing permissions and 13d4afb5ceSopenharmony_ci// limitations under the License. 14d4afb5ceSopenharmony_ci 15d4afb5ceSopenharmony_ci#include "private-lib-core.h" 16d4afb5ceSopenharmony_ci 17d4afb5ceSopenharmony_ci#include "ssl_cert.h" 18d4afb5ceSopenharmony_ci#include "ssl_pkey.h" 19d4afb5ceSopenharmony_ci#include "ssl_x509.h" 20d4afb5ceSopenharmony_ci#include "ssl_dbg.h" 21d4afb5ceSopenharmony_ci#include "ssl_port.h" 22d4afb5ceSopenharmony_ci 23d4afb5ceSopenharmony_ci/** 24d4afb5ceSopenharmony_ci * @brief create a certification object according to input certification 25d4afb5ceSopenharmony_ci */ 26d4afb5ceSopenharmony_ciCERT *__ssl_cert_new(CERT *ic, void *rngctx) 27d4afb5ceSopenharmony_ci{ 28d4afb5ceSopenharmony_ci CERT *cert; 29d4afb5ceSopenharmony_ci 30d4afb5ceSopenharmony_ci X509 *ix; 31d4afb5ceSopenharmony_ci EVP_PKEY *ipk; 32d4afb5ceSopenharmony_ci 33d4afb5ceSopenharmony_ci cert = ssl_mem_zalloc(sizeof(CERT)); 34d4afb5ceSopenharmony_ci if (!cert) { 35d4afb5ceSopenharmony_ci SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "no enough memory > (cert)"); 36d4afb5ceSopenharmony_ci goto no_mem; 37d4afb5ceSopenharmony_ci } 38d4afb5ceSopenharmony_ci 39d4afb5ceSopenharmony_ci if (ic) { 40d4afb5ceSopenharmony_ci ipk = ic->pkey; 41d4afb5ceSopenharmony_ci ix = ic->x509; 42d4afb5ceSopenharmony_ci } else { 43d4afb5ceSopenharmony_ci ipk = NULL; 44d4afb5ceSopenharmony_ci ix = NULL; 45d4afb5ceSopenharmony_ci } 46d4afb5ceSopenharmony_ci 47d4afb5ceSopenharmony_ci cert->pkey = __EVP_PKEY_new(ipk, rngctx); 48d4afb5ceSopenharmony_ci if (!cert->pkey) { 49d4afb5ceSopenharmony_ci SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__EVP_PKEY_new() return NULL"); 50d4afb5ceSopenharmony_ci goto pkey_err; 51d4afb5ceSopenharmony_ci } 52d4afb5ceSopenharmony_ci 53d4afb5ceSopenharmony_ci cert->x509 = __X509_new(ix); 54d4afb5ceSopenharmony_ci if (!cert->x509) { 55d4afb5ceSopenharmony_ci SSL_DEBUG(SSL_CERT_ERROR_LEVEL, "__X509_new() return NULL"); 56d4afb5ceSopenharmony_ci goto x509_err; 57d4afb5ceSopenharmony_ci } 58d4afb5ceSopenharmony_ci 59d4afb5ceSopenharmony_ci return cert; 60d4afb5ceSopenharmony_ci 61d4afb5ceSopenharmony_cix509_err: 62d4afb5ceSopenharmony_ci EVP_PKEY_free(cert->pkey); 63d4afb5ceSopenharmony_cipkey_err: 64d4afb5ceSopenharmony_ci ssl_mem_free(cert); 65d4afb5ceSopenharmony_cino_mem: 66d4afb5ceSopenharmony_ci return NULL; 67d4afb5ceSopenharmony_ci} 68d4afb5ceSopenharmony_ci 69d4afb5ceSopenharmony_ci/** 70d4afb5ceSopenharmony_ci * @brief create a certification object include private key object 71d4afb5ceSopenharmony_ci */ 72d4afb5ceSopenharmony_ciCERT *ssl_cert_new(void *rngctx) 73d4afb5ceSopenharmony_ci{ 74d4afb5ceSopenharmony_ci return __ssl_cert_new(NULL, rngctx); 75d4afb5ceSopenharmony_ci} 76d4afb5ceSopenharmony_ci 77d4afb5ceSopenharmony_ci/** 78d4afb5ceSopenharmony_ci * @brief free a certification object 79d4afb5ceSopenharmony_ci */ 80d4afb5ceSopenharmony_civoid ssl_cert_free(CERT *cert) 81d4afb5ceSopenharmony_ci{ 82d4afb5ceSopenharmony_ci SSL_ASSERT3(cert); 83d4afb5ceSopenharmony_ci 84d4afb5ceSopenharmony_ci X509_free(cert->x509); 85d4afb5ceSopenharmony_ci 86d4afb5ceSopenharmony_ci EVP_PKEY_free(cert->pkey); 87d4afb5ceSopenharmony_ci 88d4afb5ceSopenharmony_ci ssl_mem_free(cert); 89d4afb5ceSopenharmony_ci} 90