This is gnu-crypto.info, produced by makeinfo version 4.5 from
gnu-crypto.texi.

This manual is for the GNU Crypto library, version 2.0.1.

   Copyright (C) 2003 The Free Software Foundation, Inc.


   Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License".  

File: gnu-crypto.info,  Node: The ISignature Interface,  Next: The SignatureFactory Class,  Prev: Signatures,  Up: Signatures

The ISignature Interface
========================

SCENE MISSING
                     Figure 14: Signature class diagram
 All digital signature schemes
implement the `ISignature' interface, and support the following methods:

 - Variable: java.lang.String SIGNER_KEY
     A property name in the attributes map that is passed to instances
     being prepared for signing. The value mapped by this key must be a
     `java.security.PrivateKey' that is appropriate for the instance's
     algorithm (e.g. an instance of DSS would require a subclass of
     `java.security.interfaces.DSAPrivateKey').

 - Variable: java.lang.String VERIFIER_KEY
     A property name in the attributes map that is passed to instances
     being prepared for verifying a signature. The value mapped by this
     key must be a `java.security.PublicKey' that is appropriate for
     the instance's algorithm, just as is the case with the signing key.

 - Variable: java.lang.String SOURCE_OF_RANDOMNESS
     A property name in the attributes map that is passed to instances
     being prepared for use as either signers or verifiers. The value
     mapped must be an already-initialized instance of
     `gnu.crypto.prng.IRandom'.

 - Function: void setupSign (java.util.Map ATTRIBUTES) throws
          java.lang.IllegalArgumentException
     Initializes this instance for signing. The ATTRIBUTES parameter
     must be a `java.util.Map' that has, at least, a mapping between the
     `SIGNER_KEY' property and the appropriate private key.

 - Function: void setupVerify (java.util.Map ATTRIBUTES) throws
          java.lang.IllegalArgumentException
     Initializes this instance for verifying a signature. The
     ATTRIBUTES parameter must be a `java.util.Map' that has, at least,
     a mapping between the `VERIFIER_KEY' property and the appropriate
     public key.

 - Function: void update (byte B) throws java.lang.IllegalStateException
     Update either the signing or verifying operation with the next
     byte in the message. This method will throw a
     `java.lang.IllegalStateException' if this instance has not been
     initialized for either signing or verifying.

 - Function: void update (byte[] BUF, int OFF, int LEN) throws
          java.lang.IllegalStateException
     Update either the signing or verifying operation with the next LEN
     bytes of BUF, starting at OFFSET. This method will throw a
     `java.lang.IllegalStateException' if this instance has not been
     initialized for either signing or verifying.

 - Function: java.lang.Object sign () throws
          java.lang.IllegalStateException
     Finishes a signing operation and returns the final signature. This
     method will throw a `java.lang.IllegalStateException' if this
     instance has not been initialized for signing.

 - Function: boolean verify (java.lang.Object SIGNATURE) throws
          java.lang.IllegalStateException
     Finishes a verifying operation by checking if the argument, a
     native signature object, matches the expected signature. This
     methods returns `true' if the signature is valid, `false'
     otherwise. This method will throw a
     `java.lang.IllegalStateException' if this instance has not been
     initialized for verifying.

 - Function: java.lang.String name ()
     Returns the canonical name of this instance's signature algorithm.

 - Function: java.lang.Object clone ()
     Returns a copy of this signature object.


File: gnu-crypto.info,  Node: The SignatureFactory Class,  Next: The ISignatureCodec Interface,  Prev: The ISignature Interface,  Up: Signatures

The SignatureFactory Class
==========================

   Instances of `ISignature' can be retrieved with the class methods of
the `SignatureFactory' class:

 - Function: ISignature getInstance (java.lang.String NAME)
     Creates an instance of the signature scheme for NAME, or `null' if
     there is no such algorithm.

 - Function: java.util.Set getNames ()
     Returns a set of the names (`java.lang.String') of all available
     signature schemes.


File: gnu-crypto.info,  Node: The ISignatureCodec Interface,  Next: Signature Example,  Prev: The SignatureFactory Class,  Up: Signatures

The ISignatureCodec Interface
=============================

   The `ISignatureCodec' interface defines methods for externalizing
and de-externalizing native signature results, as would be returned by
the `ISignature.sign()' method, or passed to `ISignature.verify()'
method. The only format currently supported is the "RAW" codec, which
is specific to GNU Crypto.

   Each signature scheme implements its own raw codec. There is no
factory for codecs, but rather you should create instances of

   * `gnu.crypto.sig.dss.DSSSignatureRawCodec' if you are reading or
     writing DSS signatures, or

   * `gnu.crypto.sig.rsa.RSAPSSSignatureRawCodec' if you are reading or
     writing RSA-PSS signatures.

   Each of these classes has a zero-argument constructor, needs no
initialization, and defines these methods:

 - Function: java.lang.Object decodeSignature (byte[] ENCODED)
     Decodes a signature from the byte represention ENCODED, and
     returns the signature in the signature algorithm's native form.
     Implementations may throw an unchecked exception (such as
     `java.lang.IlligalArgumentException') if the argument is
     improperly formatted.

 - Function: byte [] encodeSignature (java.lang.Object SIGNATURE)
     Encodes a native signature to an external byte representation.
     Implementations may throw an unchecked exception (such as
     `java.lang.IlligalArgumentException') if the argument is not of
     the algorithm's native signature type.

 - Function: int getFormatID ()
     Returns the format identifier for this codec, such as `RAW_FORMAT'.

 - Variable: int RAW_FORMAT
     Format identifier for GNU's "raw" codec.


File: gnu-crypto.info,  Node: Signature Example,  Prev: The ISignatureCodec Interface,  Up: Signatures

Signature Example
=================

     ISignature dss = SignatureFactory.getInstance("DSS");
     Map attrib = new HashMap();
     attrib.put(ISignature.SIGNER_KEY, privateDsaKey);
     dss.setupSign(attrib);
     
     dss.update(message, 0, message.length);
     Object sig = dss.sign();
     
     ISignatureCodec codec = new DSSSignatureRawCodec();
     byte[] encoded = codec.encodeSignature(sig);
     
     Object sig2 = codec.decodeSignature(encoded);
     
     attrib.clear();
     attrib.put(ISignature.VERIFIER_KEY, publicDsaKey);
     dss.setupVerify(attrib);
     
     dss.update(message, 0, message.length);
     boolean valid = dss.verify(sig);

SCENE MISSING
                    Figure 15: Signature sequence diagram


File: gnu-crypto.info,  Node: Random Numbers,  Next: JCE Support,  Prev: Signatures,  Up: Top

Random Numbers
**************

* Menu:

* The IRandom Interface::       The standard PRNG interface.
* The PRNGFactory Class::       How to create an IRandom instance.
* ARCFour::                     Extra properties in the ARCFOUR PRNG.
* MDGenerator::                 Extra properties in the hash-based
                                PRNG.
* ICMGenerator::                Extra properties in the ICM PRNG.
* UMacGenerator::               Extra properties in the UMac PRNG.
* PRNG Example::                Programming example.

   The pseudo-random number generator (PRNG) classes of GNU Crypto are
used to generate streams of cryptographically secure pseudo-random
bytes.

   * ARCFOUR is an implementation of the ARCFOUR stream cipher's
     keystream generator. ARCFOUR is the name of a stream cipher that is
     believed to be compatible with RSA Data Security, Inc.'s RC4 stream
     cipher, and is a decendent of an algorithm that was posted
     anonymously to a mailing list in 1994.

   * ICM, or the Integer Counter Mode PRNG, is an algorithm that
     creates a PRNG around a block cipher. The default cipher used in
     this implementation is Rijndael, the AES. ICM is described in
     [McG01].

   * MD, or PRNGs based around a cryptographic hash function.

   * UMAC-KDF is a PRNG based on the UMAC key derivation function.

SCENE MISSING
                        Figure 16: PRNG class diagram


File: gnu-crypto.info,  Node: The IRandom Interface,  Next: The PRNGFactory Class,  Up: Random Numbers

The IRandom Interface
=====================

 - Function: void init (java.util.Map ATTRIBUTES)
     Initializes this PRNG, preparing it for use. Throws an
     `IllegalArgumentException' if the given attributes are not
     appropriate for this PRNG algorithm.

 - Function: byte nextByte () throws LimitReachedException
     Returns the next pseudo-random byte in this generator's sequence.
     Throws a `LimitReachedException' if this generator cannot produce
     any more bytes of any quality.

 - Function: void nextBytes (byte[] OUT, int OFF, int LEN) throws
          LimitReachedException
     Fills the buffer OUT with the next LEN bytes in this generator's
     sequence, storing the bytes beginning at OFF. Throws a
     `LimitReachedException' if this generator cannot produce any more
     bytes of any quality.

 - Function: java.lang.String name ()
     Returns the canonical name of this PRNG algorithm.

 - Function: java.lang.Object clone ()
     Returns a copy of this instance. The copy will be in the exact same
     state as this instance, and will be independent of this instance.


File: gnu-crypto.info,  Node: The PRNGFactory Class,  Next: ARCFour,  Prev: The IRandom Interface,  Up: Random Numbers

The PRNGFactory Class
=====================

 - Function: IRandom getInstance (java.lang.String NAME)
     Returns an instance of the named PRNG algorithm, or `null' if no
     such named algorithm exists.

 - Function: java.util.Set names ()
     Returns a `java.util.Set' of the names (`java.lang.String') of all
     available PRNG algorithms.


File: gnu-crypto.info,  Node: ARCFour,  Next: MDGenerator,  Prev: The PRNGFactory Class,  Up: Random Numbers

ARCFour
=======

   The ARCFour keystream is implemented in the class `ARCFour', which
defines the following additional constant:

 - Variable: java.lang.String ARCFOUR_KEY_MATERIAL
     A property name in the attributes map used to initialize instances
     of `ARCFour'. The value mapped must be a byte array of the secret
     key, which can be up to 256 bytes long.

   Also note that using the ARCFour PRNG as a stream cipher is as simple
as:

     IRandom arcfour; // initialized elsewhere.
     byte in, out;
     
     out = in ^ arcfour.next();


File: gnu-crypto.info,  Node: MDGenerator,  Next: ICMGenerator,  Prev: ARCFour,  Up: Random Numbers

MDGenerator
===========

   Generic message digest-based PRNGs are implemented via the
`MDGenerator' class, which defines the following additional constants:

 - Variable: java.lang.String MD_NAME
     A property name in the attributes map used to initialize instances
     of `MDGenerator'. The value mapped must be a `String' representing
     the name of the hash function to use, such as "MD5". If this
     attribute is omitted the secure hash algorithm, SHA-1, is used.

 - Variable: java.lang.String SEEED
     A property name in the attributes map used to initialize instances
     of `MDGenerator'. The value mapped must be a byte array carrying
     the seed, with which to seed the PRNG. This attribute is optional.


File: gnu-crypto.info,  Node: ICMGenerator,  Next: UMacGenerator,  Prev: MDGenerator,  Up: Random Numbers

ICMGenerator
============

   The ICM generator accepts a number of additional parameters, all
contained in the following constants of the `ICMGenerator' class. The
appropriate values, including the limits of the integral types, are
specific to the ICM generator algorithm.

 - Variable: java.lang.String BLOCK_INDEX_LENGTH
     A property name in the attributes map used to initialize instances
     of `ICMGenerator'. The value mapped must be a `java.lang.Integer'.

 - Variable: java.lang.String CIPHER
     A property name in the attributes map used to initialize instances
     of `ICMGenerator'. The value mapped must be a
     `gnu.crypto.cipher.IBlockCipher', and is the underlying cipher
     used in the algorithm.

 - Variable: java.lang.String OFFSET
     A property name in the attributes map used to initialize instances
     of `ICMGenerator'. The value mapped must be a
     `java.math.BigInteger' or a byte array of the same length of the
     underlying cipher's block size.

 - Variable: java.lang.String SEGMENT_INDEX
     A property name in the attributes map used to initialize instances
     of `ICMGenerator'. The value mapped must be a
     `java.math.BigInteger'.

 - Variable: java.lang.String SEGMENT_INDEX_LENGTH
     A property name in the attributes map used to initialize instances
     of `ICMGenerator'. The value mapped must be a `java.lang.Integer'.


File: gnu-crypto.info,  Node: UMacGenerator,  Next: PRNG Example,  Prev: ICMGenerator,  Up: Random Numbers

UMacGenerator
=============

   The UMac KDF generator accepts the following additional parameters,
which are contained in the `UMacGenerator' class.

 - Variable: java.lang.String CIPHER
     A property name in the attributes map used to initialize instances
     of `UMacGenerator'. The value mapped must be of type
     `gnu.crypto.cipher.IBlockCipher'.

 - Variable: java.lang.String INDEX
     A property name in the attributes map used to initialize instances
     of `UMacGenerator'. The value mapped must be of type
     `java.lang.Integer'.


File: gnu-crypto.info,  Node: PRNG Example,  Prev: UMacGenerator,  Up: Random Numbers

PRNG Example
============

     Map attrib = ...;
     IRandom rand = PRNGFactory.getInstance("MD");
     
     attrib.put(MDGenerator.MD_NAME, "MD5");
     attrib.put(MDGenerator.SEEED, seedBytes);
     
     random.init(attrib);
     
     for (int i = 0; i < bytes.length; i++)
        {
           in[i] ^= random.nextByte();
        }
     
     random.nextBytes(bytes, 0, bytes.length);


File: gnu-crypto.info,  Node: JCE Support,  Next: GNU Free Documentation License,  Prev: Random Numbers,  Up: Top

JCE Support
***********

   GNU Crypto provides a full JCE (Java Cryptography Environment)
provider for all its algorithms. This chapter breifly describes these
classes and how to use them.

* Menu:

* Installing the JCE Classes::         How to install the clean-room JCE.
* Installing the GNU Crypto Provider:: Using the GNU Crypto provider.
* List of Available Algorithms::       Algorithms available through the JCE.


File: gnu-crypto.info,  Node: Installing the JCE Classes,  Next: Installing the GNU Crypto Provider,  Prev: JCE Support,  Up: JCE Support

Installing the JCE Classes
==========================

   Java runtimes such as those based around Classpath, Kaffe, and JREs
from Sun and IBM up to version 1.4 do not include the JCE classes,
encompassed by the `javax.crypto' package and its subpackages.
Furthermore, many commercial Java 1.4 and later runtime environments do
not allow providers to be installed if they are not digitally signed by
an authority. The GNU Crypto developers do not agree with this practice
and are not seeking to have GNU Crypto's provider signed.

   To overcome this GNU Crypto includes a clean-room implementation of
the `javax.crypto' packages, which is a modified version of the
clean-room JCE distributed by the Legion of the Bouncy Castle
<http://bouncycastle.org/>. If building these classes is enabled at
compile-time, a Java archive file `javax-crypto.jar' will be built,
along with the appropriate shared native libraries if you are using
GCJ. Simply adding it to your system classpath should suffice, possibly
replacing or superceding the `jce.jar' file that came with your virtual
machine.

   The JCE included mirrors most of the features of the reference JCE,
except the `ExemptionMechanism' classes are omitted. U.S. export rules
as of January 2000 no longer apply to open source software that is
freely available on the Internet, so these classes have no practical
use in GNU Crypto.


File: gnu-crypto.info,  Node: Installing the GNU Crypto Provider,  Next: List of Available Algorithms,  Prev: Installing the JCE Classes,  Up: JCE Support

Installing the GNU Crypto Provider
==================================

   The GNU Crypto provider is implemented in the class
`gnu.crypto.jce.GnuCrypto', and is available by the name "GNU Crypto".
You can install this provider at run-time by including in your program
a statement such as:

     java.security.Security.addProvider(new gnu.crypto.jce.GnuCrypto());

   Or by putting the following in your security properties file,
usually located at `${JRE_HOME}/lib/security/${VM_NAME}.security':

     security.provider.N=gnu.crypto.jce.GnuCrypto

   Where `N' is the appropriate preference number. Doing this, and
asserting that the `gnu-crypto.jar' file is in your classpath, will
complete the installation of the provider.


File: gnu-crypto.info,  Node: List of Available Algorithms,  Prev: Installing the GNU Crypto Provider,  Up: JCE Support

List of Available Algorithms
============================

   The algorithms available through the GNU Crypto provider are,
grouped by type, with alternate names in parentheses:

   * Cipher: AES, ANUBIS, ARCFOUR (RC4), BLOWFISH, DES, KHAZAD,
     RIJNDAEL, SERPENT, SQUARE, TRIPLEDES, TWOFISH.

     Ciphers may, of course, be appended with any of the modes and
     paddings available in GNU Crypto, such as "AES/CBC/TBC".

   * KeyPairGenerator: DSS (DSA), RSA.

   * MAC: HMAC-MD2, HMAC-MD4, HMAC-MD5, HMAC-RIPEMD128
     (HMAC-RIPEMD-128), HMAC-RIPEMD160 (HMAC-RIPEMD-160), HMAC-SHA160
     (HMAC-SHA, HMAC-SHA1, HMAC-SHA-160, HMAC-SHS), HMAC-TIGER,
     HMAC-WHIRLPOOL, TMMH16, UHASH32, UMAC32.

   * MessageDigest: MD2, MD4, MD5, RIPEMD128 (RIPEMD-128), RIPEMD-160
     (RIPEMD-160), SHA-160 (SHA, SHA1, SHA-1, SHS), TIGER, WHIRLPOOL.

   * SecureRandom: ARCFOUR (RC4), ICM, MD2PRNG, MD4PRNG, MD5PRNG,
     RIPEMD128PRNG, RIPEMD160PRNG, SHA-160PRNG (SHAPRNG, SHA-1PRNG,
     SHA1PRNG), TIGERPRNG, WHIRLPOOLPRNG, UMAC-KDF.

   * Signature: DSS/RAW (SHA/DSA, SHA1/DSA, SHA-1/DSA, SHA-160/DSA,
     DSAwithSHA, DSAwithSHA1, DSAwithSHA160), RSA-PSS/RAW (RSA-PSS,
     RSAPSS).


File: gnu-crypto.info,  Node: GNU Free Documentation License,  Next: Copying GNU Crypto,  Prev: JCE Support,  Up: Top

GNU Free Documentation License
******************************

                        Version 1.1, March 2000
     Copyright (C) 2000 Free Software Foundation, Inc.
     59 Temple Place, Suite 330, Boston, MA  02111-1307, USA
     
     Everyone is permitted to copy and distribute verbatim copies
     of this license document, but changing it is not allowed.

  0. PREAMBLE

     The purpose of this License is to make a manual, textbook, or other
     written document "free" in the sense of freedom: to assure everyone
     the effective freedom to copy and redistribute it, with or without
     modifying it, either commercially or noncommercially.  Secondarily,
     this License preserves for the author and publisher a way to get
     credit for their work, while not being considered responsible for
     modifications made by others.

     This License is a kind of "copyleft", which means that derivative
     works of the document must themselves be free in the same sense.
     It complements the GNU General Public License, which is a copyleft
     license designed for free software.

     We have designed this License in order to use it for manuals for
     free software, because free software needs free documentation: a
     free program should come with manuals providing the same freedoms
     that the software does.  But this License is not limited to
     software manuals; it can be used for any textual work, regardless
     of subject matter or whether it is published as a printed book.
     We recommend this License principally for works whose purpose is
     instruction or reference.

  1. APPLICABILITY AND DEFINITIONS

     This License applies to any manual or other work that contains a
     notice placed by the copyright holder saying it can be distributed
     under the terms of this License.  The "Document", below, refers to
     any such manual or work.  Any member of the public is a licensee,
     and is addressed as "you".

     A "Modified Version" of the Document means any work containing the
     Document or a portion of it, either copied verbatim, or with
     modifications and/or translated into another language.

     A "Secondary Section" is a named appendix or a front-matter
     section of the Document that deals exclusively with the
     relationship of the publishers or authors of the Document to the
     Document's overall subject (or to related matters) and contains
     nothing that could fall directly within that overall subject.
     (For example, if the Document is in part a textbook of
     mathematics, a Secondary Section may not explain any mathematics.)
     The relationship could be a matter of historical connection with
     the subject or with related matters, or of legal, commercial,
     philosophical, ethical or political position regarding them.

     The "Invariant Sections" are certain Secondary Sections whose
     titles are designated, as being those of Invariant Sections, in
     the notice that says that the Document is released under this
     License.

     The "Cover Texts" are certain short passages of text that are
     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
     that says that the Document is released under this License.

     A "Transparent" copy of the Document means a machine-readable copy,
     represented in a format whose specification is available to the
     general public, whose contents can be viewed and edited directly
     and straightforwardly with generic text editors or (for images
     composed of pixels) generic paint programs or (for drawings) some
     widely available drawing editor, and that is suitable for input to
     text formatters or for automatic translation to a variety of
     formats suitable for input to text formatters.  A copy made in an
     otherwise Transparent file format whose markup has been designed
     to thwart or discourage subsequent modification by readers is not
     Transparent.  A copy that is not "Transparent" is called "Opaque".

     Examples of suitable formats for Transparent copies include plain
     ASCII without markup, Texinfo input format, LaTeX input format,
     SGML or XML using a publicly available DTD, and
     standard-conforming simple HTML designed for human modification.
     Opaque formats include PostScript, PDF, proprietary formats that
     can be read and edited only by proprietary word processors, SGML
     or XML for which the DTD and/or processing tools are not generally
     available, and the machine-generated HTML produced by some word
     processors for output purposes only.

     The "Title Page" means, for a printed book, the title page itself,
     plus such following pages as are needed to hold, legibly, the
     material this License requires to appear in the title page.  For
     works in formats which do not have any title page as such, "Title
     Page" means the text near the most prominent appearance of the
     work's title, preceding the beginning of the body of the text.

  2. VERBATIM COPYING

     You may copy and distribute the Document in any medium, either
     commercially or noncommercially, provided that this License, the
     copyright notices, and the license notice saying this License
     applies to the Document are reproduced in all copies, and that you
     add no other conditions whatsoever to those of this License.  You
     may not use technical measures to obstruct or control the reading
     or further copying of the copies you make or distribute.  However,
     you may accept compensation in exchange for copies.  If you
     distribute a large enough number of copies you must also follow
     the conditions in section 3.

     You may also lend copies, under the same conditions stated above,
     and you may publicly display copies.

  3. COPYING IN QUANTITY

     If you publish printed copies of the Document numbering more than
     100, and the Document's license notice requires Cover Texts, you
     must enclose the copies in covers that carry, clearly and legibly,
     all these Cover Texts: Front-Cover Texts on the front cover, and
     Back-Cover Texts on the back cover.  Both covers must also clearly
     and legibly identify you as the publisher of these copies.  The
     front cover must present the full title with all words of the
     title equally prominent and visible.  You may add other material
     on the covers in addition.  Copying with changes limited to the
     covers, as long as they preserve the title of the Document and
     satisfy these conditions, can be treated as verbatim copying in
     other respects.

     If the required texts for either cover are too voluminous to fit
     legibly, you should put the first ones listed (as many as fit
     reasonably) on the actual cover, and continue the rest onto
     adjacent pages.

     If you publish or distribute Opaque copies of the Document
     numbering more than 100, you must either include a
     machine-readable Transparent copy along with each Opaque copy, or
     state in or with each Opaque copy a publicly-accessible
     computer-network location containing a complete Transparent copy
     of the Document, free of added material, which the general
     network-using public has access to download anonymously at no
     charge using public-standard network protocols.  If you use the
     latter option, you must take reasonably prudent steps, when you
     begin distribution of Opaque copies in quantity, to ensure that
     this Transparent copy will remain thus accessible at the stated
     location until at least one year after the last time you
     distribute an Opaque copy (directly or through your agents or
     retailers) of that edition to the public.

     It is requested, but not required, that you contact the authors of
     the Document well before redistributing any large number of
     copies, to give them a chance to provide you with an updated
     version of the Document.

  4. MODIFICATIONS

     You may copy and distribute a Modified Version of the Document
     under the conditions of sections 2 and 3 above, provided that you
     release the Modified Version under precisely this License, with
     the Modified Version filling the role of the Document, thus
     licensing distribution and modification of the Modified Version to
     whoever possesses a copy of it.  In addition, you must do these
     things in the Modified Version:

       A. Use in the Title Page (and on the covers, if any) a title
          distinct from that of the Document, and from those of
          previous versions (which should, if there were any, be listed
          in the History section of the Document).  You may use the
          same title as a previous version if the original publisher of
          that version gives permission.

       B. List on the Title Page, as authors, one or more persons or
          entities responsible for authorship of the modifications in
          the Modified Version, together with at least five of the
          principal authors of the Document (all of its principal
          authors, if it has less than five).

       C. State on the Title page the name of the publisher of the
          Modified Version, as the publisher.

       D. Preserve all the copyright notices of the Document.

       E. Add an appropriate copyright notice for your modifications
          adjacent to the other copyright notices.

       F. Include, immediately after the copyright notices, a license
          notice giving the public permission to use the Modified
          Version under the terms of this License, in the form shown in
          the Addendum below.

       G. Preserve in that license notice the full lists of Invariant
          Sections and required Cover Texts given in the Document's
          license notice.

       H. Include an unaltered copy of this License.

       I. Preserve the section entitled "History", and its title, and
          add to it an item stating at least the title, year, new
          authors, and publisher of the Modified Version as given on
          the Title Page.  If there is no section entitled "History" in
          the Document, create one stating the title, year, authors,
          and publisher of the Document as given on its Title Page,
          then add an item describing the Modified Version as stated in
          the previous sentence.

       J. Preserve the network location, if any, given in the Document
          for public access to a Transparent copy of the Document, and
          likewise the network locations given in the Document for
          previous versions it was based on.  These may be placed in
          the "History" section.  You may omit a network location for a
          work that was published at least four years before the
          Document itself, or if the original publisher of the version
          it refers to gives permission.

       K. In any section entitled "Acknowledgments" or "Dedications",
          preserve the section's title, and preserve in the section all
          the substance and tone of each of the contributor
          acknowledgments and/or dedications given therein.

       L. Preserve all the Invariant Sections of the Document,
          unaltered in their text and in their titles.  Section numbers
          or the equivalent are not considered part of the section
          titles.

       M. Delete any section entitled "Endorsements".  Such a section
          may not be included in the Modified Version.

       N. Do not retitle any existing section as "Endorsements" or to
          conflict in title with any Invariant Section.

     If the Modified Version includes new front-matter sections or
     appendices that qualify as Secondary Sections and contain no
     material copied from the Document, you may at your option
     designate some or all of these sections as invariant.  To do this,
     add their titles to the list of Invariant Sections in the Modified
     Version's license notice.  These titles must be distinct from any
     other section titles.

     You may add a section entitled "Endorsements", provided it contains
     nothing but endorsements of your Modified Version by various
     parties--for example, statements of peer review or that the text
     has been approved by an organization as the authoritative
     definition of a standard.

     You may add a passage of up to five words as a Front-Cover Text,
     and a passage of up to 25 words as a Back-Cover Text, to the end
     of the list of Cover Texts in the Modified Version.  Only one
     passage of Front-Cover Text and one of Back-Cover Text may be
     added by (or through arrangements made by) any one entity.  If the
     Document already includes a cover text for the same cover,
     previously added by you or by arrangement made by the same entity
     you are acting on behalf of, you may not add another; but you may
     replace the old one, on explicit permission from the previous
     publisher that added the old one.

     The author(s) and publisher(s) of the Document do not by this
     License give permission to use their names for publicity for or to
     assert or imply endorsement of any Modified Version.

  5. COMBINING DOCUMENTS

     You may combine the Document with other documents released under
     this License, under the terms defined in section 4 above for
     modified versions, provided that you include in the combination
     all of the Invariant Sections of all of the original documents,
     unmodified, and list them all as Invariant Sections of your
     combined work in its license notice.

     The combined work need only contain one copy of this License, and
     multiple identical Invariant Sections may be replaced with a single
     copy.  If there are multiple Invariant Sections with the same name
     but different contents, make the title of each such section unique
     by adding at the end of it, in parentheses, the name of the
     original author or publisher of that section if known, or else a
     unique number.  Make the same adjustment to the section titles in
     the list of Invariant Sections in the license notice of the
     combined work.

     In the combination, you must combine any sections entitled
     "History" in the various original documents, forming one section
     entitled "History"; likewise combine any sections entitled
     "Acknowledgments", and any sections entitled "Dedications".  You
     must delete all sections entitled "Endorsements."

  6. COLLECTIONS OF DOCUMENTS

     You may make a collection consisting of the Document and other
     documents released under this License, and replace the individual
     copies of this License in the various documents with a single copy
     that is included in the collection, provided that you follow the
     rules of this License for verbatim copying of each of the
     documents in all other respects.

     You may extract a single document from such a collection, and
     distribute it individually under this License, provided you insert
     a copy of this License into the extracted document, and follow
     this License in all other respects regarding verbatim copying of
     that document.

  7. AGGREGATION WITH INDEPENDENT WORKS

     A compilation of the Document or its derivatives with other
     separate and independent documents or works, in or on a volume of
     a storage or distribution medium, does not as a whole count as a
     Modified Version of the Document, provided no compilation
     copyright is claimed for the compilation.  Such a compilation is
     called an "aggregate", and this License does not apply to the
     other self-contained works thus compiled with the Document, on
     account of their being thus compiled, if they are not themselves
     derivative works of the Document.

     If the Cover Text requirement of section 3 is applicable to these
     copies of the Document, then if the Document is less than one
     quarter of the entire aggregate, the Document's Cover Texts may be
     placed on covers that surround only the Document within the
     aggregate.  Otherwise they must appear on covers around the whole
     aggregate.

  8. TRANSLATION

     Translation is considered a kind of modification, so you may
     distribute translations of the Document under the terms of section
     4.  Replacing Invariant Sections with translations requires special
     permission from their copyright holders, but you may include
     translations of some or all Invariant Sections in addition to the
     original versions of these Invariant Sections.  You may include a
     translation of this License provided that you also include the
     original English version of this License.  In case of a
     disagreement between the translation and the original English
     version of this License, the original English version will prevail.

  9. TERMINATION

     You may not copy, modify, sublicense, or distribute the Document
     except as expressly provided for under this License.  Any other
     attempt to copy, modify, sublicense or distribute the Document is
     void, and will automatically terminate your rights under this
     License.  However, parties who have received copies, or rights,
     from you under this License will not have their licenses
     terminated so long as such parties remain in full compliance.

 10. FUTURE REVISIONS OF THIS LICENSE

     The Free Software Foundation may publish new, revised versions of
     the GNU Free Documentation License from time to time.  Such new
     versions will be similar in spirit to the present version, but may
     differ in detail to address new problems or concerns.  See
     `http://www.gnu.org/copyleft/'.

     Each version of the License is given a distinguishing version
     number.  If the Document specifies that a particular numbered
     version of this License "or any later version" applies to it, you
     have the option of following the terms and conditions either of
     that specified version or of any later version that has been
     published (not as a draft) by the Free Software Foundation.  If
     the Document does not specify a version number of this License,
     you may choose any version ever published (not as a draft) by the
     Free Software Foundation.

ADDENDUM: How to use this License for your documents
****************************************************

   To use this License in a document you have written, include a copy of
the License in the document and put the following copyright and license
notices just after the title page:


       Copyright (C)  YEAR  YOUR NAME.
       Permission is granted to copy, distribute and/or modify this document
       under the terms of the GNU Free Documentation License, Version 1.1
       or any later version published by the Free Software Foundation;
       with the Invariant Sections being LIST THEIR TITLES, with the
       Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
       A copy of the license is included in the section entitled ``GNU
       Free Documentation License''.


   If you have no Invariant Sections, write "with no Invariant Sections"
instead of saying which ones are invariant.  If you have no Front-Cover
Texts, write "no Front-Cover Texts" instead of "Front-Cover Texts being
LIST"; likewise for Back-Cover Texts.

   If your document contains nontrivial examples of program code, we
recommend releasing these examples in parallel under your choice of
free software license, such as the GNU General Public License, to
permit their use in free software.


File: gnu-crypto.info,  Node: Copying GNU Crypto,  Next: GNU General Public License,  Prev: GNU Free Documentation License,  Up: Top

Copying GNU Crypto
******************

   GNU Crypto is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.

   GNU Crypto is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
General Public License for more details.

   You should have received a copy of the GNU General Public License
along with this program; see the section "The GNU General Public
License" in this manual.  If not, write to the


     Free Software Foundation Inc.
     59 Temple Place---Suite 330
     Boston, MA 02111--1307
     USA


   Linking this library statically or dynamically with other modules is
making a combined work based on this library.  Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.

   As a special exception, the copyright holders of this library give
you permission to link this library with independent modules to produce
an executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module.  An independent module is a module which is not derived from or
based on this library.  If you modify this library, you may extend this
exception to your version of the library, but you are not obligated to
do so.  If you do not wish to do so, delete this exception statement
from your version.

