SHA1 HMAC байтовый массив с Arduino - PullRequest
3 голосов
/ 07 января 2012

Как я могу HMAC байтовый массив на Arduino?Я нашел эту библиотеку для SHA1 HMAC, но, похоже, она используется только для строк.

Я передал ее байты в байтовом массиве с нулевым символом в конце.Это дает мне правильный результат.Но не работает так хорошо для байтовых массивов, которые содержат нули!

uint8_t hmacKey1[]={   0x48, 0x65, 0x6c, 0x6c, 0x6f, 0x21, 0xde, 0xad, 0xbe, 0xef };
uint8_t time[]={   0xb2, 0x00 };

Sha1.initHmac(hmacKey1, 10);
Sha1.print((char*)time);

Либо мне нужно найти другую другую библиотеку ( crypto-arduino-library выглядит многообещающе, но невключите любые примеры того, что я делаю), или взломайте библиотеку Cathedrow, чтобы сделать то, что мне нужно.

Кто-нибудь знает другой способ?

Ответы [ 2 ]

3 голосов
/ 07 января 2012

Добавление моего собственного метода, похоже, помогло:

void Sha1Class::writebytes(const uint8_t* data, int length) {
 for (int i=0; i<length; i++)
 {
   write(data[i]);
 }
}
1 голос
/ 09 ноября 2015

Если вы не хотите изменять sha1.cpp, вы можете просто зациклить и напечатать каждый байт, хитрость заключается в использовании Sha1.print((char) basestring[i]);, например:

#include <avr/pgmspace.h>
#include <sha1.h>

char key[] = "testKey";
uint8_t basestring[] = { 0x74, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67 }; // testing

void printHash(uint8_t* hash) {  
  for (int i=0; i<20; i++) {
    Serial.print("0123456789abcdef"[hash[i]>>4]);
    Serial.print("0123456789abcdef"[hash[i]&0xf]);
  }
  Serial.println();
}

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

  Serial.print("Input:              ");
  for (int i=0; i<sizeof(basestring); i++) {
    Serial.print((char) basestring[i]);
  }
  Serial.println();

  Serial.print("Key:                ");
  Serial.println(key);

  Serial.print("Hmac-sha1 (hex):    ");
  Sha1.initHmac((uint8_t*)key, strlen(key));

  for (int i=0; i<sizeof(basestring); i++) {
    Sha1.print((char) basestring[i]);
  }

  uint8_t *hash;
  hash = Sha1.resultHmac();
  printHash(hash);

}

void loop() { }

выход

Input:              testing
Key:                testKey
Hmac-sha1 (hex):    60d41271d43b875b791e2d54c34bf3f018a29763
...