TlsContext *tlsInit(void) { TlsContext *context; //Allocate a memory buffer to hold the TLS context context = osAllocMem(sizeof(TlsContext)); //Failed to allocate memory if(!context) return NULL; //Clear TLS context memset(context, 0, sizeof(TlsContext)); //Reference to the underlying socket #if (TLS_BSD_SOCKET_SUPPORT == ENABLED) context->socket = -1; #else context->socket = NULL; #endif //Default operation mode context->entity = TLS_CONNECTION_END_CLIENT; //Default TLS version context->version = TLS_MIN_VERSION; //Default client authentication mode context->clientAuthMode = TLS_CLIENT_AUTH_NONE; //Initialize Diffie-Hellman context dhInit(&context->dhContext); //Initialize ECDH context ecdhInit(&context->ecdhContext); //Initialize peer's RSA public key rsaInitPublicKey(&context->peerRsaPublicKey); //Initialize peer's DSA public key dsaInitPublicKey(&context->peerDsaPublicKey); //Initialize peer's EC domain parameters ecInitDomainParameters(&context->peerEcParams); //Initialize peer's EC public key ecInit(&context->peerEcPublicKey); //Allocate send and receive buffers context->txBuffer = osAllocMem(TLS_TX_BUFFER_SIZE); context->rxBuffer = osAllocMem(TLS_RX_BUFFER_SIZE); //Failed to allocate memory? if(!context->txBuffer || !context->rxBuffer) { //Free previously allocated memory osFreeMem(context->txBuffer); osFreeMem(context->rxBuffer); osFreeMem(context); //Report an error return NULL; } //Clear send and receive buffers memset(context->txBuffer, 0, TLS_TX_BUFFER_SIZE); memset(context->rxBuffer, 0, TLS_RX_BUFFER_SIZE); //Return a handle to the freshly created TLS context return context; }
TlsContext *tlsInit(void) { TlsContext *context; //Allocate a memory buffer to hold the TLS context context = osMemAlloc(sizeof(TlsContext)); //Failed to allocate memory if(!context) return NULL; //Clear TLS context memset(context, 0, sizeof(TlsContext)); //Reference to the underlying socket #if (TLS_BSD_SOCKET_SUPPORT == ENABLED) context->socket = SOCKET_ERROR; #else context->socket = NULL; #endif //Default operation mode context->entity = TLS_CONNECTION_END_CLIENT; //Default TLS version context->version = TLS_MIN_VERSION; //Default client authentication mode context->clientAuthMode = TLS_CLIENT_AUTH_NONE; //Initialize multiple precision integers dhInitParameters(&context->dhParameters); rsaInitPublicKey(&context->peerRsaPublicKey); dsaInitPublicKey(&context->peerDsaPublicKey); //Allocate send and receive buffers context->txBuffer = osMemAlloc(TLS_TX_BUFFER_SIZE); context->rxBuffer = osMemAlloc(TLS_RX_BUFFER_SIZE); //Failed to allocate memory? if(!context->txBuffer || !context->rxBuffer) { //Free previously allocated memory osMemFree(context->txBuffer); osMemFree(context->rxBuffer); osMemFree(context); //Report an error return NULL; } //Clear send and receive buffers memset(context->txBuffer, 0, TLS_TX_BUFFER_SIZE); memset(context->rxBuffer, 0, TLS_RX_BUFFER_SIZE); //Return a handle to the freshly created TLS context return context; }