%PDF- <> %âãÏÓ endobj 2 0 obj <> endobj 3 0 obj <>/ExtGState<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI] >>/Annots[ 28 0 R 29 0 R] /MediaBox[ 0 0 595.5 842.25] /Contents 4 0 R/Group<>/Tabs/S>> endobj ºaâÚÎΞ-ÌE1ÍØÄ÷{òò2ÿ ÛÖ^ÔÀá TÎ{¦?§®¥kuµùÕ5sLOšuY>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<>endobj 2 0 obj<> endobj 2 0 obj<>endobj 2 0 obj<>es 3 0 R>> endobj 2 0 obj<> ox[ 0.000000 0.000000 609.600000 935.600000]/Fi endobj 3 0 obj<> endobj 7 1 obj<>/ProcSet[/PDF/Text/ImageB/ImageC/ImageI]>>/Subtype/Form>> stream
#include <openssl/engine.h> #include <openssl/pem.h> #include <assert.h> #include <string.h> #include <stdlib.h> #include <fstream> #include <iterator> #include <string> #ifndef ENGINE_CMD_BASE # error did not get engine.h #endif #define TEST_ENGINE_ID "testkeyengine" #define TEST_ENGINE_NAME "dummy test key engine" #define PRIVATE_KEY "test/fixtures/keys/agent1-key.pem" #ifdef _WIN32 # define DEFAULT_VISIBILITY __declspec(dllexport) #else # define DEFAULT_VISIBILITY __attribute__((visibility("default"))) #endif namespace { int EngineInit(ENGINE* engine) { return 1; } int EngineFinish(ENGINE* engine) { return 1; } int EngineDestroy(ENGINE* engine) { return 1; } std::string LoadFile(const char* filename) { std::ifstream file(filename); return std::string(std::istreambuf_iterator<char>(file), std::istreambuf_iterator<char>()); } static EVP_PKEY* EngineLoadPrivkey(ENGINE* engine, const char* name, UI_METHOD* ui_method, void* callback_data) { if (strcmp(name, "dummykey") == 0) { std::string key = LoadFile(PRIVATE_KEY); BIO* bio = BIO_new_mem_buf(key.data(), key.size()); EVP_PKEY* ret = PEM_read_bio_PrivateKey(bio, nullptr, nullptr, nullptr); BIO_vfree(bio); if (ret != nullptr) { return ret; } } return nullptr; } int bind_fn(ENGINE* engine, const char* id) { ENGINE_set_id(engine, TEST_ENGINE_ID); ENGINE_set_name(engine, TEST_ENGINE_NAME); ENGINE_set_init_function(engine, EngineInit); ENGINE_set_finish_function(engine, EngineFinish); ENGINE_set_destroy_function(engine, EngineDestroy); ENGINE_set_load_privkey_function(engine, EngineLoadPrivkey); return 1; } extern "C" { DEFAULT_VISIBILITY IMPLEMENT_DYNAMIC_CHECK_FN(); DEFAULT_VISIBILITY IMPLEMENT_DYNAMIC_BIND_FN(bind_fn); } } // anonymous namespace