
 OpenSSL 0.9.2 31-Dec-1998

 Copyright (c) 1998 The OpenSSL Project
 Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
 All rights reserved.

 ....

 The OpenSSL Project is a collaborative effort to develop a robust,
 commercial-grade, fully featured, and Open Source toolkit implementing the
 Transport Layer Security (TLS v1) and Secure Sockets Layer (SSL v2/v3)
 protocols with full-strength cryptography world-wide. The project is managed
 by a worldwide community of volunteers that use the Internet to communicate,
 plan, and develop the OpenSSL tookit and its related documentation. 

 OpenSSL is based on the excellent SSLeay library developed from Eric A. Young
 and Tim J. Hudson.  The OpenSSL toolkit is licensed under a BSD-style licence,
 which basically means that you are free to get and use it for commercial and
 non-commercial purposes. 

 The package includes:

 libssl.a:
     Implementation of SSLv2, SSLv3, TLSv1 and the required code to support
     both SSLv2, SSLv3 and TLSv1 in the one server.

 libcrypto.a:
     General encryption and X.509 stuff needed by TLS/SSL but not actually
     logically part of it. It includes routines for the following:

     Ciphers
        libdes - EAY's libdes DES encryption package which has been floating
                 around the net for a few years.  It includes 15
                 'modes/variations' of DES (1, 2 and 3 key versions of ecb,
                 cbc, cfb and ofb; pcbc and a more general form of cfb and
                 ofb) including desx in cbc mode, a fast crypt(3), and
                 routines to read passwords from the keyboard.
        RC4 encryption,
        RC2 encryption      - 4 different modes, ecb, cbc, cfb and ofb.
        Blowfish encryption - 4 different modes, ecb, cbc, cfb and ofb.
        IDEA encryption     - 4 different modes, ecb, cbc, cfb and ofb.

     Digests
        MD5 and MD2 message digest algorithms, fast implementations,
        SHA (SHA-0) and SHA-1 message digest algorithms,
        MDC2 message digest. A DES based hash that is polular on smart cards.

     Public Key
        RSA encryption/decryption/generation.  
            There is no limit on the number of bits.
        DSA encryption/decryption/generation.   
            There is no limit on the number of bits.
        Diffie-Hellman key-exchange/key generation.  
            There is no limit on the number of bits.

     X.509v3 certificates
        X509 encoding/decoding into/from binary ASN1 and a PEM
             based ascii-binary encoding which supports encryption with a
             private key.  Program to generate RSA and DSA certificate
             requests and to generate RSA and DSA certificates.

     Systems
        The normal digital envelope routines and base64 encoding.  Higher
        level access to ciphers and digests by name.  New ciphers can be
        loaded at run time.  The BIO io system which is a simple non-blocking
        IO abstraction.  Current methods supported are file descriptors,
        sockets, socket accept, socket connect, memory buffer, buffering, SSL
        client/server, file pointer, encryption, digest, non-blocking testing
        and null.

     Data structures
        A dynamically growing hashing system
        A simple stack.
        A Configuration loader that uses a format similar to MS .ini files.

 Programs in this package include:

     enc     - a general encryption program that can encrypt/decrypt using
               one of 17 different cipher/mode combinations.  The
               input/output can also be converted to/from base64
               ascii encoding.
     dgst    - a generate message digesting program that will generate
               message digests for any of md2, md5, sha (sha-0 or sha-1)
               or mdc2.
     asn1parse - parse and display the structure of an asn1 encoded
               binary file.
     rsa     - Manipulate RSA private keys.
     dsa     - Manipulate DSA private keys.
     dh      - Manipulate Diffie-Hellman parameter files.
     dsaparam- Manipulate and generate DSA parameter files.
     crl     - Manipulate certificate revocation lists.
     crt2pkcs7- Generate a pkcs7 object containing a crl and a certificate.
     x509    - Manipulate x509 certificates, self-sign certificates.
     req     - Manipulate PKCS#10 certificate requests and also
               generate certificate requests.
     genrsa  - Generates an arbitrary sized RSA private key.
     gendsa  - Generates DSA parameters.
     gendh   - Generates a set of Diffie-Hellman parameters, the prime
               will be a strong prime.
     ca      - Create certificates from PKCS#10 certificate requests.
               This program also maintains a database of certificates
               issued.
     verify  - Check x509 certificate signatures.
     speed   - Benchmark OpenSSL's ciphers.
     s_server- A test SSL server.
     s_client- A test SSL client.
     s_time  - Benchmark SSL performance of SSL server programs.
     errstr  - Convert from OpenSSL hex error codes to a readable form.
     nseq    - Netscape certificate sequence utility
        
To install this package, read the INSTALL file.
For the Microsoft world, read INSTALL.W32 file.

For people in the USA, it is possible to compile OpenSSL to use RSA Inc.'s
public key library, RSAref. Read doc/ssleay.txt under 'rsaref.doc' on how to
build with RSAref.

Read the documentation in the doc directory.  It is quite rough, but it lists
the functions, you will probably have to look at the code to work out how to
used them. Look at the example programs.

