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) | 
