Arduino SHA1 не работает корректно при чтении последовательного монитора, когда ввод имеет окончание 0 символов

#arduino #sha

Вопрос:

Я пытаюсь создать небольшой блокчейн, в котором блоки могут быть добыты с помощью Arduinos в рамках моего основного проекта, и я застрял с этой проблемой в течение последних 15 часов.

Я реализовал простую цепочку блоков в python, и она отлично работает во время майнинга и после того , как некоторые блоки будут добыты, если предыдущий хэш имеет конечный символ as 0 , то я получаю неверный SHA-1 вывод.

В моем блокчейне доказательство работы будет проверять, есть ли один, начинающийся 0 в хэше, или нет. И этот хэш будет рассчитан с использованием previous_hash объединенного с a nonce .

Вот мой код:

 #include "sha1.h"

void setup(){
  Serial.begin(115200);
}

void loop() {
  if(Serial.available() > 0){
    String s = Serial.readStringUntil(',');
    Serial.print("Input: ");
    Serial.println(s);
    compute_hash(s);
    
    //read out the extra bytes
    while(Serial.available())
      Serial.read();
  }
}

//computes the has until it has found a hash that is starting with a '0' character
void compute_hash(String s){

  char *digitArray = "0123456789abcdef";

  int nonce = 0;
  char buffer[40];
  //hash the string until the starting two characters are equal to zero
  //every time we do not find the required hash, we will add a nonce to it by incrementing it
  while(buffer[0] != '0'){
    String h=s;
    uint8_t *hash;

    //add nonce to the string
    h.concat(nonce);
    Serial.print("concated string: ");
    Serial.println(h);
    Sha1.init();
    Sha1.print(h);
    hash = Sha1.result();

    for(int i=0; i<40; i =2){
      buffer[i] = digitArray[(hash[i/2] amp; 0xF0) >> 4];
      buffer[i 1] = digitArray[(hash[i/2] amp; 0x0F)];
    }
    nonce  = 1;
  }

  for(int i=0; i<40; i  ){
    Serial.print(buffer[i]);
  }
  Serial.print(",");
  Serial.println(nonce);
}
 

Я использую эти https://github.com/Arduino-IoT/libraries/tree/master/Cryptosuite включить файлы для sha1.h

Я получаю неправильный хэш для этого ввода 059e615d5e041f66d3f32e7788dac69271d8cfd0 , для этого ввода вывод должен быть 011fa5182d3dc2f2051730430f89a9ef9e98fe5f,27 , 27 где nonce начинается хэш 0 , но то, что я получаю в своем выводе 08c6d46a863cd6256faac014760ccd3fdd1ba72,0 , неверно по сравнению с фактическим выводом.

Любая помощь будет признательна. Спасибо!