68 # include <openssl/e_os2.h>
70 # ifdef OPENSSL_NO_DSA
71 # error DSA is disabled.
74 # ifndef OPENSSL_NO_BIO
75 # include <openssl/bio.h>
77 # include <openssl/crypto.h>
78 # include <openssl/ossl_typ.h>
80 # ifndef OPENSSL_NO_DEPRECATED
81 # include <openssl/bn.h>
82 # ifndef OPENSSL_NO_DH
83 # include <openssl/dh.h>
87 # ifndef OPENSSL_DSA_MAX_MODULUS_BITS
88 # define OPENSSL_DSA_MAX_MODULUS_BITS 10000
91 # define DSA_FLAG_CACHE_MONT_P 0x01
97 # define DSA_FLAG_NO_EXP_CONSTTIME 0x02
106 # define DSA_FLAG_FIPS_METHOD 0x0400
114 # define DSA_FLAG_NON_FIPS_ALLOW 0x0400
131 DSA_SIG *(*dsa_do_sign) (
const unsigned char *dgst,
int dlen,
DSA *dsa);
132 int (*dsa_sign_setup) (
DSA *dsa, BN_CTX *ctx_in,
BIGNUM **kinvp,
134 int (*dsa_do_verify) (
const unsigned char *dgst,
int dgst_len,
142 int (*init) (
DSA *dsa);
143 int (*finish) (
DSA *dsa);
147 int (*dsa_paramgen) (
DSA *dsa,
int bits,
148 const unsigned char *seed,
int seed_len,
149 int *counter_ret,
unsigned long *h_ret,
152 int (*dsa_keygen) (
DSA *dsa);
180 # define d2i_DSAparams_fp(fp,x) (DSA *)ASN1_d2i_fp((char *(*)())DSA_new, \
181 (char *(*)())d2i_DSAparams,(fp),(unsigned char **)(x))
182 # define i2d_DSAparams_fp(fp,x) ASN1_i2d_fp(i2d_DSAparams,(fp), \
183 (unsigned char *)(x))
184 # define d2i_DSAparams_bio(bp,x) ASN1_d2i_bio_of(DSA,DSA_new,d2i_DSAparams,bp,x)
185 # define i2d_DSAparams_bio(bp,x) ASN1_i2d_bio_of_const(DSA,i2d_DSAparams,bp,x)
187 DSA *DSAparams_dup(
DSA *x);
190 int i2d_DSA_SIG(
const DSA_SIG *a,
unsigned char **pp);
191 DSA_SIG *d2i_DSA_SIG(
DSA_SIG **v,
const unsigned char **pp,
long length);
193 DSA_SIG *DSA_do_sign(
const unsigned char *dgst,
int dlen,
DSA *dsa);
194 int DSA_do_verify(
const unsigned char *dgst,
int dgst_len,
199 void DSA_set_default_method(
const DSA_METHOD *);
200 const DSA_METHOD *DSA_get_default_method(
void);
204 DSA *DSA_new_method(ENGINE *engine);
205 void DSA_free(
DSA *r);
207 int DSA_up_ref(
DSA *r);
208 int DSA_size(
const DSA *);
210 int DSA_sign_setup(
DSA *dsa, BN_CTX *ctx_in,
BIGNUM **kinvp,
BIGNUM **rp);
211 int DSA_sign(
int type,
const unsigned char *dgst,
int dlen,
212 unsigned char *sig,
unsigned int *siglen,
DSA *dsa);
213 int DSA_verify(
int type,
const unsigned char *dgst,
int dgst_len,
214 const unsigned char *sigbuf,
int siglen,
DSA *dsa);
215 int DSA_get_ex_new_index(
long argl,
void *argp, CRYPTO_EX_new *new_func,
216 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
217 int DSA_set_ex_data(
DSA *d,
int idx,
void *arg);
218 void *DSA_get_ex_data(
DSA *d,
int idx);
220 DSA *d2i_DSAPublicKey(
DSA **a,
const unsigned char **pp,
long length);
221 DSA *d2i_DSAPrivateKey(
DSA **a,
const unsigned char **pp,
long length);
222 DSA *d2i_DSAparams(
DSA **a,
const unsigned char **pp,
long length);
225 # ifndef OPENSSL_NO_DEPRECATED
226 DSA *DSA_generate_parameters(
int bits,
227 unsigned char *seed,
int seed_len,
228 int *counter_ret,
unsigned long *h_ret,
void
229 (*callback) (
int,
int,
void *),
void *cb_arg);
233 int DSA_generate_parameters_ex(
DSA *dsa,
int bits,
234 const unsigned char *seed,
int seed_len,
235 int *counter_ret,
unsigned long *h_ret,
238 int DSA_generate_key(
DSA *a);
239 int i2d_DSAPublicKey(
const DSA *a,
unsigned char **pp);
240 int i2d_DSAPrivateKey(
const DSA *a,
unsigned char **pp);
241 int i2d_DSAparams(
const DSA *a,
unsigned char **pp);
243 # ifndef OPENSSL_NO_BIO
244 int DSAparams_print(
BIO *bp,
const DSA *x);
245 int DSA_print(
BIO *bp,
const DSA *x,
int off);
247 # ifndef OPENSSL_NO_FP_API
248 int DSAparams_print_fp(FILE *fp,
const DSA *x);
249 int DSA_print_fp(FILE *bp,
const DSA *x,
int off);
252 # define DSS_prime_checks 64
259 # define DSA_is_prime(n, callback, cb_arg) \
260 BN_is_prime(n, DSS_prime_checks, callback, NULL, cb_arg)
262 # ifndef OPENSSL_NO_DH
267 DH *DSA_dup_DH(
const DSA *r);
270 # define EVP_PKEY_CTX_set_dsa_paramgen_bits(ctx, nbits) \
271 EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DSA, EVP_PKEY_OP_PARAMGEN, \
272 EVP_PKEY_CTRL_DSA_PARAMGEN_BITS, nbits, NULL)
274 # define EVP_PKEY_CTRL_DSA_PARAMGEN_BITS (EVP_PKEY_ALG_CTRL + 1)
275 # define EVP_PKEY_CTRL_DSA_PARAMGEN_Q_BITS (EVP_PKEY_ALG_CTRL + 2)
276 # define EVP_PKEY_CTRL_DSA_PARAMGEN_MD (EVP_PKEY_ALG_CTRL + 3)
283 void ERR_load_DSA_strings(
void);
288 # define DSA_F_D2I_DSA_SIG 110
289 # define DSA_F_DO_DSA_PRINT 104
290 # define DSA_F_DSAPARAMS_PRINT 100
291 # define DSA_F_DSAPARAMS_PRINT_FP 101
292 # define DSA_F_DSA_BUILTIN_PARAMGEN2 126
293 # define DSA_F_DSA_DO_SIGN 112
294 # define DSA_F_DSA_DO_VERIFY 113
295 # define DSA_F_DSA_GENERATE_KEY 124
296 # define DSA_F_DSA_GENERATE_PARAMETERS_EX 123
297 # define DSA_F_DSA_NEW_METHOD 103
298 # define DSA_F_DSA_PARAM_DECODE 119
299 # define DSA_F_DSA_PRINT_FP 105
300 # define DSA_F_DSA_PRIV_DECODE 115
301 # define DSA_F_DSA_PRIV_ENCODE 116
302 # define DSA_F_DSA_PUB_DECODE 117
303 # define DSA_F_DSA_PUB_ENCODE 118
304 # define DSA_F_DSA_SIGN 106
305 # define DSA_F_DSA_SIGN_SETUP 107
306 # define DSA_F_DSA_SIG_NEW 109
307 # define DSA_F_DSA_SIG_PRINT 125
308 # define DSA_F_DSA_VERIFY 108
309 # define DSA_F_I2D_DSA_SIG 111
310 # define DSA_F_OLD_DSA_PRIV_DECODE 122
311 # define DSA_F_PKEY_DSA_CTRL 120
312 # define DSA_F_PKEY_DSA_CTRL_STR 127
313 # define DSA_F_PKEY_DSA_KEYGEN 121
314 # define DSA_F_SIG_CB 114
317 # define DSA_R_BAD_Q_VALUE 102
318 # define DSA_R_BN_DECODE_ERROR 108
319 # define DSA_R_BN_ERROR 109
320 # define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100
321 # define DSA_R_DECODE_ERROR 104
322 # define DSA_R_INVALID_DIGEST_TYPE 106
323 # define DSA_R_INVALID_PARAMETERS 112
324 # define DSA_R_MISSING_PARAMETERS 101
325 # define DSA_R_MODULUS_TOO_LARGE 103
326 # define DSA_R_NEED_NEW_SETUP_VALUES 110
327 # define DSA_R_NON_FIPS_DSA_METHOD 111
328 # define DSA_R_NO_PARAMETERS_SET 107
329 # define DSA_R_PARAMETER_ENCODING_ERROR 105
330 # define DSA_R_Q_NOT_PRIME 113