Skip to content
CHANGES 97.9 KiB
Newer Older
 OpenSSL CHANGES
 Changes between 0.9.4 and 0.9.5  [xx XXX 1999]

  *) Clean up 'Finished' handling.
     [Bodo Moeller]

  *) Enhanced support for Alpha Linux is added. Now ./config checks if
     the host supports BWX extension and if Compaq C is present on the
     $PATH. Just exploiting of the BWX extention results in 20-30%
     performance kick for some algorithms, e.g. DES and RC4 to mention
     a couple. Compaq C in turn generates ~20% faster code for MD5 and
     SHA1.
     [Andy Polyakov]

  *) Add support for MS "fast SGC". This is arguably a violation of the
     SSL3/TLS protocol. Netscape SGC does two handshakes: the first with
     weak crypto and after checking the certificate is SGC a second one
     with strong crypto. MS SGC stops the first handshake after receiving
     the server certificate message and sends a second client hello. Since
     a server will typically do all the time consuming operations before
     expecting any further messages from the client (server key exchange
     is the most expensive) there is little difference between the two.

     To get OpenSSL to support MS SGC we have to permit a second client
     hello message after we have sent server done. In addition we have to
     reset the MAC if we do get this second client hello and include the
     data just received.
     [Steve Henson]

  *) Add a function 'd2i_AutoPrivateKey()' this will automatically decide
     if a DER encoded private key is RSA or DSA traditional format. Changed
     d2i_PrivateKey_bio() to use it. This is only needed for the "traditional"
     format DER encoded private key. Newer code should use PKCS#8 format which
     has the key type encoded in the ASN1 structure. Added DER private key
     support to pkcs8 application.
     [Steve Henson]

  *) SSL 3/TLS 1 servers now don't request certificates when an anonymous
     ciphersuites has been selected (as required by the SSL 3/TLS 1
     specifications).  Exception: When SSL_VERIFY_FAIL_IF_NO_PEER_CERT
     is set, we interpret this as a request to violate the specification
     (the worst that can happen is a handshake failure, and 'correct'
     behaviour would result in a handshake failure anyway).
     [Bodo Moeller]

  *) In SSL_CTX_add_session, take into account that there might be multiple
     SSL_SESSION structures with the same session ID (e.g. when two threads
     concurrently obtain them from an external cache).
     The internal cache can handle only one SSL_SESSION with a given ID,
     so if there's a conflict, we now throw out the old one to achieve
     consistency.
     [Bodo Moeller]

  *) Add OIDs for idea and blowfish in CBC mode. This will allow both
     to be used in PKCS#5 v2.0 and S/MIME.  Also add checking to
     some routines that use cipher OIDs: some ciphers do not have OIDs
     defined and so they cannot be used for S/MIME and PKCS#5 v2.0 for
     example.
     [Steve Henson]

  *) Simplify the trust setting structure and code. Now we just have
     two sequences of OIDs for trusted and rejected settings. These will
     typically have values the same as the extended key usage extension
     and any application specific purposes.

     The trust checking code now has a default behaviour: it will just
     check for an object with the same NID as the passed id. Functions can
     be provided to override either the default behaviour or the behaviour
     for a given id. SSL client, server and email already have functions
     in place for compatibility: they check the NID and also return "trusted"
     if the certificate is self signed.
     [Steve Henson]

  *) Add d2i,i2d bio/fp functions for PrivateKey: these convert the
     traditional format into an EVP_PKEY structure.
     [Steve Henson]

  *) Add a password callback function PEM_cb() which either prompts for
     a password if usr_data is NULL or otherwise assumes it is a null
     terminated password. Allow passwords to be passed on command line
     environment or config files in a few more utilities.
     [Steve Henson]

  *) Add a bunch of DER and PEM functions to handle PKCS#8 format private
     keys. Add some short names for PKCS#8 PBE algorithms and allow them
     to be specified on the command line for the pkcs8 and pkcs12 utilities.
     Update documentation.
     [Steve Henson]

  *) Support for ASN1 "NULL" type. This could be handled before by using
     ASN1_TYPE but there wasn't any function that would try to read a NULL
     and produce an error if it couldn't. For compatibility we also have
     ASN1_NULL_new() and ASN1_NULL_free() functions but these are faked and
     don't allocate anything because they don't need to.
     [Steve Henson]

  *) Initial support for MacOS is now provided. Examine INSTALL.MacOS
     for details.
     [Andy Polyakov, Roy Woods <roy@centicsystems.ca>]

  *) Rebuild of the memory allocation routines used by OpenSSL code and
     possibly others as well.  The purpose is to make an interface that
     provide hooks so anyone can build a separate set of allocation and
     deallocation routines to be used by OpenSSL, for example if memory
     pool implementations, or something else.  The same is provided for
     memory debugging code.  OpenSSL already comes with code that finds
     memory leaks, but this gives people a chance to debug other memory
     problems.
     With these changes, a new set of functions and macros have appeared:

       CRYPTO_set_mem_debug_functions()		[F]
       CRYPTO_get_mem_debug_functions()		[F]
       CRYPTO_dbg_set_options()			[F]
       CRYPTO_dbg_get_options()			[F]
       CRYPTO_melloc_debug_init()		[M]

     The memory debug functions are NULL by default, unless the library
     is compiled with CRYPTO_MDEBUG or friends is defined.  If someone
     wants to debug memory anyway, CRYPTO_malloc_debug_init() or
     CRYPTO_set_mem_debug_functions() must be used.

     Also, things like CRYPTO_set_mem_functions will always give the
     expected result (the new set of functions is used for allocation
     and deallocation) at all times, regardless of platform and compiler
     options.

     To finish it up, some functions that were never use in any other
     way than through macros have a new API and new semantic:

       CRYPTO_dbg_malloc()
       CRYPTO_dbg_realloc()
       CRYPTO_dbg_free()

     All macros of value have retained their old syntax.
  *) Some S/MIME fixes. The OID for SMIMECapabilities was wrong, the
     ordering of SMIMECapabilities wasn't in "strength order" and there
     was a missing NULL in the AlgorithmIdentifier for the SHA1 signature
     algorithm.
     [Steve Henson]

  *) Some ASN1 types with illegal zero length encoding (INTEGER,
     ENUMERATED and OBJECT IDENTIFIER) choked the ASN1 routines.
     [Frans Heymans <fheymans@isaserver.be>, modified by Steve Henson]

  *) Merge in my S/MIME library for OpenSSL. This provides a simple
     S/MIME API on top of the PKCS#7 code, a MIME parser (with enough
     functionality to handle multipart/signed properly) and a utility
     called 'smime' to call all this stuff. This is based on code I
     originally wrote for Celo who have kindly allowed it to be
     included in OpenSSL.
     [Steve Henson]

  *) Add variants des_set_key_checked and des_set_key_unchecked of
     des_set_key (aka des_key_sched).  Global variable des_check_key
     decides which of these is called by des_set_key; this way
     des_check_key behaves as it always did, but applications and
     the library itself, which was buggy for des_check_key == 1,
     have a cleaner way to pick the version they need.
     [Bodo Moeller]

  *) New function PKCS12_newpass() which changes the password of a
     PKCS12 structure.
     [Steve Henson]

  *) Modify X509_TRUST and X509_PURPOSE so it also uses a static and
     dynamic mix. In both cases the ids can be used as an index into the
     table. Also modified the X509_TRUST_add() and X509_PURPOSE_add()
     functions so they accept a list of the field values and the
     application doesn't need to directly manipulate the X509_TRUST
     structure.
     [Steve Henson]

  *) Modify the ASN1_STRING_TABLE stuff so it also uses bsearch and doesn't
     need initialising.
     [Steve Henson]

  *) Modify the way the V3 extension code looks up extensions. This now
     works in a similar way to the object code: we have some "standard"
     extensions in a static table which is searched with OBJ_bsearch()
     and the application can add dynamic ones if needed. The file
     crypto/x509v3/ext_dat.h now has the info: this file needs to be
     updated whenever a new extension is added to the core code and kept
     in ext_nid order. There is a simple program 'tabtest.c' which checks
     this. New extensions are not added too often so this file can readily
     be maintained manually.

     There are two big advantages in doing things this way. The extensions
     can be looked up immediately and no longer need to be "added" using
     X509V3_add_standard_extensions(): this function now does nothing.
     [Side note: I get *lots* of email saying the extension code doesn't
      work because people forget to call this function]
     Also no dynamic allocation is done unless new extensions are added:
     so if we don't add custom extensions there is no need to call
     X509V3_EXT_cleanup().
Loading full blame...