Various DSA opacity fixups
[openssl.git] / crypto / dsa / dsa_meth.c
1 /*
2  * Licensed under the OpenSSL licenses, (the "License");
3  * you may not use this file except in compliance with the License.
4  * You may obtain a copy of the License at
5  * https://www.openssl.org/source/license.html
6  * or in the file LICENSE in the source distribution.
7  */
8
9 #include "dsa_locl.h"
10 #include <string.h>
11
12 DSA_METHOD *DSA_meth_new(const char *name, int flags)
13 {
14     DSA_METHOD *dsam = OPENSSL_zalloc(sizeof(DSA_METHOD));
15
16     if (dsam != NULL) {
17         dsam->name = OPENSSL_strdup(name);
18         dsam->flags = flags;
19     }
20
21     return dsam;
22 }
23
24 void DSA_meth_free(DSA_METHOD *dsam)
25 {
26     if (dsam != NULL) {
27         if (dsam->name != NULL)
28             OPENSSL_free(dsam->name);
29         OPENSSL_free(dsam);
30     }
31 }
32
33 DSA_METHOD *DSA_meth_dup(const DSA_METHOD *dsam)
34 {
35     DSA_METHOD *ret;
36
37     ret = OPENSSL_malloc(sizeof(DSA_METHOD));
38
39     if (ret != NULL) {
40         memcpy(ret, dsam, sizeof(*dsam));
41         ret->name = OPENSSL_strdup(dsam->name);
42     }
43
44     return ret;
45 }
46
47 const char *DSA_meth_get0_name(const DSA_METHOD *dsam)
48 {
49     return dsam->name;
50 }
51
52 int DSA_meth_set1_name(DSA_METHOD *dsam, const char *name)
53 {
54     OPENSSL_free(dsam->name);
55     dsam->name = OPENSSL_strdup(name);
56
57     return dsam->name != NULL;
58 }
59
60 int DSA_meth_get_flags(DSA_METHOD *dsam)
61 {
62     return dsam->flags;
63 }
64
65 int DSA_meth_set_flags(DSA_METHOD *dsam, int flags)
66 {
67     dsam->flags = flags;
68     return 1;
69 }
70
71 void *DSA_meth_get_app_data(const DSA_METHOD *dsam)
72 {
73     return dsam->app_data;
74 }
75
76 int DSA_meth_set_app_data(DSA_METHOD *dsam, void *app_data)
77 {
78     dsam->app_data = app_data;
79     return 1;
80 }
81
82 DSA_SIG *(*DSA_meth_get_sign(const DSA_METHOD *dsam))
83         (const unsigned char *, int, DSA *)
84 {
85     return dsam->dsa_do_sign;
86 }
87
88 int DSA_meth_set_sign(DSA_METHOD *dsam,
89                        DSA_SIG *(*sign) (const unsigned char *, int, DSA *))
90 {
91     dsam->dsa_do_sign = sign;
92     return 1;
93 }
94
95 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam))
96         (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)
97 {
98     return dsam->dsa_sign_setup;
99 }
100
101 int DSA_meth_set_sign_setup(DSA_METHOD *dsam,
102         int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **))
103 {
104     dsam->dsa_sign_setup = sign_setup;
105     return 1;
106 }
107
108 int (*DSA_meth_get_verify(const DSA_METHOD *dsam))
109         (const unsigned char *, int , DSA_SIG *, DSA *)
110 {
111     return dsam->dsa_do_verify;
112 }
113
114 int DSA_meth_set_verify(DSA_METHOD *dsam,
115     int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *))
116 {
117     dsam->dsa_do_verify = verify;
118     return 1;
119 }
120
121 int (*DSA_meth_get_mod_exp(const DSA_METHOD *dsam))
122         (DSA *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *,
123          BN_CTX *, BN_MONT_CTX *)
124 {
125     return dsam->dsa_mod_exp;
126 }
127
128 int DSA_meth_set_mod_exp(DSA_METHOD *dsam,
129     int (*mod_exp) (DSA *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *, BIGNUM *,
130                     BIGNUM *, BN_CTX *, BN_MONT_CTX *))
131 {
132     dsam->dsa_mod_exp = mod_exp;
133     return 1;
134 }
135
136 int (*DSA_meth_get_bn_mod_exp(const DSA_METHOD *dsam))
137     (DSA *, BIGNUM *, BIGNUM *, const BIGNUM *, const BIGNUM *, BN_CTX *,
138      BN_MONT_CTX *)
139 {
140     return dsam->bn_mod_exp;
141 }
142
143 int DSA_meth_set_bn_mod_exp(DSA_METHOD *dsam,
144     int (*bn_mod_exp) (DSA *, BIGNUM *, BIGNUM *, const BIGNUM *,
145                        const BIGNUM *, BN_CTX *, BN_MONT_CTX *))
146 {
147     dsam->bn_mod_exp = bn_mod_exp;
148     return 1;
149 }
150
151 int (*DSA_meth_get_init(const DSA_METHOD *dsam))(DSA *)
152 {
153     return dsam->init;
154 }
155
156 int DSA_meth_set_init(DSA_METHOD *dsam, int (*init)(DSA *))
157 {
158     dsam->init = init;
159     return 1;
160 }
161
162 int (*DSA_meth_get_finish(const DSA_METHOD *dsam)) (DSA *)
163 {
164     return dsam->finish;
165 }
166
167 int DSA_meth_set_finish(DSA_METHOD *dsam, int (*finish) (DSA *))
168 {
169     dsam->finish = finish;
170     return 1;
171 }
172
173 int (*DSA_meth_get_paramgen(const DSA_METHOD *dsam))
174         (DSA *, int, const unsigned char *, int, int *, unsigned long *,
175          BN_GENCB *)
176 {
177     return dsam->dsa_paramgen;
178 }
179
180 int DSA_meth_set_paramgen(DSA_METHOD *dsam,
181         int (*paramgen) (DSA *, int, const unsigned char *, int, int *,
182                          unsigned long *, BN_GENCB *))
183 {
184     dsam->dsa_paramgen = paramgen;
185     return 1;
186 }
187
188 int (*DSA_meth_get_keygen(const DSA_METHOD *dsam)) (DSA *)
189 {
190     return dsam->dsa_keygen;
191 }
192
193 int DSA_meth_set_keygen(DSA_METHOD *dsam, int (*keygen) (DSA *))
194 {
195     dsam->dsa_keygen = keygen;
196     return 1;
197 }