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