Forum: PC-Programmierung Frage zu bearssl - crypto


von Fragensteller (Gast)


Lesenswert?

Guten morgen,
kennt jemand das Projekt bearssl https://bearssl.org/?
ich habe da eine frage zum code in der datei test_crypto.c genaugenommen 
zur funktion hextobin
1
/*
2
 * Decode an hexadecimal string. Returned value is the number of decoded
3
 * bytes.
4
 */
5
static size_t hextobin(unsigned char *dst, const char *src)
6
{
7
  size_t num;
8
  unsigned acc;
9
  int z;
10
11
  num = 0;
12
  z = 0;
13
  acc = 0;
14
  while (*src != 0) {
15
    int c = *src ++;
16
    if (c >= '0' && c <= '9') {
17
      c -= '0';
18
    } else if (c >= 'A' && c <= 'F') {
19
      c -= ('A' - 10);
20
    } else if (c >= 'a' && c <= 'f') {
21
      c -= ('a' - 10);
22
    } else {
23
      continue;
24
    }
25
    if (z) {
26
      *dst ++ = (acc << 4) + c;
27
      num ++;
28
    } else {
29
      acc = c;
30
    }
31
    z = !z;
32
  }
33
  return num;
34
}

Was genau macht/bewirkt diese Funktion? Es steht zwar drann 'decode an 
hexadecimal string', aber wie?
Im beispiel wird diese Funktion z.B. wie folgt aufgerufen
[c]
len = hextobin(t1, 
"45A3DC6A106BCD3BD0E48FB579643AA3FF801E5903E80AA9B43A695A8E7F454E93FA208 
B69995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3490F 
C157F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69CA77 
4841AEC45DFAE99CCF79893E7047FDE6CB00AA76D");
t1 ist ein char-array mit einer länge von 512.
das ergebnis von der Funktion ist:
len = 128
und t1 = 
45A3DC6A106BCD3BD0E48FB579643AA3FF801E593E8AA9B43A695A8E7F454E93FA208B69 
995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3490FC15 
7F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69CA77484 
1AEC45DFAE99CCF79893E747FDE6CB0AA76D

Es wurden nullen entfernt. Aber nicht alle und warum? Was bewirkt diese 
Funktion?


45A3DC6A106BCD3BD0E48FB579643AA3FF801E59"0"03E8"0"AA9B43A695A8E7F454E93F 
A208B69995FF7A6D5617C2FEB8E546375A664977A48931842AAE796B5A0D64393DCA35F3 
490FC157F5BD83B9D58C2F7926E6AE648A2BD96CAB8FCCD3D35BB11424AD47D973FF6D69 
CA774841AEC45DFAE99CCF79893E7"0"47FDE6CB0"0"AA76D

Oben in Gänsefüsschen, welche Nullen entfernt wurden

von Gerd B. (bertr2d2) Benutzerseite


Lesenswert?

Fehlen da führende Nullen bei der Hexausgabe ? Haste zur Ausgabe
1
printf("%X");
anstatt
1
printf("%02X");
verwendet ?

: Bearbeitet durch User
von Kristof (Gast)


Lesenswert?

Diese Funktion konvertiert ein byte-array, was als hex-kodiertes String 
angegeben wurde in ein Array von tatsächlichen Zahlen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.