1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-04-19 23:22:16 +03:00

Const-correctness for MD5Builder (#3222)

Resolves #1175
This commit is contained in:
Sven Eliasson 2017-05-12 08:03:14 +02:00 committed by Ivan Grokhotkov
parent ace0622e46
commit 2404a602af
4 changed files with 36 additions and 35 deletions

View File

@ -1,26 +1,22 @@
#include <Arduino.h> #include <Arduino.h>
#include <MD5Builder.h> #include <MD5Builder.h>
uint8_t hex_char_to_byte(uint8_t c) uint8_t hex_char_to_byte(uint8_t c){
{
return (c >= 'a' && c <= 'f') ? (c - ((uint8_t)'a' - 0xa)) : return (c >= 'a' && c <= 'f') ? (c - ((uint8_t)'a' - 0xa)) :
(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; (c >= '0' && c<= '9') ? (c - (uint8_t)'0') : 0;
} }
void MD5Builder::begin(void) void MD5Builder::begin(void){
{
memset(_buf, 0x00, 16); memset(_buf, 0x00, 16);
MD5Init(&_ctx); MD5Init(&_ctx);
} }
void MD5Builder::add(uint8_t * data, uint16_t len) void MD5Builder::add(const uint8_t * data, const uint16_t len){
{
MD5Update(&_ctx, data, len); MD5Update(&_ctx, data, len);
} }
void MD5Builder::addHexString(const char * data) void MD5Builder::addHexString(const char * data){
{
uint16_t i, len = strlen(data); uint16_t i, len = strlen(data);
uint8_t * tmp = (uint8_t*)malloc(len/2); uint8_t * tmp = (uint8_t*)malloc(len/2);
if(tmp == NULL) { if(tmp == NULL) {
@ -35,8 +31,7 @@ void MD5Builder::addHexString(const char * data)
free(tmp); free(tmp);
} }
bool MD5Builder::addStream(Stream & stream, const size_t maxLen) bool MD5Builder::addStream(Stream & stream, const size_t maxLen){
{
const int buf_size = 512; const int buf_size = 512;
int maxLengthLeft = maxLen; int maxLengthLeft = maxLen;
uint8_t * buf = (uint8_t*) malloc(buf_size); uint8_t * buf = (uint8_t*) malloc(buf_size);
@ -76,25 +71,21 @@ bool MD5Builder::addStream(Stream & stream, const size_t maxLen)
return true; return true;
} }
void MD5Builder::calculate(void) void MD5Builder::calculate(void){
{
MD5Final(_buf, &_ctx); MD5Final(_buf, &_ctx);
} }
void MD5Builder::getBytes(uint8_t * output) void MD5Builder::getBytes(uint8_t * output){
{
memcpy(output, _buf, 16); memcpy(output, _buf, 16);
} }
void MD5Builder::getChars(char * output) void MD5Builder::getChars(char * output){
{
for(uint8_t i = 0; i < 16; i++) { for(uint8_t i = 0; i < 16; i++) {
sprintf(output + (i * 2), "%02x", _buf[i]); sprintf(output + (i * 2), "%02x", _buf[i]);
} }
} }
String MD5Builder::toString(void) String MD5Builder::toString(void){
{
char out[33]; char out[33];
getChars(out); getChars(out);
return String(out); return String(out);

View File

@ -1,9 +1,9 @@
/* /*
md5.h - exposed md5 ROM functions for esp8266 md5.h - exposed md5 ROM functions for esp8266
Copyright (c) 2015 Hristo Gochkov. All rights reserved. Copyright (c) 2015 Hristo Gochkov. All rights reserved.
This file is part of the esp8266 core for Arduino environment. This file is part of the esp8266 core for Arduino environment.
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
@ -31,13 +31,13 @@ class MD5Builder {
uint8_t _buf[16]; uint8_t _buf[16];
public: public:
void begin(void); void begin(void);
void add(uint8_t * data, uint16_t len); void add(const uint8_t * data, const uint16_t len);
void add(const char * data){ add((uint8_t*)data, strlen(data)); } void add(const char * data){ add((const uint8_t*)data, strlen(data)); }
void add(char * data){ add((const char*)data); } void add(char * data){ add((const char*)data); }
void add(String data){ add(data.c_str()); } void add(const String data){ add(data.c_str()); }
void addHexString(const char * data); void addHexString(const char * data);
void addHexString(char * data){ addHexString((const char*)data); } void addHexString(char * data){ addHexString((const char*)data); }
void addHexString(String data){ addHexString(data.c_str()); } void addHexString(const String data){ addHexString(data.c_str()); }
bool addStream(Stream & stream, const size_t maxLen); bool addStream(Stream & stream, const size_t maxLen);
void calculate(void); void calculate(void);
void getBytes(uint8_t * output); void getBytes(uint8_t * output);

View File

@ -1,11 +1,11 @@
/* /*
md5.h - exposed md5 ROM functions for esp8266 md5.h - exposed md5 ROM functions for esp8266
Copyright (c) 2015 Hristo Gochkov. All rights reserved. Copyright (c) 2015 Hristo Gochkov. All rights reserved.
This file is part of the esp8266 core for Arduino environment. This file is part of the esp8266 core for Arduino environment.
original C source from https://github.com/morrissinger/ESP8266-Websocket/raw/master/MD5.h original C source from https://github.com/morrissinger/ESP8266-Websocket/raw/master/MD5.h
This library is free software; you can redistribute it and/or This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either License as published by the Free Software Foundation; either
@ -34,7 +34,7 @@ typedef struct {
} md5_context_t; } md5_context_t;
extern void MD5Init (md5_context_t *); extern void MD5Init (md5_context_t *);
extern void MD5Update (md5_context_t *, uint8_t *, uint16_t); extern void MD5Update (md5_context_t *, const uint8_t *, const uint16_t);
extern void MD5Final (uint8_t [16], md5_context_t *); extern void MD5Final (uint8_t [16], md5_context_t *);
#ifdef __cplusplus #ifdef __cplusplus

View File

@ -35,15 +35,25 @@ TEST_CASE("MD5Builder::add works as expected", "[core][MD5Builder]")
TEST_CASE("MD5Builder::addHexString works as expected", "[core][MD5Builder]") TEST_CASE("MD5Builder::addHexString works as expected", "[core][MD5Builder]")
{ {
MD5Builder builder; WHEN("A char array is parsed"){
builder.begin(); MD5Builder builder;
builder.addHexString("1234567890abcdeffedcba98765432106469676974616c7369676e61747572656170706c69636174696f6e73"); builder.begin();
builder.calculate(); const char * myPayload = "1234567890abcdeffedcba98765432106469676974616c7369676e61747572656170706c69636174696f6e73";
REQUIRE(builder.toString() == "47b937a6f9f12a4c389fa5854e023efb"); builder.addHexString(myPayload);
builder.calculate();
REQUIRE(builder.toString() == "47b937a6f9f12a4c389fa5854e023efb");
}
WHEN("A Arduino String is parsed"){
MD5Builder builder;
builder.begin();
builder.addHexString(String("1234567890abcdeffedcba98765432106469676974616c7369676e61747572656170706c69636174696f6e73"));
builder.calculate();
REQUIRE(builder.toString() == "47b937a6f9f12a4c389fa5854e023efb");
}
} }
TEST_CASE("MD5Builder::addStream works", "[core][MD5Builder]") TEST_CASE("MD5Builder::addStream works", "[core][MD5Builder]"){
{
MD5Builder builder; MD5Builder builder;
const char* str = "MD5Builder::addStream_works_longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong"; const char* str = "MD5Builder::addStream_works_longlonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglonglong";
{ {