-
Notifications
You must be signed in to change notification settings - Fork 11
Added a few more ESP32-ism files used by ESPAsyncWebServer #17
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 1 commit
e403072
23d95db
8103815
5210bf0
905a6c9
f92d828
c36c93f
8321cc6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,117 @@ | ||
| /* | ||
| MD5Builder - Simple MD5 hash calculations | ||
|
|
||
| Updated for the Pico by Earle F. Philhower, III | ||
|
|
||
| Modified from the ESP8266 version which is | ||
| Copyright (c) 2015 Hristo Gochkov. All rights reserved. | ||
| This file is part of the esp8266 core for Arduino environment. | ||
|
|
||
| This library is free software; you can redistribute it and/or | ||
| modify it under the terms of the GNU Lesser General Public | ||
| License as published by the Free Software Foundation; either | ||
| version 2.1 of the License, or (at your option) any later version. | ||
|
|
||
| This library is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| Lesser General Public License for more details. | ||
|
|
||
| You should have received a copy of the GNU Lesser General Public | ||
| License along with this library; if not, write to the Free Software | ||
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| */ | ||
|
|
||
| #include <Arduino.h> | ||
| #include <MD5Builder.h> | ||
| #include <memory> | ||
|
|
||
| static uint8_t hex_char_to_byte(uint8_t c) { | ||
| return (c >= 'a' && c <= 'f') ? (c - ((uint8_t)'a' - 0xa)) : | ||
| (c >= 'A' && c <= 'F') ? (c - ((uint8_t)'A' - 0xA)) : | ||
| (c >= '0' && c <= '9') ? (c - (uint8_t)'0') : 0; | ||
| } | ||
|
|
||
| void MD5Builder::begin(void) { | ||
| memset(_buf, 0x00, 16); | ||
| br_md5_init(&_ctx); | ||
| } | ||
|
|
||
| void MD5Builder::add(const uint8_t * data, const uint16_t len) { | ||
| br_md5_update(&_ctx, data, len); | ||
| } | ||
|
|
||
| void MD5Builder::addHexString(const char * data) { | ||
| uint16_t i, len = strlen(data); | ||
| auto tmp = std::unique_ptr<uint8_t[]> {new (std::nothrow) uint8_t[len / 2]}; | ||
|
|
||
| if (!tmp) { | ||
| return; | ||
| } | ||
|
|
||
| for (i = 0; i < len; i += 2) { | ||
| uint8_t high = hex_char_to_byte(data[i]); | ||
| uint8_t low = hex_char_to_byte(data[i + 1]); | ||
| tmp[i / 2] = (high & 0x0F) << 4 | (low & 0x0F); | ||
| } | ||
| add(tmp.get(), len / 2); | ||
| } | ||
|
|
||
| bool MD5Builder::addStream(Stream &stream, const size_t maxLen) { | ||
| const int buf_size = 512; | ||
| int maxLengthLeft = maxLen; | ||
|
|
||
|
Comment on lines
+229
to
+232
|
||
| auto buf = std::unique_ptr<uint8_t[]> {new (std::nothrow) uint8_t[buf_size]}; | ||
|
|
||
| if (!buf) { | ||
| return false; | ||
| } | ||
|
|
||
| int bytesAvailable = stream.available(); | ||
| while ((bytesAvailable > 0) && (maxLengthLeft > 0)) { | ||
|
|
||
| // determine number of bytes to read | ||
| int readBytes = bytesAvailable; | ||
| if (readBytes > maxLengthLeft) { | ||
| readBytes = maxLengthLeft; // read only until max_len | ||
| } | ||
| if (readBytes > buf_size) { | ||
| readBytes = buf_size; // not read more the buffer can handle | ||
| } | ||
|
|
||
| // read data and check if we got something | ||
| int numBytesRead = stream.readBytes(buf.get(), readBytes); | ||
| if (numBytesRead < 1) { | ||
| return false; | ||
| } | ||
|
|
||
| // Update MD5 with buffer payload | ||
| br_md5_update(&_ctx, buf.get(), numBytesRead); | ||
|
|
||
| // update available number of bytes | ||
| maxLengthLeft -= numBytesRead; | ||
| bytesAvailable = stream.available(); | ||
| } | ||
|
|
||
| return true; | ||
| } | ||
|
|
||
| void MD5Builder::calculate(void) { | ||
| br_md5_out(&_ctx, _buf); | ||
| } | ||
|
|
||
| void MD5Builder::getBytes(uint8_t * output) const { | ||
| memcpy(output, _buf, 16); | ||
| } | ||
|
|
||
| void MD5Builder::getChars(char * output) const { | ||
| for (uint8_t i = 0; i < 16; i++) { | ||
| sprintf(output + (i * 2), "%02x", _buf[i]); | ||
| } | ||
| } | ||
|
|
||
| String MD5Builder::toString(void) const { | ||
| char out[33]; | ||
| getChars(out); | ||
| return String(out); | ||
| } | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,59 @@ | ||
| /* | ||
| MD5Builder - Simple MD5 hash calculations | ||
|
|
||
| Updated for the Pico by Earle F. Philhower, III | ||
|
|
||
| Modified from the ESP8266 version which is | ||
| Copyright (c) 2015 Hristo Gochkov. All rights reserved. | ||
| This file is part of the esp8266 core for Arduino environment. | ||
|
|
||
| This library is free software; you can redistribute it and/or | ||
| modify it under the terms of the GNU Lesser General Public | ||
| License as published by the Free Software Foundation; either | ||
| version 2.1 of the License, or (at your option) any later version. | ||
|
|
||
| This library is distributed in the hope that it will be useful, | ||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||
| Lesser General Public License for more details. | ||
|
|
||
| You should have received a copy of the GNU Lesser General Public | ||
| License along with this library; if not, write to the Free Software | ||
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||
| */ | ||
|
|
||
| #pragma once | ||
|
|
||
| #include <api/String.h> | ||
| #include <Stream.h> | ||
| #include <bearssl/bearssl_hash.h> | ||
|
|
||
| class MD5Builder { | ||
| private: | ||
| br_md5_context _ctx; | ||
| uint8_t _buf[16]; | ||
| public: | ||
| void begin(void); | ||
| void add(const uint8_t * data, const uint16_t len); | ||
| void add(const char * data) { | ||
| add((const uint8_t*)data, strlen(data)); | ||
| } | ||
|
Comment on lines
+26
to
+43
|
||
| void add(char * data) { | ||
| add((const char*)data); | ||
| } | ||
| void add(const String& data) { | ||
| add(data.c_str()); | ||
| } | ||
| void addHexString(const char * data); | ||
| void addHexString(char * data) { | ||
| addHexString((const char*)data); | ||
| } | ||
| void addHexString(const String& data) { | ||
| addHexString(data.c_str()); | ||
| } | ||
| bool addStream(Stream & stream, const size_t maxLen); | ||
| void calculate(void); | ||
| void getBytes(uint8_t * output) const; | ||
| void getChars(char * output) const; | ||
| String toString(void) const; | ||
| }; | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,196 @@ | ||||||
| /* | ||||||
| cbuf.cpp - Circular buffer implementation | ||||||
| Copyright (c) 2014 Ivan Grokhotkov. All rights reserved. | ||||||
| This file is part of the esp8266 core for Arduino environment. | ||||||
|
|
||||||
| This library is free software; you can redistribute it and/or | ||||||
| modify it under the terms of the GNU Lesser General Public | ||||||
| License as published by the Free Software Foundation; either | ||||||
| version 2.1 of the License, or (at your option) any later version. | ||||||
|
|
||||||
| This library is distributed in the hope that it will be useful, | ||||||
| but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
| MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | ||||||
| Lesser General Public License for more details. | ||||||
|
|
||||||
| You should have received a copy of the GNU Lesser General Public | ||||||
| License along with this library; if not, write to the Free Software | ||||||
| Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | ||||||
| */ | ||||||
|
|
||||||
| #include "cbuf.h" | ||||||
|
|
||||||
| cbuf::cbuf(size_t size) : | ||||||
| next(NULL), _size(size+1), _buf(new char[size+1]), _bufend(_buf + size + 1), _begin(_buf), _end(_begin) | ||||||
| { | ||||||
| } | ||||||
|
MitchBradley marked this conversation as resolved.
|
||||||
|
|
||||||
| cbuf::~cbuf() | ||||||
| { | ||||||
| delete[] _buf; | ||||||
| } | ||||||
|
|
||||||
| size_t cbuf::resizeAdd(size_t addSize) | ||||||
| { | ||||||
| return resize(_size + addSize); | ||||||
|
MitchBradley marked this conversation as resolved.
|
||||||
| } | ||||||
|
|
||||||
| size_t cbuf::resize(size_t newSize) | ||||||
| { | ||||||
|
|
||||||
| size_t bytes_available = available(); | ||||||
| newSize += 1; | ||||||
| // not lose any data | ||||||
| // if data can be lost use remove or flush before resize | ||||||
| if((newSize < bytes_available) || (newSize == _size)) { | ||||||
|
||||||
| if((newSize < bytes_available) || (newSize == _size)) { | |
| if((newSize <= bytes_available) || (newSize == _size)) { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As above
Uh oh!
There was an error while loading. Please reload this page.