DSA_set_default_openssl_method,
       DSA_get_default_openssl_method, DSA_set_method,
       DSA_new_method, DSA_OpenSSL - select DSA method


SYNOPSIS

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

        void DSA_set_default_openssl_method(DSA_METHOD *meth);

        DSA_METHOD *DSA_get_default_openssl_method(void);

        int DSA_set_method(DSA *dsa, ENGINE *engine);

        DSA *DSA_new_method(ENGINE *engine);

        DSA_METHOD *DSA_OpenSSL(void);


DESCRIPTION

       A DSA_METHOD specifies the functions that OpenSSL uses for
       DSA operations. By modifying the method, alternative
       implementations such as hardware accelerators may be used.

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

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

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

       DSA_set_method() selects engine for all operations using
       the structure dsa.

       DSA_new_method() allocates and initializes a DSA structure
       so that engine will be used for the DSA operations. If
       engine is NULL, the default engine for DSA operations is
       used.


THE DSA_METHOD STRUCTURE

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

               DSA_SIG *(*dsa_do_sign)(const unsigned char *dgst, int dlen,
                                        DSA *dsa);

            /* pre-compute k^-1 and r */
               int (*dsa_sign_setup)(DSA *dsa, BN_CTX *ctx_in, BIGNUM **kinvp,
                                        BIGNUM **rp);

            /* verify */
               int (*dsa_do_verify)(const unsigned char *dgst, int dgst_len,
                                        DSA_SIG *sig, DSA *dsa);

            /* compute rr = a1^p1 * a2^p2 mod m (May be NULL for some
                                                 implementations) */
               int (*dsa_mod_exp)(DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1,
                                        BIGNUM *a2, BIGNUM *p2, BIGNUM *m,
                                        BN_CTX *ctx, BN_MONT_CTX *in_mont);

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

            /* called at DSA_new */
               int (*init)(DSA *DSA);

            /* called at DSA_free */
               int (*finish)(DSA *DSA);

               int flags;

               char *app_data; /* ?? */

        } DSA_METHOD;


RETURN VALUES

       DSA_OpenSSL() and DSA_get_default_openssl_method() return
       pointers to the respective DSA_METHODs.

       DSA_set_default_openssl_method() returns no value.

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

       DSA_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

       dsa(3), DSA_new(3)

       DSA_set_default_method(), DSA_get_default_method(),
       DSA_set_method(), DSA_new_method() and DSA_OpenSSL() were
       added in OpenSSL 0.9.4.

       DSA_set_default_openssl_method() and
       DSA_get_default_openssl_method() replaced
       DSA_set_default_method() and DSA_get_default_method()
       respectively, and DSA_set_method() and DSA_new_method()
       were altered to use ENGINEs rather than DSA_METHODs during
       development of OpenSSL 0.9.6.


Man(1) output converted with man2html