@@ -46,13 +46,25 @@ VALUE eEngineError;
4646/*
4747 * Private
4848 */
49- #define OSSL_ENGINE_LOAD_IF_MATCH (x ) \
49+ #if !defined(LIBRESSL_VERSION_NUMBER ) && OPENSSL_VERSION_NUMBER >= 0x10100000
50+ #define OSSL_ENGINE_LOAD_IF_MATCH (engine_name , x ) \
5051do{\
51- if(!strcmp(#x, RSTRING_PTR(name))){\
52- ENGINE_load_##x();\
52+ if(!strcmp(#engine_name, RSTRING_PTR(name))){\
53+ if (OPENSSL_init_crypto(OPENSSL_INIT_ENGINE_##x, NULL))\
54+ return Qtrue;\
55+ else\
56+ ossl_raise(eEngineError, "OPENSSL_init_crypto"); \
57+ }\
58+ }while(0)
59+ #else
60+ #define OSSL_ENGINE_LOAD_IF_MATCH (engine_name , x ) \
61+ do{\
62+ if(!strcmp(#engine_name, RSTRING_PTR(name))){\
63+ ENGINE_load_##engine_name();\
5364 return Qtrue;\
5465 }\
5566}while(0)
67+ #endif
5668
5769static void
5870ossl_engine_free (void * engine )
@@ -94,55 +106,55 @@ ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)
94106 StringValueCStr (name );
95107#ifndef OPENSSL_NO_STATIC_ENGINE
96108#if HAVE_ENGINE_LOAD_DYNAMIC
97- OSSL_ENGINE_LOAD_IF_MATCH (dynamic );
109+ OSSL_ENGINE_LOAD_IF_MATCH (dynamic , DYNAMIC );
98110#endif
99111#if HAVE_ENGINE_LOAD_4758CCA
100- OSSL_ENGINE_LOAD_IF_MATCH (4758 cca );
112+ OSSL_ENGINE_LOAD_IF_MATCH (4758 cca , 4758 CCA );
101113#endif
102114#if HAVE_ENGINE_LOAD_AEP
103- OSSL_ENGINE_LOAD_IF_MATCH (aep );
115+ OSSL_ENGINE_LOAD_IF_MATCH (aep , AEP );
104116#endif
105117#if HAVE_ENGINE_LOAD_ATALLA
106- OSSL_ENGINE_LOAD_IF_MATCH (atalla );
118+ OSSL_ENGINE_LOAD_IF_MATCH (atalla , ATALLA );
107119#endif
108120#if HAVE_ENGINE_LOAD_CHIL
109- OSSL_ENGINE_LOAD_IF_MATCH (chil );
121+ OSSL_ENGINE_LOAD_IF_MATCH (chil , CHIL );
110122#endif
111123#if HAVE_ENGINE_LOAD_CSWIFT
112- OSSL_ENGINE_LOAD_IF_MATCH (cswift );
124+ OSSL_ENGINE_LOAD_IF_MATCH (cswift , CSWIFT );
113125#endif
114126#if HAVE_ENGINE_LOAD_NURON
115- OSSL_ENGINE_LOAD_IF_MATCH (nuron );
127+ OSSL_ENGINE_LOAD_IF_MATCH (nuron , NURON );
116128#endif
117129#if HAVE_ENGINE_LOAD_SUREWARE
118- OSSL_ENGINE_LOAD_IF_MATCH (sureware );
130+ OSSL_ENGINE_LOAD_IF_MATCH (sureware , SUREWARE );
119131#endif
120132#if HAVE_ENGINE_LOAD_UBSEC
121- OSSL_ENGINE_LOAD_IF_MATCH (ubsec );
133+ OSSL_ENGINE_LOAD_IF_MATCH (ubsec , UBSEC );
122134#endif
123135#if HAVE_ENGINE_LOAD_PADLOCK
124- OSSL_ENGINE_LOAD_IF_MATCH (padlock );
136+ OSSL_ENGINE_LOAD_IF_MATCH (padlock , PADLOCK );
125137#endif
126138#if HAVE_ENGINE_LOAD_CAPI
127- OSSL_ENGINE_LOAD_IF_MATCH (capi );
139+ OSSL_ENGINE_LOAD_IF_MATCH (capi , CAPI );
128140#endif
129141#if HAVE_ENGINE_LOAD_GMP
130- OSSL_ENGINE_LOAD_IF_MATCH (gmp );
142+ OSSL_ENGINE_LOAD_IF_MATCH (gmp , GMP );
131143#endif
132144#if HAVE_ENGINE_LOAD_GOST
133- OSSL_ENGINE_LOAD_IF_MATCH (gost );
145+ OSSL_ENGINE_LOAD_IF_MATCH (gost , GOST );
134146#endif
135147#if HAVE_ENGINE_LOAD_CRYPTODEV
136- OSSL_ENGINE_LOAD_IF_MATCH (cryptodev );
148+ OSSL_ENGINE_LOAD_IF_MATCH (cryptodev , CRYPTODEV );
137149#endif
138150#if HAVE_ENGINE_LOAD_AESNI
139- OSSL_ENGINE_LOAD_IF_MATCH (aesni );
151+ OSSL_ENGINE_LOAD_IF_MATCH (aesni , AESNI );
140152#endif
141153#endif
142154#ifdef HAVE_ENGINE_LOAD_OPENBSD_DEV_CRYPTO
143- OSSL_ENGINE_LOAD_IF_MATCH (openbsd_dev_crypto );
155+ OSSL_ENGINE_LOAD_IF_MATCH (openbsd_dev_crypto , OPENBSD_DEV_CRYPTO );
144156#endif
145- OSSL_ENGINE_LOAD_IF_MATCH (openssl );
157+ OSSL_ENGINE_LOAD_IF_MATCH (openssl , OPENSSL );
146158 rb_warning ("no such builtin loader for `%" PRIsVALUE "'" , name );
147159 return Qnil ;
148160#endif /* HAVE_ENGINE_LOAD_BUILTIN_ENGINES */
@@ -160,7 +172,9 @@ ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)
160172static VALUE
161173ossl_engine_s_cleanup (VALUE self )
162174{
175+ #if defined(LIBRESSL_VERSION_NUMBER ) || OPENSSL_VERSION_NUMBER < 0x10100000
163176 ENGINE_cleanup ();
177+ #endif
164178 return Qnil ;
165179}
166180
0 commit comments