A fork of the TLS_cyassl embedded SSL library with certificate validation disabled.

Dependencies:   cyassl-lib

Fork of TLS_cyassl by Francois Berder

Committer:
feb11
Date:
Thu Sep 12 16:37:08 2013 +0000
Revision:
0:815067fd66c9
Child:
1:9494492e9bf7
initial import

Who changed what in which revision?

UserRevisionLine numberNew contents of line
feb11 0:815067fd66c9 1 #define __DEBUG__ 4 //Maximum verbosity
feb11 0:815067fd66c9 2 #ifndef __MODULE__
feb11 0:815067fd66c9 3 #define __MODULE__ "TLSConnection.cpp"
feb11 0:815067fd66c9 4 #endif
feb11 0:815067fd66c9 5
feb11 0:815067fd66c9 6 #include "dbg.h"
feb11 0:815067fd66c9 7 #include "TLSConnection.h"
feb11 0:815067fd66c9 8 #include <stdlib.h>
feb11 0:815067fd66c9 9 #include <stdio.h>
feb11 0:815067fd66c9 10 #include "bsd_socket.h"
feb11 0:815067fd66c9 11 #include "cert.h"
feb11 0:815067fd66c9 12 #undef NO_CERTS
feb11 0:815067fd66c9 13 #undef NO_FILESYSTEM
feb11 0:815067fd66c9 14 #include "ssl.h"
feb11 0:815067fd66c9 15 #include "logging.h"
feb11 0:815067fd66c9 16
feb11 0:815067fd66c9 17 const static int HTTPS_PORT = 443;
feb11 0:815067fd66c9 18
feb11 0:815067fd66c9 19 void printError(CYASSL *ssl, int resultCode) {
feb11 0:815067fd66c9 20 /*
feb11 0:815067fd66c9 21 int err = CyaSSL_get_error(ssl, resultCode);
feb11 0:815067fd66c9 22 char errorString[80];
feb11 0:815067fd66c9 23 CyaSSL_ERR_error_string(err, errorString);
feb11 0:815067fd66c9 24 printf("Error: CyaSSL_write %s\n", errorString);
feb11 0:815067fd66c9 25 */
feb11 0:815067fd66c9 26 }
feb11 0:815067fd66c9 27
feb11 0:815067fd66c9 28 TLSConnection::TLSConnection():
feb11 0:815067fd66c9 29 Socket(),
feb11 0:815067fd66c9 30 Endpoint(),
feb11 0:815067fd66c9 31 _is_connected(false),
feb11 0:815067fd66c9 32 _ssl_ctx(),
feb11 0:815067fd66c9 33 _ssl()
feb11 0:815067fd66c9 34 {
feb11 0:815067fd66c9 35 }
feb11 0:815067fd66c9 36
feb11 0:815067fd66c9 37 void debugCallback(const int logLevel,const char *const logMessage) {
feb11 0:815067fd66c9 38 //DBG(logMessage);
feb11 0:815067fd66c9 39 }
feb11 0:815067fd66c9 40
feb11 0:815067fd66c9 41 bool TLSConnection::connect(const char *host)
feb11 0:815067fd66c9 42 {
feb11 0:815067fd66c9 43 if (init_socket(SOCK_STREAM) < 0)
feb11 0:815067fd66c9 44 return false;
feb11 0:815067fd66c9 45
feb11 0:815067fd66c9 46 if (set_address(host, HTTPS_PORT) != 0)
feb11 0:815067fd66c9 47 return false;
feb11 0:815067fd66c9 48
feb11 0:815067fd66c9 49 if (lwip_connect(_sock_fd, (const struct sockaddr *) &_remoteHost, sizeof(_remoteHost)) < 0) {
feb11 0:815067fd66c9 50 close();
feb11 0:815067fd66c9 51 return false;
feb11 0:815067fd66c9 52 }
feb11 0:815067fd66c9 53
feb11 0:815067fd66c9 54 CyaSSL_Init();
feb11 0:815067fd66c9 55 CyaSSL_Debugging_ON();
feb11 0:815067fd66c9 56
feb11 0:815067fd66c9 57 CyaSSL_SetLoggingCb(&debugCallback);
feb11 0:815067fd66c9 58
feb11 0:815067fd66c9 59 CYASSL_METHOD* method = CyaTLSv1_2_client_method();
feb11 0:815067fd66c9 60 if(method == NULL)
feb11 0:815067fd66c9 61 {
feb11 0:815067fd66c9 62 return false;
feb11 0:815067fd66c9 63 }
feb11 0:815067fd66c9 64
feb11 0:815067fd66c9 65 _ssl_ctx = CyaSSL_CTX_new(method);
feb11 0:815067fd66c9 66 if(_ssl_ctx == NULL)
feb11 0:815067fd66c9 67 {
feb11 0:815067fd66c9 68 return false;
feb11 0:815067fd66c9 69 }
feb11 0:815067fd66c9 70 CyaSSL_CTX_load_verify_buffer(_ssl_ctx,(unsigned char*)root_cert, root_cert_len,SSL_FILETYPE_ASN1);
feb11 0:815067fd66c9 71
feb11 0:815067fd66c9 72 _ssl = CyaSSL_new(_ssl_ctx);
feb11 0:815067fd66c9 73 if(_ssl == NULL)
feb11 0:815067fd66c9 74 {
feb11 0:815067fd66c9 75 return false;
feb11 0:815067fd66c9 76 }
feb11 0:815067fd66c9 77
feb11 0:815067fd66c9 78 CyaSSL_set_fd(_ssl, _sock_fd);
feb11 0:815067fd66c9 79
feb11 0:815067fd66c9 80 int result = CyaSSL_connect(_ssl);
feb11 0:815067fd66c9 81 if(result!=SSL_SUCCESS)
feb11 0:815067fd66c9 82 {
feb11 0:815067fd66c9 83 printError(_ssl,result);
feb11 0:815067fd66c9 84 return false;
feb11 0:815067fd66c9 85 }
feb11 0:815067fd66c9 86
feb11 0:815067fd66c9 87 _is_connected = true;
feb11 0:815067fd66c9 88
feb11 0:815067fd66c9 89 return true;
feb11 0:815067fd66c9 90 }
feb11 0:815067fd66c9 91
feb11 0:815067fd66c9 92 bool TLSConnection::is_connected(void)
feb11 0:815067fd66c9 93 {
feb11 0:815067fd66c9 94 return _is_connected;
feb11 0:815067fd66c9 95 }
feb11 0:815067fd66c9 96
feb11 0:815067fd66c9 97 int TLSConnection::send_all(char *data, int length)
feb11 0:815067fd66c9 98 {
feb11 0:815067fd66c9 99 return 0;
feb11 0:815067fd66c9 100 }
feb11 0:815067fd66c9 101
feb11 0:815067fd66c9 102 int TLSConnection::receive(char *data, int length)
feb11 0:815067fd66c9 103 {
feb11 0:815067fd66c9 104 return 0;
feb11 0:815067fd66c9 105 }
feb11 0:815067fd66c9 106
feb11 0:815067fd66c9 107 bool TLSConnection::close(bool shutdown)
feb11 0:815067fd66c9 108 {
feb11 0:815067fd66c9 109 if(!_is_connected)
feb11 0:815067fd66c9 110 return true;
feb11 0:815067fd66c9 111
feb11 0:815067fd66c9 112 _is_connected = false;
feb11 0:815067fd66c9 113
feb11 0:815067fd66c9 114 CyaSSL_CTX_free(_ssl_ctx);
feb11 0:815067fd66c9 115 CyaSSL_Cleanup();
feb11 0:815067fd66c9 116
feb11 0:815067fd66c9 117 return Socket::close(shutdown) == 0;
feb11 0:815067fd66c9 118 }
feb11 0:815067fd66c9 119