at 23.11-beta 25 kB view raw
1commit 9d7d15533d52971601b738335c40a4f01353c369 2Author: Emery Hemingway <ehmry@posteo.net> 3Date: 2023-09-30 11:11:05 +0100 4 5 Do not load openssl with dlopen 6 7diff --git a/lib/wrappers/openssl.nim b/lib/wrappers/openssl.nim 8index e659746ee..dfb2d3cf2 100644 9--- a/lib/wrappers/openssl.nim 10+++ b/lib/wrappers/openssl.nim 11@@ -105,8 +105,11 @@ else: 12 13 import dynlib 14 15-{.pragma: lcrypto, cdecl, dynlib: DLLUtilName, importc.} 16-{.pragma: lssl, cdecl, dynlib: DLLSSLName, importc.} 17+{.passL: "-lcrypto".} 18+{.passL: "-lssl".} 19+ 20+{.pragma: lcrypto, cdecl, importc.} 21+{.pragma: lssl, cdecl, importc.} 22 23 type 24 SslStruct {.final, pure.} = object 25@@ -274,7 +277,7 @@ const 26 BIO_C_DO_STATE_MACHINE = 101 27 BIO_C_GET_SSL = 110 28 29-proc TLSv1_method*(): PSSL_METHOD{.cdecl, dynlib: DLLSSLName, importc.} 30+proc TLSv1_method*(): PSSL_METHOD{.cdecl, importc.} 31 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: 35 # Static linking 36 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.} 46 47 proc getOpenSSLVersion*(): culong = 48 SSLeay() 49 50- proc ERR_load_BIO_strings*() {.cdecl, dynlib: DLLUtilName, importc.} 51+ proc ERR_load_BIO_strings*() {.cdecl, gimportc.} 52 else: 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) 58 59- proc TLS_method*(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc.} 60+ proc TLS_method*(): PSSL_METHOD {.cdecl, gimportc.} 61 proc SSLv23_method*(): PSSL_METHOD = 62 TLS_method() 63 64- proc OpenSSL_version_num(): culong {.cdecl, dynlib: DLLUtilName, importc.} 65+ proc OpenSSL_version_num(): culong {.cdecl, gimportc.} 66 67 proc getOpenSSLVersion*(): culong = 68 ## Return OpenSSL version as unsigned long 69@@ -321,19 +324,19 @@ when useStaticLink: 70 discard 71 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 77 else: 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.} 82 83 template OpenSSL_add_all_algorithms*() = discard 84 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.} 93 94 else: 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) 99 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, 112 importc.} 113 proc SSL_CTX_new*(meth: PSSL_METHOD): SslCtx{.cdecl, 114- dynlib: DLLSSLName, importc.} 115+ 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.} 125+ importc.} 126 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, 140 importc.} 141 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.} 148 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.} 151 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.} 170 171 proc BIO_new_mem_buf*(data: pointer, len: cint): BIO{.cdecl, 172- dynlib: DLLUtilName, importc.} 173+ importc.} 174 proc BIO_new_ssl_connect*(ctx: SslCtx): BIO{.cdecl, 175- dynlib: DLLSSLName, importc.} 176+ importc.} 177 proc BIO_ctrl*(bio: BIO, cmd: cint, larg: int, arg: cstring): int{.cdecl, 178- dynlib: DLLUtilName, importc.} 179+ 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) 186 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.} 191 192-proc BIO_free*(b: BIO): cint{.cdecl, dynlib: DLLUtilName, importc.} 193+proc BIO_free*(b: BIO): cint{.cdecl, importc.} 194 195-proc ERR_print_errors_fp*(fp: File){.cdecl, dynlib: DLLUtilName, importc.} 196+proc ERR_print_errors_fp*(fp: File){.cdecl, importc.} 197 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.} 202+ importc.} 203+proc ERR_get_error*(): culong{.cdecl, importc.} 204+proc ERR_peek_last_error*(): culong{.cdecl, importc.} 205 206-proc OPENSSL_config*(configName: cstring){.cdecl, dynlib: DLLUtilName, importc.} 207+proc OPENSSL_config*(configName: cstring){.cdecl, importc.} 208 209-proc OPENSSL_sk_num*(stack: PSTACK): int {.cdecl, dynlib: DLLSSLName, importc.} 210+proc OPENSSL_sk_num*(stack: PSTACK): int {.cdecl, importc.} 211 212 proc OPENSSL_sk_value*(stack: PSTACK, index: int): pointer {.cdecl, 213- dynlib: DLLSSLName, importc.} 214+ importc.} 215 216 proc d2i_X509*(px: ptr PX509, i: ptr ptr uint8, len: cint): PX509 {.cdecl, 217- dynlib: DLLUtilName, importc.} 218+ importc.} 219 220 proc i2d_X509*(cert: PX509; o: ptr ptr uint8): cint {.cdecl, 221- dynlib: DLLUtilName, importc.} 222+ importc.} 223 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*() = 228 discard 229 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.} 233 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.} 237 238 proc SSLCTXSetMode*(ctx: SslCtx, mode: int): int = 239 result = SSL_CTX_ctrl(ctx, SSL_CTRL_MODE, clong mode, nil) 240 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.} 244 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) 249 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.} 258 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). 262 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). 266 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. 270 271-proc SSL_get_psk_identity*(ssl: SslPtr): cstring {.cdecl, dynlib: DLLSSLName, importc.} 272+proc SSL_get_psk_identity*(ssl: SslPtr): cstring {.cdecl, importc.} 273 ## Get PSK identity. 274 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.} = 277 else: 278 result = 1 279 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".} 294 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".} 301 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".} 311 312 proc sslSetBio*(ssl: SslPtr, rbio, wbio: BIO) {.cdecl, 313- dynlib: DLLSSLName, importc: "SSL_set_bio".} 314+ importc: "SSL_set_bio".} 315 316 proc sslDoHandshake*(ssl: SslPtr): cint {.cdecl, 317- dynlib: DLLSSLName, importc: "SSL_do_handshake".} 318+ importc: "SSL_do_handshake".} 319 320 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".} 327 328 proc PEM_read_bio_RSA_PUBKEY*(bp: BIO, x: ptr PRSA, pw: pem_password_cb, u: pointer): PRSA {.cdecl, 329- dynlib: DLLUtilName, importc.} 330+ importc.} 331 proc PEM_read_RSA_PUBKEY*(fp: pointer; x: ptr PRSA; cb: pem_password_cb, u: pointer): PRSA {.cdecl, 332- dynlib: DLLUtilName, importc.} 333+ 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.} 339+ importc.} 340 proc PEM_read_RSAPublicKey*(fp: pointer; x: ptr PRSA; cb: pem_password_cb, u: pointer): PRSA {.cdecl, 341- dynlib: DLLUtilName, importc.} 342+ importc.} 343 proc PEM_read_bio_RSAPublicKey*(bp: BIO, x: ptr PRSA, cb: pem_password_cb, u: pointer): PRSA {.cdecl, 344- dynlib: DLLUtilName, importc.} 345+ importc.} 346 proc PEM_read_bio_RSAPrivateKey*(bp: BIO, x: ptr PRSA, cb: pem_password_cb, u: pointer): PRSA {.cdecl, 347- dynlib: DLLUtilName, importc.} 348+ importc.} 349 proc RSA_private_encrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl, 350- dynlib: DLLUtilName, importc.} 351+ importc.} 352 proc RSA_public_encrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl, 353- dynlib: DLLUtilName, importc.} 354+ importc.} 355 proc RSA_private_decrypt*(flen: cint, fr: ptr uint8, to: ptr uint8, rsa: PRSA, padding: PaddingType): cint {.cdecl, 356- dynlib: DLLUtilName, importc.} 357+ 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.} 362+ importc.} 363+proc RSA_free*(rsa: PRSA) {.cdecl, importc.} 364+proc RSA_size*(rsa: PRSA): cint {.cdecl, importc.} 365 366 # sha types 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.} 370 else: 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".} 378 379 # <openssl/md5.h> 380 type 381@@ -770,7 +768,7 @@ type 382 data: array[MD5_LBLOCK, MD5_LONG] 383 num: cuint 384 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 393 when useOpenssl3: 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) 398 elif useStaticLink: 399- proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, dynlib: DLLSSLName, importc.} 400+ proc SSL_get_peer_certificate*(ssl: SslCtx): PX509 {.cdecl, importc.} 401 else: 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) 407 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.} 410 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.} 413 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.} 417 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.} 421 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.} 424 425- proc X509_free*(cert: PX509) {.cdecl, dynlib: DLLSSLName, importc.} 426+ proc X509_free*(cert: PX509) {.cdecl, importc.} 427 428 # Certificates store 429 430 type PX509_STORE* = SslPtr 431 type PX509_OBJECT* = SslPtr 432 433- {.push callconv:cdecl, dynlib:DLLUtilName, importc.} 434+ {.push callconv:cdecl, importc.} 435 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 440 # --Iced Quinn 441 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.} 458