1 commit 9d7d15533d52971601b738335c40a4f01353c369
2 Author: Emery Hemingway <ehmry@posteo.net>
3 Date: 2023-09-30 11:11:05 +0100
5 Do not load openssl with dlopen
7 diff --git a/lib/wrappers/openssl.nim b/lib/wrappers/openssl.nim
8 index e659746ee..dfb2d3cf2 100644
9 --- a/lib/wrappers/openssl.nim
10 +++ b/lib/wrappers/openssl.nim
11 @@ -105,8 +105,11 @@ else:
15 -{.pragma: lcrypto, cdecl, dynlib: DLLUtilName, importc.}
16 -{.pragma: lssl, cdecl, dynlib: DLLSSLName, importc.}
17 +{.passL: "-lcrypto".}
20 +{.pragma: lcrypto, cdecl, importc.}
21 +{.pragma: lssl, cdecl, importc.}
24 SslStruct {.final, pure.} = object
25 @@ -274,7 +277,7 @@ const
26 BIO_C_DO_STATE_MACHINE = 101
29 -proc TLSv1_method*(): PSSL_METHOD{.cdecl, dynlib: DLLSSLName, importc.}
30 +proc TLSv1_method*(): PSSL_METHOD{.cdecl, importc.}
32 # TLS_method(), TLS_server_method(), TLS_client_method() are introduced in 1.1.0
33 # and support SSLv3, TLSv1, TLSv1.1 and TLSv1.2
34 @@ -286,26 +289,26 @@ when useStaticLink:
37 when defined(openssl10):
38 - proc SSL_library_init*(): cint {.cdecl, dynlib: DLLSSLName, importc, discardable.}
39 - proc SSL_load_error_strings*() {.cdecl, dynlib: DLLSSLName, importc.}
40 - proc SSLv23_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
41 - proc SSLeay(): culong {.cdecl, dynlib: DLLUtilName, importc.}
42 + proc SSL_library_init*(): cint {.cdecl, importc, discardable.}
43 + proc SSL_load_error_strings*() {.cdecl, importc.}
44 + proc SSLv23_method*(): PSSL_METHOD {.cdecl, importc.}
45 + proc SSLeay(): culong {.cdecl, importc.}
47 proc getOpenSSLVersion*(): culong =
50 - proc ERR_load_BIO_strings*() {.cdecl, dynlib: DLLUtilName, importc.}
51 + proc ERR_load_BIO_strings*() {.cdecl, gimportc.}
53 - proc OPENSSL_init_ssl*(opts: uint64, settings: uint8): cint {.cdecl, dynlib: DLLSSLName, importc, discardable.}
54 + proc OPENSSL_init_ssl*(opts: uint64, settings: uint8): cint {.cdecl, gimportc, discardable.}
55 proc SSL_library_init*(): cint {.discardable.} =
56 ## Initialize SSL using OPENSSL_init_ssl for OpenSSL >= 1.1.0
57 return OPENSSL_init_ssl(0.uint64, 0.uint8)
59 - proc TLS_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
60 + proc TLS_method*(): PSSL_METHOD {.cdecl, gimportc.}
61 proc SSLv23_method*(): PSSL_METHOD =
64 - proc OpenSSL_version_num(): culong {.cdecl, dynlib: DLLUtilName, importc.}
65 + proc OpenSSL_version_num(): culong {.cdecl, gimportc.}
67 proc getOpenSSLVersion*(): culong =
68 ## Return OpenSSL version as unsigned long
69 @@ -321,19 +324,19 @@ when useStaticLink:
72 when defined(libressl) or defined(openssl10):
73 - proc SSL_state(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc.}
74 + proc SSL_state(ssl: SslPtr): cint {.cdecl, gimportc.}
75 proc SSL_in_init*(ssl: SslPtr): cint {.inline.} =
76 SSL_state(ssl) and SSL_ST_INIT
78 - proc SSL_in_init*(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc.}
79 - proc SSL_CTX_set_ciphersuites*(ctx: SslCtx, str: cstring): cint {.cdecl, dynlib: DLLSSLName, importc.}
80 + proc SSL_in_init*(ssl: SslPtr): cint {.cdecl, gimportc.}
81 + proc SSL_CTX_set_ciphersuites*(ctx: SslCtx, str: cstring): cint {.cdecl, importc.}
83 template OpenSSL_add_all_algorithms*() = discard
85 - proc SSLv23_client_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
86 - proc SSLv2_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
87 - proc SSLv3_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.}
88 - proc CRYPTO_set_mem_functions(a,b,c: pointer){.cdecl, dynlib: DLLUtilName, importc.}
89 + proc SSLv23_client_method*(): PSSL_METHOD {.cdecl, importc.}
90 + proc SSLv2_method*(): PSSL_METHOD {.cdecl, importc.}
91 + proc SSLv3_method*(): PSSL_METHOD {.cdecl, importc.}
92 + proc CRYPTO_set_mem_functions(a,b,c: pointer){.cdecl, gimportc.}
95 # Here we're trying to stay compatible between openssl versions. Some
96 @@ -472,54 +475,52 @@ else:
97 theProc = cast[typeof(theProc)](sslSymThrows("SSL_CTX_set_ciphersuites"))
98 result = theProc(ctx, str)
100 -proc SSL_new*(context: SslCtx): SslPtr{.cdecl, dynlib: DLLSSLName, importc.}
101 -proc SSL_free*(ssl: SslPtr){.cdecl, dynlib: DLLSSLName, importc.}
102 -proc SSL_get_SSL_CTX*(ssl: SslPtr): SslCtx {.cdecl, dynlib: DLLSSLName, importc.}
103 -proc SSL_set_SSL_CTX*(ssl: SslPtr, ctx: SslCtx): SslCtx {.cdecl, dynlib: DLLSSLName, importc.}
104 -proc SSL_CTX_set_session_id_context*(context: SslCtx, sid_ctx: string, sid_ctx_len: int){.cdecl, dynlib: DLLSSLName, importc.}
105 -proc SSL_get0_verified_chain*(ssl: SslPtr): PSTACK {.cdecl, dynlib: DLLSSLName,
106 +proc SSL_new*(context: SslCtx): SslPtr{.cdecl, importc.}
107 +proc SSL_free*(ssl: SslPtr){.cdecl, importc.}
108 +proc SSL_get_SSL_CTX*(ssl: SslPtr): SslCtx {.cdecl, importc.}
109 +proc SSL_set_SSL_CTX*(ssl: SslPtr, ctx: SslCtx): SslCtx {.cdecl, importc.}
110 +proc SSL_CTX_set_session_id_context*(context: SslCtx, sid_ctx: string, sid_ctx_len: int){.cdecl, importc.}
111 +proc SSL_get0_verified_chain*(ssl: SslPtr): PSTACK {.cdecl,
113 proc SSL_CTX_new*(meth: PSSL_METHOD): SslCtx{.cdecl,
114 - dynlib: DLLSSLName, importc.}
116 proc SSL_CTX_load_verify_locations*(ctx: SslCtx, CAfile: cstring,
117 - CApath: cstring): cint{.cdecl, dynlib: DLLSSLName, importc.}
118 -proc SSL_CTX_free*(arg0: SslCtx){.cdecl, dynlib: DLLSSLName, importc.}
119 -proc SSL_CTX_set_verify*(s: SslCtx, mode: int, cb: proc (a: int, b: pointer): int {.cdecl.}){.cdecl, dynlib: DLLSSLName, importc.}
120 + CApath: cstring): cint{.cdecl, importc.}
121 +proc SSL_CTX_free*(arg0: SslCtx){.cdecl, importc.}
122 +proc SSL_CTX_set_verify*(s: SslCtx, mode: int, cb: proc (a: int, b: pointer): int {.cdecl.}){.cdecl, importc.}
123 proc SSL_get_verify_result*(ssl: SslPtr): int{.cdecl,
124 - dynlib: DLLSSLName, importc.}
127 -proc SSL_CTX_set_cipher_list*(s: SslCtx, ciphers: cstring): cint{.cdecl, dynlib: DLLSSLName, importc.}
128 -proc SSL_CTX_use_certificate_file*(ctx: SslCtx, filename: cstring, typ: cint): cint{.
129 - stdcall, dynlib: DLLSSLName, importc.}
130 -proc SSL_CTX_use_certificate_chain_file*(ctx: SslCtx, filename: cstring): cint{.
131 - stdcall, dynlib: DLLSSLName, importc.}
132 +proc SSL_CTX_set_cipher_list*(s: SslCtx, ciphers: cstring): cint{.cdecl, importc.}
133 +proc SSL_CTX_use_certificate_file*(ctx: SslCtx, filename: cstring, typ: cint): cint{.stdcall, importc.}
134 +proc SSL_CTX_use_certificate_chain_file*(ctx: SslCtx, filename: cstring): cint{.stdcall, importc.}
135 proc SSL_CTX_use_PrivateKey_file*(ctx: SslCtx,
136 - filename: cstring, typ: cint): cint{.cdecl, dynlib: DLLSSLName, importc.}
137 -proc SSL_CTX_check_private_key*(ctx: SslCtx): cint{.cdecl, dynlib: DLLSSLName,
138 + filename: cstring, typ: cint): cint{.cdecl, importc.}
139 +proc SSL_CTX_check_private_key*(ctx: SslCtx): cint{.cdecl,
142 -proc SSL_CTX_get_ex_new_index*(argl: clong, argp: pointer, new_func: pointer, dup_func: pointer, free_func: pointer): cint {.cdecl, dynlib: DLLSSLName, importc.}
143 -proc SSL_CTX_set_ex_data*(ssl: SslCtx, idx: cint, arg: pointer): cint {.cdecl, dynlib: DLLSSLName, importc.}
144 -proc SSL_CTX_get_ex_data*(ssl: SslCtx, idx: cint): pointer {.cdecl, dynlib: DLLSSLName, importc.}
145 +proc SSL_CTX_get_ex_new_index*(argl: clong, argp: pointer, new_func: pointer, dup_func: pointer, free_func: pointer): cint {.cdecl, importc.}
146 +proc SSL_CTX_set_ex_data*(ssl: SslCtx, idx: cint, arg: pointer): cint {.cdecl, importc.}
147 +proc SSL_CTX_get_ex_data*(ssl: SslCtx, idx: cint): pointer {.cdecl, importc.}
149 -proc SSL_set_fd*(ssl: SslPtr, fd: SocketHandle): cint{.cdecl, dynlib: DLLSSLName, importc.}
150 +proc SSL_set_fd*(ssl: SslPtr, fd: SocketHandle): cint{.cdecl, importc.}
152 -proc SSL_shutdown*(ssl: SslPtr): cint{.cdecl, dynlib: DLLSSLName, importc.}
153 -proc SSL_set_shutdown*(ssl: SslPtr, mode: cint) {.cdecl, dynlib: DLLSSLName, importc: "SSL_set_shutdown".}
154 -proc SSL_get_shutdown*(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc: "SSL_get_shutdown".}
155 -proc SSL_connect*(ssl: SslPtr): cint{.cdecl, dynlib: DLLSSLName, importc.}
156 -proc SSL_read*(ssl: SslPtr, buf: pointer, num: int): cint{.cdecl, dynlib: DLLSSLName, importc.}
157 -proc SSL_write*(ssl: SslPtr, buf: cstring, num: int): cint{.cdecl, dynlib: DLLSSLName, importc.}
158 -proc SSL_get_error*(s: SslPtr, ret_code: cint): cint{.cdecl, dynlib: DLLSSLName, importc.}
159 -proc SSL_accept*(ssl: SslPtr): cint{.cdecl, dynlib: DLLSSLName, importc.}
160 -proc SSL_pending*(ssl: SslPtr): cint{.cdecl, dynlib: DLLSSLName, importc.}
161 +proc SSL_shutdown*(ssl: SslPtr): cint{.cdecl, importc.}
162 +proc SSL_set_shutdown*(ssl: SslPtr, mode: cint) {.cdecl, importc: "SSL_set_shutdown".}
163 +proc SSL_get_shutdown*(ssl: SslPtr): cint {.cdecl, importc: "SSL_get_shutdown".}
164 +proc SSL_connect*(ssl: SslPtr): cint{.cdecl, importc.}
165 +proc SSL_read*(ssl: SslPtr, buf: pointer, num: int): cint{.cdecl, importc.}
166 +proc SSL_write*(ssl: SslPtr, buf: cstring, num: int): cint{.cdecl, importc.}
167 +proc SSL_get_error*(s: SslPtr, ret_code: cint): cint{.cdecl, importc.}
168 +proc SSL_accept*(ssl: SslPtr): cint{.cdecl, importc.}
169 +proc SSL_pending*(ssl: SslPtr): cint{.cdecl, importc.}
171 proc BIO_new_mem_buf*(data: pointer, len: cint): BIO{.cdecl,
172 - dynlib: DLLUtilName, importc.}
174 proc BIO_new_ssl_connect*(ctx: SslCtx): BIO{.cdecl,
175 - dynlib: DLLSSLName, importc.}
177 proc BIO_ctrl*(bio: BIO, cmd: cint, larg: int, arg: cstring): int{.cdecl,
178 - dynlib: DLLUtilName, importc.}
180 proc BIO_get_ssl*(bio: BIO, ssl: ptr SslPtr): int =
181 return BIO_ctrl(bio, BIO_C_GET_SSL, 0, cast[cstring](ssl))
182 proc BIO_set_conn_hostname*(bio: BIO, name: cstring): int =
183 @@ -529,30 +530,30 @@ proc BIO_do_handshake*(bio: BIO): int =
184 proc BIO_do_connect*(bio: BIO): int =
185 return BIO_do_handshake(bio)
187 -proc BIO_read*(b: BIO, data: cstring, length: cint): cint{.cdecl, dynlib: DLLUtilName, importc.}
188 -proc BIO_write*(b: BIO, data: cstring, length: cint): cint{.cdecl, dynlib: DLLUtilName, importc.}
189 +proc BIO_read*(b: BIO, data: cstring, length: cint): cint{.cdecl, importc.}
190 +proc BIO_write*(b: BIO, data: cstring, length: cint): cint{.cdecl, importc.}
192 -proc BIO_free*(b: BIO): cint{.cdecl, dynlib: DLLUtilName, importc.}
193 +proc BIO_free*(b: BIO): cint{.cdecl, importc.}
195 -proc ERR_print_errors_fp*(fp: File){.cdecl, dynlib: DLLUtilName, importc.}
196 +proc ERR_print_errors_fp*(fp: File){.cdecl, importc.}
198 proc ERR_error_string*(e: culong, buf: cstring): cstring{.cdecl,
199 - dynlib: DLLUtilName, importc.}
200 -proc ERR_get_error*(): culong{.cdecl, dynlib: DLLUtilName, importc.}
201 -proc ERR_peek_last_error*(): culong{.cdecl, dynlib: DLLUtilName, importc.}
203 +proc ERR_get_error*(): culong{.cdecl, importc.}
204 +proc ERR_peek_last_error*(): culong{.cdecl, importc.}
206 -proc OPENSSL_config*(configName: cstring){.cdecl, dynlib: DLLUtilName, importc.}
207 +proc OPENSSL_config*(configName: cstring){.cdecl, importc.}
209 -proc OPENSSL_sk_num*(stack: PSTACK): int {.cdecl, dynlib: DLLSSLName, importc.}
210 +proc OPENSSL_sk_num*(stack: PSTACK): int {.cdecl, importc.}
212 proc OPENSSL_sk_value*(stack: PSTACK, index: int): pointer {.cdecl,
213 - dynlib: DLLSSLName, importc.}
216 proc d2i_X509*(px: ptr PX509, i: ptr ptr uint8, len: cint): PX509 {.cdecl,
217 - dynlib: DLLUtilName, importc.}
220 proc i2d_X509*(cert: PX509; o: ptr ptr uint8): cint {.cdecl,
221 - dynlib: DLLUtilName, importc.}
224 proc d2i_X509*(b: string): PX509 =
225 ## decode DER/BER bytestring into X.509 certificate struct
226 @@ -591,24 +592,21 @@ else:
227 proc CRYPTO_malloc_init*() =
230 -proc SSL_CTX_ctrl*(ctx: SslCtx, cmd: cint, larg: clong, parg: pointer): clong{.
231 - cdecl, dynlib: DLLSSLName, importc.}
232 +proc SSL_CTX_ctrl*(ctx: SslCtx, cmd: cint, larg: clong, parg: pointer): clong{.cdecl, importc.}
234 -proc SSL_CTX_callback_ctrl(ctx: SslCtx, typ: cint, fp: PFunction): int{.
235 - cdecl, dynlib: DLLSSLName, importc.}
236 +proc SSL_CTX_callback_ctrl(ctx: SslCtx, typ: cint, fp: PFunction): int{.cdecl, importc.}
238 proc SSLCTXSetMode*(ctx: SslCtx, mode: int): int =
239 result = SSL_CTX_ctrl(ctx, SSL_CTRL_MODE, clong mode, nil)
241 -proc SSL_ctrl*(ssl: SslPtr, cmd: cint, larg: int, parg: pointer): int{.
242 - cdecl, dynlib: DLLSSLName, importc.}
243 +proc SSL_ctrl*(ssl: SslPtr, cmd: cint, larg: int, parg: pointer): int{.cdecl, importc.}
245 proc SSL_set_tlsext_host_name*(ssl: SslPtr, name: cstring): int =
246 ## Set the SNI server name extension to be used in a client hello.
247 ## Returns 1 if SNI was set, 0 if current SSL configuration doesn't support SNI.
248 result = SSL_ctrl(ssl, SSL_CTRL_SET_TLSEXT_HOSTNAME, TLSEXT_NAMETYPE_host_name, name)
250 -proc SSL_get_servername*(ssl: SslPtr, typ: cint = TLSEXT_NAMETYPE_host_name): cstring {.cdecl, dynlib: DLLSSLName, importc.}
251 +proc SSL_get_servername*(ssl: SslPtr, typ: cint = TLSEXT_NAMETYPE_host_name): cstring {.cdecl, importc.}
252 ## Retrieve the server name requested in the client hello. This can be used
253 ## in the callback set in `SSL_CTX_set_tlsext_servername_callback` to
254 ## implement virtual hosting. May return `nil`.
255 @@ -635,16 +633,16 @@ type
256 PskServerCallback* = proc (ssl: SslPtr;
257 identity: cstring; psk: ptr uint8; max_psk_len: cint): cuint {.cdecl.}
259 -proc SSL_CTX_set_psk_client_callback*(ctx: SslCtx; callback: PskClientCallback) {.cdecl, dynlib: DLLSSLName, importc.}
260 +proc SSL_CTX_set_psk_client_callback*(ctx: SslCtx; callback: PskClientCallback) {.cdecl, importc.}
261 ## Set callback called when OpenSSL needs PSK (for client).
263 -proc SSL_CTX_set_psk_server_callback*(ctx: SslCtx; callback: PskServerCallback) {.cdecl, dynlib: DLLSSLName, importc.}
264 +proc SSL_CTX_set_psk_server_callback*(ctx: SslCtx; callback: PskServerCallback) {.cdecl, importc.}
265 ## Set callback called when OpenSSL needs PSK (for server).
267 -proc SSL_CTX_use_psk_identity_hint*(ctx: SslCtx; hint: cstring): cint {.cdecl, dynlib: DLLSSLName, importc.}
268 +proc SSL_CTX_use_psk_identity_hint*(ctx: SslCtx; hint: cstring): cint {.cdecl, importc.}
269 ## Set PSK identity hint to use.
271 -proc SSL_get_psk_identity*(ssl: SslPtr): cstring {.cdecl, dynlib: DLLSSLName, importc.}
272 +proc SSL_get_psk_identity*(ssl: SslPtr): cstring {.cdecl, importc.}
275 proc SSL_CTX_set_ecdh_auto*(ctx: SslCtx, onoff: cint): cint {.inline.} =
276 @@ -656,62 +654,62 @@ proc SSL_CTX_set_ecdh_auto*(ctx: SslCtx, onoff: cint): cint {.inline.} =
280 -proc bioNew*(b: PBIO_METHOD): BIO{.cdecl, dynlib: DLLUtilName, importc: "BIO_new".}
281 -proc bioFreeAll*(b: BIO){.cdecl, dynlib: DLLUtilName, importc: "BIO_free_all".}
282 -proc bioSMem*(): PBIO_METHOD{.cdecl, dynlib: DLLUtilName, importc: "BIO_s_mem".}
283 -proc bioCtrlPending*(b: BIO): cint{.cdecl, dynlib: DLLUtilName, importc: "BIO_ctrl_pending".}
284 +proc bioNew*(b: PBIO_METHOD): BIO{.cdecl, importc: "BIO_new".}
285 +proc bioFreeAll*(b: BIO){.cdecl, importc: "BIO_free_all".}
286 +proc bioSMem*(): PBIO_METHOD{.cdecl, importc: "BIO_s_mem".}
287 +proc bioCtrlPending*(b: BIO): cint{.cdecl, importc: "BIO_ctrl_pending".}
288 proc bioRead*(b: BIO, Buf: cstring, length: cint): cint{.cdecl,
289 - dynlib: DLLUtilName, importc: "BIO_read".}
290 + importc: "BIO_read".}
291 proc bioWrite*(b: BIO, Buf: cstring, length: cint): cint{.cdecl,
292 - dynlib: DLLUtilName, importc: "BIO_write".}
293 + importc: "BIO_write".}
295 proc sslSetConnectState*(s: SslPtr) {.cdecl,
296 - dynlib: DLLSSLName, importc: "SSL_set_connect_state".}
297 + importc: "SSL_set_connect_state".}
298 proc sslSetAcceptState*(s: SslPtr) {.cdecl,
299 - dynlib: DLLSSLName, importc: "SSL_set_accept_state".}
300 + importc: "SSL_set_accept_state".}
302 proc sslRead*(ssl: SslPtr, buf: cstring, num: cint): cint{.cdecl,
303 - dynlib: DLLSSLName, importc: "SSL_read".}
304 + importc: "SSL_read".}
305 proc sslPeek*(ssl: SslPtr, buf: cstring, num: cint): cint{.cdecl,
306 - dynlib: DLLSSLName, importc: "SSL_peek".}
307 + importc: "SSL_peek".}
308 proc sslWrite*(ssl: SslPtr, buf: cstring, num: cint): cint{.cdecl,
309 - dynlib: DLLSSLName, importc: "SSL_write".}
310 + importc: "SSL_write".}
312 proc sslSetBio*(ssl: SslPtr, rbio, wbio: BIO) {.cdecl,
313 - dynlib: DLLSSLName, importc: "SSL_set_bio".}
314 + importc: "SSL_set_bio".}
316 proc sslDoHandshake*(ssl: SslPtr): cint {.cdecl,
317 - dynlib: DLLSSLName, importc: "SSL_do_handshake".}
318 + importc: "SSL_do_handshake".}
321 -proc ErrClearError*(){.cdecl, dynlib: DLLUtilName, importc: "ERR_clear_error".}
322 -proc ErrFreeStrings*(){.cdecl, dynlib: DLLUtilName, importc: "ERR_free_strings".}
323 -proc ErrRemoveState*(pid: cint){.cdecl, dynlib: DLLUtilName, importc: "ERR_remove_state".}
324 +proc ErrClearError*(){.cdecl, importc: "ERR_clear_error".}
325 +proc ErrFreeStrings*(){.cdecl, importc: "ERR_free_strings".}
326 +proc ErrRemoveState*(pid: cint){.cdecl, importc: "ERR_remove_state".}
328 proc PEM_read_bio_RSA_PUBKEY*(bp: BIO, x: ptr PRSA, pw: pem_password_cb, u: pointer): PRSA {.cdecl,
329 - dynlib: DLLUtilName, importc.}
331 proc PEM_read_RSA_PUBKEY*(fp: pointer; x: ptr PRSA; cb: pem_password_cb, u: pointer): PRSA {.cdecl,
332 - dynlib: DLLUtilName, importc.}
334 proc RSA_verify*(kind: cint, origMsg: pointer, origMsgLen: cuint, signature: pointer,
335 - signatureLen: cuint, rsa: PRSA): cint {.cdecl, dynlib: DLLUtilName, importc.}
336 + signatureLen: cuint, rsa: PRSA): cint {.cdecl, importc.}
337 proc PEM_read_RSAPrivateKey*(fp: pointer; x: ptr PRSA; cb: pem_password_cb, u: pointer): PRSA {.cdecl,
338 - dynlib: DLLUtilName, importc.}
340 proc PEM_read_RSAPublicKey*(fp: pointer; x: ptr PRSA; cb: pem_password_cb, u: pointer): PRSA {.cdecl,
341 - dynlib: DLLUtilName, importc.}
343 proc PEM_read_bio_RSAPublicKey*(bp: BIO, x: ptr PRSA, cb: pem_password_cb, u: pointer): PRSA {.cdecl,
344 - dynlib: DLLUtilName, importc.}
346 proc PEM_read_bio_RSAPrivateKey*(bp: BIO, x: ptr PRSA, cb: pem_password_cb, u: pointer): PRSA {.cdecl,
347 - dynlib: DLLUtilName, importc.}
349 proc RSA_private_encrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl,
350 - dynlib: DLLUtilName, importc.}
352 proc RSA_public_encrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl,
353 - dynlib: DLLUtilName, importc.}
355 proc RSA_private_decrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl,
356 - dynlib: DLLUtilName, importc.}
358 proc RSA_public_decrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl,
359 - dynlib: DLLUtilName, importc.}
360 -proc RSA_free*(rsa: PRSA) {.cdecl, dynlib: DLLUtilName, importc.}
361 -proc RSA_size*(rsa: PRSA): cint {.cdecl, dynlib: DLLUtilName, importc.}
363 +proc RSA_free*(rsa: PRSA) {.cdecl, importc.}
364 +proc RSA_size*(rsa: PRSA): cint {.cdecl, importc.}
367 proc EVP_md_null*(): EVP_MD {.lcrypto.}
368 @@ -753,9 +751,9 @@ when defined(macosx) or defined(windows):
369 proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.lcrypto.}
371 # some times you will need this instead:
372 - proc EVP_MD_CTX_create*(): EVP_MD_CTX {.cdecl, importc: "EVP_MD_CTX_new", dynlib: DLLUtilName.}
373 - proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.cdecl, importc: "EVP_MD_CTX_free", dynlib: DLLUtilName.}
374 - proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.cdecl, importc: "EVP_MD_CTX_cleanup", dynlib: DLLUtilName.}
375 + proc EVP_MD_CTX_create*(): EVP_MD_CTX {.cdecl, importc: "EVP_MD_CTX_new".}
376 + proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.cdecl, importc: "EVP_MD_CTX_free".}
377 + proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.cdecl, importc: "EVP_MD_CTX_cleanup".}
381 @@ -770,7 +768,7 @@ type
382 data: array[MD5_LBLOCK, MD5_LONG]
385 -{.push callconv:cdecl, dynlib:DLLUtilName.}
386 +{.push callconv:cdecl.}
387 proc md5_Init*(c: var MD5_CTX): cint{.importc: "MD5_Init".}
388 proc md5_Update*(c: var MD5_CTX; data: pointer; len: csize_t): cint{.importc: "MD5_Update".}
389 proc md5_Final*(md: cstring; c: var MD5_CTX): cint{.importc: "MD5_Final".}
390 @@ -835,11 +833,11 @@ when not defined(nimDisableCertificateValidation) and not defined(windows):
391 # SSL_get_peer_certificate removed in 3.0
392 # SSL_get1_peer_certificate added in 3.0
394 - proc SSL_get1_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, dynlib: DLLSSLName, importc.}
395 + proc SSL_get1_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, importc.}
396 proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 =
397 SSL_get1_peer_certificate(ssl)
399 - proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, dynlib: DLLSSLName, importc.}
400 + proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, importc.}
402 proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 =
403 let methodSym = sslSymNullable("SSL_get_peer_certificate", "SSL_get1_peer_certificate")
404 @@ -848,26 +846,24 @@ when not defined(nimDisableCertificateValidation) and not defined(windows):
405 let method2Proc = cast[proc(ssl: SslCtx): PX509 {.cdecl, gcsafe, raises: [].}](methodSym)
406 return method2Proc(ssl)
408 - proc X509_get_subject_name*(a: PX509): PX509_NAME{.cdecl, dynlib: DLLSSLName, importc.}
409 + proc X509_get_subject_name*(a: PX509): PX509_NAME{.cdecl, importc.}
411 - proc X509_get_issuer_name*(a: PX509): PX509_NAME{.cdecl, dynlib: DLLUtilName, importc.}
412 + proc X509_get_issuer_name*(a: PX509): PX509_NAME{.cdecl, importc.}
414 - proc X509_NAME_oneline*(a: PX509_NAME, buf: cstring, size: cint): cstring {.
415 - cdecl, dynlib:DLLSSLName, importc.}
416 + proc X509_NAME_oneline*(a: PX509_NAME, buf: cstring, size: cint): cstring {.cdecl, importc.}
418 - proc X509_NAME_get_text_by_NID*(subject:cstring, NID: cint, buf: cstring, size: cint): cint{.
419 - cdecl, dynlib:DLLSSLName, importc.}
420 + proc X509_NAME_get_text_by_NID*(subject:cstring, NID: cint, buf: cstring, size: cint): cint{.cdecl, importc.}
422 - proc X509_check_host*(cert: PX509, name: cstring, namelen: cint, flags:cuint, peername: cstring): cint {.cdecl, dynlib: DLLSSLName, importc.}
423 + proc X509_check_host*(cert: PX509, name: cstring, namelen: cint, flags:cuint, peername: cstring): cint {.cdecl, importc.}
425 - proc X509_free*(cert: PX509) {.cdecl, dynlib: DLLSSLName, importc.}
426 + proc X509_free*(cert: PX509) {.cdecl, importc.}
430 type PX509_STORE* = SslPtr
431 type PX509_OBJECT* = SslPtr
433 - {.push callconv:cdecl, dynlib:DLLUtilName, importc.}
434 + {.push callconv:cdecl, importc.}
436 proc X509_OBJECT_new*(): PX509_OBJECT
437 proc X509_OBJECT_free*(a: PX509_OBJECT)
438 @@ -897,12 +893,12 @@ when not defined(nimDisableCertificateValidation) and not defined(windows):
439 # Available in at least OpenSSL 1.1.1 and later, not sure if earlier
442 -proc SSL_CTX_set_alpn_protos*(ctx: SslCtx; protos: cstring; protos_len: cuint): cint {.cdecl, dynlib: DLLSSLName, importc.}
443 -proc SSL_set_alpn_protos*(ssl: SslPtr; protos: cstring; protos_len: cuint): cint {.cdecl, dynlib: DLLSSLName, importc.}
444 -proc SSL_CTX_set_alpn_select_cb*(ctx: SslCtx; cb: proc(ssl: SslPtr; out_proto: ptr cstring; outlen: cstring; in_proto: cstring; inlen: cuint; arg: pointer): cint {.cdecl.}; arg: pointer): cint {.cdecl, dynlib: DLLSSLName, importc.}
445 -proc SSL_get0_alpn_selected*(ssl: SslPtr; data: ptr cstring; len: ptr cuint) {.cdecl, dynlib: DLLSSLName, importc.}
446 -proc SSL_CTX_set_next_protos_advertised_cb*(ctx: SslCtx; cb: proc(ssl: SslPtr; out_proto: ptr cstring; outlen: ptr cuint; arg: pointer): cint {.cdecl.}; arg: pointer) {.cdecl, dynlib: DLLSSLName, importc.}
447 -proc SSL_CTX_set_next_proto_select_cb*(ctx: SslCtx; cb: proc(s: SslPtr; out_proto: cstring; outlen: cstring; in_proto: cstring; inlen: cuint; arg: pointer): cint {.cdecl.}; arg: pointer) {.cdecl, dynlib: DLLSSLName, importc.}
448 -proc SSL_select_next_proto*(out_proto: ptr cstring; outlen: cstring; server: cstring; server_len: cuint; client: cstring; client_len: cuint): cint {.cdecl, dynlib: DLLSSLName, importc.}
449 -proc SSL_get0_next_proto_negotiated*(s: SslPtr; data: ptr cstring; len: ptr cuint) {.cdecl, dynlib: DLLSSLName, importc.}
450 +proc SSL_CTX_set_alpn_protos*(ctx: SslCtx; protos: cstring; protos_len: cuint): cint {.cdecl, importc.}
451 +proc SSL_set_alpn_protos*(ssl: SslPtr; protos: cstring; protos_len: cuint): cint {.cdecl, importc.}
452 +proc SSL_CTX_set_alpn_select_cb*(ctx: SslCtx; cb: proc(ssl: SslPtr; out_proto: ptr cstring; outlen: cstring; in_proto: cstring; inlen: cuint; arg: pointer): cint {.cdecl.}; arg: pointer): cint {.cdecl, importc.}
453 +proc SSL_get0_alpn_selected*(ssl: SslPtr; data: ptr cstring; len: ptr cuint) {.cdecl, importc.}
454 +proc SSL_CTX_set_next_protos_advertised_cb*(ctx: SslCtx; cb: proc(ssl: SslPtr; out_proto: ptr cstring; outlen: ptr cuint; arg: pointer): cint {.cdecl.}; arg: pointer) {.cdecl, importc.}
455 +proc SSL_CTX_set_next_proto_select_cb*(ctx: SslCtx; cb: proc(s: SslPtr; out_proto: cstring; outlen: cstring; in_proto: cstring; inlen: cuint; arg: pointer): cint {.cdecl.}; arg: pointer) {.cdecl, importc.}
456 +proc SSL_select_next_proto*(out_proto: ptr cstring; outlen: cstring; server: cstring; server_len: cuint; client: cstring; client_len: cuint): cint {.cdecl, importc.}
457 +proc SSL_get0_next_proto_negotiated*(s: SslPtr; data: ptr cstring; len: ptr cuint) {.cdecl, importc.}