IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) { if (pNetwork == NULL) return NULL_VALUE_ERROR; IoT_Error_t ret_val = AWS_FAILURE; if (params != NULL) { Populate_ConnectParams(pNetwork, params->pRootCALocation, params->pDeviceCertLocation, params->pDevicePrivateKeyLocation, params->pDestinationURL, params->DestinationPort, params->timeout_ms, params->ServerVerificationFlag); } pNetwork->my_socket = Create_TCPSocket(); if (-1 == pNetwork->my_socket) { ret_val = TCP_CONNECTION_ERROR; return ret_val; } ret_val = Connect_TCPSocket(pNetwork->my_socket, pNetwork->tlsConnectParams.pDestinationURL, pNetwork->tlsConnectParams.DestinationPort); if (AWS_SUCCESS != ret_val) { Close_TCPSocket(&pNetwork->my_socket); return ret_val; } tls_cfg.flags = TLS_USE_CLIENT_CERT; tls_cfg.tls.client.client_cert = (unsigned char *) pNetwork->tlsConnectParams.pDeviceCertLocation; tls_cfg.tls.client.client_cert_size = strlen(pNetwork->tlsConnectParams.pDeviceCertLocation); tls_cfg.tls.client.client_key = (unsigned char *) pNetwork->tlsConnectParams.pDevicePrivateKeyLocation; tls_cfg.tls.client.client_key_size = strlen(pNetwork->tlsConnectParams.pDevicePrivateKeyLocation); tls_cfg.tls.client.ca_cert = (unsigned char *)pNetwork->tlsConnectParams.pRootCALocation; tls_cfg.tls.client.ca_cert_size = strlen(pNetwork->tlsConnectParams.pRootCALocation); ret_val = tls_session_init(&tls_handle, pNetwork->my_socket, &tls_cfg); if (AWS_SUCCESS != ret_val) Close_TCPSocket(&pNetwork->my_socket); return ret_val; }
IoT_Error_t iot_tls_connect(Network *pNetwork, TLSConnectParams *params) { if (pNetwork == NULL) return NULL_VALUE_ERROR; IoT_Error_t ret_val = AWS_FAILURE; if (params != NULL) { Populate_ConnectParams(pNetwork, params->pRootCALocation, params->pDeviceCertLocation, params->pDevicePrivateKeyLocation, params->pDestinationURL, params->DestinationPort, params->timeout_ms, params->ServerVerificationFlag); } pNetwork->my_socket = Create_TCPSocket(); if (-1 == pNetwork->my_socket) { ret_val = TCP_CONNECTION_ERROR; return ret_val; } ret_val = Connect_TCPSocket(pNetwork->my_socket, pNetwork->tlsConnectParams.pDestinationURL, pNetwork->tlsConnectParams.DestinationPort); if (AWS_SUCCESS != ret_val) { Close_TCPSocket(&pNetwork->my_socket); return ret_val; } memset(&tls_hd, 0, sizeof(tls_hd)); ret_val = wm_tls_client_open(&tls_hd, (wm_tls_cert_t *) pNetwork->tlsConnectParams.pRootCALocation, (wm_tls_cert_t *) pNetwork->tlsConnectParams.pDeviceCertLocation, (wm_tls_key_t *) pNetwork->tlsConnectParams.pDevicePrivateKeyLocation, pNetwork->my_socket); if (ret_val != WM_SUCCESS) goto out; return WM_SUCCESS; out: wm_tls_client_close(&tls_hd); Close_TCPSocket(&pNetwork->my_socket); return -WM_FAIL; }
IoT_Error_t iot_tls_init(Network *pNetwork, char *pRootCALocation, char *pDeviceCertLocation, char *pDevicePrivateKeyLocation, char *pDestinationURL, uint16_t destinationPort, uint32_t timeout_ms, bool ServerVerificationFlag) { Populate_ConnectParams(pNetwork, pRootCALocation, pDeviceCertLocation, pDevicePrivateKeyLocation, pDestinationURL, destinationPort, timeout_ms, ServerVerificationFlag); pNetwork->my_socket = 0; pNetwork->connect = iot_tls_connect; pNetwork->read = iot_tls_read; pNetwork->write = iot_tls_write; pNetwork->disconnect = iot_tls_disconnect; pNetwork->isConnected = iot_tls_is_connected; pNetwork->destroy = iot_tls_destroy; tls_lib_init(); return AWS_SUCCESS; }