159191Skris=pod
259191Skris
359191Skris=head1 NAME
459191Skris
559191Skrisdsa - Digital Signature Algorithm
659191Skris
759191Skris=head1 SYNOPSIS
859191Skris
959191Skris #include <openssl/dsa.h>
10109998Smarkm #include <openssl/engine.h>
1159191Skris
1259191Skris DSA *	DSA_new(void);
1359191Skris void	DSA_free(DSA *dsa);
1459191Skris
15109998Smarkm int	DSA_size(const DSA *dsa);
1659191Skris
1759191Skris DSA *	DSA_generate_parameters(int bits, unsigned char *seed,
1859191Skris                int seed_len, int *counter_ret, unsigned long *h_ret,
1959191Skris		void (*callback)(int, int, void *), void *cb_arg);
2059191Skris
21109998Smarkm DH *	DSA_dup_DH(const DSA *r);
2259191Skris
2359191Skris int	DSA_generate_key(DSA *dsa);
2459191Skris
2559191Skris int	DSA_sign(int dummy, const unsigned char *dgst, int len,
2659191Skris		unsigned char *sigret, unsigned int *siglen, DSA *dsa);
2759191Skris int	DSA_sign_setup(DSA *dsa, BN_CTX *ctx, BIGNUM **kinvp,
2859191Skris                BIGNUM **rp);
2959191Skris int	DSA_verify(int dummy, const unsigned char *dgst, int len,
30109998Smarkm		const unsigned char *sigbuf, int siglen, DSA *dsa);
3159191Skris
32109998Smarkm void DSA_set_default_method(const DSA_METHOD *meth);
33109998Smarkm const DSA_METHOD *DSA_get_default_method(void);
34109998Smarkm int DSA_set_method(DSA *dsa, const DSA_METHOD *meth);
35109998Smarkm DSA *DSA_new_method(ENGINE *engine);
36109998Smarkm const DSA_METHOD *DSA_OpenSSL(void);
3759191Skris
3859191Skris int DSA_get_ex_new_index(long argl, char *argp, int (*new_func)(),
3959191Skris	     int (*dup_func)(), void (*free_func)());
4059191Skris int DSA_set_ex_data(DSA *d, int idx, char *arg);
4159191Skris char *DSA_get_ex_data(DSA *d, int idx);
4259191Skris
4359191Skris DSA_SIG *DSA_SIG_new(void);
4459191Skris void	DSA_SIG_free(DSA_SIG *a);
45109998Smarkm int	i2d_DSA_SIG(const DSA_SIG *a, unsigned char **pp);
4659191Skris DSA_SIG *d2i_DSA_SIG(DSA_SIG **v, unsigned char **pp, long length);
4759191Skris
4859191Skris DSA_SIG *DSA_do_sign(const unsigned char *dgst, int dlen, DSA *dsa);
4959191Skris int	DSA_do_verify(const unsigned char *dgst, int dgst_len,
5059191Skris	     DSA_SIG *sig, DSA *dsa);
5159191Skris
5259191Skris DSA *	d2i_DSAPublicKey(DSA **a, unsigned char **pp, long length);
5359191Skris DSA *	d2i_DSAPrivateKey(DSA **a, unsigned char **pp, long length);
5459191Skris DSA * 	d2i_DSAparams(DSA **a, unsigned char **pp, long length);
55109998Smarkm int	i2d_DSAPublicKey(const DSA *a, unsigned char **pp);
56109998Smarkm int 	i2d_DSAPrivateKey(const DSA *a, unsigned char **pp);
57109998Smarkm int	i2d_DSAparams(const DSA *a,unsigned char **pp);
5859191Skris
59109998Smarkm int	DSAparams_print(BIO *bp, const DSA *x);
60109998Smarkm int	DSAparams_print_fp(FILE *fp, const DSA *x);
61109998Smarkm int	DSA_print(BIO *bp, const DSA *x, int off);
62109998Smarkm int	DSA_print_fp(FILE *bp, const DSA *x, int off);
6359191Skris
6459191Skris=head1 DESCRIPTION
6559191Skris
6659191SkrisThese functions implement the Digital Signature Algorithm (DSA).  The
6759191Skrisgeneration of shared DSA parameters is described in
6859191SkrisL<DSA_generate_parameters(3)|DSA_generate_parameters(3)>;
6959191SkrisL<DSA_generate_key(3)|DSA_generate_key(3)> describes how to
7059191Skrisgenerate a signature key. Signature generation and verification are
7159191Skrisdescribed in L<DSA_sign(3)|DSA_sign(3)>.
7259191Skris
7359191SkrisThe B<DSA> structure consists of several BIGNUM components.
7459191Skris
7559191Skris struct
7659191Skris        {
7759191Skris        BIGNUM *p;		// prime number (public)
7859191Skris        BIGNUM *q;		// 160-bit subprime, q | p-1 (public)
7959191Skris        BIGNUM *g;		// generator of subgroup (public)
8059191Skris        BIGNUM *priv_key;	// private key x
8159191Skris        BIGNUM *pub_key;	// public key y = g^x
8259191Skris        // ...
8359191Skris        }
8459191Skris DSA;
8559191Skris
8659191SkrisIn public keys, B<priv_key> is NULL.
8759191Skris
88109998SmarkmNote that DSA keys may use non-standard B<DSA_METHOD> implementations,
89109998Smarkmeither directly or by the use of B<ENGINE> modules. In some cases (eg. an
90109998SmarkmENGINE providing support for hardware-embedded keys), these BIGNUM values
91109998Smarkmwill not be used by the implementation or may be used for alternative data
92109998Smarkmstorage. For this reason, applications should generally avoid using DSA
93109998Smarkmstructure elements directly and instead use API functions to query or
94109998Smarkmmodify keys.
95109998Smarkm
9659191Skris=head1 CONFORMING TO
9759191Skris
9859191SkrisUS Federal Information Processing Standard FIPS 186 (Digital Signature
9959191SkrisStandard, DSS), ANSI X9.30
10059191Skris
10159191Skris=head1 SEE ALSO
10259191Skris
10359191SkrisL<bn(3)|bn(3)>, L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
104109998SmarkmL<rsa(3)|rsa(3)>, L<sha(3)|sha(3)>, L<engine(3)|engine(3)>,
105109998SmarkmL<DSA_new(3)|DSA_new(3)>,
10659191SkrisL<DSA_size(3)|DSA_size(3)>,
10759191SkrisL<DSA_generate_parameters(3)|DSA_generate_parameters(3)>,
10859191SkrisL<DSA_dup_DH(3)|DSA_dup_DH(3)>,
10959191SkrisL<DSA_generate_key(3)|DSA_generate_key(3)>,
11059191SkrisL<DSA_sign(3)|DSA_sign(3)>, L<DSA_set_method(3)|DSA_set_method(3)>,
11159191SkrisL<DSA_get_ex_new_index(3)|DSA_get_ex_new_index(3)>,
11259191SkrisL<RSA_print(3)|RSA_print(3)>
11359191Skris
11459191Skris=cut
115