DH_set_default_openssl_method,
       DH_get_default_openssl_method, DH_set_method,
       DH_new_method, DH_OpenSSL - select DH method


SYNOPSIS

        #include <openssl/dh.h>
        #include <openssl/engine.h>

        void DH_set_default_openssl_method(DH_METHOD *meth);

        DH_METHOD *DH_get_default_openssl_method(void);

        int DH_set_method(DH *dh, ENGINE *engine);

        DH *DH_new_method(ENGINE *engine);

        DH_METHOD *DH_OpenSSL(void);


DESCRIPTION

       A DH_METHOD specifies the functions that OpenSSL uses for
       Diffie-Hellman operations. By modifying the method,
       alternative implementations such as hardware accelerators
       may be used.

       Initially, the default is to use the OpenSSL internal
       implementation.  DH_OpenSSL() returns a pointer to that
       method.

       DH_set_default_openssl_method() makes meth the default
       method for all DH structures created later. NB: This is
       true only whilst the default engine for Diffie-Hellman
       operations remains as "openssl". ENGINEs provide an
       encapsulation for implementations of one or more
       algorithms, and all the DH functions mentioned here
       operate within the scope of the default "openssl" engine.

       DH_get_default_openssl_method() returns a pointer to the
       current default method for the "openssl" engine.

       DH_set_method() selects engine as the engine that will be
       responsible for all operations using the structure dh. If
       this function completes successfully, then the dh
       structure will have its own functional reference of
       engine, so the caller should remember to free their own
       reference to engine when they are finished with it. NB: An
       ENGINE's DH_METHOD can be retrieved (or set) by
       ENGINE_get_DH() or ENGINE_set_DH().

       DH_new_method() allocates and initializes a DH structure
       so that engine will be used for the DH operations. If
       engine is NULL, the default engine for Diffie-Hellman
       opertaions is used.

        typedef struct dh_meth_st
        {
            /* name of the implementation */
               const char *name;

            /* generate private and public DH values for key agreement */
               int (*generate_key)(DH *dh);

            /* compute shared secret */
               int (*compute_key)(unsigned char *key, BIGNUM *pub_key, DH *dh);

            /* compute r = a ^ p mod m (May be NULL for some implementations) */
               int (*bn_mod_exp)(DH *dh, BIGNUM *r, BIGNUM *a, const BIGNUM *p,
                                       const BIGNUM *m, BN_CTX *ctx,
                                       BN_MONT_CTX *m_ctx);

            /* called at DH_new */
               int (*init)(DH *dh);

            /* called at DH_free */
               int (*finish)(DH *dh);

               int flags;

               char *app_data; /* ?? */

        } DH_METHOD;


RETURN VALUES

       DH_OpenSSL() and DH_get_default_method() return pointers
       to the respective DH_METHODs.

       DH_set_default_openssl_method() returns no value.

       DH_set_method() returns non-zero if the ENGINE associated
       with dh was successfully changed to engine.

       DH_new_method() returns NULL and sets an error code that
       can be obtained by ERR_get_error(3) if the allocation
       fails.  Otherwise it returns a pointer to the newly
       allocated structure.


SEE ALSO

       dh(3), DH_new(3)


HISTORY

       DH_set_default_method(), DH_get_default_method(),
       DH_set_method(), DH_new_method() and DH_OpenSSL() were
       added in OpenSSL 0.9.4.

       DH_set_default_openssl_method() and
       DH_get_default_openssl_method() replaced

       respectively, and DH_set_method() and DH_new_method() were
       altered to use ENGINEs rather than DH_METHODs during
       development of OpenSSL 0.9.6.


Man(1) output converted with man2html