diff options
author | beck <> | 2000-03-19 11:13:58 +0000 |
---|---|---|
committer | beck <> | 2000-03-19 11:13:58 +0000 |
commit | 796d609550df3a33fc11468741c5d2f6d3df4c11 (patch) | |
tree | 6c6d539061caa20372dad0ac4ddb1dfae2fbe7fe /src/lib/libcrypto/dsa/dsa_lib.c | |
parent | 5be3114c1fd7e0dfea1e38d3abb4cbba75244419 (diff) | |
download | openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.gz openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.tar.bz2 openbsd-796d609550df3a33fc11468741c5d2f6d3df4c11.zip |
OpenSSL 0.9.5 merge
*warning* this bumps shared lib minors for libssl and libcrypto from 2.1 to 2.2
if you are using the ssl26 packages for ssh and other things to work you will
need to get new ones (see ~beck/libsslsnap/<arch>) on cvs or ~beck/src-patent.tar.gz on cvs
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_lib.c')
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_lib.c | 68 |
1 files changed, 65 insertions, 3 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_lib.c b/src/lib/libcrypto/dsa/dsa_lib.c index ce8e204f7e..224e412afc 100644 --- a/src/lib/libcrypto/dsa/dsa_lib.c +++ b/src/lib/libcrypto/dsa/dsa_lib.c | |||
@@ -66,7 +66,38 @@ | |||
66 | 66 | ||
67 | const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT; | 67 | const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT; |
68 | 68 | ||
69 | static DSA_METHOD *default_DSA_method; | ||
70 | static int dsa_meth_num = 0; | ||
71 | static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL; | ||
72 | |||
73 | void DSA_set_default_method(DSA_METHOD *meth) | ||
74 | { | ||
75 | default_DSA_method = meth; | ||
76 | } | ||
77 | |||
78 | DSA_METHOD *DSA_get_default_method(void) | ||
79 | { | ||
80 | if(!default_DSA_method) default_DSA_method = DSA_OpenSSL(); | ||
81 | return default_DSA_method; | ||
82 | } | ||
83 | |||
69 | DSA *DSA_new(void) | 84 | DSA *DSA_new(void) |
85 | { | ||
86 | return DSA_new_method(NULL); | ||
87 | } | ||
88 | |||
89 | DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth) | ||
90 | { | ||
91 | DSA_METHOD *mtmp; | ||
92 | mtmp = dsa->meth; | ||
93 | if (mtmp->finish) mtmp->finish(dsa); | ||
94 | dsa->meth = meth; | ||
95 | if (meth->init) meth->init(dsa); | ||
96 | return mtmp; | ||
97 | } | ||
98 | |||
99 | |||
100 | DSA *DSA_new_method(DSA_METHOD *meth) | ||
70 | { | 101 | { |
71 | DSA *ret; | 102 | DSA *ret; |
72 | 103 | ||
@@ -76,13 +107,15 @@ DSA *DSA_new(void) | |||
76 | DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); | 107 | DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); |
77 | return(NULL); | 108 | return(NULL); |
78 | } | 109 | } |
110 | if(!default_DSA_method) default_DSA_method = DSA_OpenSSL(); | ||
111 | if(meth) ret->meth = meth; | ||
112 | else ret->meth = default_DSA_method; | ||
79 | ret->pad=0; | 113 | ret->pad=0; |
80 | ret->version=0; | 114 | ret->version=0; |
81 | ret->write_params=1; | 115 | ret->write_params=1; |
82 | ret->p=NULL; | 116 | ret->p=NULL; |
83 | ret->q=NULL; | 117 | ret->q=NULL; |
84 | ret->g=NULL; | 118 | ret->g=NULL; |
85 | ret->flags=DSA_FLAG_CACHE_MONT_P; | ||
86 | 119 | ||
87 | ret->pub_key=NULL; | 120 | ret->pub_key=NULL; |
88 | ret->priv_key=NULL; | 121 | ret->priv_key=NULL; |
@@ -92,6 +125,15 @@ DSA *DSA_new(void) | |||
92 | ret->method_mont_p=NULL; | 125 | ret->method_mont_p=NULL; |
93 | 126 | ||
94 | ret->references=1; | 127 | ret->references=1; |
128 | ret->flags=ret->meth->flags; | ||
129 | if ((ret->meth->init != NULL) && !ret->meth->init(ret)) | ||
130 | { | ||
131 | Free(ret); | ||
132 | ret=NULL; | ||
133 | } | ||
134 | else | ||
135 | CRYPTO_new_ex_data(dsa_meth,ret,&ret->ex_data); | ||
136 | |||
95 | return(ret); | 137 | return(ret); |
96 | } | 138 | } |
97 | 139 | ||
@@ -114,6 +156,10 @@ void DSA_free(DSA *r) | |||
114 | } | 156 | } |
115 | #endif | 157 | #endif |
116 | 158 | ||
159 | CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data); | ||
160 | |||
161 | if(r->meth->finish) r->meth->finish(r); | ||
162 | |||
117 | if (r->p != NULL) BN_clear_free(r->p); | 163 | if (r->p != NULL) BN_clear_free(r->p); |
118 | if (r->q != NULL) BN_clear_free(r->q); | 164 | if (r->q != NULL) BN_clear_free(r->q); |
119 | if (r->g != NULL) BN_clear_free(r->g); | 165 | if (r->g != NULL) BN_clear_free(r->g); |
@@ -121,8 +167,6 @@ void DSA_free(DSA *r) | |||
121 | if (r->priv_key != NULL) BN_clear_free(r->priv_key); | 167 | if (r->priv_key != NULL) BN_clear_free(r->priv_key); |
122 | if (r->kinv != NULL) BN_clear_free(r->kinv); | 168 | if (r->kinv != NULL) BN_clear_free(r->kinv); |
123 | if (r->r != NULL) BN_clear_free(r->r); | 169 | if (r->r != NULL) BN_clear_free(r->r); |
124 | if (r->method_mont_p != NULL) | ||
125 | BN_MONT_CTX_free((BN_MONT_CTX *)r->method_mont_p); | ||
126 | Free(r); | 170 | Free(r); |
127 | } | 171 | } |
128 | 172 | ||
@@ -145,6 +189,24 @@ int DSA_size(DSA *r) | |||
145 | return(ret); | 189 | return(ret); |
146 | } | 190 | } |
147 | 191 | ||
192 | int DSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func, | ||
193 | CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func) | ||
194 | { | ||
195 | dsa_meth_num++; | ||
196 | return(CRYPTO_get_ex_new_index(dsa_meth_num-1, | ||
197 | &dsa_meth,argl,argp,new_func,dup_func,free_func)); | ||
198 | } | ||
199 | |||
200 | int DSA_set_ex_data(DSA *d, int idx, void *arg) | ||
201 | { | ||
202 | return(CRYPTO_set_ex_data(&d->ex_data,idx,arg)); | ||
203 | } | ||
204 | |||
205 | void *DSA_get_ex_data(DSA *d, int idx) | ||
206 | { | ||
207 | return(CRYPTO_get_ex_data(&d->ex_data,idx)); | ||
208 | } | ||
209 | |||
148 | #ifndef NO_DH | 210 | #ifndef NO_DH |
149 | DH *DSA_dup_DH(DSA *r) | 211 | DH *DSA_dup_DH(DSA *r) |
150 | { | 212 | { |