mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-17 22:23:10 +03:00
* Remove duplicated sha1 implementation (Fixes #6568) The Hash library had its own copy of a loop-unrolled sha1 implementation adding a large code footprint for no good reason, as there are several sha1 implementations already in tree (one in NONOS-SDK as well as one in bearssl). Switching to the bearssl one is straightforward and removes about 3kb of code size overhead. Also cleanup some obvious inefficiencies (copy by value, string summing, no reservation causing repeated reallocations) in the implementation. * Remove overload variants for sha1(...) that accept nonconst data The data is always remaining unmodified, so non-const overloads are confusing and redundant. Also optimize the hexify variant a bit more.
This commit is contained in:
committed by
Earle F. Philhower, III
parent
2a83adb0fd
commit
1d26b28225
@ -23,22 +23,18 @@
|
||||
*/
|
||||
|
||||
#include <Arduino.h>
|
||||
#include <bearssl/bearssl_hash.h>
|
||||
|
||||
#include "Hash.h"
|
||||
|
||||
extern "C" {
|
||||
#include "sha1/sha1.h"
|
||||
}
|
||||
|
||||
/**
|
||||
* create a sha1 hash from data
|
||||
* @param data uint8_t *
|
||||
* @param size uint32_t
|
||||
* @param hash uint8_t[20]
|
||||
*/
|
||||
void sha1(uint8_t * data, uint32_t size, uint8_t hash[20]) {
|
||||
|
||||
SHA1_CTX ctx;
|
||||
void sha1(const uint8_t* data, uint32_t size, uint8_t hash[20]) {
|
||||
br_sha1_context ctx;
|
||||
|
||||
#ifdef DEBUG_SHA1
|
||||
os_printf("DATA:");
|
||||
@ -53,9 +49,9 @@ void sha1(uint8_t * data, uint32_t size, uint8_t hash[20]) {
|
||||
os_printf("\n");
|
||||
#endif
|
||||
|
||||
SHA1Init(&ctx);
|
||||
SHA1Update(&ctx, data, size);
|
||||
SHA1Final(hash, &ctx);
|
||||
br_sha1_init(&ctx);
|
||||
br_sha1_update(&ctx, data, size);
|
||||
br_sha1_out(&ctx, hash);
|
||||
|
||||
#ifdef DEBUG_SHA1
|
||||
os_printf("SHA1:");
|
||||
@ -66,52 +62,35 @@ void sha1(uint8_t * data, uint32_t size, uint8_t hash[20]) {
|
||||
#endif
|
||||
}
|
||||
|
||||
void sha1(char * data, uint32_t size, uint8_t hash[20]) {
|
||||
sha1((uint8_t *) data, size, hash);
|
||||
void sha1(const char* data, uint32_t size, uint8_t hash[20]) {
|
||||
sha1((const uint8_t *) data, size, hash);
|
||||
}
|
||||
|
||||
void sha1(const uint8_t * data, uint32_t size, uint8_t hash[20]) {
|
||||
sha1((uint8_t *) data, size, hash);
|
||||
}
|
||||
|
||||
void sha1(const char * data, uint32_t size, uint8_t hash[20]) {
|
||||
sha1((uint8_t *) data, size, hash);
|
||||
}
|
||||
|
||||
void sha1(String data, uint8_t hash[20]) {
|
||||
void sha1(const String& data, uint8_t hash[20]) {
|
||||
sha1(data.c_str(), data.length(), hash);
|
||||
}
|
||||
|
||||
String sha1(uint8_t* data, uint32_t size) {
|
||||
String sha1(const uint8_t* data, uint32_t size) {
|
||||
uint8_t hash[20];
|
||||
String hashStr = "";
|
||||
String hashStr((const char*)nullptr);
|
||||
hashStr.reserve(20 * 2 + 1);
|
||||
|
||||
sha1(&data[0], size, &hash[0]);
|
||||
|
||||
for(uint16_t i = 0; i < 20; i++) {
|
||||
String hex = String(hash[i], HEX);
|
||||
if(hex.length() < 2) {
|
||||
hex = "0" + hex;
|
||||
}
|
||||
char hex[3];
|
||||
snprintf(hex, sizeof(hex), "%02x", hash[i]);
|
||||
hashStr += hex;
|
||||
}
|
||||
|
||||
return hashStr;
|
||||
}
|
||||
|
||||
String sha1(char* data, uint32_t size) {
|
||||
return sha1((uint8_t*) data, size);
|
||||
}
|
||||
|
||||
String sha1(const uint8_t* data, uint32_t size) {
|
||||
return sha1((uint8_t*) data, size);
|
||||
}
|
||||
|
||||
String sha1(const char* data, uint32_t size) {
|
||||
return sha1((uint8_t*) data, size);
|
||||
return sha1((const uint8_t*) data, size);
|
||||
}
|
||||
|
||||
String sha1(String data) {
|
||||
String sha1(const String& data) {
|
||||
return sha1(data.c_str(), data.length());
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user