diff options
Diffstat (limited to 'src/lib/libcrypto/engine/engine_lib.c')
-rw-r--r-- | src/lib/libcrypto/engine/engine_lib.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/src/lib/libcrypto/engine/engine_lib.c b/src/lib/libcrypto/engine/engine_lib.c index 1df07af03a..d6e9109f6e 100644 --- a/src/lib/libcrypto/engine/engine_lib.c +++ b/src/lib/libcrypto/engine/engine_lib.c | |||
@@ -230,17 +230,18 @@ EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id, | |||
230 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); | 230 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); |
231 | if(e->funct_ref == 0) | 231 | if(e->funct_ref == 0) |
232 | { | 232 | { |
233 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
233 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, | 234 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, |
234 | ENGINE_R_NOT_INITIALISED); | 235 | ENGINE_R_NOT_INITIALISED); |
235 | return 0; | 236 | return 0; |
236 | } | 237 | } |
238 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
237 | if (!e->load_privkey) | 239 | if (!e->load_privkey) |
238 | { | 240 | { |
239 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, | 241 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PRIVATE_KEY, |
240 | ENGINE_R_NO_LOAD_FUNCTION); | 242 | ENGINE_R_NO_LOAD_FUNCTION); |
241 | return 0; | 243 | return 0; |
242 | } | 244 | } |
243 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
244 | pkey = e->load_privkey(key_id, passphrase); | 245 | pkey = e->load_privkey(key_id, passphrase); |
245 | if (!pkey) | 246 | if (!pkey) |
246 | { | 247 | { |
@@ -265,17 +266,18 @@ EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, | |||
265 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); | 266 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); |
266 | if(e->funct_ref == 0) | 267 | if(e->funct_ref == 0) |
267 | { | 268 | { |
269 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
268 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, | 270 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, |
269 | ENGINE_R_NOT_INITIALISED); | 271 | ENGINE_R_NOT_INITIALISED); |
270 | return 0; | 272 | return 0; |
271 | } | 273 | } |
274 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
272 | if (!e->load_pubkey) | 275 | if (!e->load_pubkey) |
273 | { | 276 | { |
274 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, | 277 | ENGINEerr(ENGINE_F_ENGINE_LOAD_PUBLIC_KEY, |
275 | ENGINE_R_NO_LOAD_FUNCTION); | 278 | ENGINE_R_NO_LOAD_FUNCTION); |
276 | return 0; | 279 | return 0; |
277 | } | 280 | } |
278 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
279 | pkey = e->load_pubkey(key_id, passphrase); | 281 | pkey = e->load_pubkey(key_id, passphrase); |
280 | if (!pkey) | 282 | if (!pkey) |
281 | { | 283 | { |
@@ -286,8 +288,6 @@ EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id, | |||
286 | return pkey; | 288 | return pkey; |
287 | } | 289 | } |
288 | 290 | ||
289 | /* Initialise a engine type for use (or up its functional reference count | ||
290 | * if it's already in use). */ | ||
291 | int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) | 291 | int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) |
292 | { | 292 | { |
293 | if(e == NULL) | 293 | if(e == NULL) |
@@ -298,15 +298,16 @@ int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) | |||
298 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); | 298 | CRYPTO_w_lock(CRYPTO_LOCK_ENGINE); |
299 | if(e->struct_ref == 0) | 299 | if(e->struct_ref == 0) |
300 | { | 300 | { |
301 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
301 | ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_REFERENCE); | 302 | ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_REFERENCE); |
302 | return 0; | 303 | return 0; |
303 | } | 304 | } |
305 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
304 | if (!e->ctrl) | 306 | if (!e->ctrl) |
305 | { | 307 | { |
306 | ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_CONTROL_FUNCTION); | 308 | ENGINEerr(ENGINE_F_ENGINE_CTRL,ENGINE_R_NO_CONTROL_FUNCTION); |
307 | return 0; | 309 | return 0; |
308 | } | 310 | } |
309 | CRYPTO_w_unlock(CRYPTO_LOCK_ENGINE); | ||
310 | return e->ctrl(cmd, i, p, f); | 311 | return e->ctrl(cmd, i, p, f); |
311 | } | 312 | } |
312 | 313 | ||