Problema implementazione algoritmo sha1

Buonasera, ho un problema nell'implementazione dell'algoritmo sha1 in arduino. Si, so che esistono 300 classi e funzioni che lo implementano perfettamente ma è un tema d'anno e devo riscriverla da 0.

Sto seguendo questo documento che spiega passo passo cosa succede ai bit man mano che l'algoritmo procede. L'ho trovato molto completo ed interessante! Ho implementato tutto ma mi sono accorto che al punto 6.1 la lunghezza del messaggio deve essere espressa come un numero binario costituito da 64bit con un padding di zeri qualora fosse più piccolo (nell'esempio la lunghezza è 48 bit quindi per arrivare a 64 si sono aggiunti 58 zeri a sinistra). Io ho memorizzato la dimensione in un unsigned long long (8byte cioè 64bit) ma adesso arriva il problema: devo copiarlo alla fine dell'array da 64 byte (un array di unsigned char da 64 elementi). Come faccio? Ho provato con la memcpy ma l'unsigned long long non viene copiato alla fine!

Esempio:

Come dovrebbe essere: 00..58zeri..00000110000 [se l'array è di dimensione 48] Come viene se uso memcpy: 11000000000....58zeri...0000

il memcpy l'ho settato così (guardando il documento)

memcpy(&(buffer[56]), &size64, 8 )

dove buffer è l'array di unsigned char da 64, size64 è l'unsigned long long e 8 sono i byte da copiare.

Come posso fare?

Grazie!

Se lo spezzi un due ulong da 32bit e poi usi una union? Oppure 8 byte...

La vedo difficile gestire i 64bit su un micro a 8. :confused:

Il problema è che il numero può davvero essere a 64 bit. Ad esempio (dato che l'array è da 1 byte l'uno), già memorizzando una dimensione di 256 caratteri (plausibilissimo perchè implica una dimensione del testo di cui si vuole conoscere l'hash di 32 caratteri) da problemi (per 256 servono 2 byte).