Zum Inhalt

byte_syscall_test.tc

byte_syscall_test.tc — byte[] als Syscall-Argument prüfen (TinyC 1.6.57+).

Source on GitHub

// byte_syscall_test.tc — byte[] als Syscall-Argument prüfen (TinyC 1.6.57+).
// Beweist: byte[] funktioniert bei den byte-orientierten Syscalls und liefert
// dasselbe wie die bekannten Sollwerte. Läuft OHNE Hardware (Krypto/Hex),
// also direkt am C3 testbar. Jede Zeile trägt ihr erwartetes Ergebnis.
//
// Hinweis zum Vergleich: ein byte[] und ein char[] lassen sich NICHT über
// dieselbe Hilfsfunktion vergleichen — ein `char[]`-Parameter liest ein
// übergebenes byte[] als int32 (jedes 4. Byte). Deshalb wird jedes Ergebnis
// über bin2hex in einen Text verwandelt und per strcmp gegen den Sollwert
// geprüft.

byte  gbin[64];
byte  gdig[32];
char  hexout[80];

int main() {
    // ── hex2bin: Hex-Literal -> Rohbytes in ein byte[] ──
    int n = hex2bin("48656c6c6f21", 12, gbin);        // "Hello!"
    addLog("hex2bin -> byte[]: n=%d (erwartet 6), gbin[0]=%d gbin[5]=%d (erwartet 72 33)",
           n, gbin[0], gbin[5]);

    // ── bin2hex zurück: byte[]-Quelle -> char[]-Hextext ──
    bin2hex(gbin, 6, hexout);
    addLog("bin2hex(byte[]) = '%s'  (erwartet 48656c6c6f21)  match=%d",
           hexout, (strcmp(hexout, "48656c6c6f21") == 0));

    // ── sha256 aus einem byte[] gegen den bekannten Vektor ──
    gbin[0] = 97; gbin[1] = 98; gbin[2] = 99;         // "abc"
    sha256(gbin, 3, gdig);
    bin2hex(gdig, 32, hexout);
    addLog("sha256(\"abc\") aus byte[] = %s", hexout);
    addLog("  match=%d (erwartet 1)",
           (strcmp(hexout, "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad") == 0));

    // ── aesEcb: Schlüssel+Daten als byte[], Roundtrip encrypt/decrypt ──
    byte key[16];
    byte blk[16];
    int i = 0;
    while (i < 16) { key[i] = i; blk[i] = 100 + i; i = i + 1; }
    int klar0 = blk[0];
    aesEcb(key, blk, 1);           // verschlüsseln (in-place)
    int enc0 = blk[0];
    aesEcb(key, blk, 0);          // entschlüsseln zurück
    addLog("aesEcb byte[] roundtrip: klar=%d enc=%d zurueck=%d (klar==zurueck: %d)",
           klar0, enc0, blk[0], (blk[0] == klar0));

    addLog("byte-Syscall-Test fertig.");
    return 0;
}