Skip to content
  1. Sep 06, 2001
  2. Sep 05, 2001
  3. Sep 04, 2001
  4. Sep 03, 2001
    • Geoff Thorpe's avatar
      This changes the existing hardware ENGINE implementations to dynamically · 2dc5383a
      Geoff Thorpe authored
      declare their own error strings so that they can be more easily compiled as
      external shared-libraries if desired. Also, each implementation has been
      given canonical "dynamic" support at the base of each file and is only
      built if the ENGINE_DYNAMIC_SUPPORT symbol is defined.
      
      Also, use "void" prototypes rather than empty prototypes in engine_int.h.
      
      This does not yet;
        (i) remove error strings when unloading,
       (ii) remove the redundant ENGINE_R_*** codes (though ENGINE_F_*** codes
            have gone), or
      (iii) provide any instructions on how to build shared-library ENGINEs or
            use them.
      
      All are on their way.
      2dc5383a
    • Geoff Thorpe's avatar
      This change adds a new ENGINE called "dynamic" that allows new ENGINE · 9391f977
      Geoff Thorpe authored
      implementations to be loaded from self-contained shared-libraries. It also
      provides (in engine.h) definitions and macros to help implement a
      self-contained ENGINE. Version control is handled in a way whereby the
      loader or loadee can veto the load depending on any objections it has with
      each other's declared interface level. The way this is currently
      implemented assumes a veto will only take place when one side notices the
      other's interface level is too *old*. If the other side is newer, it should
      be assumed the newer version knows better whether to veto the load or not.
      Version checking (like other "dynamic" settings) can be controlled using
      the "dynamic" ENGINE's control commands. Also, the semantics for the
      loading allow a shared-library ENGINE implementation to handle differing
      interface levels on the fly (eg. loading secondary shared-libraries
      depending on the versions required).
      
      Code will be added soon to the existing ENGINEs to illustrate how they can
      be built as external libraries rather than building statically into
      libcrypto.
      
      NB: Applications wanting to support "dynamic"-loadable ENGINEs will need to
      add support for ENGINE "control commands". See apps/engine.c for an example
      of this, and use "apps/openssl engine -vvvv" to test or experiment.
      9391f977
    • Geoff Thorpe's avatar
      Note the "ERR_unload_strings" function. · 5b166395
      Geoff Thorpe authored
      5b166395
    • Geoff Thorpe's avatar
      Add a new ERR function, "ERR_unload_strings", to complement the existing · 1738bb61
      Geoff Thorpe authored
      "ERR_load_strings" function.
      1738bb61
    • Geoff Thorpe's avatar
      Correct a typo. · 91b3f0e6
      Geoff Thorpe authored
      91b3f0e6
    • Bodo Möller's avatar
      Rename recently introduced functions for improved code clarity: · 6ac4e8bd
      Bodo Möller authored
            [DR]SA_up  =>  [DR]SA_up_ref
      6ac4e8bd
    • Bodo Möller's avatar
      Use uniformly chosen witnesses for Miller-Rabin test · 983495c4
      Bodo Möller authored
      (by using new BN_pseudo_rand_range function)
      983495c4
    • Bodo Möller's avatar
      rearrange #includes because trying to include <crypto/cryptodev.h> · 931a23a5
      Bodo Möller authored
      is a bad idea if OPENSSL_OPENBSD_DEV_CRYPTO is not defined
      931a23a5
  5. Sep 02, 2001
  6. Sep 01, 2001
    • Geoff Thorpe's avatar
      Note the "ex_data" changes. · 36026dfc
      Geoff Thorpe authored
      36026dfc
    • Geoff Thorpe's avatar
      Make the necessary changes to work with the recent "ex_data" overhaul. · 79aa04ef
      Geoff Thorpe authored
      See the commit log message for that for more information.
      
      NB: X509_STORE_CTX's use of "ex_data" support was actually misimplemented
      (initialisation by "memset" won't/can't/doesn't work). This fixes that but
      requires that X509_STORE_CTX_init() be able to handle errors - so its
      prototype has been changed to return 'int' rather than 'void'. All uses of
      that function throughout the source code have been tracked down and
      adjusted.
      79aa04ef
    • Geoff Thorpe's avatar
      First step in fixing "ex_data" support. Warning: big commit log ... · 3a079997
      Geoff Thorpe authored
      Currently, this change merely addresses where ex_data indexes are stored
      and managed, and thus fixes the thread-safety issues that existed at that
      level. "Class" code (eg. RSA, DSA, etc) no longer store their own STACKS
      and per-class index counters - all such data is stored inside ex_data.c. So
      rather than passing both STACK+counter to index-management ex_data
      functions, a 'class_index' is instead passed to indicate the class (eg.
      CRYPTO_EX_INDEX_RSA). New classes can be dynamically registered on-the-fly
      and this is also thread-safe inside ex_data.c (though whether the caller
      manages the return value in a thread-safe way is not addressed).
      
      This does not change the "get/set" functions on individual "ex_data"
      structures, and so thread-safety at that level isn't (yet) assured.
      Likewise, the method of getting and storing per-class indexes has not
      changed, so locking may still be required at the "caller" end but is
      nonetheless thread-safe inside "ex_data"'s internal implementation.
      Typically this occurs when code implements a new method of some kind and
      stores its own per-class index in a global variable without locking the
      setting and usage of that variable. If the code in question is likely to be
      used in multiple threads, locking the setting and use of that index is
      still up to the code in question. Possible fixes to this are being
      sketched, but definitely require more major changes to the API itself than
      this change undertakes.
      
      The underlying implementation in ex_data.c has also been modularised so
      that alternative "ex_data" implementations (that control all access to
      state) can be plugged in. Eg. a loaded module can have its implementation
      set to that of the application loaded it - the result being that
      thread-safety and consistency of "ex_data" classes and indexes can be
      maintained in the same place rather than the loaded module using its own
      copy of ex_data support code and state.
      
      Due to the centralisation of "state" with this change, cleanup of all
      "ex_data" state can now be performed properly. Previously all allocation of
      ex_data state was guaranteed to leak - and MemCheck_off() had been used to
      avoid it flagging up the memory debugging. A new function has been added to
      perfrom all this cleanup, CRYPTO_cleanup_all_ex_data(). The "openssl"
      command(s) have been changed to use this cleanup, as have the relevant test
      programs. External application code may want to do so too - failure to
      cleanup will not induce more memory leaking than was the case before, but
      the memory debugging is not tricked into hiding it any more so it may
      "appear" where it previously did not.
      3a079997
    • Geoff Thorpe's avatar
      Only OPENSSL_free() non-NULL pointers. · e19ea557
      Geoff Thorpe authored
      e19ea557