Hash wert vom Array Problem

Gast #5839432
Lesenswert?

Guten morgen,
ich möchte gerne von einem Bereich im Flash den HASH-Wert (SHA1) 
berechnen.
Dazu habe ich bei Github https://github.com/clibs/sha1 gefunden.
Am wichtigsten sind ja nur die Funktionen
1
  SHA1Init(&ctx);
2
  for (ii=0; ii<len; ii+=1)
3
      SHA1Update(&ctx, (const unsigned char*)string + ii, 1);
4
  SHA1Final((unsigned char *)result, &ctx);
5
  result[20] = '\0';

Jetzt habe ich im Flash aber keine String-werte stehen, sondern normale 
uint8.
Im Beispiel ist der string mit
1
char const string[] = "abc";
angegeben.
Ich weiß aber leider nicht, wie ich das jetzt umschreiben muss, um einen 
normalen array zu benutzen.

hatte
1
const uint8_t values[] = {0x01, 0x02, 0x03, 0x00}
 bekomme ich die Meldung
Error message from debugger back end:
Cannot access memory at address 0x1

Das ganze mache ich in C in Eclipse.

Hat jemand einen rat, was ich anders machen muss? Wenn das Funktioniert, 
wäre mein nächster Schritt den array values wegzu machen und direkt 
werte vom FLASH zu lesen.
Gast #5840705
Lesenswert?

c0s schrieb:
> Versuchs mal mit
> SHA1Update(&ctx, (const unsigned char*)&(values[ii]), 1);

Ist identisch zum Originalen

Frank schrieb:
> SHA1Update(&ctx, (const unsigned char*)string + ii, 1);

Wobei ich letzteres schöner finde. Warum eigentlich nicht einfach
1
SHA1Update(&ctx, string, len);

uint8_t ist doch wahrscheinlich eh identisch zu unsigned char.
Gast #5840715
Lesenswert?

Dr. Sommer schrieb:
> c0s schrieb:
>> Versuchs mal mit
>> SHA1Update(&ctx, (const unsigned char*)&(values[ii]), 1);
>
> Ist identisch zum Originalen

Natürlich ist es das. Die Frage war ja wie man das auf uint8_t 
umschreibt, damit es noch das gleiche tut. Sein erster Ansatz dazu war 
ja nur fast richtig, daher die korrigierte Version von mir.
Gast #5840733
Lesenswert?

Frank schrieb:
> const uint8_t values[] = {0x01, 0x02, 0x03, 0x00}

Frank schrieb:
> Diesen habe ich geändert in
> SHA1Update(&ctx, (const unsigned char*)values[ii], 1);

Frank schrieb:
> Error message from debugger back end:
> Cannot access memory at address 0x1

Falsch daran war, das er versucht hat den Eintrag an ii-ter Stelle aus 
dem values Array als Pointer an die Funktion übergeben hat.
(const unsigned char*)values[ii] entspricht (const unsigned 
char*)(values[ii]), weshalb erst der Eintrag an ii-ter Stelle 
dereferenziert wird und das Ergebnis gecastet. Nimmt man als Beispiel 
mal an das ii = 0 ist, steht bei der Ausführung sozusagen im Code
SHA1Update(&ctx, (const unsigned char*)0x01, 1);
Was dann zur geposteten Fehlermeldung führt.

PS.: Ich gehe davon aus das die SHA1Update Funktion versucht auf den 
übergebenen Speicher zuzugreifen und damit das zweite Argument zu 
dereferenzieren.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren