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