On Sat, Nov 18, 2000 at 12:04:39PM +0100, Reinhard Foerster wrote:
Aha. Jetz hast du mich verstanden. Ich will mal ein Beispiel mache, um den Sinn zu zeigen. Wir, die Firma "HardcoreSecurity AG" kurz "HCSAG" wollen ein Mailprogramm schreiben (natuerlich grafisch :) und Kryptokrempel einbauen. Wir wollen dem Nutzer freistellen, einen aus vielen symmetrischen Blockchiffren selbst auszuwählen.
Diesen Kryptoteil liefern wir gruppiert, als mehrere s.objects (also in mehreren .so-Files) aus. Damit müssen wir je nach Rechtslage im Land des Käufers nur ein paar .so-Files mehr oder weniger für die Kryptoalgos in die Kist mitliefern und nicht jedesmal das Programm neu linken. Auf der Festplatte des Nutzers sehen die dann z.B. so aus:
/opt/supermail/bin/supermail /opt/supermail/lib/symalgos/amistd.so /opt/supermail/lib/symalgos/made_by_hcsag.so /opt/supermail/lib/symalgos/other.so
In jede lib kommt eine Funktion namens char* GetSymAlgos() die alle symmetrischen Verfahren dieser Lib sals Kurznamen auflistet. Sie liefert: bei amistd.so "DES,3DES,AES" bei made_by_hcsag.so "DUALROT13,DONOTHING,XOR0,XOR1,REVERS) bei other.so: "IDEA,BLOWFISH,TWOFISH"
Fuer jeden Algo XXX *müssen* in der jeweiligen Lib noch einige Funktioen drin sein z.B. char* Crypt_XXX_GetDescription(char*) int Crypt_XXX_GetBlockSize(); int Crypt_XXX_DoCrypt(void *block, int blocksize, void* key, ...) int Crypt_XXX_DoDecrypt(void *block, int blocksize, void* key, ...) ...
Nun kann das E-Mail-Programm per opendir()+readdir() nachschauen, welche Kryptolibs installiert sind, und anhand dieser Infos eine tolle SelectBox aufwerfen in der sich der Nutzer einen der 9 Algos raussuchen kann. (Wir sorgen natuerlich dafür, dass die Algos aus made_by_hcsag.so ganz oben in der Liste stehen.)
Wie es dann weitergeht sollte klar sein. Das kann man nur mit sogenannten s.objects machen nicht mir s.libs.
Geht auch, ohne daß man die Namen der Crypto-Funktionen kennt.
Voraussetzung: a) jeder Krypto-Algorithmus hat eine eigene Bibliothek. b) jede Bibliothek hat zusätzlich noch die Funktion getName(). c) alle Bibliotheken haben bestimmte Funktionen (die, die Reinhard genannt hat, aber ohne dieses komische "_XXX_" :))
Vorgehensweise: 1. Programm geht nach /opt/supermail/lib (häßlicher Pfad, seit wann benutzt du Suse?) 2. Programm liest alle Dateinamen 3. Program behandelt (alle auftretenden Fehler abfangend) alle Dateien als Krypto-Bibliotheken und ruft jeweils getName() auf. 4. Programm präsentiert Benutzer seine Auswahl. 5. Programm ruft die entsprechenden Funktionen in der ausgewählten Bibliothek auf.
Der einzige Nachteil, den ich in dieser Vorgehensweise sehe, ist die Tatsache, daß jeder Benutzer neue Krypto-Bibliotheken ohne großen Aufwand programmieren und einfügen kann, aber hier heißt ja keiner M$ :). Außerdem kann man das durch Hardkodieren der Bibliotheken im Hauptprogramm verhindern.
Reinhard
Ulf