int main(void) { random_init(); dcrypt_initialize("openssl", NULL, NULL); static void (*test_functions[])(void) = { test_cipher_test_vectors, test_cipher_aead_test_vectors, test_hmac_test_vectors, test_load_v1_keys, test_load_v1_key, test_load_v1_public_key, test_load_v2_key, test_load_v2_public_key, test_get_info_v2_key, test_gen_and_get_info_rsa_pem, test_get_info_rsa_private_key, NULL }; int ret = test_run(test_functions); dcrypt_deinitialize(); random_deinit(); return ret; }
bool dcrypt_initialize(const char *backend, const struct dcrypt_settings *set, const char **error_r) { struct module_dir_load_settings mod_set; const char *error; if (dcrypt_vfs != NULL) { return TRUE; } if (backend == NULL) backend = "openssl"; /* default for now */ if (set == NULL) set = &dcrypt_default_set; const char *implementation = t_strconcat("dcrypt_",backend,NULL); memset(&mod_set, 0, sizeof(mod_set)); mod_set.abi_version = DOVECOT_ABI_VERSION; mod_set.require_init_funcs = TRUE; if (module_dir_try_load_missing(&dcrypt_module, DCRYPT_MODULE_DIR, implementation, &mod_set, &error) < 0) { if (error_r != NULL) *error_r = error; return FALSE; } module_dir_init(dcrypt_module); i_assert(dcrypt_vfs != NULL); if (dcrypt_vfs->initialize != NULL) { if (!dcrypt_vfs->initialize(set, error_r)) { dcrypt_deinitialize(); return FALSE; } } /* Destroy SSL module after(most of) the others. Especially lib-fs backends may still want to access SSL module in their own atexit-callbacks. */ lib_atexit_priority(dcrypt_deinitialize, LIB_ATEXIT_PRIORITY_LOW); return TRUE; }