'xrbeispiel.c' ist ein vollständiges Programmbeispiel zur Abfrage von Zufallszahlen über den Gerätetreiber xr232random.
/* xrbeispiel.c - 100 Zahlen von /dev/xr232random0 * Autor: Jochen Brenner * Erstellt: 26. Februar 2008 */ #include <stdio.h> // printf() #include <fcntl.h> // open() int main( int argc, char **argv ) { int fd, i; unsigned char ch; fd = open("/dev/xr232random0", O_RDONLY); if (fd < 0) { fprintf(stderr, "Problem.\n"); return -1; } for (i = 0; i < 100; i++) { read(fd, &ch, 1); printf("%4d", (int) ch); } close(fd); return 0; }
Übersetzen und Auführen von xrbeispiel.c:
linux~/ # make xrbeispiel linux~/ # ./xrbeispiel 166 ...
Es gibt einige wenige Befehle zum Steuern der Hardware via ioctl. Folgendes Beispiel 'xrbaudrate.c' demonstriert das Lesen und Setzen der Baudrate.
/* xrbaudrate.c - Baudrate setzen/lesen via /dev/xr232random0 * Autor: Jochen Brenner * Erstellt: 26. Februar 2008 */ #include <stdio.h> // printf(), perror() #include <fcntl.h> // open() #include <sys/ioctl.h> // for ioctl() #define XR232_SET_BAUDRATE 1 #define XR232_GET_BAUDRATE 2 int main( int argc, char **argv ) { int fd, res, baudrate; unsigned char ch; fd = open("/dev/xr232random0", O_RDONLY); if (fd < 0) { perror("Open"); return -1; } // Baudrate auf 57600 Baud setzen res = ioctl(fd, XR232_SET_BAUDRATE, 57600); if (res < 0) { perror("Set Baudrate"); close(fd); return -1; } // Eingestellte Baudrate ermitteln res = ioctl(fd, XR232_GET_BAUDRATE, &baudrate); if (res < 0) { perror("Get Baudrate"); close(fd); return -1; } printf("%d Baud.\n", baudrate); // Ausgabe: 57600 close(fd); return 0; }
Das Hilfsprogamm xrutil liegt dem Archiv bei. Mit diesem Utility können sämtliche Funktionen des xr232random Gerätetreibers gesetzt und erfragt werden, desweiteren können Zufallszahlen in verschiedenen Variationen (Binär, Dezimal, Hexadezimal, etc.) auf der Standardausgabe ausgegeben werden. Der parameterlose Aufruf './zutil' gibt eine Kurzübersicht, ein Aufruf von'./zutil -h' eine detaillierte Beschreibung der einzelnen Parameter.
xrstat liegt ebenfalls dem Archiv bei. Es ermittelt Zufallszahlen und druckt diese Live in Form eines Häufigkeitsdiagramms am Bildschirm aus. Für die Bildschirmausgabe wird das Paket 'ncurses' benötigt. Per Default werden jeweils 4 Werte aus dem gesamten Wertebereich 0..255 zu einem Balken zusammengefasst (interpoliert via Durchschnitt, Minimum oder Maximum). Sofern innerhalb der grafischen Umgebung das Konsolenfenster breiter gezogen werden kann, und evt. die Schriftart verkleinert wird, kann durch die M-Taste der 'Massstab' auf 1:1 gesetzt werden, so dass jeder Balken genau die entsprechenden Einheit interpretiert. Folgender Screenshot zeigt eine Beispielgrafik.
Beim Start des Gerätetreibers wird ein Proc-Pseudofile angelegt. Beim Auslesen durch 'cat /proc/xr232random' wird für jedes benutze Device eine sehr rudimentäre Statistik ausgegeben, nämlich die Anzahl der binär gezählten 0en und 1en. Der Ratio gibt einen Eindruck über das Verhältnis: läuft dieser gegen 1, kann von einer gleichverteilten Zufallsfolge ausgegangen werden. Weicht der Wert deutlich von 1 ab (also deutlich < 0.9 oder > 1.1), sind im Datenstrom eine zu hohe Anzahl 0en (wenn < 1) bzw. 1en (wenn > 1) enthalten; die Zahlenfolge ist dann sicher nicht gleichverteilt und die Ursachen (Schaltungsfehler, EM-Strahlung?) sollten geklärt werden. Wie bei Pseudo-Files üblich, kann dieses zu jederzeit ausgelesen werden.
Um beim Start des Apache-Webservers, oder auch bei der Initiierung jeder SSL-Verbindung die typischen Probleme beim Erzeugen echter Entropie zu vermeiden, kann nach erfolgter Installation des Gerätetreibers xr232random die Apache Konfiguration angepasst werden:
# Auszug httpd.conf ... SSLRandomFile file /dev/xr232random0 1024 SSLRandomFilePerConnection file /dev/xr232random0 1024 ...
Vgl. SSL-Konfiguration des Apache Webservers unter: apache-ssl.org