#pragma once #include "ssl_utils.h" #include #include "tfe_future.h" #include "tfe_utils.h" #include "MESA/MESA_htable.h" #include "event2/event.h" struct keyring { EVP_PKEY *key; X509 *cert; STACK_OF(X509) * chain; }; struct key_keeper { unsigned int mode; char cert_store_host[TFE_STRING_MAX]; unsigned int cert_store_port; MESA_htable_handle htable; void* logger; }; struct key_keeper * key_keeper_init(const char * profile, const char* section, void* logger); struct key_keeper * key_keeper_destroy(struct key_keeper *keeper); struct keyring* key_keeper_release_cert(future_result_t* result); struct keyring* key_keeper_keyring_new(void); struct keyring* key_keeper_keyring_new3(EVP_PKEY *key, X509 *cert, STACK_OF(X509) *chain); void key_keeper_free_keyring(struct keyring* cert); void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, int keyring_id, X509 * origin_cert, int is_cert_valid, struct event_base * evbase); void key_keeper_keyring_refcount_inc(struct keyring* ring); void key_keeper_keyring_set_cert(struct keyring* ring, X509 *cert); void key_keeper_keyring_set_key(struct keyring* ring, EVP_PKEY *key); void key_keeper_keyring_set_chain(struct keyring* ring, STACK_OF(X509) *chain); static void key_keeper_free_serialized(); static void key_keeper_verify_cb();