diff options
author | beck <> | 2000-12-15 02:58:47 +0000 |
---|---|---|
committer | beck <> | 2000-12-15 02:58:47 +0000 |
commit | 9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch) | |
tree | 5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/dsa/dsa_lib.c | |
parent | e131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff) | |
download | openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.gz openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.tar.bz2 openbsd-9200bb13d15da4b2a23e6bc92c20e95b74aa2113.zip |
openssl-engine-0.9.6 merge
Diffstat (limited to 'src/lib/libcrypto/dsa/dsa_lib.c')
-rw-r--r-- | src/lib/libcrypto/dsa/dsa_lib.c | 74 |
1 files changed, 62 insertions, 12 deletions
diff --git a/src/lib/libcrypto/dsa/dsa_lib.c b/src/lib/libcrypto/dsa/dsa_lib.c index 224e412afc..b31b946ad3 100644 --- a/src/lib/libcrypto/dsa/dsa_lib.c +++ b/src/lib/libcrypto/dsa/dsa_lib.c | |||
@@ -63,6 +63,7 @@ | |||
63 | #include <openssl/bn.h> | 63 | #include <openssl/bn.h> |
64 | #include <openssl/dsa.h> | 64 | #include <openssl/dsa.h> |
65 | #include <openssl/asn1.h> | 65 | #include <openssl/asn1.h> |
66 | #include <openssl/engine.h> | ||
66 | 67 | ||
67 | const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT; | 68 | const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT; |
68 | 69 | ||
@@ -70,12 +71,26 @@ static DSA_METHOD *default_DSA_method; | |||
70 | static int dsa_meth_num = 0; | 71 | static int dsa_meth_num = 0; |
71 | static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL; | 72 | static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL; |
72 | 73 | ||
73 | void DSA_set_default_method(DSA_METHOD *meth) | 74 | void DSA_set_default_openssl_method(DSA_METHOD *meth) |
74 | { | 75 | { |
75 | default_DSA_method = meth; | 76 | ENGINE *e; |
77 | /* We'll need to notify the "openssl" ENGINE of this | ||
78 | * change too. We won't bother locking things down at | ||
79 | * our end as there was never any locking in these | ||
80 | * functions! */ | ||
81 | if(default_DSA_method != meth) | ||
82 | { | ||
83 | default_DSA_method = meth; | ||
84 | e = ENGINE_by_id("openssl"); | ||
85 | if(e) | ||
86 | { | ||
87 | ENGINE_set_DSA(e, meth); | ||
88 | ENGINE_free(e); | ||
89 | } | ||
90 | } | ||
76 | } | 91 | } |
77 | 92 | ||
78 | DSA_METHOD *DSA_get_default_method(void) | 93 | DSA_METHOD *DSA_get_default_openssl_method(void) |
79 | { | 94 | { |
80 | if(!default_DSA_method) default_DSA_method = DSA_OpenSSL(); | 95 | if(!default_DSA_method) default_DSA_method = DSA_OpenSSL(); |
81 | return default_DSA_method; | 96 | return default_DSA_method; |
@@ -86,6 +101,7 @@ DSA *DSA_new(void) | |||
86 | return DSA_new_method(NULL); | 101 | return DSA_new_method(NULL); |
87 | } | 102 | } |
88 | 103 | ||
104 | #if 0 | ||
89 | DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth) | 105 | DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth) |
90 | { | 106 | { |
91 | DSA_METHOD *mtmp; | 107 | DSA_METHOD *mtmp; |
@@ -95,21 +111,52 @@ DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth) | |||
95 | if (meth->init) meth->init(dsa); | 111 | if (meth->init) meth->init(dsa); |
96 | return mtmp; | 112 | return mtmp; |
97 | } | 113 | } |
114 | #else | ||
115 | int DSA_set_method(DSA *dsa, ENGINE *engine) | ||
116 | { | ||
117 | ENGINE *mtmp; | ||
118 | DSA_METHOD *meth; | ||
119 | mtmp = dsa->engine; | ||
120 | meth = ENGINE_get_DSA(mtmp); | ||
121 | if (!ENGINE_init(engine)) | ||
122 | return 0; | ||
123 | if (meth->finish) meth->finish(dsa); | ||
124 | dsa->engine = engine; | ||
125 | meth = ENGINE_get_DSA(engine); | ||
126 | if (meth->init) meth->init(dsa); | ||
127 | /* SHOULD ERROR CHECK THIS!!! */ | ||
128 | ENGINE_finish(mtmp); | ||
129 | return 1; | ||
130 | } | ||
131 | #endif | ||
98 | 132 | ||
99 | 133 | ||
134 | #if 0 | ||
100 | DSA *DSA_new_method(DSA_METHOD *meth) | 135 | DSA *DSA_new_method(DSA_METHOD *meth) |
136 | #else | ||
137 | DSA *DSA_new_method(ENGINE *engine) | ||
138 | #endif | ||
101 | { | 139 | { |
140 | DSA_METHOD *meth; | ||
102 | DSA *ret; | 141 | DSA *ret; |
103 | 142 | ||
104 | ret=(DSA *)Malloc(sizeof(DSA)); | 143 | ret=(DSA *)OPENSSL_malloc(sizeof(DSA)); |
105 | if (ret == NULL) | 144 | if (ret == NULL) |
106 | { | 145 | { |
107 | DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); | 146 | DSAerr(DSA_F_DSA_NEW,ERR_R_MALLOC_FAILURE); |
108 | return(NULL); | 147 | return(NULL); |
109 | } | 148 | } |
110 | if(!default_DSA_method) default_DSA_method = DSA_OpenSSL(); | 149 | if(engine) |
111 | if(meth) ret->meth = meth; | 150 | ret->engine = engine; |
112 | else ret->meth = default_DSA_method; | 151 | else |
152 | { | ||
153 | if((ret->engine=ENGINE_get_default_DSA()) == NULL) | ||
154 | { | ||
155 | OPENSSL_free(ret); | ||
156 | return NULL; | ||
157 | } | ||
158 | } | ||
159 | meth = ENGINE_get_DSA(ret->engine); | ||
113 | ret->pad=0; | 160 | ret->pad=0; |
114 | ret->version=0; | 161 | ret->version=0; |
115 | ret->write_params=1; | 162 | ret->write_params=1; |
@@ -125,10 +172,10 @@ DSA *DSA_new_method(DSA_METHOD *meth) | |||
125 | ret->method_mont_p=NULL; | 172 | ret->method_mont_p=NULL; |
126 | 173 | ||
127 | ret->references=1; | 174 | ret->references=1; |
128 | ret->flags=ret->meth->flags; | 175 | ret->flags=meth->flags; |
129 | if ((ret->meth->init != NULL) && !ret->meth->init(ret)) | 176 | if ((meth->init != NULL) && !meth->init(ret)) |
130 | { | 177 | { |
131 | Free(ret); | 178 | OPENSSL_free(ret); |
132 | ret=NULL; | 179 | ret=NULL; |
133 | } | 180 | } |
134 | else | 181 | else |
@@ -139,6 +186,7 @@ DSA *DSA_new_method(DSA_METHOD *meth) | |||
139 | 186 | ||
140 | void DSA_free(DSA *r) | 187 | void DSA_free(DSA *r) |
141 | { | 188 | { |
189 | DSA_METHOD *meth; | ||
142 | int i; | 190 | int i; |
143 | 191 | ||
144 | if (r == NULL) return; | 192 | if (r == NULL) return; |
@@ -158,7 +206,9 @@ void DSA_free(DSA *r) | |||
158 | 206 | ||
159 | CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data); | 207 | CRYPTO_free_ex_data(dsa_meth, r, &r->ex_data); |
160 | 208 | ||
161 | if(r->meth->finish) r->meth->finish(r); | 209 | meth = ENGINE_get_DSA(r->engine); |
210 | if(meth->finish) meth->finish(r); | ||
211 | ENGINE_finish(r->engine); | ||
162 | 212 | ||
163 | if (r->p != NULL) BN_clear_free(r->p); | 213 | if (r->p != NULL) BN_clear_free(r->p); |
164 | if (r->q != NULL) BN_clear_free(r->q); | 214 | if (r->q != NULL) BN_clear_free(r->q); |
@@ -167,7 +217,7 @@ void DSA_free(DSA *r) | |||
167 | if (r->priv_key != NULL) BN_clear_free(r->priv_key); | 217 | if (r->priv_key != NULL) BN_clear_free(r->priv_key); |
168 | if (r->kinv != NULL) BN_clear_free(r->kinv); | 218 | if (r->kinv != NULL) BN_clear_free(r->kinv); |
169 | if (r->r != NULL) BN_clear_free(r->r); | 219 | if (r->r != NULL) BN_clear_free(r->r); |
170 | Free(r); | 220 | OPENSSL_free(r); |
171 | } | 221 | } |
172 | 222 | ||
173 | int DSA_size(DSA *r) | 223 | int DSA_size(DSA *r) |