forked from esp8266/Arduino
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tests for MD5Builder, reformat and clean up code
- Loading branch information
Showing
8 changed files
with
484 additions
and
62 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,77 +1,102 @@ | ||
#include "Arduino.h" | ||
#include "md5.h" | ||
#include "MD5Builder.h" | ||
#include <Arduino.h> | ||
#include <MD5Builder.h> | ||
|
||
#define hex_char_to_byte(c) (((c)>='a'&&(c)<='f')?((c)-87):((c)>='A'&&(c)<='F')?((c)-55):((c)>='0'&&(c)<='9')?((c)-48):0) | ||
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); | ||
MD5Init(&_ctx); | ||
void MD5Builder::begin(void) | ||
{ | ||
memset(_buf, 0x00, 16); | ||
MD5Init(&_ctx); | ||
} | ||
|
||
void MD5Builder::add(uint8_t * data, uint16_t len){ | ||
MD5Update(&_ctx, data, len); | ||
void MD5Builder::add(uint8_t * data, uint16_t len) | ||
{ | ||
MD5Update(&_ctx, data, len); | ||
} | ||
|
||
void MD5Builder::addHexString(const char * data){ | ||
uint16_t i, len = strlen(data); | ||
uint8_t * tmp = (uint8_t*)malloc(len/2); | ||
if(tmp == NULL) | ||
return; | ||
for(i=0; i<len; i+=2) tmp[i/2] = (hex_char_to_byte(data[i]) & 0x0F) << 4 | (hex_char_to_byte(data[i+1]) & 0x0F); | ||
add(tmp, len/2); | ||
free(tmp); | ||
void MD5Builder::addHexString(const char * data) | ||
{ | ||
uint16_t i, len = strlen(data); | ||
uint8_t * tmp = (uint8_t*)malloc(len/2); | ||
if(tmp == NULL) { | ||
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, len/2); | ||
free(tmp); | ||
} | ||
|
||
bool MD5Builder::addStream(Stream & stream, const size_t maxLen) { | ||
const int buf_size = 512; | ||
int maxLengthLeft = maxLen; | ||
uint8_t * buf = (uint8_t*) malloc(buf_size); | ||
bool MD5Builder::addStream(Stream & stream, const size_t maxLen) | ||
{ | ||
const int buf_size = 512; | ||
int maxLengthLeft = maxLen; | ||
uint8_t * buf = (uint8_t*) malloc(buf_size); | ||
|
||
if(!buf) { | ||
return false; | ||
} | ||
|
||
if(buf) { | ||
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 | ||
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, readBytes); | ||
if(numBytesRead< 1) return false; | ||
if(numBytesRead< 1) { | ||
return false; | ||
} | ||
|
||
// Update MD5 with buffer payload | ||
MD5Update(&_ctx, buf, numBytesRead); | ||
|
||
delay(0); // time for network streams | ||
yield(); // time for network streams | ||
|
||
// update available number of bytes | ||
maxLengthLeft -= numBytesRead; | ||
bytesAvailable = stream.available(); | ||
} | ||
printf("ba: %d mll: %d\n", bytesAvailable, maxLengthLeft); | ||
free(buf); | ||
return true; | ||
} else { | ||
return false; | ||
} | ||
} | ||
|
||
void MD5Builder::calculate(void){ | ||
MD5Final(_buf, &_ctx); | ||
void MD5Builder::calculate(void) | ||
{ | ||
MD5Final(_buf, &_ctx); | ||
} | ||
|
||
void MD5Builder::getBytes(uint8_t * output){ | ||
memcpy(output, _buf, 16); | ||
void MD5Builder::getBytes(uint8_t * output) | ||
{ | ||
memcpy(output, _buf, 16); | ||
} | ||
|
||
void MD5Builder::getChars(char * output){ | ||
for(uint8_t i = 0; i < 16; i++) | ||
sprintf(output + (i * 2), "%02x", _buf[i]); | ||
void MD5Builder::getChars(char * output) | ||
{ | ||
for(uint8_t i = 0; i < 16; i++) { | ||
sprintf(output + (i * 2), "%02x", _buf[i]); | ||
} | ||
} | ||
|
||
String MD5Builder::toString(void){ | ||
char out[33]; | ||
getChars(out); | ||
return String(out); | ||
} | ||
String MD5Builder::toString(void) | ||
{ | ||
char out[33]; | ||
getChars(out); | ||
return String(out); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.