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_stack.h" 18d4afb5ceSopenharmony_ci#include "ssl_dbg.h" 19d4afb5ceSopenharmony_ci#include "ssl_port.h" 20d4afb5ceSopenharmony_ci 21d4afb5ceSopenharmony_ci#ifndef CONFIG_MIN_NODES 22d4afb5ceSopenharmony_ci #define MIN_NODES 4 23d4afb5ceSopenharmony_ci#else 24d4afb5ceSopenharmony_ci #define MIN_NODES CONFIG_MIN_NODES 25d4afb5ceSopenharmony_ci#endif 26d4afb5ceSopenharmony_ci 27d4afb5ceSopenharmony_ci/** 28d4afb5ceSopenharmony_ci * @brief create a openssl stack object 29d4afb5ceSopenharmony_ci */ 30d4afb5ceSopenharmony_ciOPENSSL_STACK* OPENSSL_sk_new(OPENSSL_sk_compfunc c) 31d4afb5ceSopenharmony_ci{ 32d4afb5ceSopenharmony_ci OPENSSL_STACK *stack; 33d4afb5ceSopenharmony_ci char **data; 34d4afb5ceSopenharmony_ci 35d4afb5ceSopenharmony_ci stack = ssl_mem_zalloc(sizeof(OPENSSL_STACK)); 36d4afb5ceSopenharmony_ci if (!stack) { 37d4afb5ceSopenharmony_ci SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (stack)"); 38d4afb5ceSopenharmony_ci goto no_mem1; 39d4afb5ceSopenharmony_ci } 40d4afb5ceSopenharmony_ci 41d4afb5ceSopenharmony_ci data = ssl_mem_zalloc(sizeof(*data) * MIN_NODES); 42d4afb5ceSopenharmony_ci if (!data) { 43d4afb5ceSopenharmony_ci SSL_DEBUG(SSL_STACK_ERROR_LEVEL, "no enough memory > (data)"); 44d4afb5ceSopenharmony_ci goto no_mem2; 45d4afb5ceSopenharmony_ci } 46d4afb5ceSopenharmony_ci 47d4afb5ceSopenharmony_ci stack->data = data; 48d4afb5ceSopenharmony_ci stack->num_alloc = MIN_NODES; 49d4afb5ceSopenharmony_ci stack->c = c; 50d4afb5ceSopenharmony_ci 51d4afb5ceSopenharmony_ci return stack; 52d4afb5ceSopenharmony_ci 53d4afb5ceSopenharmony_cino_mem2: 54d4afb5ceSopenharmony_ci ssl_mem_free(stack); 55d4afb5ceSopenharmony_cino_mem1: 56d4afb5ceSopenharmony_ci return NULL; 57d4afb5ceSopenharmony_ci} 58d4afb5ceSopenharmony_ci 59d4afb5ceSopenharmony_ci/** 60d4afb5ceSopenharmony_ci * @brief create a NULL function openssl stack object 61d4afb5ceSopenharmony_ci */ 62d4afb5ceSopenharmony_ciOPENSSL_STACK *OPENSSL_sk_new_null(void) 63d4afb5ceSopenharmony_ci{ 64d4afb5ceSopenharmony_ci return OPENSSL_sk_new((OPENSSL_sk_compfunc)NULL); 65d4afb5ceSopenharmony_ci} 66d4afb5ceSopenharmony_ci 67d4afb5ceSopenharmony_ci/** 68d4afb5ceSopenharmony_ci * @brief free openssl stack object 69d4afb5ceSopenharmony_ci */ 70d4afb5ceSopenharmony_civoid OPENSSL_sk_free(OPENSSL_STACK *stack) 71d4afb5ceSopenharmony_ci{ 72d4afb5ceSopenharmony_ci SSL_ASSERT3(stack); 73d4afb5ceSopenharmony_ci 74d4afb5ceSopenharmony_ci ssl_mem_free(stack->data); 75d4afb5ceSopenharmony_ci ssl_mem_free(stack); 76d4afb5ceSopenharmony_ci} 77