#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; 
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK