Add directory name to the entry on /crypto/ui/.
[openssl.git] / CHANGES
diff --git a/CHANGES b/CHANGES
index f4dee4f0e04ca6f7687dcf3b2b4b6910727e3ce8..0cca19538dfc5de3bdd098e9d523e0033eaa1cae 100644 (file)
--- a/CHANGES
+++ b/CHANGES
+
  OpenSSL CHANGES
  _______________
 
- Changes between 0.9.6 and 0.9.7  [xx XXX 2000]
+ Changes between 0.9.6 and 0.9.7  [xx XXX 2001]
+
+     Both OpenSSL 0.9.6a (bugfix release, 5 Apr 2001) and OpenSSL 0.9.7
+     are based on OpenSSL 0.9.6.  
+     Change log entries are tagged as follows:
+         -) applies to 0.9.6a (/0.9.6b) only
+         *) applies to 0.9.6a (/0.9.6b) and 0.9.7
+         +) applies to 0.9.7 only
+
+  +) Tidy up PKCS#12 attribute handling. Add support for the CSP name
+     attribute in PKCS#12 files, add new -CSP option to pkcs12 utility.
+     [Steve Henson]
+
+  *) Fix OAEP check.
+     [Ulf Möller, Bodo Möller]
+
+  *) The countermeasure against Bleichbacher's attack on PKCS #1 v1.5
+     RSA encryption was accidentily removed in s3_srvr.c in OpenSSL 0.9.5
+     when fixing the server behaviour for backwards-compatible 'client
+     hello' messages.  (Note that the attack is impractical against
+     SSL 3.0 and TLS 1.0 anyway because length and version checking
+     means that the probability of guessing a valid ciphertext is
+     around 2^-40; see section 5 in Bleichenbacher's CRYPTO '98
+     paper.)
+
+     Before 0.9.5, the countermeasure (hide the error by generating a
+     random 'decryption result') did not work properly because
+     ERR_clear_error() was missing, meaning that SSL_get_error() would
+     detect the supposedly ignored error.
+
+     Both problems are now fixed.
+     [Bodo Moeller]
+
+  *) In crypto/bio/bf_buff.c, increase DEFAULT_BUFFER_SIZE to 4096
+     (previously it was 1024).
+     [Bodo Moeller]
+
+  +) Fix a memory leak in 'sk_dup()' in the case reallocation fails. (Also
+     tidy up some unecessarily weird code in 'sk_new()').
+     [Geoff, reported by Diego Tartara <dtartara@novamens.com>]
+
+  +) Change the key loading routines for ENGINEs to use the same kind
+     callback (pem_password_cb) as all other routines that need this
+     kind of callback.
+     [Richard Levitte]
+
+  *) Fix for compatibility mode trust settings: ignore trust settings
+     unless some valid trust or reject settings are present.
+     [Steve Henson]
+
+  *) Fix for blowfish EVP: its a variable length cipher.
+     [Steve Henson]
+
+  +) Increase ENTROPY_NEEDED to 32 bytes, as Rijndael can operate with
+     256 bit (=32 byte) keys. Of course seeding with more entropy bytes
+     than this minimum value is recommended.
+     [Lutz Jaenicke]
+
+  +) New random seeder for OpenVMS, using the system process statistics
+     that are easily reachable.
+     [Richard Levitte]
+
+  +) Windows apparently can't transparently handle global
+     variables defined in DLLs. Initialisations such as:
+
+        const ASN1_ITEM *it = &ASN1_INTEGER_it;
+
+     wont compile. This is used by the any applications that need to
+     delcare their own ASN1 modules. This was fixed by adding the option
+     EXPORT_VAR_AS_FN to all Win32 platforms, although this isn't strictly
+     needed for static libraries under Win32.
+     [Steve Henson]
+
+  +) New functions X509_PURPOSE_set() and X509_TRUST_set() to handle
+     setting of purpose and trust fields. New X509_STORE trust and
+     purpose functions and tidy up setting in other SSL functions.
+     [Steve Henson]
+
+  +) Add copies of X509_STORE_CTX fields and callbacks to X509_STORE
+     structure. These are inherited by X509_STORE_CTX when it is 
+     initialised. This allows various defaults to be set in the
+     X509_STORE structure (such as flags for CRL checking and custom
+     purpose or trust settings) for functions which only use X509_STORE_CTX
+     internally such as S/MIME.
+
+     Modify X509_STORE_CTX_purpose_inherit() so it only sets purposes and
+     trust settings if they are not set in X509_STORE. This allows X509_STORE
+     purposes and trust (in S/MIME for example) to override any set by default.
+
+     Add command line options for CRL checking to smime, s_client and s_server
+     applications.
+     [Steve Henson]
+
+  +) Initial CRL based revocation checking. If the CRL checking flag(s)
+     are set then the CRL is looked up in the X509_STORE structure and
+     its validity and signature checked, then if the certificate is found
+     in the CRL the verify fails with a revoked error.
+
+     Various new CRL related callbacks added to X509_STORE_CTX structure.
+
+     Command line options added to 'verify' application to support this.
+
+     This needs some additional work, such as being able to handle multiple
+     CRLs with different times, extension based lookup (rather than just
+     by subject name) and ultimately more complete V2 CRL extension
+     handling.
+     [Steve Henson]
+
+  +) Add a general user interface API (crypto/ui/).  This is designed
+     to replace things like des_read_password and friends (backward
+     compatibility functions using this new API are provided).
+     The purpose is to remove prompting functions from the DES code
+     section as well as provide for prompting through dialog boxes in
+     a window system and the like.
+     [Richard Levitte]
+
+  *) In versions up to 0.9.6, RAND_file_name() resorted to file ".rnd"
+     in the current directory if neither $RANDFILE nor $HOME was set.
+     RAND_file_name() in 0.9.6a returned NULL in this case.  This has
+     caused some confusion to Windows users who haven't defined $HOME.
+     Thus RAND_file_name() is changed again: e_os.h can define a
+     DEFAULT_HOME, which will be used if $HOME is not set.
+     For Windows, we use "C:"; on other platforms, we still require
+     environment variables.
+
+  +) Add "ex_data" support to ENGINE so implementations can add state at a
+     per-structure level rather than having to store it globally.
+     [Geoff]
+
+  +) Make it possible for ENGINE structures to be copied when retrieved by
+     ENGINE_by_id() if the ENGINE specifies a new flag: ENGINE_FLAGS_BY_ID_COPY.
+     This causes the "original" ENGINE structure to act like a template,
+     analogous to the RSA vs. RSA_METHOD type of separation. Because of this
+     operational state can be localised to each ENGINE structure, despite the
+     fact they all share the same "methods". New ENGINE structures returned in
+     this case have no functional references and the return value is the single
+     structural reference. This matches the single structural reference returned
+     by ENGINE_by_id() normally, when it is incremented on the pre-existing
+     ENGINE structure.
+     [Geoff]
+
+  *) Fix various bugs related to DSA S/MIME verification. Handle missing
+     parameters in DSA public key structures and return an error in the
+     DSA routines if parameters are absent.
+     [Steve Henson]
+
+  +) Fix ASN1 decoder when decoding type ANY and V_ASN1_OTHER: since this
+     needs to match any other type at all we need to manually clear the
+     tag cache.
+     [Steve Henson]
+
+  +) Changes to the "openssl engine" utility to include;
+     - verbosity levels ('-v', '-vv', and '-vvv') that provide information
+       about an ENGINE's available control commands.
+     - executing control commands from command line arguments using the
+       '-pre' and '-post' switches. '-post' is only used if '-t' is
+       specified and the ENGINE is successfully initialised. The syntax for
+       the individual commands are colon-separated, for example;
+        openssl engine chil -pre FORK_CHECK:0 -pre SO_PATH:/lib/test.so
+     [Geoff]
+
+  +) New dynamic control command support for ENGINEs. ENGINEs can now
+     declare their own commands (numbers), names (strings), descriptions,
+     and input types for run-time discovery by calling applications. A
+     subset of these commands are implicitly classed as "executable"
+     depending on their input type, and only these can be invoked through
+     the new string-based API function ENGINE_ctrl_cmd_string(). (Eg. this
+     can be based on user input, config files, etc). The distinction is
+     that "executable" commands cannot return anything other than a boolean
+     result and can only support numeric or string input, whereas some
+     discoverable commands may only be for direct use through
+     ENGINE_ctrl(), eg. supporting the exchange of binary data, function
+     pointers, or other custom uses. The "executable" commands are to
+     support parameterisations of ENGINE behaviour that can be
+     unambiguously defined by ENGINEs and used consistently across any
+     OpenSSL-based application. Commands have been added to all the
+     existing hardware-supporting ENGINEs, noticeably "SO_PATH" to allow
+     control over shared-library paths without source code alterations.
+     [Geoff]
+
+  +) Changed all ENGINE implementations to dynamically allocate their
+     ENGINEs rather than declaring them statically. Apart from this being
+     necessary with the removal of the ENGINE_FLAGS_MALLOCED distinction,
+     this also allows the implementations to compile without using the
+     internal engine_int.h header.
+     [Geoff]
+
+  +) Minor adjustment to "rand" code. RAND_get_rand_method() now returns a
+     'const' value. Any code that should be able to modify a RAND_METHOD
+     should already have non-const pointers to it (ie. they should only
+     modify their own ones).
+     [Geoff]
+
+  +) Made a variety of little tweaks to the ENGINE code.
+     - "atalla" and "ubsec" string definitions were moved from header files
+       to C code. "nuron" string definitions were placed in variables
+       rather than hard-coded - allowing parameterisation of these values
+       later on via ctrl() commands.
+     - Removed unused "#if 0"'d code.
+     - Fixed engine list iteration code so it uses ENGINE_free() to release
+       structural references.
+     - Constified the RAND_METHOD element of ENGINE structures.
+     - Constified various get/set functions as appropriate and added
+       missing functions (including a catch-all ENGINE_cpy that duplicates
+       all ENGINE values onto a new ENGINE except reference counts/state).
+     - Removed NULL parameter checks in get/set functions. Setting a method
+       or function to NULL is a way of cancelling out a previously set
+       value.  Passing a NULL ENGINE parameter is just plain stupid anyway
+       and doesn't justify the extra error symbols and code.
+     - Deprecate the ENGINE_FLAGS_MALLOCED define and move the area for
+       flags from engine_int.h to engine.h.
+     - Changed prototypes for ENGINE handler functions (init(), finish(),
+       ctrl(), key-load functions, etc) to take an (ENGINE*) parameter.
+     [Geoff]
+
+  *) Move 'if (!initialized) RAND_poll()' into regions protected by
+     CRYPTO_LOCK_RAND.  This is not strictly necessary, but avoids
+     having multiple threads call RAND_poll() concurrently.
+     [Bodo Moeller]
+
+  *) In crypto/rand/md_rand.c, replace 'add_do_not_lock' flag by a
+     combination of a flag and a thread ID variable.
+     Otherwise while one thread is in ssleay_rand_bytes (which sets the
+     flag), *other* threads can enter ssleay_add_bytes without obeying
+     the CRYPTO_LOCK_RAND lock (and may even illegaly release the lock
+     that they do not hold after the first thread unsets add_do_not_lock).
+     [Bodo Moeller]
+
+  +) Implement binary inversion algorithm for BN_mod_inverse in addition
+     to the algorithm using long divison.  The binary algorithm can be
+     used only if the modulus is odd.  On 32-bit systems, it is faster
+     only for relatively small moduli (roughly 20-30% for 128-bit moduli,
+     roughly 5-15% for 256-bit moduli), so we use it only for moduli
+     up to 450 bits.  In 64-bit environments, the binary algorithm
+     appears to be advantageous for much longer moduli; here we use it
+     for moduli up to 2048 bits.
+     [Bodo Moeller]
+
+  *) Change bctest again: '-x' expressions are not available in all
+     versions of 'test'.
+     [Bodo Moeller]
+
+  -) OpenSSL 0.9.6a released [5 Apr 2001]
+
+  *) Fix a couple of memory leaks in PKCS7_dataDecode()
+     [Steve Henson, reported by Heyun Zheng <hzheng@atdsprint.com>]
+
+  *) Change Configure and Makefiles to provide EXE_EXT, which will contain
+     the default extension for executables, if any.  Also, make the perl
+     scripts that use symlink() to test if it really exists and use "cp"
+     if it doesn't.  All this made OpenSSL compilable and installable in
+     CygWin.
+     [Richard Levitte]
+
+  +) Rewrite CHOICE field setting in ASN1_item_ex_d2i(). The old code
+     could not support the combine flag in choice fields.
+     [Steve Henson]
+
+  -) Fix for asn1_GetSequence() for indefinite length constructed data.
+     If SEQUENCE is length is indefinite just set c->slen to the total
+     amount of data available.
+     [Steve Henson, reported by shige@FreeBSD.org]
+     [This change does not apply to 0.9.7.]
+
+  *) Change bctest to avoid here-documents inside command substitution
+     (workaround for FreeBSD /bin/sh bug).
+     For compatibility with Ultrix, avoid shell functions (introduced
+     in the bctest version that searches along $PATH).
+     [Bodo Moeller]
+
+  *) Rename 'des_encrypt' to 'des_encrypt1'.  This avoids the clashes
+     with des_encrypt() defined on some operating systems, like Solaris
+     and UnixWare.
+     [Richard Levitte]
+
+  *) Check the result of RSA-CRT (see D. Boneh, R. DeMillo, R. Lipton:
+     On the Importance of Eliminating Errors in Cryptographic
+     Computations, J. Cryptology 14 (2001) 2, 101-119,
+     http://theory.stanford.edu/~dabo/papers/faults.ps.gz).
+     [Ulf Moeller]
+  
+  *) MIPS assembler BIGNUM division bug fix. 
+     [Andy Polyakov]
+
+  *) Disabled incorrect Alpha assembler code.
+     [Richard Levitte]
+
+  -) Fix PKCS#7 decode routines so they correctly update the length
+     after reading an EOC for the EXPLICIT tag.
+     [Steve Henson]
+     [This change does not apply to 0.9.7.]
+
+  *) Fix bug in PKCS#12 key generation routines. This was triggered
+     if a 3DES key was generated with a 0 initial byte. Include
+     PKCS12_BROKEN_KEYGEN compilation option to retain the old
+     (but broken) behaviour.
+     [Steve Henson]
+
+  *) Enhance bctest to search for a working bc along $PATH and print
+     it when found.
+     [Tim Rice <tim@multitalents.net> via Richard Levitte]
+
+  +) Add a 'copy_extensions' option to the 'ca' utility. This copies
+     extensions from a certificate request to the certificate.
+     [Steve Henson]
+
+  +) Allow multiple 'certopt' and 'nameopt' options to be separated
+     by commas. Add 'namopt' and 'certopt' options to the 'ca' config
+     file: this allows the display of the certificate about to be
+     signed to be customised, to allow certain fields to be included
+     or excluded and extension details. The old system didn't display
+     multicharacter strings properly, omitted fields not in the policy
+     and couldn't display additional details such as extensions.
+     [Steve Henson]
+
+  *) Fix memory leaks in err.c: free err_data string if necessary;
+     don't write to the wrong index in ERR_set_error_data.
+     [Bodo Moeller]
+
+  +) Function EC_POINTs_mul for simultaneous scalar multiplication
+     of an arbitrary number of elliptic curve points, optionally
+     including the generator defined for the EC_GROUP.
+     EC_POINT_mul is a simple wrapper function for the typical case
+     that the point list has just one item (besides the optional
+     generator).
+     [Bodo Moeller]
+
+  +) First EC_METHODs for curves over GF(p):
+
+     EC_GFp_simple_method() uses the basic BN_mod_mul and BN_mod_sqr
+     operations and provides various method functions that can also
+     operate with faster implementations of modular arithmetic.     
+
+     EC_GFp_mont_method() reuses most functions that are part of
+     EC_GFp_simple_method, but uses Montgomery arithmetic.
+
+     [Bodo Moeller; point addition and point doubling
+     implementation directly derived from source code provided by
+     Lenka Fibikova <fibikova@exp-math.uni-essen.de>]
+
+  +) Framework for elliptic curves (crypto/ec/ec.h, crypto/ec/ec_lcl.h,
+     crypto/ec/ec_lib.c):
+
+     Curves are EC_GROUP objects (with an optional group generator)
+     based on EC_METHODs that are built into the library.
+
+     Points are EC_POINT objects based on EC_GROUP objects.
+
+     Most of the framework would be able to handle curves over arbitrary
+     finite fields, but as there are no obvious types for fields other
+     than GF(p), some functions are limited to that for now.
+     [Bodo Moeller]
+
+  +) Add the -HTTP option to s_server.  It is similar to -WWW, but requires
+     that the file contains a complete HTTP response.
+     [Richard Levitte]
+
+  +) Add the ec directory to mkdef.pl and mkfiles.pl. In mkdef.pl
+     change the def and num file printf format specifier from "%-40sXXX"
+     to "%-39s XXX". The latter will always guarantee a space after the
+     field while the former will cause them to run together if the field
+     is 40 of more characters long.
+     [Steve Henson]
+
+  +) Constify the cipher and digest 'method' functions and structures
+     and modify related functions to take constant EVP_MD and EVP_CIPHER
+     pointers.
+     [Steve Henson]
+
+  *) Implement ssl23_peek (analogous to ssl23_read), which previously
+     did not exist.
+     [Bodo Moeller]
+
+  *) Replace rdtsc with _emit statements for VC++ version 5.
+     [Jeremy Cooper <jeremy@baymoo.org>]
+
+  +) Hide BN_CTX structure details in bn_lcl.h instead of publishing them
+     in <openssl/bn.h>.  Also further increase BN_CTX_NUM to 32.
+     [Bodo Moeller]
+
+  +) Modify EVP_Digest*() routines so they now return values. Although the
+     internal software routines can never fail additional hardware versions
+     might.
+     [Steve Henson]
+
+  +) Clean up crypto/err/err.h and change some error codes to avoid conflicts:
+
+     Previously ERR_R_FATAL was too small and coincided with ERR_LIB_PKCS7
+     (= ERR_R_PKCS7_LIB); it is now 64 instead of 32.
+
+     ASN1 error codes
+          ERR_R_NESTED_ASN1_ERROR
+          ...
+          ERR_R_MISSING_ASN1_EOS
+     were 4 .. 9, conflicting with
+          ERR_LIB_RSA (= ERR_R_RSA_LIB)
+          ...
+          ERR_LIB_PEM (= ERR_R_PEM_LIB).
+     They are now 58 .. 63 (i.e., just below ERR_R_FATAL).
+
+     Add new error code 'ERR_R_INTERNAL_ERROR'.
+     [Bodo Moeller]
+
+  +) Don't overuse locks in crypto/err/err.c: For data retrieval, CRYPTO_r_lock
+     suffices.
+     [Bodo Moeller]
+
+  +) New option '-subj arg' for 'openssl req' and 'openssl ca'.  This
+     sets the subject name for a new request or supersedes the
+     subject name in a given request. Formats that can be parsed are
+          'CN=Some Name, OU=myOU, C=IT'
+     and
+          'CN=Some Name/OU=myOU/C=IT'.
+
+     Add options '-batch' and '-verbose' to 'openssl req'.
+     [Massimiliano Pala <madwolf@hackmasters.net>]
+
+  *) Make it possible to reuse SSLv2 sessions.
+     [Richard Levitte]
+
+  +) Introduce the possibility to access global variables through
+     functions on platform were that's the best way to handle exporting
+     global variables in shared libraries.  To enable this functionality,
+     one must configure with "EXPORT_VAR_AS_FN" or defined the C macro
+     "OPENSSL_EXPORT_VAR_AS_FUNCTION" in crypto/opensslconf.h (the latter
+     is normally done by Configure or something similar).
+
+     To implement a global variable, use the macro OPENSSL_IMPLEMENT_GLOBAL
+     in the source file (foo.c) like this:
+
+       OPENSSL_IMPLEMENT_GLOBAL(int,foo)=1;
+       OPENSSL_IMPLEMENT_GLOBAL(double,bar);
+
+     To declare a global variable, use the macros OPENSSL_DECLARE_GLOBAL
+     and OPENSSL_GLOBAL_REF in the header file (foo.h) like this:
+
+       OPENSSL_DECLARE_GLOBAL(int,foo);
+       #define foo OPENSSL_GLOBAL_REF(foo)
+       OPENSSL_DECLARE_GLOBAL(double,bar);
+       #define bar OPENSSL_GLOBAL_REF(bar)
+
+     The #defines are very important, and therefore so is including the
+     header file everywere where the defined globals are used.
+
+     The macro OPENSSL_EXPORT_VAR_AS_FUNCTION also affects the definition
+     of ASN.1 items, but that structure is a bt different.
+
+     The largest change is in util/mkdef.pl which has been enhanced with
+     better and easier to understand logic to choose which symbols should
+     go into the Windows .def files as well as a number of fixes and code
+     cleanup (among others, algorithm keywords are now sorted
+     lexicographically to avoid constant rewrites).
+     [Richard Levitte]
+
+  *) In copy_email() check for >= 0 as a return value for
+     X509_NAME_get_index_by_NID() since 0 is a valid index.
+     [Steve Henson reported by Massimiliano Pala <madwolf@opensca.org>]
+
+  +) In BN_div() keep a copy of the sign of 'num' before writing the
+     result to 'rm' because if rm==num the value will be overwritten
+     and produce the wrong result if 'num' is negative: this caused
+     problems with BN_mod() and BN_nnmod().
+     [Steve Henson]
+
+  +) Function OCSP_request_verify(). This checks the signature on an
+     OCSP request and verifies the signer certificate. The signer
+     certificate is just checked for a generic purpose and OCSP request
+     trust settings.
+     [Steve Henson]
+
+  +) Add OCSP_check_validity() function to check the validity of OCSP
+     responses. OCSP responses are prepared in real time and may only
+     be a few seconds old. Simply checking that the current time lies
+     between thisUpdate and nextUpdate max reject otherwise valid responses
+     caused by either OCSP responder or client clock innacuracy. Instead
+     we allow thisUpdate and nextUpdate to fall within a certain period of
+     the current time. The age of the response can also optionally be
+     checked. Two new options -validity_period and -status_age added to
+     ocsp utility.
+     [Steve Henson]
+
+  +) If signature or public key algorithm is unrecognized print out its
+     OID rather that just UNKOWN.
+     [Steve Henson]
+
+  *) Avoid coredump with unsupported or invalid public keys by checking if
+     X509_get_pubkey() fails in PKCS7_verify(). Fix memory leak when
+     PKCS7_verify() fails with non detached data.
+     [Steve Henson]
+
+  +) Change OCSP_cert_to_id() to tolerate a NULL subject certificate and
+     OCSP_cert_id_new() a NULL serialNumber. This allows a partial certificate
+     ID to be generated from the issuer certificate alone which can then be
+     passed to OCSP_id_issuer_cmp().
+     [Steve Henson]
+
+  +) New compilation option ASN1_ITEM_FUNCTIONS. This causes the new
+     ASN1 modules to export functions returning ASN1_ITEM pointers
+     instead of the ASN1_ITEM structures themselves. This adds several
+     new macros which allow the underlying ASN1 function/structure to
+     be accessed transparently. As a result code should not use ASN1_ITEM
+     references directly (such as &X509_it) but instead use the relevant
+     macros (such as ASN1_ITEM_rptr(X509)). This option is to allow
+     use of the new ASN1 code on platforms where exporting structures
+     is problematical (for example in shared libraries) but exporting
+     functions returning pointers to structures is not.
+     [Steve Henson]
+
+  +) Add support for overriding the generation of SSL/TLS session IDs.
+     These callbacks can be registered either in an SSL_CTX or per SSL.
+     The purpose of this is to allow applications to control, if they wish,
+     the arbitrary values chosen for use as session IDs, particularly as it
+     can be useful for session caching in multiple-server environments. A
+     command-line switch for testing this (and any client code that wishes
+     to use such a feature) has been added to "s_server".
+     [Geoff Thorpe, Lutz Jaenicke]
+
+  +) Modify mkdef.pl to recognise and parse prprocessor conditionals
+     of the form '#if defined(...) || defined(...) || ...' and
+     '#if !defined(...) && !defined(...) && ...'.  This also avoids
+     the growing number of special cases it was previously handling.
+     [Richard Levitte]
 
   *) Don't use getenv in library functions when run as setuid/setgid.
      New function OPENSSL_issetugid().
      [Ulf Moeller]
 
-  *) Make all configuration macros available for application by making
+  +) Make all configuration macros available for application by making
      sure they are available in opensslconf.h, by giving them names starting
      with "OPENSSL_" to avoid conflicts with other packages and by making
      sure e_os2.h will cover all platform-specific cases together with
      what is available.
      [Richard Levitte]
 
-  *) New option -set_serial to 'req' and 'x509' this allows the serial
+  +) New option -set_serial to 'req' and 'x509' this allows the serial
      number to use to be specified on the command line. Previously self
      signed certificates were hard coded with serial number 0 and the 
      CA options of 'x509' had to use a serial number in a file which was
         assumption that thread ID 0 is impossible).
      [Bodo Moeller]
 
-  *) New options to 'ca' utility to support V2 CRL entry extensions.
+  +) New options to 'ca' utility to support V2 CRL entry extensions.
      Currently CRL reason, invalidity date and hold instruction are
      supported. Add new CRL extensions to V3 code and some new objects.
      [Steve Henson]
   *) Add "-rand" option also to s_client and s_server.
      [Lutz Jaenicke]
 
-  *) New function EVP_CIPHER_CTX_set_padding() this is used to
+  +) New function EVP_CIPHER_CTX_set_padding() this is used to
      disable standard block padding (aka PKCS#5 padding) in the EVP
      API, which was previously mandatory. This means that the data is
      not padded in any way and so the total length much be a multiple
      of the block size, otherwise an error occurs.
      [Steve Henson]
 
-  *) Initial (incomplete) OCSP SSL support.
+  +) Initial (incomplete) OCSP SSL support.
      [Steve Henson]
 
   *) Fix CPU detection on Irix 6.x.
      [Kurt Hockenbury <khockenb@stevens-tech.edu> and
       "Bruce W. Forsberg" <bruce.forsberg@baesystems.com>]
 
-  *) New function OCSP_parse_url(). This splits up a URL into its host,
+  +) New function OCSP_parse_url(). This splits up a URL into its host,
      port and path components: primarily to parse OCSP URLs. New -url
      option to ocsp utility.
      [Steve Henson]
 
-  *) New nonce behavior. The return value of OCSP_check_nonce() now 
+  +) New nonce behavior. The return value of OCSP_check_nonce() now 
      reflects the various checks performed. Applications can decide
      whether to tolerate certain situations such as an absent nonce
      in a response when one was present in a request: the ocsp application
      the request is nonce-less.
      [Steve Henson]
 
+  *) Fix X509_NAME bug which produced incorrect encoding if X509_NAME
+     was empty.
+     [This change does not apply to 0.9.7.]
+
   *) Use the cached encoding of an X509_NAME structure rather than
      copying it. This is apparently the reason for the libsafe "errors"
      but the code is actually correct.
      [Steve Henson]
 
-  *) Disable stdin buffering in load_cert (apps/apps.c) so that no certs are
+  +) Disable stdin buffering in load_cert (apps/apps.c) so that no certs are
      skipped when using openssl x509 multiple times on a single input file,
      e.g. "(openssl x509 -out cert1; openssl x509 -out cert2) <certs".
      [Bodo Moeller]
 
-  *) Make ASN1_UTCTIME_set_string() and ASN1_GENERALIZEDTIME_set_string()
+  +) Make ASN1_UTCTIME_set_string() and ASN1_GENERALIZEDTIME_set_string()
      set string type: to handle setting ASN1_TIME structures. Fix ca
      utility to correctly initialize revocation date of CRLs.
      [Steve Henson]
 
-  *) New option SSL_OP_CIPHER_SERVER_PREFERENCE allows the server to override
+  +) New option SSL_OP_CIPHER_SERVER_PREFERENCE allows the server to override
      the clients preferred ciphersuites and rather use its own preferences.
      Should help to work around M$ SGC (Server Gated Cryptography) bug in
      Internet Explorer by ensuring unchanged hash method during stepup.
      [Lutz Jaenicke]
 
-  *) Make mkdef.pl recognise all DECLARE_ASN1 macros, change rijndael
+  +) Make mkdef.pl recognise all DECLARE_ASN1 macros, change rijndael
      to aes and add a new 'exist' option to print out symbols that don't
      appear to exist.
      [Steve Henson]
 
-  *) Additional options to ocsp utility to allow flags to be set and
+  +) Additional options to ocsp utility to allow flags to be set and
      additional certificates supplied.
      [Steve Henson]
 
-  *) Add the option -VAfile to 'openssl ocsp', so the user can give the
+  +) Add the option -VAfile to 'openssl ocsp', so the user can give the
      OCSP client a number of certificate to only verify the response
      signature against.
      [Richard Levitte]
 
   *) Add new function BN_rand_range(), and fix DSA_sign_setup() to prevent
      Bleichenbacher's DSA attack.
+     Extend BN_[pseudo_]rand: As before, top=1 forces the highest two bits
+     to be set and top=0 forces the highest bit to be set; top=-1 is new
+     and leaves the highest bit random.
      [Ulf Moeller, Bodo Moeller]
 
-  *) Update Rijndael code to version 3.0 and change EVP AES ciphers to
+  +) Update Rijndael code to version 3.0 and change EVP AES ciphers to
      handle the new API. Currently only ECB, CBC modes supported. Add new
      AES OIDs. Add TLS AES ciphersuites as described in the "AES Ciphersuites
      for TLS" draft-ietf-tls-ciphersuite-03.txt.
   *) Fix potential buffer overrun for EBCDIC.
      [Ulf Moeller]
 
-  *) New function OCSP_copy_nonce() to copy nonce value (if present) from
+  +) New function OCSP_copy_nonce() to copy nonce value (if present) from
      request to response.
      [Steve Henson]
 
-  *) Functions for OCSP responders. OCSP_request_onereq_count(),
+  +) Functions for OCSP responders. OCSP_request_onereq_count(),
      OCSP_request_onereq_get0(), OCSP_onereq_get0_id() and OCSP_id_get0_info()
      extract information from a certificate request. OCSP_response_create()
      creates a response and optionally adds a basic response structure.
      (converts ASN1_TIME to GeneralizedTime).
      [Steve Henson]
 
-  *) Various new functions. EVP_Digest() combines EVP_Digest{Init,Update,Final}()
+  +) Various new functions. EVP_Digest() combines EVP_Digest{Init,Update,Final}()
      in a single operation. X509_get0_pubkey_bitstr() extracts the public_key
      structure from a certificate. X509_pubkey_digest() digests tha public_key
      contents: this is used in various key identifiers. 
      headers.
      [Richard Levitte]
 
-  *) Make sk_sort() tolerate a NULL argument.
+  +) Make sk_sort() tolerate a NULL argument.
      [Steve Henson reported by Massimiliano Pala <madwolf@comune.modena.it>]
 
-  *) New OCSP verify flag OCSP_TRUSTOTHER. When set the "other" certificates
+  +) New OCSP verify flag OCSP_TRUSTOTHER. When set the "other" certificates
      passed by the function are trusted implicitly. If any of them signed the
      reponse then it is assumed to be valid and is not verified.
      [Steve Henson]
 
+  -) Make the CRL encoding routines work with empty SEQUENCE OF. The
+     macros previously used would not encode an empty SEQUENCE OF
+     and break the signature.
+     [Steve Henson]
+     [This change does not apply to 0.9.7.]
+
   *) Zero the premaster secret after deriving the master secret in
      DH ciphersuites.
      [Steve Henson]
 
-  *) In PKCS7_set_type() initialise content_type in PKCS7_ENC_CONTENT
+  +) In PKCS7_set_type() initialise content_type in PKCS7_ENC_CONTENT
      to data. This was previously part of the PKCS7 ASN1 code. This
      was causing problems with OpenSSL created PKCS#12 and PKCS#7 structures.
      [Steve Henson, reported by Kenneth R. Robinette
                                <support@securenetterm.com>]
 
-  *) Add CRYPTO_push_info() and CRYPTO_pop_info() calls to new ASN1
+  +) Add CRYPTO_push_info() and CRYPTO_pop_info() calls to new ASN1
      routines: without these tracing memory leaks is very painful.
      Fix leaks in PKCS12 and PKCS7 routines.
      [Steve Henson]
 
-  *) Fix for Irix with NO_ASM.
-     ["Bruce W. Forsberg" <bruce.forsberg@baesystems.com>]
-
   *) Add some EVP_add_digest_alias registrations (as found in
-     OpenSSL_add_all_digests()), to SSL_library_init()
+     OpenSSL_add_all_digests()) to SSL_library_init()
      aka OpenSSL_add_ssl_algorithms().  This provides improved
      compatibility with peers using X.509 certificates
      with unconventional AlgorithmIdentifier OIDs.
      [Bodo Moeller]
 
+  *) Fix for Irix with NO_ASM.
+     ["Bruce W. Forsberg" <bruce.forsberg@baesystems.com>]
+
   *) ./config script fixes.
      [Ulf Moeller, Richard Levitte]
 
-  *) Make X509_time_adj() cope with the new behaviour of ASN1_TIME_new().
+  +) Make X509_time_adj() cope with the new behaviour of ASN1_TIME_new().
      Previously it initialised the 'type' argument to V_ASN1_UTCTIME which
      effectively meant GeneralizedTime would never be used. Now it
      is initialised to -1 but X509_time_adj() now has to check the value
      [Steve Henson, reported by Kenneth R. Robinette
                                <support@securenetterm.com>]
 
-  *) Fixes to BN_to_ASN1_INTEGER when bn is zero. This would previously
+  +) Fixes to BN_to_ASN1_INTEGER when bn is zero. This would previously
      result in a zero length in the ASN1_INTEGER structure which was
      not consistent with the structure when d2i_ASN1_INTEGER() was used
      and would cause ASN1_INTEGER_cmp() to fail. Enhance s2i_ASN1_INTEGER()
   *) Fix 'openssl passwd -1'.
      [Bodo Moeller]
 
-  *) Add summary printout to ocsp utility. The various functions which
+  +) Add summary printout to ocsp utility. The various functions which
      convert status values to strings have been renamed to:
      OCSP_response_status_str(), OCSP_cert_status_str() and
      OCSP_crl_reason_str() and are no longer static. New options
      printout format cleaned up.
      [Steve Henson]
 
-  *) Add additional OCSP certificate checks. These are those specified
+  +) Add additional OCSP certificate checks. These are those specified
      in RFC2560. This consists of two separate checks: the CA of the
      certificate being checked must either be the OCSP signer certificate
      or the issuer of the OCSP signer certificate. In the latter case the
      in the OCSP_CERTID structures of the response.
      [Steve Henson]
 
-  *) Initial OCSP certificate verification added to OCSP_basic_verify()
+  +) Initial OCSP certificate verification added to OCSP_basic_verify()
      and related routines. This uses the standard OpenSSL certificate
      verify routines to perform initial checks (just CA validity) and
      to obtain the certificate chain. Then additional checks will be
      chains to that CA is an acceptable OCSP signing certificate.
      [Steve Henson]
 
-  *) New '-extfile ...' option to 'openssl ca' for reading X.509v3
+  +) New '-extfile ...' option to 'openssl ca' for reading X.509v3
      extensions from a separate configuration file.
      As when reading extensions from the main configuration file,
      the '-extensions ...' option may be used for specifying the
      by adding an extra length parameter to asc2uni().
      [Steve Henson, reported by <oddissey@samsung.co.kr>]
 
-  *) New OCSP utility. Allows OCSP requests to be generated or
+  +) New OCSP utility. Allows OCSP requests to be generated or
      read. The request can be sent to a responder and the output
      parsed, outputed or printed in text form. Not complete yet:
      still needs to check the OCSP response validity.
      [Steve Henson]
 
-  *) New subcommands for 'openssl ca':
+  +) New subcommands for 'openssl ca':
      'openssl ca -status <serial>' prints the status of the cert with
      the given serial number (according to the index file).
      'openssl ca -updatedb' updates the expiry status of certificates
      in the index file.
      [Massimiliano Pala <madwolf@comune.modena.it>]
 
-  *) New '-newreq-nodes' command option to CA.pl.  This is like
+  +) New '-newreq-nodes' command option to CA.pl.  This is like
      '-newreq', but calls 'openssl req' with the '-nodes' option
      so that the resulting key is not encrypted.
      [Damien Miller <djm@mindrot.org>]
 
-  *) New configuration for the GNU Hurd.
+  +) New configuration for the GNU Hurd.
      [Jonathan Bartlett <johnnyb@wolfram.com> via Richard Levitte]
 
-  *) Initial code to implement OCSP basic response verify. This
+  +) Initial code to implement OCSP basic response verify. This
      is currently incomplete. Currently just finds the signer's
      certificate and verifies the signature on the response.
      [Steve Henson]
 
-  *) New SSLeay_version code SSLEAY_DIR to determine the compiled-in
+  +) New SSLeay_version code SSLEAY_DIR to determine the compiled-in
      value of OPENSSLDIR.  This is available via the new '-d' option
      to 'openssl version', and is also included in 'openssl version -a'.
      [Bodo Moeller]
      call failed, free the DSA structure.
      [Bodo Moeller]
 
-  *) Allowing defining memory allocation callbacks that will be given
+  +) Allowing defining memory allocation callbacks that will be given
      file name and line number information in additional arguments
      (a const char* and an int).  The basic functionality remains, as
      well as the original possibility to just replace malloc(),
      These are present in some PKCS#12 files.
      [Steve Henson]
 
-  *) Finish off removing the remaining LHASH function pointer casts.
+  +) Finish off removing the remaining LHASH function pointer casts.
      There should no longer be any prototype-casting required when using
      the LHASH abstraction, and any casts that remain are "bugs". See
      the callback types and macros at the head of lhash.h for details
      (and "OBJ_cleanup" in crypto/objects/obj_dat.c as an example).
      [Geoff Thorpe]
 
-  *) Add automatic query of EGD sockets in RAND_poll() for the unix variant.
-     If an EGD or PRNGD is running and enough entropy is returned, automatic
-     seeding like with /dev/[u]random will be performed.
-     Positions tried are: /etc/entropy, /var/run/egd-pool.
+  +) Add automatic query of EGD sockets in RAND_poll() for the unix variant.
+     If /dev/[u]random devices are not available or do not return enough
+     entropy, EGD style sockets (served by EGD or PRNGD) will automatically
+     be queried.
+     The locations /var/run/egd-pool, /dev/egd-pool, /etc/egd-pool, and
+     /etc/entropy will be queried once each in this sequence, quering stops
+     when enough entropy was collected without querying more sockets.
      [Lutz Jaenicke]
 
-  *) Change the Unix RAND_poll() variant to be able to poll several
+  +) Change the Unix RAND_poll() variant to be able to poll several
      random devices, as specified by DEVRANDOM, until a sufficient amount
      of data has been collected.   We spend at most 10 ms on each file
      (select timeout) and read in non-blocking mode.  DEVRANDOM now
      For VMS, there's a currently-empty rand_vms.c.
      [Richard Levitte]
 
-  *) Move OCSP client related routines to ocsp_cl.c. These
+  +) Move OCSP client related routines to ocsp_cl.c. These
      provide utility functions which an application needing
      to issue a request to an OCSP responder and analyse the
      response will typically need: as opposed to those which an
      validity of the nonce in an OCSP response.
      [Steve Henson]
 
-  *) Change function OCSP_request_add() to OCSP_request_add0_id().
+  +) Change function OCSP_request_add() to OCSP_request_add0_id().
      This doesn't copy the supplied OCSP_CERTID and avoids the
      need to free up the newly created id. Change return type
      to OCSP_ONEREQ to return the internal OCSP_ONEREQ structure.
      will be added elsewhere.
      [Steve Henson]
 
-  *) Update OCSP API. Remove obsolete extensions argument from
+  +) Update OCSP API. Remove obsolete extensions argument from
      various functions. Extensions are now handled using the new
      OCSP extension code. New simple OCSP HTTP function which 
      can be used to send requests and parse the response.
      [Steve Henson]
 
-  *) Fix the PKCS#7 (S/MIME) code to work with new ASN1. Two new
+  +) Fix the PKCS#7 (S/MIME) code to work with new ASN1. Two new
      ASN1_ITEM structures help with sign and verify. PKCS7_ATTR_SIGN
      uses the special reorder version of SET OF to sort the attributes
      and reorder them to match the encoded order. This resolves a long
      to produce the required SET OF.
      [Steve Henson]
 
-  *) Have mk1mf.pl generate the macros OPENSSL_BUILD_SHLIBCRYPTO and
+  +) Have mk1mf.pl generate the macros OPENSSL_BUILD_SHLIBCRYPTO and
      OPENSSL_BUILD_SHLIBSSL and use them appropriately in the header
      files to get correct declarations of the ASN.1 item variables.
      [Richard Levitte]
 
-  *) Rewrite of PKCS#12 code to use new ASN1 functionality. Replace many
+  +) Rewrite of PKCS#12 code to use new ASN1 functionality. Replace many
      PKCS#12 macros with real functions. Fix two unrelated ASN1 bugs:
      asn1_check_tlen() would sometimes attempt to use 'ctx' when it was
      NULL and ASN1_TYPE was not dereferenced properly in asn1_ex_c2i().
      ASN1_ITEM and no wrapper functions.
      [Steve Henson]
 
-  *) New functions or ASN1_item_d2i_fp() and ASN1_item_d2i_bio(). These
+  +) New functions or ASN1_item_d2i_fp() and ASN1_item_d2i_bio(). These
      replace the old function pointer based I/O routines. Change most of
      the *_d2i_bio() and *_d2i_fp() functions to use these.
      [Steve Henson]
 
-  *) Enhance mkdef.pl to be more accepting about spacing in C preprocessor
+  +) Enhance mkdef.pl to be more accepting about spacing in C preprocessor
      lines, recognice more "algorithms" that can be deselected, and make
      it complain about algorithm deselection that isn't recognised.
      [Richard Levitte]
 
-  *) New ASN1 functions to handle dup, sign, verify, digest, pack and
+  +) New ASN1 functions to handle dup, sign, verify, digest, pack and
      unpack operations in terms of ASN1_ITEM. Modify existing wrappers
      to use new functions. Add NO_ASN1_OLD which can be set to remove
      some old style ASN1 functions: this can be used to determine if old
      code will still work when these eventually go away.
      [Steve Henson]
 
-  *) New extension functions for OCSP structures, these follow the
+  +) New extension functions for OCSP structures, these follow the
      same conventions as certificates and CRLs.
      [Steve Henson]
 
-  *) New function X509V3_add1_i2d(). This automatically encodes and
+  +) New function X509V3_add1_i2d(). This automatically encodes and
      adds an extension. Its behaviour can be customised with various
      flags to append, replace or delete. Various wrappers added for
      certifcates and CRLs.
      [Steve Henson]
 
-  *) Fix to avoid calling the underlying ASN1 print routine when
+  +) Fix to avoid calling the underlying ASN1 print routine when
      an extension cannot be parsed. Correct a typo in the
      OCSP_SERVICELOC extension. Tidy up print OCSP format.
      [Steve Henson]
      [Bodo Moeller, Geoff Thorpe; original patch submitted by
      "Reddie, Steven" <Steven.Reddie@ca.com>]
 
-  *) Make mkdef.pl parse some of the ASN1 macros and add apropriate
+  +) Make mkdef.pl parse some of the ASN1 macros and add apropriate
      entries for variables.
      [Steve Henson]
 
   *) Fix a deadlock in CRYPTO_mem_leaks().
      [Bodo Moeller]
 
-  *) Add functionality to apps/openssl.c for detecting locking
+  +) Add functionality to apps/openssl.c for detecting locking
      problems: As the program is single-threaded, all we have
      to do is register a locking callback using an array for
      storing which locks are currently held by the program.
      [Bodo Moeller]
 
-  *) Use a lock around the call to CRYPTO_get_ex_new_index() in
+  +) Use a lock around the call to CRYPTO_get_ex_new_index() in
      SSL_get_ex_data_X509_STORE_idx(), which is used in
      ssl_verify_cert_chain() and thus can be called at any time
      during TLS/SSL handshakes so that thread-safety is essential.
      for multi-threaded use, so it probably should be abolished.
      [Bodo Moeller]
 
-  *) Added Broadcom "ubsec" ENGINE to OpenSSL.
+  +) Added Broadcom "ubsec" ENGINE to OpenSSL.
      [Broadcom, tweaked and integrated by Geoff Thorpe]
 
-  *) Move common extension printing code to new function
+  +) Move common extension printing code to new function
      X509V3_print_extensions(). Reorganise OCSP print routines and
      implement some needed OCSP ASN1 functions. Add OCSP extensions.
      [Steve Henson]
 
-  *) New function X509_signature_print() to remove duplication in some
+  +) New function X509_signature_print() to remove duplication in some
      print routines.
      [Steve Henson]
 
-  *) Add a special meaning when SET OF and SEQUENCE OF flags are both
+  +) Add a special meaning when SET OF and SEQUENCE OF flags are both
      set (this was treated exactly the same as SET OF previously). This
      is used to reorder the STACK representing the structure to match the
      encoding. This will be used to get round a problem where a PKCS7
      order did not reflect the encoded order.
      [Steve Henson]
 
-  *) Reimplement the OCSP ASN1 module using the new code.
+  +) Reimplement the OCSP ASN1 module using the new code.
      [Steve Henson]
 
-  *) Update the X509V3 code to permit the use of an ASN1_ITEM structure
+  +) Update the X509V3 code to permit the use of an ASN1_ITEM structure
      for its ASN1 operations. The old style function pointers still exist
      for now but they will eventually go away.
      [Steve Henson]
 
-  *) Merge in replacement ASN1 code from the ASN1 branch. This almost
+  +) Merge in replacement ASN1 code from the ASN1 branch. This almost
      completely replaces the old ASN1 functionality with a table driven
      encoder and decoder which interprets an ASN1_ITEM structure describing
      the ASN1 module. Compatibility with the existing ASN1 API (i2d,d2i) is
      has also been converted to the new form.
      [Steve Henson]
 
-  *) Change BN_mod_exp_recp so that negative moduli are tolerated
+  +) Change BN_mod_exp_recp so that negative moduli are tolerated
      (the sign is ignored).  Similarly, ignore the sign in BN_MONT_CTX_set
      so that BN_mod_exp_mont and BN_mod_exp_mont_word work
      for negative moduli.
      [Bodo Moeller]
 
-  *) Fix BN_uadd and BN_usub: Always return non-negative results instead
+  +) Fix BN_uadd and BN_usub: Always return non-negative results instead
      of not touching the result's sign bit.
      [Bodo Moeller]
 
-  *) BN_div bugfix: If the result is 0, the sign (res->neg) must not be
+  +) BN_div bugfix: If the result is 0, the sign (res->neg) must not be
      set.
      [Bodo Moeller]
 
-  *) Changed the LHASH code to use prototypes for callbacks, and created
+  +) Changed the LHASH code to use prototypes for callbacks, and created
      macros to declare and implement thin (optionally static) functions
      that provide type-safety and avoid function pointer casting for the
      type-specific callbacks.
   *) Use better test patterns in bntest.
      [Ulf Möller]
 
-  *) Added Kerberos Cipher Suites to be used with TLS, as written in
+  +) Added Kerberos Cipher Suites to be used with TLS, as written in
      RFC 2712.
      [Veers Staats <staatsvr@asc.hpc.mil>,
       Jeffrey Altman <jaltman@columbia.edu>, via Richard Levitte]
   *) BN_rshift bugfix for n == 0.
      [Bodo Moeller]
 
-  *) Reformat the FAQ so the different questions and answers can be divided
+  +) Reformat the FAQ so the different questions and answers can be divided
      in sections depending on the subject.
      [Richard Levitte]
 
-  *) Have the zlib compression code load ZLIB.DLL dynamically under
+  +) Have the zlib compression code load ZLIB.DLL dynamically under
      Windows.
      [Richard Levitte]
 
-  *) New function BN_mod_sqrt for computing square roots modulo a prime
+  +) New function BN_mod_sqrt for computing square roots modulo a prime
      (using the probabilistic Tonelli-Shanks algorithm unless
      p == 3 (mod 4)  or  p == 5 (mod 8),  which are cases that can
      be handled deterministically).
      [Lenka Fibikova <fibikova@exp-math.uni-essen.de>, Bodo Moeller]
 
+  *) Add a 'bctest' script that checks for some known 'bc' bugs
+     so that 'make test' does not abort just because 'bc' is broken.
+     [Bodo Moeller]
+
   *) Store verify_result within SSL_SESSION also for client side to
      avoid potential security hole. (Re-used sessions on the client side
      always resulted in verify_result==X509_V_OK, not using the original
      result of the server certificate verification.)
      [Lutz Jaenicke]
 
-  *) Make BN_mod_inverse faster by explicitly handling small quotients
+  +) Make BN_mod_inverse faster by explicitly handling small quotients
      in the Euclid loop. (Speed gain about 20% for small moduli [256 or
      512 bits], about 30% for larger ones [1024 or 2048 bits].)
      [Bodo Moeller]
      does the actual work for ssl3_read_internal.
      [Bodo Moeller]
 
-  *) New function BN_kronecker.
+  +) New function BN_kronecker.
      [Bodo Moeller]
 
-  *) Fix BN_gcd so that it works on negative inputs; the result is
+  +) Fix BN_gcd so that it works on negative inputs; the result is
      positive unless both parameters are zero.
      Previously something reasonably close to an infinite loop was
      possible because numbers could be growing instead of shrinking
      in the implementation of Euclid's algorithm.
      [Bodo Moeller]
 
-  *) Fix BN_is_word() and BN_is_one() macros to take into account the
+  +) Fix BN_is_word() and BN_is_one() macros to take into account the
      sign of the number in question.
 
      Fix BN_is_word(a,w) to work correctly for w == 0.
      happening the other way round.
      [Geoff Thorpe]
 
-  *) New function BN_swap.
+  +) New function BN_swap.
      [Bodo Moeller]
 
-  *) Use BN_nnmod instead of BN_mod in crypto/bn/bn_exp.c so that
+  +) Use BN_nnmod instead of BN_mod in crypto/bn/bn_exp.c so that
      the exponentiation functions are more likely to produce reasonable
      results on negative inputs.
      [Bodo Moeller]
 
-  *) Change BN_mod_mul so that the result is always non-negative.
+  +) Change BN_mod_mul so that the result is always non-negative.
      Previously, it could be negative if one of the factors was negative;
      I don't think anyone really wanted that behaviour.
      [Bodo Moeller]
 
-  *) Move BN_mod_... functions into new file crypto/bn/bn_mod.c
+  +) Move BN_mod_... functions into new file crypto/bn/bn_mod.c
      (except for exponentiation, which stays in crypto/bn/bn_exp.c,
      and BN_mod_mul_reciprocal, which stays in crypto/bn/bn_recp.c)
      and add new functions:
      be reduced modulo  m.
      [Lenka Fibikova <fibikova@exp-math.uni-essen.de>, Bodo Moeller]
 
-  *) Remove a few calls to bn_wexpand() in BN_sqr() (the one in there
+  +) Remove a few calls to bn_wexpand() in BN_sqr() (the one in there
      was actually never needed) and in BN_mul().  The removal in BN_mul()
      required a small change in bn_mul_part_recursive() and the addition
      of the functions bn_cmp_part_words(), bn_sub_part_words() and
      differing sizes.
      [Richard Levitte]
 
-  *) In 'openssl passwd', verify passwords read from the terminal
+  +) In 'openssl passwd', verify passwords read from the terminal
      unless the '-salt' option is used (which usually means that
      verification would just waste user's time since the resulting
      hash is going to be compared with some given password hash)
      cause any problems.
      [Bodo Moeller]
 
-  *) Remove all references to RSAref, since there's no more need for it.
+  +) Remove all references to RSAref, since there's no more need for it.
      [Richard Levitte]
 
   *) Increase BN_CTX_NUM (the number of BIGNUMs in a BN_CTX) to 16.
      The previous value, 12, was not always sufficient for BN_mod_exp().
      [Bodo Moeller]
 
-  *) Make DSO load along a path given through an environment variable
+  +) Make DSO load along a path given through an environment variable
      (SHLIB_PATH) with shl_load().
      [Richard Levitte]
 
-  *) Constify the ENGINE code as a result of BIGNUM constification.
+  +) Constify the ENGINE code as a result of BIGNUM constification.
      Also constify the RSA code and most things related to it.  In a
      few places, most notable in the depth of the ASN.1 code, ugly
      casts back to non-const were required (to be solved at a later
      time)
      [Richard Levitte]
 
-  *) Make it so the openssl application has all engines loaded by default.
+  +) Make it so the openssl application has all engines loaded by default.
      [Richard Levitte]
 
-  *) Constify the BIGNUM routines a little more.
+  +) Constify the BIGNUM routines a little more.
      [Richard Levitte]
 
   *) Make sure that shared libraries get the internal name engine with
      be changed again when we can guarantee backward binary compatibility.
      [Richard Levitte]
 
-  *) Add the following functions:
+  +) Add the following functions:
 
        ENGINE_load_cswift()
        ENGINE_load_chil()
      declarations (they differed!).
      [Richard Levitte]
 
-  *) 'openssl engine' can now list capabilities.
+  +) 'openssl engine' can now list capabilities.
      [Richard Levitte]
 
-  *) Better error reporting in 'openssl engine'.
+  +) Better error reporting in 'openssl engine'.
      [Richard Levitte]
 
-  *) Never call load_dh_param(NULL) in s_server.
+  +) Never call load_dh_param(NULL) in s_server.
      [Bodo Moeller]
 
-  *) Add engine application.  It can currently list engines by name and
+  +) Add engine application.  It can currently list engines by name and
      identity, and test if they are actually available.
      [Richard Levitte]
 
-  *) Add support for shared libraries under Irix.
+  +) Add support for shared libraries under Irix.
      [Albert Chin-A-Young <china@thewrittenword.com>]
 
-  *) Improve RPM specification file by forcing symbolic linking and making
+  +) Improve RPM specification file by forcing symbolic linking and making
      sure the installed documentation is also owned by root.root.
      [Damien Miller <djm@mindrot.org>]
 
-  *) Add configuration option to build on Linux on both big-endian and
+  +) Add configuration option to build on Linux on both big-endian and
      little-endian MIPS.
      [Ralf Baechle <ralf@uni-koblenz.de>]
 
-  *) Give the OpenSSL applications more possibilities to make use of
+  +) Give the OpenSSL applications more possibilities to make use of
      keys (public as well as private) handled by engines.
      [Richard Levitte]
 
-  *) Add OCSP code that comes from CertCo.
+  +) Add OCSP code that comes from CertCo.
      [Richard Levitte]
 
-  *) Add VMS support for the Rijndael code.
+  +) Add VMS support for the Rijndael code.
      [Richard Levitte]
 
-  *) Added untested support for Nuron crypto accelerator.
+  +) Added untested support for Nuron crypto accelerator.
      [Ben Laurie]
 
-  *) Add support for external cryptographic devices.  This code was
+  +) Add support for external cryptographic devices.  This code was
      previously distributed separately as the "engine" branch.
      [Geoff Thorpe, Richard Levitte]
 
-  *) Rework the filename-translation in the DSO code. It is now possible to
+  +) Rework the filename-translation in the DSO code. It is now possible to
      have far greater control over how a "name" is turned into a filename
      depending on the operating environment and any oddities about the
      different shared library filenames on each system.
      [Geoff Thorpe]
 
-  *) Support threads on FreeBSD-elf in Configure.
+  +) Support threads on FreeBSD-elf in Configure.
      [Richard Levitte]
 
-  *) Add the possibility to create shared libraries on HP-UX
+  +) Add the possibility to create shared libraries on HP-UX
      [Richard Levitte]
 
-  *) Fix for SHA1 assembly problem with MASM: it produces
+  +) Fix for SHA1 assembly problem with MASM: it produces
      warnings about corrupt line number information when assembling
      with debugging information. This is caused by the overlapping
      of two sections.
      [Bernd Matthes <mainbug@celocom.de>, Steve Henson]
 
-  *) NCONF changes.
+  +) NCONF changes.
      NCONF_get_number() has no error checking at all.  As a replacement,
      NCONF_get_number_e() is defined (_e for "error checking") and is
      promoted strongly.  The old NCONF_get_number is kept around for
        static ones.
      [Richard Levitte]
 
-  *) Fix for non blocking accept BIOs. Added new I/O special reason
+  +) Fix for non blocking accept BIOs. Added new I/O special reason
      BIO_RR_ACCEPT to cover this case. Previously use of accept BIOs
      with non blocking I/O was not possible because no retry code was
      implemented. Also added new SSL code SSL_WANT_ACCEPT to cover
      this case.
      [Steve Henson]
 
-  *) Added the beginnings of Rijndael support.
+  +) Added the beginnings of Rijndael support.
      [Ben Laurie]
 
-  *) Fix for bug in DirectoryString mask setting. Add support for
+  +) Fix for bug in DirectoryString mask setting. Add support for
      X509_NAME_print_ex() in 'req' and X509_print_ex() function
      to allow certificate printing to more controllable, additional
      'certopt' option to 'x509' to allow new printing options to be
      set.
      [Steve Henson]
 
-  *) Clean old EAY MD5 hack from e_os.h.
+  +) Clean old EAY MD5 hack from e_os.h.
      [Richard Levitte]
 
   *) Fix SSL_CTX_set_read_ahead macro to actually use its argument.
      matter what.
      [Richard Levitte]
 
+  *) Added several new manual pages for SSL_* function.
+     [Lutz Jaenicke]
+
  Changes between 0.9.5a and 0.9.6  [24 Sep 2000]
 
   *) In ssl23_get_client_hello, generate an error message when faced
                                      copied!)
      [Bodo Moeller]
 
-  *) Bugfix: SSL_set_mode ignored its parameter, only SSL_CTX_set_mode
+  *) Bugfix: SSL_set_options ignored its parameter, only SSL_CTX_set_options
      worked.
 
   *) Fix problems with no-hmac etc.