From: schneier@chinet.chi.il.us (Bruce Schneier)
Subject: New Cryptography Book:  Request for Code/Editors
Organization: Chinet - Public Access UNIX
Date: Fri, 2 Oct 1992 02:02:39 GMT

People:

I am writing a cryptography book:  CRYPTOGRAPHY IN C: APPLICATIONS,
ALGORITHMS, AND SOURCE CODE.  The book will be published by John
Wiley & Sons next Autumn.  I have shelves of mathematical texts,
conference proceedings, graduate theses and monographs.  This book
will be different from all of them.  It will be a book written for
programmers, not mathematicians:  a lot of applications and
examples, and minimal number theory.

I am looking for two things from the people of this newsgroup: 
source code examples, and people willing to read and edit the
manuscript.

Source Code Examples.  I am looking for C source code (preferably
well-documented, but I'll take what I can get) for the following
algorithms:

Vigenare.
Playfair.
Enigma.  Has anyone recreated this in software?
DES.  I already have one DES, but I am looking for better/faster
     implementations.  I am also interested in DES variants:  GDES,
     DES with variable S-Boxes, etc.
Lucifer.  I remember this being on-line somewhere.
FEAL.  I have a paper copy of the reference implementation from
     NTT.  Has anyone typed it in and verified that it works.
LOKI.  Both the original and LOKI-91.
REDOC II.
Khufu and Khafre.  The Xerox patent has the listing of a C
     implementation of these algorithms.  Does anyone have them on-
     line?
Public-key anything.  I hope to get RSA's permission to publish
     RSAREF, but would like code for such things as a knapsack
     cryptosystem, Fiat-Shamir, El Gamal, Schnoor, elliptic-curve
     something, E-Sign, etc.
NIST's Digital Signature Standard.
Prime number generators:  Rabin-Miller, Solovay-Strassen, Lehmann,
     etc.
Factorization programs:  Pollard's Monte Carlo algorithm, the
     continued fraction algorithm, Pomerance's quadratic sieve,
     etc.
The Blum-Blum-Shub Pseudo-Random Number Generator, and the
     probabilistic encryption algorithm based on it.
Any zero-knowledge implementations of anything.
Any threshold scheme.
Anything else not on this list that would be a good idea to
     include.

I already have code for DES, SHA, IDEA, MD4, MD5, and Snefru.  I
will include much from PGP (possibly the whole thing if the various
lawyers think it is a good idea).

Editors:  I am also looking for people who are willing to read and
edit the manuscript in January.  I am interested in people who have
knowledge of cryptography, but also in people who are programmers
with an interest (my target audience).

I would appreciate the help of anyone who is interested.  This is
an exciting project, and I hope the results will be a source book
in the field.

Attached is the current incarnation of the table of contents. 
Actual table of contents will probably be different.

*****************************************************************
                       CRYPTOGRAPHY IN C:
            APPLICATIONS, ALGORITHMS, AND SOURCE CODE
                               by  Bruce Schneier   


                        Table of Contents

I. Introduction
     A. Terminology
II. Classical Cryptography
     A. Substitution Ciphers and Transposition Ciphers
     B. One-Time Pads
III. Cryptographic Protocols
     A. Symmetric Cryptosystems
     B. One-Way Functions
     C. Public-Key Cryptography
     D. One-Way Hash Functions
     E. Digital Signatures
     F. Key Exchange
     G. Proofs of Identity
     H. Secret Splitting
     I. Secret Sharing
     J. Undeniable Digital Signatures
     K. Fail-Stop Digital Signatures
     L. Bit Commitment
     M. Fair Coin Tosses
     N. Mental Poker
     O. Anonymous Key Distribution
     P. Zero-Knowledge Proofs
     Q. Blind Signatures
     R. Oblivious Transfer
     S. Simultaneous Contract Signing
     T. Digital Certified Mail
     U. Voting by Computer
     V. Secure Multiparty Computation
     W. Secure Circuit Evaluation
     X. Digital Cash
     Y. Anonymous Message Broadcast
     Z. Time Stamping Services
IV.  Cryptographic Techniques
     A. Random Number Generation
          1. Pseudo-Random Bits
          2. Cryptographically-Secure Pseudo-Random Bits
          3. Random Bits
          4. Generating Non-Uniform Distributions
     B. Conventional Cryptosystems
     C. Stream Ciphers
          1. Decimation Techniques
          2. Combining Techniques
          3. Output Feedback
          4. Counter Method
          5. Insertion Attack
          6. Cipher Feedback
     D. Block Ciphers
          1. Electronic Codebook Mode
          2. Block Replay
          3. Block Chaining Mode
          4. Cipher Block Chaining Mode
          5. Output Feedback Mode
          6. Cipher Feedback Mode
          7. Choosing a Cipher Mode
     E. Using Block Ciphers as Stream Ciphers
     F. Stream Ciphers vs Block Ciphers
     G. Key Management
          1. Generating Keys
          2. Transferring Keys
          3. Verifying Keys
          4. Storing Keys
          5. Lost Keys
          6. Lifetime of Keys
          7. Destroying Keys
          8. Sample Key Management System
     H. Encrypting Communications
     I. Encrypting Data for Storage
     J. Implementations of Encryption
          1. Hardware
          2. Software
     K. File Erasure
V. Cryptographic Algorithms
     A. Mathematical Background
          1. Information Theory
               a. Confusion and Diffusion
          2. Complexity Theory
               a. NP-Complete Problems
          3. Number Theory
               a. Prime Numbers
               b. Modular Arithmetic
               c. Modular Exponentiation and Discreet Logarithms
               d. Inverses Modulo a Number
               e. Chinese Remainder Theorem
               f. Computing in a Galois Field
     B. Block Algorithms
          1. Data Encryption Standard (DES)
          2. DES Variants
               a. Double DES
               b. Triple DES
               c. DES with Independent Keys
               d. DES with Alternate S-Boxes
               e. GDES
          3. Lucifer
          4. Madryga
          5. FEAL N
          6. REDOC II
          7. LOKI
          8. Khufu and Khafre
          9. RC2
          10. RC4
          11. Bassomatic
          12. IDEA
          13. Using One-Way Hash Functions 
     C. One-Way Hash Functions
          1. MD2
          2. MD4
          3. MD5
          4. Snefru 
          5. N-Hash
          6. Secure Hash Algorithm (SHA)
          7. Using Block Algorithms
               a.Davies-Meyer
               b.Preneel-Bosselaers-Govaerts-Vandewalle
               c.Quisquater-Girault
               d.LOKI Double-Block
               e.First IDEA
               f.Tandem DM
               g.Abreast DM
          8. Using Stream Algorithms
     D. Public-Key Algorithms
          1. Diffie-Hellman
          2. Knapsack Algorithms
          3. RSA
          4. Pohig-Hellman
          5. Rabin
          6. Fiat-Shamir
          7. ElGamal
          8. Schnoor
          9. Digital Signature Algorithm (DSA)
          10. ENSIGN
          11. McEliece
          12. Algorithms Based on the Discreet Log Program
          13. Algorithms Based on the Theory of Elliptical Curves
     E. Secret Sharing Algorithms
          1. LaGrange Interpolating Polynomial Scheme
          2. Vector Scheme
          3. Congruence Class Scheme
     F. Prime Number Generation
          1. Solovay-Srassen
          2. Rabin-Miller
          3. Lehmann
     G. Pseudo-Random Bitstream Generators
          1. Linear Feedback Shift Registers
          2. Linear Congruential Generators
          3. Cellular Automata
     H. Cryptographically-Secure Pseudo-Random Number Generators
          1. Using Stream Algorithms
          2. Using Block Algorithms
          3. Using One-Way Hash Functions
          4. Using RSA
          5. Blum Blum Shub
     I. Real Random Number Generators
          1. Measuring Keyboard Latency
          2. Using Random Noise
          3. Using Clock Oscillators
     J. Probabilistic Encryption
     K. Zero-Knowledge Proofs of Identity
     L. Quantum Cryptography
VI. Source Code Examples
VII. Afterward
VIII.  Glossary
IX. Bibliography and Further Reading

*****************************************************************************
* Bruce Schneier            2,000,000,000,000,000,000,000,000,002,000,000,000 
* Counterpane Systems       000,000,000,000,002,000,000,002,293 
* schneier@chinet.chi.il.us The largest prime number...alphabetically!
* (708) 524-9461            Two vigintillion, two undecillion, two trillion,
* 730 Fair Oaks Ave.        two thousand, two hundred and ninety three.
* Oak Park, IL  60302
*****************************************************************************
Xref: sparky sci.crypt:3480 alt.security:4464 alt.security.pgp:22