64 #ifndef HEADER_ENGINE_H
65 #define HEADER_ENGINE_H
67 #include <openssl/opensslconf.h>
69 #ifdef OPENSSL_NO_ENGINE
70 #error ENGINE is disabled.
73 #ifndef OPENSSL_NO_DEPRECATED
74 #include <openssl/bn.h>
75 #ifndef OPENSSL_NO_RSA
76 #include <openssl/rsa.h>
78 #ifndef OPENSSL_NO_DSA
79 #include <openssl/dsa.h>
82 #include <openssl/dh.h>
84 #ifndef OPENSSL_NO_ECDH
85 #include <openssl/ecdh.h>
87 #ifndef OPENSSL_NO_ECDSA
88 #include <openssl/ecdsa.h>
90 #include <openssl/rand.h>
91 #include <openssl/store.h>
92 #include <openssl/ui.h>
93 #include <openssl/err.h>
96 #include <openssl/ossl_typ.h>
97 #include <openssl/symhacks.h>
105 #define ENGINE_METHOD_RSA (unsigned int)0x0001
106 #define ENGINE_METHOD_DSA (unsigned int)0x0002
107 #define ENGINE_METHOD_DH (unsigned int)0x0004
108 #define ENGINE_METHOD_RAND (unsigned int)0x0008
109 #define ENGINE_METHOD_ECDH (unsigned int)0x0010
110 #define ENGINE_METHOD_ECDSA (unsigned int)0x0020
111 #define ENGINE_METHOD_CIPHERS (unsigned int)0x0040
112 #define ENGINE_METHOD_DIGESTS (unsigned int)0x0080
113 #define ENGINE_METHOD_STORE (unsigned int)0x0100
115 #define ENGINE_METHOD_ALL (unsigned int)0xFFFF
116 #define ENGINE_METHOD_NONE (unsigned int)0x0000
122 #define ENGINE_TABLE_FLAG_NOINIT (unsigned int)0x0001
130 #define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002
139 #define ENGINE_FLAGS_BY_ID_COPY (int)0x0004
152 #define ENGINE_CMD_FLAG_NUMERIC (unsigned int)0x0001
155 #define ENGINE_CMD_FLAG_STRING (unsigned int)0x0002
158 #define ENGINE_CMD_FLAG_NO_INPUT (unsigned int)0x0004
162 #define ENGINE_CMD_FLAG_INTERNAL (unsigned int)0x0008
177 #define ENGINE_CTRL_SET_LOGSTREAM 1
178 #define ENGINE_CTRL_SET_PASSWORD_CALLBACK 2
179 #define ENGINE_CTRL_HUP 3
181 #define ENGINE_CTRL_SET_USER_INTERFACE 4
182 #define ENGINE_CTRL_SET_CALLBACK_DATA 5
186 #define ENGINE_CTRL_LOAD_CONFIGURATION 6
189 #define ENGINE_CTRL_LOAD_SECTION 7
210 #define ENGINE_CTRL_HAS_CTRL_FUNCTION 10
213 #define ENGINE_CTRL_GET_FIRST_CMD_TYPE 11
216 #define ENGINE_CTRL_GET_NEXT_CMD_TYPE 12
219 #define ENGINE_CTRL_GET_CMD_FROM_NAME 13
226 #define ENGINE_CTRL_GET_NAME_LEN_FROM_CMD 14
227 #define ENGINE_CTRL_GET_NAME_FROM_CMD 15
229 #define ENGINE_CTRL_GET_DESC_LEN_FROM_CMD 16
230 #define ENGINE_CTRL_GET_DESC_FROM_CMD 17
234 #define ENGINE_CTRL_GET_CMD_FLAGS 18
238 #define ENGINE_CMD_BASE 200
247 #define ENGINE_CTRL_CHIL_SET_FORKCHECK 100
252 #define ENGINE_CTRL_CHIL_NO_LOCKING 101
266 unsigned int cmd_num;
267 const char *cmd_name;
268 const char *cmd_desc;
269 unsigned int cmd_flags;
273 typedef int (*ENGINE_GEN_FUNC_PTR)(void);
275 typedef int (*ENGINE_GEN_INT_FUNC_PTR)(
ENGINE *);
277 typedef int (*ENGINE_CTRL_FUNC_PTR)(
ENGINE *, int, long,
void *, void (*f)(void));
279 typedef EVP_PKEY * (*ENGINE_LOAD_KEY_PTR)(ENGINE *,
const char *,
280 UI_METHOD *ui_method,
void *callback_data);
293 typedef int (*ENGINE_CIPHERS_PTR)(ENGINE *,
const EVP_CIPHER **,
const int **, int);
294 typedef int (*ENGINE_DIGESTS_PTR)(ENGINE *,
const EVP_MD **,
const int **, int);
307 ENGINE *ENGINE_get_first(
void);
308 ENGINE *ENGINE_get_last(
void);
310 ENGINE *ENGINE_get_next(ENGINE *e);
311 ENGINE *ENGINE_get_prev(ENGINE *e);
313 int ENGINE_add(ENGINE *e);
315 int ENGINE_remove(ENGINE *e);
317 ENGINE *ENGINE_by_id(
const char *
id);
319 void ENGINE_load_openssl(
void);
320 void ENGINE_load_dynamic(
void);
321 #ifndef OPENSSL_NO_STATIC_ENGINE
322 void ENGINE_load_4758cca(
void);
323 void ENGINE_load_aep(
void);
324 void ENGINE_load_atalla(
void);
325 void ENGINE_load_chil(
void);
326 void ENGINE_load_cswift(
void);
327 #ifndef OPENSSL_NO_GMP
328 void ENGINE_load_gmp(
void);
330 void ENGINE_load_nuron(
void);
331 void ENGINE_load_sureware(
void);
332 void ENGINE_load_ubsec(
void);
334 void ENGINE_load_cryptodev(
void);
335 void ENGINE_load_padlock(
void);
336 void ENGINE_load_builtin_engines(
void);
340 unsigned int ENGINE_get_table_flags(
void);
341 void ENGINE_set_table_flags(
unsigned int flags);
351 int ENGINE_register_RSA(ENGINE *e);
352 void ENGINE_unregister_RSA(ENGINE *e);
353 void ENGINE_register_all_RSA(
void);
355 int ENGINE_register_DSA(ENGINE *e);
356 void ENGINE_unregister_DSA(ENGINE *e);
357 void ENGINE_register_all_DSA(
void);
359 int ENGINE_register_ECDH(ENGINE *e);
360 void ENGINE_unregister_ECDH(ENGINE *e);
361 void ENGINE_register_all_ECDH(
void);
363 int ENGINE_register_ECDSA(ENGINE *e);
364 void ENGINE_unregister_ECDSA(ENGINE *e);
365 void ENGINE_register_all_ECDSA(
void);
367 int ENGINE_register_DH(ENGINE *e);
368 void ENGINE_unregister_DH(ENGINE *e);
369 void ENGINE_register_all_DH(
void);
371 int ENGINE_register_RAND(ENGINE *e);
372 void ENGINE_unregister_RAND(ENGINE *e);
373 void ENGINE_register_all_RAND(
void);
375 int ENGINE_register_STORE(ENGINE *e);
376 void ENGINE_unregister_STORE(ENGINE *e);
377 void ENGINE_register_all_STORE(
void);
379 int ENGINE_register_ciphers(ENGINE *e);
380 void ENGINE_unregister_ciphers(ENGINE *e);
381 void ENGINE_register_all_ciphers(
void);
383 int ENGINE_register_digests(ENGINE *e);
384 void ENGINE_unregister_digests(ENGINE *e);
385 void ENGINE_register_all_digests(
void);
391 int ENGINE_register_complete(ENGINE *e);
392 int ENGINE_register_all_complete(
void);
401 int ENGINE_ctrl(ENGINE *e,
int cmd,
long i,
void *p,
void (*f)(
void));
407 int ENGINE_cmd_is_executable(ENGINE *e,
int cmd);
413 int ENGINE_ctrl_cmd(ENGINE *e,
const char *cmd_name,
414 long i,
void *p,
void (*f)(
void),
int cmd_optional);
435 int ENGINE_ctrl_cmd_string(ENGINE *e,
const char *cmd_name,
const char *arg,
444 ENGINE *ENGINE_new(
void);
445 int ENGINE_free(ENGINE *e);
446 int ENGINE_up_ref(ENGINE *e);
447 int ENGINE_set_id(ENGINE *e,
const char *
id);
448 int ENGINE_set_name(ENGINE *e,
const char *name);
449 int ENGINE_set_RSA(ENGINE *e,
const RSA_METHOD *rsa_meth);
450 int ENGINE_set_DSA(ENGINE *e,
const DSA_METHOD *dsa_meth);
451 int ENGINE_set_ECDH(ENGINE *e,
const ECDH_METHOD *ecdh_meth);
452 int ENGINE_set_ECDSA(ENGINE *e,
const ECDSA_METHOD *ecdsa_meth);
453 int ENGINE_set_DH(ENGINE *e,
const DH_METHOD *dh_meth);
454 int ENGINE_set_RAND(ENGINE *e,
const RAND_METHOD *rand_meth);
455 int ENGINE_set_STORE(ENGINE *e,
const STORE_METHOD *store_meth);
456 int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f);
457 int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f);
458 int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f);
459 int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f);
460 int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f);
461 int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f);
462 int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f);
463 int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f);
464 int ENGINE_set_flags(ENGINE *e,
int flags);
467 int ENGINE_get_ex_new_index(
long argl,
void *argp, CRYPTO_EX_new *new_func,
468 CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
469 int ENGINE_set_ex_data(ENGINE *e,
int idx,
void *arg);
470 void *ENGINE_get_ex_data(
const ENGINE *e,
int idx);
476 void ENGINE_cleanup(
void);
482 const char *ENGINE_get_id(
const ENGINE *e);
483 const char *ENGINE_get_name(
const ENGINE *e);
484 const RSA_METHOD *ENGINE_get_RSA(
const ENGINE *e);
485 const DSA_METHOD *ENGINE_get_DSA(
const ENGINE *e);
486 const ECDH_METHOD *ENGINE_get_ECDH(
const ENGINE *e);
488 const DH_METHOD *ENGINE_get_DH(
const ENGINE *e);
489 const RAND_METHOD *ENGINE_get_RAND(
const ENGINE *e);
490 const STORE_METHOD *ENGINE_get_STORE(
const ENGINE *e);
491 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(
const ENGINE *e);
492 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(
const ENGINE *e);
493 ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(
const ENGINE *e);
494 ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(
const ENGINE *e);
495 ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(
const ENGINE *e);
496 ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(
const ENGINE *e);
497 ENGINE_CIPHERS_PTR ENGINE_get_ciphers(
const ENGINE *e);
498 ENGINE_DIGESTS_PTR ENGINE_get_digests(
const ENGINE *e);
499 const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e,
int nid);
500 const EVP_MD *ENGINE_get_digest(ENGINE *e,
int nid);
502 int ENGINE_get_flags(
const ENGINE *e);
519 int ENGINE_init(ENGINE *e);
523 int ENGINE_finish(ENGINE *e);
528 EVP_PKEY *ENGINE_load_private_key(ENGINE *e,
const char *key_id,
529 UI_METHOD *ui_method,
void *callback_data);
530 EVP_PKEY *ENGINE_load_public_key(ENGINE *e,
const char *key_id,
531 UI_METHOD *ui_method,
void *callback_data);
537 ENGINE *ENGINE_get_default_RSA(
void);
539 ENGINE *ENGINE_get_default_DSA(
void);
540 ENGINE *ENGINE_get_default_ECDH(
void);
541 ENGINE *ENGINE_get_default_ECDSA(
void);
542 ENGINE *ENGINE_get_default_DH(
void);
543 ENGINE *ENGINE_get_default_RAND(
void);
546 ENGINE *ENGINE_get_cipher_engine(
int nid);
547 ENGINE *ENGINE_get_digest_engine(
int nid);
553 int ENGINE_set_default_RSA(ENGINE *e);
554 int ENGINE_set_default_string(ENGINE *e,
const char *def_list);
556 int ENGINE_set_default_DSA(ENGINE *e);
557 int ENGINE_set_default_ECDH(ENGINE *e);
558 int ENGINE_set_default_ECDSA(ENGINE *e);
559 int ENGINE_set_default_DH(ENGINE *e);
560 int ENGINE_set_default_RAND(ENGINE *e);
561 int ENGINE_set_default_ciphers(ENGINE *e);
562 int ENGINE_set_default_digests(ENGINE *e);
569 int ENGINE_set_default(ENGINE *e,
unsigned int flags);
571 void ENGINE_add_conf_module(
void);
581 #define OSSL_DYNAMIC_VERSION (unsigned long)0x00020000
584 #define OSSL_DYNAMIC_OLDEST (unsigned long)0x00020000
595 typedef void *(*dyn_MEM_malloc_cb)(size_t);
596 typedef void *(*dyn_MEM_realloc_cb)(
void *, size_t);
597 typedef void (*dyn_MEM_free_cb)(
void *);
599 dyn_MEM_malloc_cb malloc_cb;
600 dyn_MEM_realloc_cb realloc_cb;
601 dyn_MEM_free_cb free_cb;
605 typedef void (*dyn_lock_locking_cb)(int,int,
const char *,int);
606 typedef int (*dyn_lock_add_lock_cb)(
int*,int,int,
const char *,int);
607 typedef struct CRYPTO_dynlock_value *(*dyn_dynlock_create_cb)(
609 typedef void (*dyn_dynlock_lock_cb)(int,
struct CRYPTO_dynlock_value *,
611 typedef void (*dyn_dynlock_destroy_cb)(
struct CRYPTO_dynlock_value *,
614 dyn_lock_locking_cb lock_locking_cb;
615 dyn_lock_add_lock_cb lock_add_lock_cb;
616 dyn_dynlock_create_cb dynlock_create_cb;
617 dyn_dynlock_lock_cb dynlock_lock_cb;
618 dyn_dynlock_destroy_cb dynlock_destroy_cb;
638 typedef unsigned long (*dynamic_v_check_fn)(
unsigned long ossl_version);
639 #define IMPLEMENT_DYNAMIC_CHECK_FN() \
640 OPENSSL_EXPORT unsigned long v_check(unsigned long v) { \
641 if(v >= OSSL_DYNAMIC_OLDEST) return OSSL_DYNAMIC_VERSION; \
659 typedef int (*dynamic_bind_engine)(ENGINE *e,
const char *id,
661 #define IMPLEMENT_DYNAMIC_BIND_FN(fn) \
663 int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \
664 if(ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \
665 if(!CRYPTO_set_mem_functions(fns->mem_fns.malloc_cb, \
666 fns->mem_fns.realloc_cb, fns->mem_fns.free_cb)) \
668 CRYPTO_set_locking_callback(fns->lock_fns.lock_locking_cb); \
669 CRYPTO_set_add_lock_callback(fns->lock_fns.lock_add_lock_cb); \
670 CRYPTO_set_dynlock_create_callback(fns->lock_fns.dynlock_create_cb); \
671 CRYPTO_set_dynlock_lock_callback(fns->lock_fns.dynlock_lock_cb); \
672 CRYPTO_set_dynlock_destroy_callback(fns->lock_fns.dynlock_destroy_cb); \
673 if(!CRYPTO_set_ex_data_implementation(fns->ex_data_fns)) \
675 if(!ERR_set_implementation(fns->err_fns)) return 0; \
677 if(!fn(e,id)) return 0; \
689 void *ENGINE_get_static_state(
void);
691 #if defined(__OpenBSD__) || defined(__FreeBSD__)
692 void ENGINE_setup_bsd_cryptodev(
void);
699 void ERR_load_ENGINE_strings(
void);
704 #define ENGINE_F_DYNAMIC_CTRL 180
705 #define ENGINE_F_DYNAMIC_GET_DATA_CTX 181
706 #define ENGINE_F_DYNAMIC_LOAD 182
707 #define ENGINE_F_DYNAMIC_SET_DATA_CTX 183
708 #define ENGINE_F_ENGINE_ADD 105
709 #define ENGINE_F_ENGINE_BY_ID 106
710 #define ENGINE_F_ENGINE_CMD_IS_EXECUTABLE 170
711 #define ENGINE_F_ENGINE_CTRL 142
712 #define ENGINE_F_ENGINE_CTRL_CMD 178
713 #define ENGINE_F_ENGINE_CTRL_CMD_STRING 171
714 #define ENGINE_F_ENGINE_FINISH 107
715 #define ENGINE_F_ENGINE_FREE_UTIL 108
716 #define ENGINE_F_ENGINE_GET_CIPHER 185
717 #define ENGINE_F_ENGINE_GET_DEFAULT_TYPE 177
718 #define ENGINE_F_ENGINE_GET_DIGEST 186
719 #define ENGINE_F_ENGINE_GET_NEXT 115
720 #define ENGINE_F_ENGINE_GET_PREV 116
721 #define ENGINE_F_ENGINE_INIT 119
722 #define ENGINE_F_ENGINE_LIST_ADD 120
723 #define ENGINE_F_ENGINE_LIST_REMOVE 121
724 #define ENGINE_F_ENGINE_LOAD_PRIVATE_KEY 150
725 #define ENGINE_F_ENGINE_LOAD_PUBLIC_KEY 151
726 #define ENGINE_F_ENGINE_NEW 122
727 #define ENGINE_F_ENGINE_REMOVE 123
728 #define ENGINE_F_ENGINE_SET_DEFAULT_STRING 189
729 #define ENGINE_F_ENGINE_SET_DEFAULT_TYPE 126
730 #define ENGINE_F_ENGINE_SET_ID 129
731 #define ENGINE_F_ENGINE_SET_NAME 130
732 #define ENGINE_F_ENGINE_TABLE_REGISTER 184
733 #define ENGINE_F_ENGINE_UNLOAD_KEY 152
734 #define ENGINE_F_ENGINE_UNLOCKED_FINISH 191
735 #define ENGINE_F_ENGINE_UP_REF 190
736 #define ENGINE_F_INT_CTRL_HELPER 172
737 #define ENGINE_F_INT_ENGINE_CONFIGURE 188
738 #define ENGINE_F_INT_ENGINE_MODULE_INIT 187
739 #define ENGINE_F_LOG_MESSAGE 141
742 #define ENGINE_R_ALREADY_LOADED 100
743 #define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133
744 #define ENGINE_R_CMD_NOT_EXECUTABLE 134
745 #define ENGINE_R_COMMAND_TAKES_INPUT 135
746 #define ENGINE_R_COMMAND_TAKES_NO_INPUT 136
747 #define ENGINE_R_CONFLICTING_ENGINE_ID 103
748 #define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119
749 #define ENGINE_R_DH_NOT_IMPLEMENTED 139
750 #define ENGINE_R_DSA_NOT_IMPLEMENTED 140
751 #define ENGINE_R_DSO_FAILURE 104
752 #define ENGINE_R_DSO_NOT_FOUND 132
753 #define ENGINE_R_ENGINES_SECTION_ERROR 148
754 #define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105
755 #define ENGINE_R_ENGINE_SECTION_ERROR 149
756 #define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128
757 #define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129
758 #define ENGINE_R_FINISH_FAILED 106
759 #define ENGINE_R_GET_HANDLE_FAILED 107
760 #define ENGINE_R_ID_OR_NAME_MISSING 108
761 #define ENGINE_R_INIT_FAILED 109
762 #define ENGINE_R_INTERNAL_LIST_ERROR 110
763 #define ENGINE_R_INVALID_ARGUMENT 143
764 #define ENGINE_R_INVALID_CMD_NAME 137
765 #define ENGINE_R_INVALID_CMD_NUMBER 138
766 #define ENGINE_R_INVALID_INIT_VALUE 151
767 #define ENGINE_R_INVALID_STRING 150
768 #define ENGINE_R_NOT_INITIALISED 117
769 #define ENGINE_R_NOT_LOADED 112
770 #define ENGINE_R_NO_CONTROL_FUNCTION 120
771 #define ENGINE_R_NO_INDEX 144
772 #define ENGINE_R_NO_LOAD_FUNCTION 125
773 #define ENGINE_R_NO_REFERENCE 130
774 #define ENGINE_R_NO_SUCH_ENGINE 116
775 #define ENGINE_R_NO_UNLOAD_FUNCTION 126
776 #define ENGINE_R_PROVIDE_PARAMETERS 113
777 #define ENGINE_R_RSA_NOT_IMPLEMENTED 141
778 #define ENGINE_R_UNIMPLEMENTED_CIPHER 146
779 #define ENGINE_R_UNIMPLEMENTED_DIGEST 147
780 #define ENGINE_R_VERSION_INCOMPATIBILITY 145
Definition: ecs_locl.h:68
Definition: eng_int.h:148
Definition: ex_data.c:145
Definition: ech_locl.h:65