+#ifndef OPENSSL_NO_ERR
+/* Error function codes for use in atalla operation */
+#define ATALLA_F_ATALLA_INIT 100
+#define ATALLA_F_ATALLA_FINISH 101
+#define ATALLA_F_ATALLA_CTRL 102
+#define ATALLA_F_ATALLA_MOD_EXP 103
+#define ATALLA_F_ATALLA_RSA_MOD_EXP 104
+/* Error reason codes */
+#define ATALLA_R_ALREADY_LOADED 105
+#define ATALLA_R_NOT_LOADED 106
+#define ATALLA_R_UNIT_FAILURE 107
+#define ATALLA_R_CTRL_COMMAND_NOT_IMPLEMENTED 108
+#define ATALLA_R_BN_CTX_FULL 109
+#define ATALLA_R_BN_EXPAND_FAIL 110
+#define ATALLA_R_REQUEST_FAILED 111
+#define ATALLA_R_MISSING_KEY_COMPONENTS 112
+static ERR_STRING_DATA atalla_str_functs[] =
+ {
+ /* This first element is changed to match the dynamic 'lib' number */
+{ERR_PACK(0,0,0), "atalla engine code"},
+{ERR_PACK(0,ATALLA_F_ATALLA_INIT,0), "atalla_init"},
+{ERR_PACK(0,ATALLA_F_ATALLA_FINISH,0), "atalla_finish"},
+{ERR_PACK(0,ATALLA_F_ATALLA_CTRL,0), "atalla_ctrl"},
+{ERR_PACK(0,ATALLA_F_ATALLA_MOD_EXP,0), "atalla_mod_exp"},
+{ERR_PACK(0,ATALLA_F_ATALLA_RSA_MOD_EXP,0),"atalla_rsa_mod_exp"},
+{ATALLA_R_ALREADY_LOADED ,"already loaded"},
+{ATALLA_R_UNIT_FAILURE ,"unit failure"},
+{ATALLA_R_NOT_LOADED, "not loaded"},
+{ATALLA_R_CTRL_COMMAND_NOT_IMPLEMENTED ,"control command not implemented"},
+{ATALLA_R_BN_CTX_FULL ,"BN_CTX full"},
+{ATALLA_R_BN_EXPAND_FAIL ,"BN_expand failed"},
+{ATALLA_R_REQUEST_FAILED ,"request failed"},
+{ATALLA_R_MISSING_KEY_COMPONENTS ,"missing key components"},
+{0,NULL}
+ };
+/* The library number we obtain dynamically from the ERR code */
+static int atalla_err_lib = -1;
+#define ATALLAerr(f,r) ERR_PUT_error(atalla_err_lib,(f),(r),__FILE__,__LINE__)
+static void atalla_load_error_strings(void)
+ {
+ if (atalla_err_lib < 0)
+ {
+ if((atalla_err_lib = ERR_get_next_error_library()) <= 0)
+ return;
+ atalla_str_functs[0].error = ERR_PACK(atalla_err_lib, 0, 0);
+ ERR_load_strings(atalla_err_lib,atalla_str_functs);
+ }
+ }
+static void atalla_unload_error_strings(void)
+ {
+ if (atalla_err_lib >= 0)
+ {
+ ERR_unload_strings(atalla_err_lib,atalla_str_functs);
+ atalla_err_lib = -1;
+ }
+ }
+#else
+#define ATALLAerr(f,r) /* NOP */
+static void atalla_load_error_strings(void) { } /* NOP */
+static void atalla_unload_error_strings(void) { } /* NOP */
+#endif