Skip to content

Commit a4fdaa8

Browse files
authored
Correctly import libcrypto functions using dynlib (#19881)
1 parent ab47707 commit a4fdaa8

File tree

1 file changed

+37
-35
lines changed

1 file changed

+37
-35
lines changed

lib/wrappers/openssl.nim

Lines changed: 37 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,9 @@ else:
9393

9494
import dynlib
9595

96+
{.pragma: lcrypto, cdecl, dynlib: DLLUtilName, importc.}
97+
{.pragma: lssl, cdecl, dynlib: DLLSSLName, importc.}
98+
9699
type
97100
SslStruct {.final, pure.} = object
98101
SslPtr* = ptr SslStruct
@@ -102,7 +105,6 @@ type
102105
PSTACK* = SslPtr
103106
PX509* = SslPtr
104107
PX509_NAME* = SslPtr
105-
PEVP_MD* = SslPtr
106108
PBIO_METHOD* = SslPtr
107109
BIO* = SslPtr
108110
EVP_PKEY* = SslPtr
@@ -684,48 +686,48 @@ proc RSA_free*(rsa: PRSA) {.cdecl, dynlib: DLLUtilName, importc.}
684686
proc RSA_size*(rsa: PRSA): cint {.cdecl, dynlib: DLLUtilName, importc.}
685687

686688
# sha types
687-
proc EVP_md_null*(): EVP_MD {.cdecl, importc.}
688-
proc EVP_md2*(): EVP_MD {.cdecl, importc.}
689-
proc EVP_md4*(): EVP_MD {.cdecl, importc.}
690-
proc EVP_md5*(): EVP_MD {.cdecl, importc.}
691-
proc EVP_sha*(): EVP_MD {.cdecl, importc.}
692-
proc EVP_sha1*(): EVP_MD {.cdecl, importc.}
693-
proc EVP_dss*(): EVP_MD {.cdecl, importc.}
694-
proc EVP_dss1*(): EVP_MD {.cdecl, importc.}
695-
proc EVP_ecdsa*(): EVP_MD {.cdecl, importc.}
696-
proc EVP_sha224*(): EVP_MD {.cdecl, importc.}
697-
proc EVP_sha256*(): EVP_MD {.cdecl, importc.}
698-
proc EVP_sha384*(): EVP_MD {.cdecl, importc.}
699-
proc EVP_sha512*(): EVP_MD {.cdecl, importc.}
700-
proc EVP_mdc2*(): EVP_MD {.cdecl, importc.}
701-
proc EVP_ripemd160*(): EVP_MD {.cdecl, importc.}
702-
proc EVP_whirlpool*(): EVP_MD {.cdecl, importc.}
703-
proc EVP_MD_size*(md: EVP_MD): cint {.cdecl, importc.}
689+
proc EVP_md_null*(): EVP_MD {.lcrypto.}
690+
proc EVP_md2*(): EVP_MD {.lcrypto.}
691+
proc EVP_md4*(): EVP_MD {.lcrypto.}
692+
proc EVP_md5*(): EVP_MD {.lcrypto.}
693+
proc EVP_sha*(): EVP_MD {.lcrypto.}
694+
proc EVP_sha1*(): EVP_MD {.lcrypto.}
695+
proc EVP_dss*(): EVP_MD {.lcrypto.}
696+
proc EVP_dss1*(): EVP_MD {.lcrypto.}
697+
proc EVP_ecdsa*(): EVP_MD {.lcrypto.}
698+
proc EVP_sha224*(): EVP_MD {.lcrypto.}
699+
proc EVP_sha256*(): EVP_MD {.lcrypto.}
700+
proc EVP_sha384*(): EVP_MD {.lcrypto.}
701+
proc EVP_sha512*(): EVP_MD {.lcrypto.}
702+
proc EVP_mdc2*(): EVP_MD {.lcrypto.}
703+
proc EVP_ripemd160*(): EVP_MD {.lcrypto.}
704+
proc EVP_whirlpool*(): EVP_MD {.lcrypto.}
705+
proc EVP_MD_size*(md: EVP_MD): cint {.lcrypto.}
704706

705707
# hmac functions
706-
proc HMAC*(evp_md: EVP_MD; key: pointer; key_len: cint; d: cstring; n: csize_t; md: cstring; md_len: ptr cuint): cstring {.cdecl, importc.}
708+
proc HMAC*(evp_md: EVP_MD; key: pointer; key_len: cint; d: cstring; n: csize_t; md: cstring; md_len: ptr cuint): cstring {.lcrypto.}
707709

708710
# RSA key functions
709-
proc PEM_read_bio_PrivateKey*(bp: BIO, x: ptr EVP_PKEY, cb: pointer, u: pointer): EVP_PKEY {.cdecl, importc.}
710-
proc EVP_PKEY_free*(p: EVP_PKEY) {.cdecl, importc.}
711-
proc EVP_DigestSignInit*(ctx: EVP_MD_CTX, pctx: ptr EVP_PKEY_CTX, typ: EVP_MD, e: ENGINE, pkey: EVP_PKEY): cint {.cdecl, importc.}
712-
proc EVP_DigestInit_ex*(ctx: EVP_MD_CTX, typ: PEVP_MD, engine: SslPtr = nil): cint {.cdecl, importc.}
713-
proc EVP_DigestUpdate*(ctx: EVP_MD_CTX, data: pointer, len: cuint): cint {.cdecl, importc.}
714-
proc EVP_DigestFinal_ex*(ctx: EVP_MD_CTX, buffer: pointer, size: ptr cuint): cint {.cdecl, importc.}
715-
proc EVP_DigestSignFinal*(ctx: EVP_MD_CTX, data: pointer, len: ptr csize_t): cint {.cdecl, importc.}
716-
proc EVP_PKEY_CTX_new*(pkey: EVP_PKEY, e: ENGINE): EVP_PKEY_CTX {.cdecl, importc.}
717-
proc EVP_PKEY_CTX_free*(pkeyCtx: EVP_PKEY_CTX) {.cdecl, importc.}
718-
proc EVP_PKEY_sign_init*(c: EVP_PKEY_CTX): cint {.cdecl, importc.}
711+
proc PEM_read_bio_PrivateKey*(bp: BIO, x: ptr EVP_PKEY, cb: pointer, u: pointer): EVP_PKEY {.lcrypto.}
712+
proc EVP_PKEY_free*(p: EVP_PKEY) {.lcrypto.}
713+
proc EVP_DigestSignInit*(ctx: EVP_MD_CTX, pctx: ptr EVP_PKEY_CTX, typ: EVP_MD, e: ENGINE, pkey: EVP_PKEY): cint {.lcrypto.}
714+
proc EVP_DigestInit_ex*(ctx: EVP_MD_CTX, typ: EVP_MD, engine: SslPtr = nil): cint {.lcrypto.}
715+
proc EVP_DigestUpdate*(ctx: EVP_MD_CTX, data: pointer, len: cuint): cint {.lcrypto.}
716+
proc EVP_DigestFinal_ex*(ctx: EVP_MD_CTX, buffer: pointer, size: ptr cuint): cint {.lcrypto.}
717+
proc EVP_DigestSignFinal*(ctx: EVP_MD_CTX, data: pointer, len: ptr csize_t): cint {.lcrypto.}
718+
proc EVP_PKEY_CTX_new*(pkey: EVP_PKEY, e: ENGINE): EVP_PKEY_CTX {.lcrypto.}
719+
proc EVP_PKEY_CTX_free*(pkeyCtx: EVP_PKEY_CTX) {.lcrypto.}
720+
proc EVP_PKEY_sign_init*(c: EVP_PKEY_CTX): cint {.lcrypto.}
719721

720722
when defined(macosx) or defined(windows):
721-
proc EVP_MD_CTX_create*(): EVP_MD_CTX {.cdecl, importc.}
722-
proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.cdecl, importc.}
723-
proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.cdecl, importc.}
723+
proc EVP_MD_CTX_create*(): EVP_MD_CTX {.lcrypto.}
724+
proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.lcrypto.}
725+
proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.lcrypto.}
724726
else:
725727
# some times you will need this instead:
726-
proc EVP_MD_CTX_create*(): EVP_MD_CTX {.cdecl, importc: "EVP_MD_CTX_new".}
727-
proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.cdecl, importc: "EVP_MD_CTX_free".}
728-
proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.cdecl, importc: "EVP_MD_CTX_cleanup".}
728+
proc EVP_MD_CTX_create*(): EVP_MD_CTX {.cdecl, importc: "EVP_MD_CTX_new", dynlib: DLLUtilName.}
729+
proc EVP_MD_CTX_destroy*(ctx: EVP_MD_CTX) {.cdecl, importc: "EVP_MD_CTX_free", dynlib: DLLUtilName.}
730+
proc EVP_MD_CTX_cleanup*(ctx: EVP_MD_CTX): cint {.cdecl, importc: "EVP_MD_CTX_cleanup", dynlib: DLLUtilName.}
729731

730732
# <openssl/md5.h>
731733
type

0 commit comments

Comments
 (0)