summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/dsa/dsa_lib.c
diff options
context:
space:
mode:
authorbeck <>2000-12-15 02:58:47 +0000
committerbeck <>2000-12-15 02:58:47 +0000
commit9200bb13d15da4b2a23e6bc92c20e95b74aa2113 (patch)
tree5c52d628ec1e34be76e7ef2a4235d248b7c44d24 /src/lib/libcrypto/dsa/dsa_lib.c
parente131d25072e3d4197ba4b9bcc0d1b27d34d6488d (diff)
downloadopenbsd-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.c74
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
67const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT; 68const char *DSA_version="DSA" OPENSSL_VERSION_PTEXT;
68 69
@@ -70,12 +71,26 @@ static DSA_METHOD *default_DSA_method;
70static int dsa_meth_num = 0; 71static int dsa_meth_num = 0;
71static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL; 72static STACK_OF(CRYPTO_EX_DATA_FUNCS) *dsa_meth = NULL;
72 73
73void DSA_set_default_method(DSA_METHOD *meth) 74void 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
78DSA_METHOD *DSA_get_default_method(void) 93DSA_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
89DSA_METHOD *DSA_set_method(DSA *dsa, DSA_METHOD *meth) 105DSA_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
115int 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
100DSA *DSA_new_method(DSA_METHOD *meth) 135DSA *DSA_new_method(DSA_METHOD *meth)
136#else
137DSA *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
140void DSA_free(DSA *r) 187void 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
173int DSA_size(DSA *r) 223int DSA_size(DSA *r)