If an application supports static locks, it MUST support dynamic locks as
authorRichard Levitte <levitte@openssl.org>
Thu, 5 Dec 2002 00:57:20 +0000 (00:57 +0000)
committerRichard Levitte <levitte@openssl.org>
Thu, 5 Dec 2002 00:57:20 +0000 (00:57 +0000)
well to be able to use the CHIL engine.
PR: 281

crypto/engine/hw_ncipher.c
crypto/engine/hw_ncipher_err.c
crypto/engine/hw_ncipher_err.h

index b3757e2e8dfc2d1eb57aef85f91943ff9ff95988..58272a18c8085f2dfd449785a61e3fa1244423bd 100644 (file)
@@ -560,15 +560,23 @@ static int hwcrhk_init(ENGINE *e)
 
        /* Check if the application decided to support dynamic locks,
           and if it does, use them. */
-       if (disable_mutex_callbacks == 0 &&
-               CRYPTO_get_dynlock_create_callback() != NULL &&
-               CRYPTO_get_dynlock_lock_callback() != NULL &&
-               CRYPTO_get_dynlock_destroy_callback() != NULL)
+       if (disable_mutex_callbacks == 0)
                {
-               hwcrhk_globals.mutex_init = hwcrhk_mutex_init;
-               hwcrhk_globals.mutex_acquire = hwcrhk_mutex_lock;
-               hwcrhk_globals.mutex_release = hwcrhk_mutex_unlock;
-               hwcrhk_globals.mutex_destroy = hwcrhk_mutex_destroy;
+               if (CRYPTO_get_dynlock_create_callback() != NULL &&
+                       CRYPTO_get_dynlock_lock_callback() != NULL &&
+                       CRYPTO_get_dynlock_destroy_callback() != NULL)
+                       {
+                       hwcrhk_globals.mutex_init = hwcrhk_mutex_init;
+                       hwcrhk_globals.mutex_acquire = hwcrhk_mutex_lock;
+                       hwcrhk_globals.mutex_release = hwcrhk_mutex_unlock;
+                       hwcrhk_globals.mutex_destroy = hwcrhk_mutex_destroy;
+                       }
+               else if (CRYPTO_get_locking_callback() != NULL)
+                       {
+                       HWCRHKerr(HWCRHK_F_HWCRHK_INIT,HWCRHK_R_LOCKING_MISSING);
+                       ERR_add_error_data(1,"You HAVE to add dynamic locking callbacks via CRYPTO_set_dynlock_{create,lock,destroy}_callback()");
+                       goto err;
+                       }
                }
 
        /* Try and get a context - if not, we may have a DSO but no
index 24024cfc6f453e694924b3f1924f80e9c84a653f..e184dcaad9b7c98a4bc3075a844e3c421e347c31 100644 (file)
@@ -1,6 +1,6 @@
 /* hw_ncipher_err.c */
 /* ====================================================================
- * Copyright (c) 1999 The OpenSSL Project.  All rights reserved.
+ * Copyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -86,6 +86,7 @@ static ERR_STRING_DATA HWCRHK_str_reasons[]=
 {HWCRHK_R_CHIL_ERROR                     ,"chil error"},
 {HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED   ,"ctrl command not implemented"},
 {HWCRHK_R_DSO_FAILURE                    ,"dso failure"},
+{HWCRHK_R_LOCKING_MISSING                ,"locking missing"},
 {HWCRHK_R_MISSING_KEY_COMPONENTS         ,"missing key components"},
 {HWCRHK_R_NOT_INITIALISED                ,"not initialised"},
 {HWCRHK_R_NOT_LOADED                     ,"not loaded"},
index 4d65b1d4700868dc3d7bc12fd6afcb0e20b772c9..482086e3b51a95f81db5217d11acc88229b2d55b 100644 (file)
@@ -84,6 +84,7 @@ static void ERR_HWCRHK_error(int function, int reason, char *file, int line);
 #define HWCRHK_R_CHIL_ERROR                             102
 #define HWCRHK_R_CTRL_COMMAND_NOT_IMPLEMENTED           103
 #define HWCRHK_R_DSO_FAILURE                            104
+#define HWCRHK_R_LOCKING_MISSING                        114
 #define HWCRHK_R_MISSING_KEY_COMPONENTS                         105
 #define HWCRHK_R_NOT_INITIALISED                        106
 #define HWCRHK_R_NOT_LOADED                             107