Lines Matching defs:dsa

60 #include <openssl/dsa.h>
89 DSA *dsa = (DSA *)OPENSSL_malloc(sizeof(DSA));
90 if (dsa == NULL) {
95 memset(dsa, 0, sizeof(DSA));
97 dsa->write_params = 1;
98 dsa->references = 1;
100 CRYPTO_MUTEX_init(&dsa->method_mont_p_lock);
101 CRYPTO_new_ex_data(&dsa->ex_data);
103 return dsa;
106 void DSA_free(DSA *dsa) {
107 if (dsa == NULL) {
111 if (!CRYPTO_refcount_dec_and_test_zero(&dsa->references)) {
115 CRYPTO_free_ex_data(&g_ex_data_class, dsa, &dsa->ex_data);
117 BN_clear_free(dsa->p);
118 BN_clear_free(dsa->q);
119 BN_clear_free(dsa->g);
120 BN_clear_free(dsa->pub_key);
121 BN_clear_free(dsa->priv_key);
122 BN_clear_free(dsa->kinv);
123 BN_clear_free(dsa->r);
124 BN_MONT_CTX_free(dsa->method_mont_p);
125 CRYPTO_MUTEX_cleanup(&dsa->method_mont_p_lock);
126 OPENSSL_free(dsa);
129 int DSA_up_ref(DSA *dsa) {
130 CRYPTO_refcount_inc(&dsa->references);
134 int DSA_generate_parameters_ex(DSA *dsa, unsigned bits, const uint8_t *seed_in,
368 BN_free(dsa->p);
369 BN_free(dsa->q);
370 BN_free(dsa->g);
371 dsa->p = BN_dup(p);
372 dsa->q = BN_dup(q);
373 dsa->g = BN_dup(g);
374 if (dsa->p == NULL || dsa->q == NULL || dsa->g == NULL) {
396 int DSA_generate_key(DSA *dsa) {
407 priv_key = dsa->priv_key;
416 if (!BN_rand_range(priv_key, dsa->q)) {
421 pub_key = dsa->pub_key;
432 if (!BN_mod_exp(pub_key, dsa->g, &prk, dsa->p, ctx)) {
436 dsa->priv_key = priv_key;
437 dsa->pub_key = pub_key;
441 if (dsa->pub_key == NULL) {
444 if (dsa->priv_key == NULL) {
473 DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, DSA *dsa) {
485 if (!dsa->p || !dsa->q || !dsa->g) {
500 if (dsa->kinv == NULL || dsa->r == NULL) {
501 if (!DSA_sign_setup(dsa, ctx, &kinv, &r)) {
505 kinv = dsa->kinv;
506 dsa->kinv = NULL;
507 r = dsa->r;
508 dsa->r = NULL;
512 if (digest_len > BN_num_bytes(dsa->q)) {
514 * BN_num_bits(dsa->q) leftmost bits of the digest, see
516 digest_len = BN_num_bytes(dsa->q);
524 if (!BN_mod_mul(&xr, dsa->priv_key, r, dsa->q, ctx)) {
530 if (BN_cmp(s, dsa->q) > 0) {
531 if (!BN_sub(s, s, dsa->q)) {
535 if (!BN_mod_mul(s, s, kinv, dsa->q, ctx)) {
570 const DSA *dsa) {
572 if (!DSA_do_check_signature(&valid, digest, digest_len, sig, dsa)) {
579 size_t digest_len, DSA_SIG *sig, const DSA *dsa) {
588 if (!dsa->p || !dsa->q || !dsa->g) {
593 i = BN_num_bits(dsa->q);
600 if (BN_num_bits(dsa->p) > OPENSSL_DSA_MAX_MODULUS_BITS) {
615 BN_ucmp(sig->r, dsa->q) >= 0) {
620 BN_ucmp(sig->s, dsa->q) >= 0) {
627 if (BN_mod_inverse(&u2, sig->s, dsa->q, ctx) == NULL) {
634 * BN_num_bits(dsa->q) leftmost bits of the digest, see
644 if (!BN_mod_mul(&u1, &u1, &u2, dsa->q, ctx)) {
649 if (!BN_mod_mul(&u2, sig->r, &u2, dsa->q, ctx)) {
653 mont = BN_MONT_CTX_set_locked((BN_MONT_CTX **)&dsa->method_mont_p,
654 (CRYPTO_MUTEX *)&dsa->method_mont_p_lock,
655 dsa->p, ctx);
660 if (!BN_mod_exp2_mont(&t1, dsa->g, &u1, dsa->pub_key, &u2, dsa->p, ctx,
667 if (!BN_mod(&u1, &t1, dsa->q, ctx)) {
689 uint8_t *out_sig, unsigned int *out_siglen, DSA *dsa) {
692 s = DSA_do_sign(digest, digest_len, dsa);
704 const uint8_t *sig, size_t sig_len, const DSA *dsa) {
706 if (!DSA_check_signature(&valid, digest, digest_len, sig, sig_len, dsa)) {
714 const DSA *dsa) {
735 ret = DSA_do_check_signature(out_valid, digest, digest_len, s, dsa);
743 int DSA_size(const DSA *dsa) {
751 i = BN_num_bits(dsa->q);
764 int DSA_sign_setup(const DSA *dsa, BN_CTX *ctx_in, BIGNUM **out_kinv,
770 if (!dsa->p || !dsa->q || !dsa->g) {
793 if (!BN_rand_range(&k, dsa->q)) {
800 if (BN_MONT_CTX_set_locked((BN_MONT_CTX **)&dsa->method_mont_p,
801 (CRYPTO_MUTEX *)&dsa->method_mont_p_lock, dsa->p,
817 if (!BN_add(&kq, &kq, dsa->q)) {
820 if (BN_num_bits(&kq) <= BN_num_bits(dsa->q) && !BN_add(&kq, &kq, dsa->q)) {
826 if (!BN_mod_exp_mont(r, dsa->g, K, dsa->p, ctx, dsa->method_mont_p)) {
829 if (!BN_mod(r, r, dsa->q, ctx)) {
834 kinv = BN_mod_inverse(NULL, &k, dsa->q, ctx);