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