Herzlich Willkommen!

Diese CD-ROM ist eine Beilage zur 2. Auflage des Buches

                    "Kryptographie in C und C++"

von Michael Welschenbach, erschienen 2001 im Springer-Verlag.

Die CD-ROM enthaelt Funktionen und Programme des Buches. Die Programme
wurden fuer Plattformen mit C/C++-Entwicklungssystemen entwickelt und getestet,
die dem ANSI/ISO C- bzw. C++-Standard entsprechen.

Die in den folgenden Verzeichnissen enthaltenen Make- und Batch-Dateien sind
fuer den GNU C/C++-Compiler gcc ausgelegt. Dieser ist Bestandteil der meisten
Linux-Distributionen, und es sind Portierungen fuer Windows und OS/2 erhaeltlich
(Bezugsquelle siehe unten). Die Make- und Batchdateien koennen leicht
an andere Entwicklungssysteme angepasst werden.

Gegenueber der ersten Auflage wurden die Programme an einigen Stellen ueber-
arbeitet und es waren vereinzelte Fehler zu korrigieren, die jedoch keine
wesentlichen Funktionen betrafen. Neu hinzugekommen sind einige Testfunktionen
in C++ fuer die Klasse LINT. Sie sind als Vorschlaege fuer die in Kapitel 17
erwaehnten Tests gedacht. Ebenfalls neu sind die Hashfunktionen in ripemd.c
und die zugehoerigen Tests in testripe.c.

Das neue Verzeichnis flint/lib enthaelt Bibliotheken der Assembler-Module fuer
verschiedene Entwicklungsumgebungen unter Windows, OS/2 und Linux. 
In flint/lib/dll ist eine DLL mit den Funktionen von flint.c zur Verwendung 
mit MS Visual C/C++ enthalten.

Zur Installation wird empfohlen, die Verzeichnisse der CD-ROM auf eine 
Festplatte zu kopieren. Einige Textdateien auf der CD-ROM haben die unter 
UNIX ueblichen Zeilenenden (LF). Dies kann bei Betriebssystemen, die andere
Konventionen fuer die Zeilenenden benutzen, sowie bei einigen Editoren zu 
Problemen fuehren. Eine Loesung kann sein, die entsprechenden Textdateien 
zunaechst mit "zip" zu komprimieren und anschliessend mit "unzip -a" zu 
dekomprimieren, wobei automatisch die fuer das entsprechende Betriebssystem 
ueblichen Zeilenenden erzeugt werden sollten.

Die CD-ROM enthaelt die folgenden Verzeichnisse und Module:

Verzeichnis Module       Kurzbeschreibung
----------- ------       ----------------
flint/src:
            flint.c      C-Funktionen fuer Arithmetik und Zahlentheorie
            flint.h      Header-Datei zu flint.c
            kmul.c       Karatsuba-Multiplikation
            kmul.h       Header-Datei zu kmul.c
            _assert.h    Header-Datei zur Neutralisierung der Assert-Makros
            ripemd.c     Implementierung der Hash-Funktion RIPEMD160
            ripemd.h     Header-Datei zu ripemd.c
            flintpp.cpp  Implementierung der Arithmetik-Klasse LINT
            flintpp.h    Header-Datei zu flintpp.cpp

flint/src/asm:
            mult.asm     Multiplikationsfunktion mult() in 80x86-Assembler
            umul.asm     Multiplikationsfunktion umul() in 80x86-Assembler
            sqr.asm      Quadrierungsfunktion sqr() in 80x86-Assembler
            div.asm      Divisionsfunktion div_l() in 80x86-Assembler

flint/lib:
            flinta.lib   Library mit dem Objektcode der Assembler-Funktionen
                         im OMF-Format zur Verwendung unter DOS, Windows, OS/2
            flintavc.lib Library mit den Assembler-Funktionen
                         im COFF-Format zur Verwendung z. B. mit lcc-win32 und
                         Microsoft Visual C/C++
            flinta.a     Archiv der Assembler-Funktionen zur Verwendung
                         mit emx/gcc unter OS/2 und Windows (9x, NT)
            libflint.a   Archiv der Assembler-Funktionen zur Verwendung
                         mit gcc unter LINUX.

flint/lib/dll:
            flint.def    Datei mit FLINT/C-Symbolen zum Export aus
                         einer Dynamic Link Library (DLL)
            flint.dll    DLL mit den C-Funktionen und Daten des FLINT/C-
                         Pakets (erstellt mit Visual C/C++ V. 6.0)
            flint.lib    COFF-Import Library fuer flint.dll
            makedll.bat  Batch-Datei zur Erzeugung von flint.dll und flint.lib
                         unter Visual C/C++
            dllmain.c    Initialisierungsfunktion fuer flint.dll

flint/rsa:
            rsakey.cpp   Implementierung der RSA-Klassen rsakey und rsapub
            rsakey.h     Include-Datei zu rsakey.cpp
            rsademo.cpp  Demoanwendung der RSA-Klassen
            makefile     Make-Datei zu rsademo fuer make und nmake
            makefile.asm Make-Datei zu rsademo mit Assembler-Unterstuetzung
                         fuer make und nmake

flint/test:
            testrand.c   Test des Pseudo-Zufallszahlengenerators usrand64_l
            testbbs.c    Test des Pseudo-Zufallszahlengenerators usrandBBS_l
            testbas.c    Tests der Konvertierungs- und Ein-/Ausgabefuntkionen
            testreg.c    Tests der Registerverwaltung
            testadd.c    Tests der Additionsfunktionen
            testsub.c    Tests der Subtraktionsfunktionen
            testmul.c    Tests der Multiplikationsfunktionen
            testkar.c    Tests der Karatsuba-Multiplikation
            testsqr.c    Tests der Quadrierungsfunktionen
            testdiv.c    Tests der Funktionen zur Division mit Rest
            testmadd.c   Tests der modularen Addition
            testmsub.c   Tests der modularen Subtraktion
            testmmul.c   Tests der modularen Multiplikation
            testmsqr.c   Tests der modularen Quadrierung
            testgcd.c    Tests der ggT-Funktionen
            testmexp.c   Tests der Funktionen zur modularen Potenzierung
            testset.c    Tests der Funktionen zur Bit-Manipulation
            testshft.c   Tests der Schiebeoperationen
            testiroo.c   Tests der Berechnung ganzzahliger Wurzeln
            testbool.c   Tests der Funktionen and_l, or_l, xor_l
            testripe.c   Tests der RIPEMD160-Funktionen
            testcnst.cpp Tests der Konstruktoren der Klasse LINT
            testari.cpp  Tests der LINT-Arithmetik-Funktionen
            testxgcd.cpp Tests des Erweiterten Euklidischen Algorithmus
            testchin.cpp Tests der LINT-Funktion chinrest
            testroot.cpp Tests der LINT-Funktionen isprime, jacobi und root
            testprrt.cpp Tests der LINT-Funktion primroot

            makefile     Make-Datei zum Ablauf der Testsuite mit make
                         unter Unix und Linux
            makefile.asm Make-Datei zum Ablauf der Testsuite mit make
                         unter Unix und Linux mit Assembler-Unterstuetzung
            testvc.bat   Batch-Datei zum Ablauf der Testsuite mit Microsoft 
                         Visual C/C++ unter Windows
            testvca.bat  Batch-Datei zum Ablauf der Testsuite mit Microsoft 
                         Visual C/C++ unter Windows mit Assembler-Unterstuetzung
            testdll.bat  Batch-Datei zum Ablauf der Testsuite mit Microsoft 
                         Visual C/C++ unter Windows, getestet wird die Flint-DLL
            testgcc.bat  Batch-Datei zum Ablauf der Testsuite mit GNU-Compiler
                         gcc unter Windows
            testgcca.bat Batch-Datei zum Ablauf der Testsuite mit GNU-Compiler
                         gcc unter Windows mit Assembler-Unterstuetzung
            testgcc.cmd  Batch-Datei zum Ablauf der Testsuite mit dem GNU-
                         Compiler gcc unter OS/2
            testgcca.cmd Batch-Datei zum Ablauf der Testsuite mit dem GNU-
                         Compiler gcc unter OS/2 mit Assembler-Unterstuetzung

            test1.bin,
            test2.bin,
            test3.bin    Binaere Eingabedateien fuer testripe.c

--------------------------------------------------------------------------------

Herzlichen Dank moechte ich an Vincent Rijmen, Antoon Bosselaers, Paulo Barreto
und Brian Gladman fuer die Genehmigung zur Veroeffentlichung ihrer Rijndael-
Implementierungen auf dieser CD-ROM richten:

rijndael/c_ref:          C-Referenzimplementierung von Vincent Rijmen und
                         Paulo Barreto

rijndael/c_opt:          Optimierte C-Implementierung von Vincent Rijmen, 
                         Antoon Bosselaers und Paulo Barreto

rijndael/c_cpp:          Optimierte C/C++-Implementierung von Brian Gladman 

===============================================================================

Fuer alle Programme im Verzeichniss flint und dessen Unterverzeichnissen gilt:

Copyright (C) 1998-2001 by Michael Welschenbach
Copyright (C) 1998-2001 by Springer-Verlag, Berlin, Heidelberg

Die Software darf fuer nichtkommerzielle Zwecke frei verwendet und
veraendert werden, solange die folgenden Bedingungen anerkannt werden:

(1) Alle Aenderungen muessen als solche kenntlich gemacht werden, so dass
    nicht der Eindruck erweckt wird, es handle sich um die Original-
    Software.

(2) Die Copyright-Hinweise duerfen weder entfernt noch veraendert werden.

(3) Der folgende HAFTUNGSAUSSCHLUSS wird ohne jede Einschraenkung akzeptiert.

-------------------------------------------------------------------------------

Hinsichtlich des Copyright und der Verwendung der Programme unter dem
Verzeichnis rijndael gelten jeweils die Aussagen der Autoren im Programmcode.
Desweiteren gilt der folgende HAFTUNGSAUSSCHLUSS.

-------------------------------------------------------------------------------

HAFTUNGSAUSSCHLUSS:

Weder der Verlag noch die Autoren der Software uebernehmen irgendeine Haftung
fuer eventuelle Schaeden, die aus der Verwendung oder aus der 
Nichtverwendbarkeit der Software dieser CD-ROM, gleich fuer welchen Zweck,
entstehen sollten, selbst dann nicht, wenn diese Schaeden durch Fehler
verursacht wurden, die in der Software enthalten sein sollten.             


Zur Einfuhr, Ausfuhr oder Verwendung der in der Software dieser CD-ROM
enthaltenen kryptographischen Funktionen in andere Laender bzw. aus bzw. in
anderen Laendern sind unbedingt die jeweils in diesen Laendern
geltenden diesbezueglichen Bestimmungen zu beachten und zu befolgen. In
Zweifelsfaellen sollte der Rat eines juristischen Experten eingeholt werden.

Weder der Verlag noch der Autor uebernehmen irgendeine Haftung fuer Folgen 
oder Schaeden, die aus der Missachtung gesetzlicher Bestimmungen durch
Dritte im Zusammenhang mit der auf der CD-ROM gespeicherten Software
entstehen sollten.

===============================================================================

Die CYGWIN-Portierung der GNU-Entwicklungswerkzeuge fuer Windows 9x/ME/NT/2000
einschliesslich des Compilers gcc ist erhaeltlich unter 
  
  http://www.cygwin.com

Eine Bezugsquelle fuer den GNU/EMX-Compiler gcc fuer OS/2 und DOS
in der Portierung von Eberhard Mattes ist

  http://www.leo.org/pub/comp/os/os2/leo/gnu/emx+gcc

