2012-01-07 3 views
3

HMAC는 Arduino에서 바이트 배열을 어떻게 만들 수 있습니까? SHA1 HMAC에 대해 this library을 찾았지만 문자열에만 사용 된 것으로 보입니다.SHA1 HMAC Arduino가있는 바이트 배열

null로 끝나는 바이트 배열로 바이트를 전달했습니다. 이것은 저에게 정확한 결과를줍니다. 하지만 0을 포함하는 바이트 배열에 대해서는 그렇게 잘 작동하지 않습니다!

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 라이브러리를 해킹 할 필요가있다.

다른 사람이 알고 있습니까?

+0

I IRC 기본 클래스'Print'는 그러한 메소드를 제공합니다. 그저 루프를 사용하고'Print :: write'를 사용합니다. – leppie

+0

@leppie 예, 루프가 저를 위해 트릭을했습니다. – russau

+0

다행입니다. Havent는 연령대에서 Arduino를 코딩했습니다. – leppie

답변

3

내 자신의 방법을 추가하면 트릭을 할 것으로 보인다 : 방금 루프 수 sha1.cpp을 변경하고 각각의 단일 바이트를 인쇄하지 않으려면

void Sha1Class::writebytes(const uint8_t* data, int length) { 
for (int i=0; i<length; i++) 
{ 
    write(data[i]); 
} 
} 
1

, 트릭 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("abcdef"[hash[i]>>4]); 
    Serial.print("abcdef"[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