|  | =pod | 
|  |  | 
|  | =head1 NAME | 
|  |  | 
|  | DSA_meth_new, DSA_meth_free, DSA_meth_dup, DSA_meth_get0_name, | 
|  | DSA_meth_set1_name, DSA_meth_get_flags, DSA_meth_set_flags, | 
|  | DSA_meth_get0_app_data, DSA_meth_set0_app_data, DSA_meth_get_sign, | 
|  | DSA_meth_set_sign, DSA_meth_get_sign_setup, DSA_meth_set_sign_setup, | 
|  | DSA_meth_get_verify, DSA_meth_set_verify, DSA_meth_get_mod_exp, | 
|  | DSA_meth_set_mod_exp, DSA_meth_get_bn_mod_exp, DSA_meth_set_bn_mod_exp, | 
|  | DSA_meth_get_init, DSA_meth_set_init, DSA_meth_get_finish, DSA_meth_set_finish, | 
|  | DSA_meth_get_paramgen, DSA_meth_set_paramgen, DSA_meth_get_keygen, | 
|  | DSA_meth_set_keygen  - Routines to build up DSA methods | 
|  |  | 
|  | =head1 SYNOPSIS | 
|  |  | 
|  | #include <openssl/dsa.h> | 
|  |  | 
|  | DSA_METHOD *DSA_meth_new(const char *name, int flags); | 
|  | void DSA_meth_free(DSA_METHOD *dsam); | 
|  | DSA_METHOD *DSA_meth_dup(const DSA_METHOD *meth); | 
|  | const char *DSA_meth_get0_name(const DSA_METHOD *dsam); | 
|  | int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name); | 
|  | int DSA_meth_get_flags(DSA_METHOD *dsam); | 
|  | int DSA_meth_set_flags(DSA_METHOD *dsam, int flags); | 
|  | void *DSA_meth_get0_app_data(const DSA_METHOD *dsam); | 
|  | int DSA_meth_set0_app_data(DSA_METHOD *dsam, void *app_data); | 
|  | DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam)) | 
|  | (const unsigned char *, int, DSA *); | 
|  | int DSA_meth_set_sign(DSA_METHOD *dsam, | 
|  | DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); | 
|  | int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) | 
|  | (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); | 
|  | int DSA_meth_set_sign_setup(DSA_METHOD *dsam, | 
|  | int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); | 
|  | int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) | 
|  | (const unsigned char *, int , DSA_SIG *, DSA *); | 
|  | int DSA_meth_set_verify(DSA_METHOD *dsam, | 
|  | int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); | 
|  | int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam)) | 
|  | (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, BIGNUM *p2, | 
|  | BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *in_mont); | 
|  | int DSA_meth_set_mod_exp(DSA_METHOD *dsam, | 
|  | int (*mod_exp) (DSA *dsa, BIGNUM *rr, BIGNUM *a1, BIGNUM *p1, BIGNUM *a2, | 
|  | BIGNUM *p2, BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *mont)); | 
|  | int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam)) | 
|  | (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, const BIGNUM *m, | 
|  | BN_CTX *ctx, BN_MONT_CTX *mont); | 
|  | int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam, | 
|  | int (*bn_mod_exp) (DSA *dsa, BIGNUM *r, BIGNUM *a, const BIGNUM *p, | 
|  | const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *mont)); | 
|  | int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *); | 
|  | int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *)); | 
|  | int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *); | 
|  | int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *)); | 
|  | int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam)) | 
|  | (DSA *, int, const unsigned char *, int, int *, unsigned long *, | 
|  | BN_GENCB *); | 
|  | int DSA_meth_set_paramgen(DSA_METHOD *dsam, | 
|  | int (*paramgen) (DSA *, int, const unsigned char *, int, int *, | 
|  | unsigned long *, BN_GENCB *)); | 
|  | int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *); | 
|  | int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *)); | 
|  |  | 
|  | =head1 DESCRIPTION | 
|  |  | 
|  | The B<DSA_METHOD> type is a structure used for the provision of custom DSA | 
|  | implementations. It provides a set of of functions used by OpenSSL for the | 
|  | implementation of the various DSA capabilities. See the L<dsa> page for more | 
|  | information. | 
|  |  | 
|  | DSA_meth_new() creates a new B<DSA_METHOD> structure. It should be given a | 
|  | unique B<name> and a set of B<flags>. The B<name> should be a NULL terminated | 
|  | string, which will be duplicated and stored in the B<DSA_METHOD> object. It is | 
|  | the callers responsibility to free the original string. The flags will be used | 
|  | during the construction of a new B<DSA> object based on this B<DSA_METHOD>. Any | 
|  | new B<DSA> object will have those flags set by default. | 
|  |  | 
|  | DSA_meth_dup() creates a duplicate copy of the B<DSA_METHOD> object passed as a | 
|  | parameter. This might be useful for creating a new B<DSA_METHOD> based on an | 
|  | existing one, but with some differences. | 
|  |  | 
|  | DSA_meth_free() destroys a B<DSA_METHOD> structure and frees up any memory | 
|  | associated with it. | 
|  |  | 
|  | DSA_meth_get0_name() will return a pointer to the name of this DSA_METHOD. This | 
|  | is a pointer to the internal name string and so should not be freed by the | 
|  | caller. DSA_meth_set1_name() sets the name of the DSA_METHOD to B<name>. The | 
|  | string is duplicated and the copy is stored in the DSA_METHOD structure, so the | 
|  | caller remains responsible for freeing the memory associated with the name. | 
|  |  | 
|  | DSA_meth_get_flags() returns the current value of the flags associated with this | 
|  | DSA_METHOD. DSA_meth_set_flags() provides the ability to set these flags. | 
|  |  | 
|  | The functions DSA_meth_get0_app_data() and DSA_meth_set0_app_data() provide the | 
|  | ability to associate implementation specific data with the DSA_METHOD. It is | 
|  | the application's responsibility to free this data before the DSA_METHOD is | 
|  | freed via a call to DSA_meth_free(). | 
|  |  | 
|  | DSA_meth_get_sign() and DSA_meth_set_sign() get and set the function used for | 
|  | creating a DSA signature respectively. This function will be | 
|  | called in response to the application calling DSA_do_sign() (or DSA_sign()). The | 
|  | parameters for the function have the same meaning as for DSA_do_sign(). | 
|  |  | 
|  | DSA_meth_get_sign_setup() and DSA_meth_set_sign_setup() get and set the function | 
|  | used for precalculating the DSA signature values B<k^-1> and B<r>. This function | 
|  | will be called in response to the application calling DSA_sign_setup(). The | 
|  | parameters for the function have the same meaning as for DSA_sign_setup(). | 
|  |  | 
|  | DSA_meth_get_verify() and DSA_meth_set_verify() get and set the function used | 
|  | for verifying a DSA signature respectively. This function will be called in | 
|  | response to the application calling DSA_do_verify() (or DSA_verify()). The | 
|  | parameters for the function have the same meaning as for DSA_do_verify(). | 
|  |  | 
|  | DSA_meth_get_mod_exp() and DSA_meth_set_mod_exp() get and set the function used | 
|  | for computing the following value: | 
|  |  | 
|  | rr = a1^p1 * a2^p2 mod m | 
|  |  | 
|  | This function will be called by the default OpenSSL method during verification | 
|  | of a DSA signature. The result is stored in the B<rr> parameter. This function | 
|  | may be NULL. | 
|  |  | 
|  | DSA_meth_get_bn_mod_exp() and DSA_meth_set_bn_mod_exp() get and set the function | 
|  | used for computing the following value: | 
|  |  | 
|  | r = a ^ p mod m | 
|  |  | 
|  | This function will be called by the default OpenSSL function for | 
|  | DSA_sign_setup(). The result is stored in the B<r> parameter. This function | 
|  | may be NULL. | 
|  |  | 
|  | DSA_meth_get_init() and DSA_meth_set_init() get and set the function used | 
|  | for creating a new DSA instance respectively. This function will be | 
|  | called in response to the application calling DSA_new() (if the current default | 
|  | DSA_METHOD is this one) or DSA_new_method(). The DSA_new() and DSA_new_method() | 
|  | functions will allocate the memory for the new DSA object, and a pointer to this | 
|  | newly allocated structure will be passed as a parameter to the function. This | 
|  | function may be NULL. | 
|  |  | 
|  | DSA_meth_get_finish() and DSA_meth_set_finish() get and set the function used | 
|  | for destroying an instance of a DSA object respectively. This function will be | 
|  | called in response to the application calling DSA_free(). A pointer to the DSA | 
|  | to be destroyed is passed as a parameter. The destroy function should be used | 
|  | for DSA implementation specific clean up. The memory for the DSA itself should | 
|  | not be freed by this function. This function may be NULL. | 
|  |  | 
|  | DSA_meth_get_paramgen() and DSA_meth_set_paramgen() get and set the function | 
|  | used for generating DSA parameters respectively. This function will be called in | 
|  | response to the application calling DSA_generate_parameters_ex() (or | 
|  | DSA_generate_parameters()). The parameters for the function have the same | 
|  | meaning as for DSA_generate_parameters_ex(). | 
|  |  | 
|  | DSA_meth_get_keygen() and DSA_meth_set_keygen() get and set the function | 
|  | used for generating a new DSA key pair respectively. This function will be | 
|  | called in response to the application calling DSA_generate_key(). The parameter | 
|  | for the function has the same meaning as for DSA_generate_key(). | 
|  |  | 
|  | =head1 RETURN VALUES | 
|  |  | 
|  | DSA_meth_new() and DSA_meth_dup() return the newly allocated DSA_METHOD object | 
|  | or NULL on failure. | 
|  |  | 
|  | DSA_meth_get0_name() and DSA_meth_get_flags() return the name and flags | 
|  | associated with the DSA_METHOD respectively. | 
|  |  | 
|  | All other DSA_meth_get_*() functions return the appropriate function pointer | 
|  | that has been set in the DSA_METHOD, or NULL if no such pointer has yet been | 
|  | set. | 
|  |  | 
|  | DSA_meth_set1_name() and all DSA_meth_set_*() functions return 1 on success or | 
|  | 0 on failure. | 
|  |  | 
|  | =head1 SEE ALSO | 
|  |  | 
|  | L<DSA_new(3)>, L<DSA_new(3)>, L<DSA_generate_parameters(3)>, L<DSA_generate_key(3)>, | 
|  | L<DSA_dup_DH(3)>, L<DSA_do_sign(3)>, L<DSA_set_method(3)>, L<DSA_SIG_new(3)>, | 
|  | L<DSA_sign(3)>, L<DSA_size(3)>, L<DSA_get0_pqg(3)> | 
|  |  | 
|  | =head1 HISTORY | 
|  |  | 
|  | The functions described here were added in OpenSSL version 1.1.0. | 
|  |  | 
|  | =head1 COPYRIGHT | 
|  |  | 
|  | Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. | 
|  |  | 
|  | Licensed under the OpenSSL license (the "License").  You may not use | 
|  | this file except in compliance with the License.  You can obtain a copy | 
|  | in the file LICENSE in the source distribution or at | 
|  | L<https://www.openssl.org/source/license.html>. | 
|  |  | 
|  | =cut |