#include "mbedtls/md.h"
char charBuff[100];
void setup()
{
Serial.begin(115200);
char *payload = "Hello SHA 256 from ESP32learning";
//strcpy(test,__DATE__);
//strcat(test,__TIME__);
Serial.println();
Serial.print("Compiletime:\t");
Serial.println(compileTime(true));
byte shaResult[32];
sha256(compileTime(true),shaResult);
Serial.println("Hash: ");
for(int i= 0; i< sizeof(shaResult); i++){char str[3];
sprintf(str, "%02x", (int)shaResult[i]);
Serial.print(str);
}
Serial.println();
for(int i= 0; i< sizeof(shaResult); i++){
char str[5];
uint16_t sha16 = (int)combine(shaResult[i],shaResult[i+1]);
sprintf(str, "%04x", sha16);
Serial.print(str);Serial.print('\t');
Serial.println(sha16);
i++;
}
}
void loop()
{
}
void sha256(const char * inputString, byte * outputHash){
mbedtls_md_context_t context;
mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256;
const size_t payloadLength = strlen(inputString);
mbedtls_md_init(&context);
mbedtls_md_setup(&context, mbedtls_md_info_from_type(md_type), 0);
mbedtls_md_starts(&context);
mbedtls_md_update(&context, (const unsigned char *) inputString, payloadLength);
mbedtls_md_finish(&context, outputHash);
mbedtls_md_free(&context);
}
uint16_t combine(uint8_t msb, uint8_t lsb){ return ((msb << 8 ) | (lsb & 0xff));}
const char * compileTime(bool withSec) { //const char * char const *date, char *buffOut
char buff[10];
charBuff[0] = '\0';
int month, day, year, hh, mm, ss;
static const char month_names[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
sscanf(__DATE__, "%s %d %d", buff, &day, &year);
month = (strstr(month_names, buff)-month_names)/3+1;
sprintf(buff, "%d%02d%02d", year, month, day);
strncpy(charBuff,&buff[2],strlen(buff)-2);
charBuff[strlen(buff)-2] = '\0';
buff[0] = '\0';
sscanf(__TIME__, "%d:%d:%d", &hh, &mm, &ss);
sprintf(buff, "%02d%02d%02d", hh, mm, ss);
strcat(charBuff,"-");
if(withSec){strcat(charBuff,buff);}
else{strncat(charBuff,buff,strlen(buff)-2);}
//
return charBuff;
}