Skip to content
CHANGES 292 KiB
Newer Older
 OpenSSL CHANGES
 Changes between 0.9.7a and 0.9.8  [xx XXX xxxx]
Bodo Möller's avatar
Bodo Möller committed

  *) Add functionality to check the public key of a certificate request
     against a given private.  This is useful to check that a certificate
     request can be signed by that key (self-signing).
     [Richard Levitte]

  *) Make it possible to have multiple active certificates with the same
     subject in the CA index file.  This is done only if the keyword
     'unique_subject' is set to 'no' in the main CA section (default
     if 'CA_default') of the configuration file.  The value is saved
     with the database itself in a separate index attribute file,
     named like the index file with '.attr' appended to the name.
     [Richard Levitte]

  *) Generate muti valued AVAs using '+' notation in config files for
     req and dirName.
     [Steve Henson]

  *) Support for nameConstraints certificate extension.
     [Steve Henson]

  *) Support for policyConstraints certificate extension.
     [Steve Henson]

  *) Support for policyMappings certificate extension.
     [Steve Henson]

  *) Fixed a typo bug that would cause ENGINE_set_default() to set an
     ENGINE as defaults for all supported algorithms irrespective of
     the 'flags' parameter. 'flags' is now honoured, so applications
     should make sure they are passing it correctly.
     [Geoff Thorpe]

  *) Make sure the default DSA_METHOD implementation only uses its
     dsa_mod_exp() and/or bn_mod_exp() handlers if they are non-NULL,
     and change its own handlers to be NULL so as to remove unnecessary
     indirection. This lets alternative implementations fallback to the
     default implementation more easily.
     [Geoff Thorpe]

  *) Support for directoryName in GeneralName related extensions
     in config files.
     [Steve Henson]

  *) Make it possible to link applications using Makefile.shared.
     Make that possible even when linking against static libraries!
     [Richard Levitte]

  *) Various fixes to base64 BIO and non blocking I/O. On write 
     flushes were not handled properly if the BIO retried. On read
     data was not being buffered properly and had various logic bugs.
     [Steve Henson]

  *) Support for single pass processing for S/MIME signing. This now
     means that S/MIME signing can be done from a pipe, in addition
     cleartext signing (multipart/signed type) is effectively streaming
     and the signed data does not need to be all held in memory.

     This is done with a new flag PKCS7_STREAM. When this flag is set
     PKCS7_sign() only initializes the PKCS7 structure and the actual signing
     is done after the data is output (and digests calculated) in
     SMIME_write_PKCS7().
     [Steve Henson]

  *) Add full support for -rpath/-R, both in shared libraries and
     applications, at least on the platforms where it's known how
     to do it.
     [Richard Levitte]

  *) In crypto/ec/ec_mult.c, implement fast point multiplication with
Bodo Möller's avatar
Bodo Möller committed
     precomputation, based on wNAF splitting: EC_GROUP_precompute_mult()
     will now compute a table of multiples of the generator that
Bodo Möller's avatar
Bodo Möller committed
     makes subsequent invocations of EC_POINTs_mul() or EC_POINT_mul()
     faster (notably in the case of a single point multiplication,
     scalar * generator).
     [Nils Larsch, Bodo Moeller]

  *) IPv6 support for certificate extensions. The various extensions
     which use the IP:a.b.c.d can now take IPv6 addresses using the
     formats of RFC1884 2.2 . IPv6 addresses are now also displayed
     correctly.
     [Steve Henson]

  *) Added an ENGINE that implements RSA by performing private key
     exponentiations with the GMP library. The conversions to and from
     GMP's mpz_t format aren't optimised nor are any montgomery forms
     cached, and on x86 it appears OpenSSL's own performance has caught up.
     However there are likely to be other architectures where GMP could
     provide a boost. This ENGINE is not built in by default, but it can be
     specified at Configure time and should be accompanied by the necessary
     linker additions, eg;
         ./config -DOPENSSL_USE_GMP -lgmp
     [Geoff Thorpe]

  *) "openssl engine" will not display ENGINE/DSO load failure errors when
     testing availability of engines with "-t" - the old behaviour is
     produced by increasing the feature's verbosity with "-tt".
     [Geoff Thorpe]

  *) ECDSA routines: under certain error conditions uninitialized BN objects
     could be freed. Solution: make sure initialization is performed early
     enough. (Reported and fix supplied by Nils Larsch <nla@trustcenter.de>
     via PR#459)
     [Lutz Jaenicke]

  *) Key-generation can now be implemented in RSA_METHOD, DSA_METHOD
     and DH_METHOD (eg. by ENGINE implementations) to override the normal
     software implementations. For DSA and DH, parameter generation can
     also be overriden by providing the appropriate method callbacks.
     [Geoff Thorpe]

  *) Change the "progress" mechanism used in key-generation and
     primality testing to functions that take a new BN_GENCB pointer in
     place of callback/argument pairs. The new API functions have "_ex"
     postfixes and the older functions are reimplemented as wrappers for
     the new ones. The OPENSSL_NO_DEPRECATED symbol can be used to hide
     declarations of the old functions to help (graceful) attempts to
     migrate to the new functions. Also, the new key-generation API
     functions operate on a caller-supplied key-structure and return
     success/failure rather than returning a key or NULL - this is to
     help make "keygen" another member function of RSA_METHOD etc.

     Example for using the new callback interface:

          int (*my_callback)(int a, int b, BN_GENCB *cb) = ...;
          void *my_arg = ...;
          BN_GENCB my_cb;

          BN_GENCB_set(&my_cb, my_callback, my_arg);

          return BN_is_prime_ex(some_bignum, BN_prime_checks, NULL, &cb);
          /* For the meaning of a, b in calls to my_callback(), see the
           * documentation of the function that calls the callback.
           * cb will point to my_cb; my_arg can be retrieved as cb->arg.
           * my_callback should return 1 if it wants BN_is_prime_ex()
           * to continue, or 0 to stop.
           */

  *) Change the ZLIB compression method to be stateful, and make it
     available to TLS with the number defined in 
     draft-ietf-tls-compression-04.txt.
     [Richard Levitte]

  *) Add the ASN.1 structures and functions for CertificatePair, which
     is defined as follows (according to X.509_4thEditionDraftV6.pdf):

     CertificatePair ::= SEQUENCE {
        forward		[0]	Certificate OPTIONAL,
        reverse		[1]	Certificate OPTIONAL,
        -- at least one of the pair shall be present -- }

     Also implement the PEM functions to read and write certificate
     pairs, and defined the PEM tag as "CERTIFICATE PAIR".

     This needed to be defined, mostly for the sake of the LDAP
     attribute crossCertificatePair, but may prove useful elsewhere as
     well.
     [Richard Levitte]

  *) Make it possible to inhibit symlinking of shared libraries in
     Makefile.shared, for Cygwin's sake.
     [Richard Levitte]

  *) Extend the BIGNUM API by creating new macros that behave like
     functions

          void BN_set_sign(BIGNUM *a, int neg);
          int BN_get_sign(const BIGNUM *a);

     and avoid the need to access 'a->neg' directly in applications.
     [Nils Larsch  <nla@trustcenter.de>]

  *) Implement fast modular reduction for pseudo-Mersenne primes
     used in NIST curves (crypto/bn/bn_nist.c, crypto/ec/ecp_nist.c).
     EC_GROUP_new_curve_GFp() will now automatically use this
     if applicable.
     [Nils Larsch <nla@trustcenter.de>]

  *) Add new lock type (CRYPTO_LOCK_BN).
     [Bodo Moeller]

  *) Change the ENGINE framework to automatically load engines
     dynamically from specific directories unless they could be
     found to already be built in or loaded.  Move all the
     current engines except for the cryptodev one to a new
     directory engines/.
     The engines in engines/ are built as shared libraries if
     the "shared" options was given to ./Configure or ./config.
     Otherwise, they are inserted in libcrypto.a.
     /usr/local/ssl/engines is the default directory for dynamic
     engines, but that can be overriden at configure time through
     the usual use of --prefix and/or --openssldir, and at run
     time with the environment variable OPENSSL_ENGINES.
Loading full blame...