diff --git a/src/AsyncWebSocket.cpp b/src/AsyncWebSocket.cpp index ca76bfbcd..dce3b5ff9 100644 --- a/src/AsyncWebSocket.cpp +++ b/src/AsyncWebSocket.cpp @@ -26,18 +26,7 @@ #include #ifndef ESP8266 -extern "C" { -typedef struct { - uint32_t state[5]; - uint32_t count[2]; - unsigned char buffer[64]; -} SHA1_CTX; - -void SHA1Transform(uint32_t state[5], const unsigned char buffer[64]); -void SHA1Init(SHA1_CTX* context); -void SHA1Update(SHA1_CTX* context, const unsigned char* data, uint32_t len); -void SHA1Final(unsigned char digest[20], SHA1_CTX* context); -} +#include "mbedtls/sha1.h" #else #include #endif @@ -138,53 +127,42 @@ size_t webSocketSendFrame(AsyncClient *client, bool final, uint8_t opcode, bool * Control Frame */ -class AsyncWebSocketControl { -private: - uint8_t _opcode; - uint8_t *_data; - size_t _len; - bool _mask; - bool _finished; - -public: - AsyncWebSocketControl(uint8_t opcode, const uint8_t *data=NULL, size_t len=0, bool mask=false) - :_opcode(opcode) - ,_len(len) - ,_mask(len && mask) - ,_finished(false) + +AsyncWebSocketControl::AsyncWebSocketControl(uint8_t opcode, const uint8_t *data, size_t len, bool mask) + :_opcode(opcode) + ,_len(len) + ,_mask(len && mask) + ,_finished(false) +{ + if (data == NULL) + _len = 0; + if (_len) { - if (data == NULL) - _len = 0; - if (_len) - { - if (_len > 125) - _len = 125; + if (_len > 125) + _len = 125; - _data = (uint8_t*)malloc(_len); + _data = (uint8_t*)malloc(_len); - if(_data == NULL) - _len = 0; - else - memcpy(_data, data, len); - } + if(_data == NULL) + _len = 0; else - _data = NULL; + memcpy(_data, data, len); } + else + _data = NULL; +} - virtual ~AsyncWebSocketControl() - { - if (_data != NULL) - free(_data); - } +AsyncWebSocketControl::~AsyncWebSocketControl() +{ + if (_data != NULL) + free(_data); +} - virtual bool finished() const { return _finished; } - uint8_t opcode(){ return _opcode; } - uint8_t len(){ return _len + 2; } - size_t send(AsyncClient *client){ - _finished = true; - return webSocketSendFrame(client, true, _opcode & 0x0F, _mask, _data, _len); - } -}; +size_t AsyncWebSocketControl::send(AsyncClient *client) +{ + _finished = true; + return webSocketSendFrame(client, true, _opcode & 0x0F, _mask, _data, _len); +} /* @@ -1180,10 +1158,12 @@ AsyncWebSocketResponse::AsyncWebSocketResponse(const String& key, AsyncWebSocket sha1(key + WS_STR_UUID, hash); #else (String&)key += WS_STR_UUID; - SHA1_CTX ctx; - SHA1Init(&ctx); - SHA1Update(&ctx, (const unsigned char*)key.c_str(), key.length()); - SHA1Final(hash, &ctx); + mbedtls_sha1_context ctx; + mbedtls_sha1_init(&ctx); + mbedtls_sha1_starts_ret(&ctx); + mbedtls_sha1_update_ret(&ctx, (const unsigned char*)key.c_str(), key.length()); + mbedtls_sha1_finish_ret(&ctx, hash); + mbedtls_sha1_free(&ctx); #endif base64_encodestate _state; base64_init_encodestate(&_state); diff --git a/src/AsyncWebSocket.h b/src/AsyncWebSocket.h index 9a0a3b45b..e81256daf 100644 --- a/src/AsyncWebSocket.h +++ b/src/AsyncWebSocket.h @@ -84,6 +84,24 @@ typedef enum { WS_CONTINUATION, WS_TEXT, WS_BINARY, WS_DISCONNECT = 0x08, WS_PIN typedef enum { WS_MSG_SENDING, WS_MSG_SENT, WS_MSG_ERROR } AwsMessageStatus; typedef enum { WS_EVT_CONNECT, WS_EVT_DISCONNECT, WS_EVT_PONG, WS_EVT_ERROR, WS_EVT_DATA } AwsEventType; +class AsyncWebSocketControl { + private: + uint8_t _opcode; + uint8_t *_data; + size_t _len; + bool _mask; + bool _finished; + + public: + AsyncWebSocketControl(uint8_t opcode, const uint8_t *data=NULL, size_t len=0, bool mask=false); + + virtual ~AsyncWebSocketControl(); + virtual bool finished() const { return _finished; } + uint8_t opcode(){ return _opcode; } + uint8_t len(){ return _len + 2; } + size_t send(AsyncClient *client); +}; + class AsyncWebSocketMessage { private: diff --git a/src/WebAuthentication.cpp b/src/WebAuthentication.cpp index 2d72de9d4..1a22afdfc 100644 --- a/src/WebAuthentication.cpp +++ b/src/WebAuthentication.cpp @@ -77,9 +77,9 @@ static bool getMD5(uint8_t * data, uint16_t len, char * output){//33 bytes or mo memset(_buf, 0x00, 16); #ifdef ESP32 mbedtls_md5_init(&_ctx); - mbedtls_md5_starts(&_ctx); - mbedtls_md5_update(&_ctx, data, len); - mbedtls_md5_finish(&_ctx, _buf); + mbedtls_md5_starts_ret(&_ctx); + mbedtls_md5_update_ret(&_ctx, data, len); + mbedtls_md5_finish_ret(&_ctx, _buf); #else MD5Init(&_ctx); MD5Update(&_ctx, data, len);