std/openssl

    Dark Mode
Search:
  Source   Edit

OpenSSL support

When OpenSSL is dynamically linked, the wrapper provides partial forward and backward compatibility for OpenSSL versions above and below 1.1.0

OpenSSL can also be statically linked using --dynlibOverride:ssl for OpenSSL >= 1.1.0. If you want to statically link against OpenSSL 1.0.x, you now have to define the openssl10 symbol via -d:openssl10.

Build and test examples:

./bin/nim c -d:ssl -p:. -r tests/untestable/tssl.nim
./bin/nim c -d:ssl -p:. --dynlibOverride:ssl --passl:-lcrypto --passl:-lssl -r tests/untestable/tssl.nim

Types

BIO = SslPtr
  Source   Edit
DES_cblock = array[0 .. 7, int8]
  Source   Edit
des_ks_struct {.final.} = object
  ks*: DES_cblock
  weak_key*: cint
  Source   Edit
ENGINE = SslPtr
  Source   Edit
EVP_MD = SslPtr
  Source   Edit
MD5_CTX = object
  A, B, C, D, Nl, Nh: MD5_LONG
  data: array[MD5_LBLOCK, MD5_LONG]
  num: cuint
  Source   Edit
PaddingType = enum
  RSA_PKCS1_PADDING = 1, RSA_SSLV23_PADDING = 2, RSA_NO_PADDING = 3,
  RSA_PKCS1_OAEP_PADDING = 4, RSA_X931_PADDING = 5, RSA_PKCS1_PSS_PADDING = 6
  Source   Edit
pem_password_cb = proc (buf: cstring; size, rwflag: cint; userdata: pointer): cint {.
    cdecl.}
  Source   Edit
PFunction = proc () {.cdecl.}
  Source   Edit
PRSA = SslPtr
  Source   Edit
PskClientCallback = proc (ssl: SslPtr; hint: cstring; identity: cstring;
                          max_identity_len: cuint; psk: ptr uint8;
                          max_psk_len: cuint): cuint {.cdecl.}
  Source   Edit
PskServerCallback = proc (ssl: SslPtr; identity: cstring; psk: ptr uint8;
                          max_psk_len: cint): cuint {.cdecl.}
  Source   Edit
PSslPtr = ptr SslPtr
  Source   Edit
PSTACK = SslPtr
  Source   Edit
PX509 = SslPtr
  Source   Edit
SslCtx = SslPtr
  Source   Edit
SslPtr = ptr SslStruct
  Source   Edit

Consts

DLLSSLName = "(libssl-1_1-x64|ssleay64|libssl64).dll"
  Source   Edit
DLLUtilName = "(libcrypto-1_1-x64|libeay64).dll"
  Source   Edit
EVP_MAX_MD_SIZE = 36
  Source   Edit
EVP_PKEY_RSA = 6
  Source   Edit
MD5_CBLOCK = 64
  Source   Edit
MD5_LBLOCK = 16
  Source   Edit
SSL_CTRL_MODE = 33
  Source   Edit
SSL_ERROR_NONE = 0
  Source   Edit
SSL_ERROR_SSL = 1
  Source   Edit
SSL_OP_ALL = 0x000FFFFF
  Source   Edit
SSL_OP_NO_SSLv2 = 0x01000000
  Source   Edit
SSL_OP_NO_SSLv3 = 0x02000000
  Source   Edit
SSL_OP_NO_TLSv1 = 0x04000000
  Source   Edit
SSL_OP_NO_TLSv1_1 = 0x08000000
  Source   Edit
SSL_ST_ACCEPT = 0x00002000
  Source   Edit
SSL_ST_CONNECT = 0x00001000
  Source   Edit
SSL_ST_INIT = 12288
  Source   Edit
SSL_VERIFY_NONE = 0x00000000
  Source   Edit
SSL_VERIFY_PEER = 0x00000001
  Source   Edit
X509_V_ILLEGAL = 1
  Source   Edit
X509_V_OK = 0
  Source   Edit

Procs

proc BIO_ctrl(bio: BIO; cmd: cint; larg: int; arg: cstring): int {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc BIO_do_connect(bio: BIO): int {....raises: [], tags: [].}
  Source   Edit
proc BIO_do_handshake(bio: BIO): int {....raises: [], tags: [].}
  Source   Edit
proc BIO_free(b: BIO): cint {.cdecl, dynlib: DLLUtilName, importc, ...raises: [],
                              tags: [].}
  Source   Edit
proc BIO_get_ssl(bio: BIO; ssl: ptr SslPtr): int {....raises: [], tags: [].}
  Source   Edit
proc BIO_new_mem_buf(data: pointer; len: cint): BIO {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc BIO_new_ssl_connect(ctx: SslCtx): BIO {.cdecl, dynlib: DLLSSLName, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc BIO_read(b: BIO; data: cstring; length: cint): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc BIO_set_conn_hostname(bio: BIO; name: cstring): int {....raises: [], tags: [].}
  Source   Edit
proc BIO_write(b: BIO; data: cstring; length: cint): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc bioCtrlPending(b: BIO): cint {.cdecl, dynlib: DLLUtilName,
                                    importc: "BIO_ctrl_pending", ...raises: [],
                                    tags: [].}
  Source   Edit
proc bioFreeAll(b: BIO) {.cdecl, dynlib: DLLUtilName, importc: "BIO_free_all",
                          ...raises: [], tags: [].}
  Source   Edit
proc bioNew(b: PBIO_METHOD): BIO {.cdecl, dynlib: DLLUtilName,
                                   importc: "BIO_new", ...raises: [], tags: [].}
  Source   Edit
proc bioRead(b: BIO; Buf: cstring; length: cint): cint {.cdecl,
    dynlib: DLLUtilName, importc: "BIO_read", ...raises: [], tags: [].}
  Source   Edit
proc bioSMem(): PBIO_METHOD {.cdecl, dynlib: DLLUtilName, importc: "BIO_s_mem",
                              ...raises: [], tags: [].}
  Source   Edit
proc bioWrite(b: BIO; Buf: cstring; length: cint): cint {.cdecl,
    dynlib: DLLUtilName, importc: "BIO_write", ...raises: [], tags: [].}
  Source   Edit
proc CRYPTO_malloc_init() {....raises: [], tags: [].}
  Source   Edit
proc d2i_X509(b: string): PX509 {....raises: [Exception], tags: [].}
decode DER/BER bytestring into X.509 certificate struct   Source   Edit
proc d2i_X509(px: ptr PX509; i: ptr ptr uint8; len: cint): PX509 {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc ERR_error_string(e: culong; buf: cstring): cstring {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc ERR_get_error(): culong {.cdecl, dynlib: DLLUtilName, importc, ...raises: [],
                               tags: [].}
  Source   Edit
proc ERR_load_BIO_strings() {.cdecl, dynlib: DLLUtilName, importc, ...raises: [],
                              tags: [].}
  Source   Edit
proc ERR_peek_last_error(): culong {.cdecl, dynlib: DLLUtilName, importc,
                                     ...raises: [], tags: [].}
  Source   Edit
proc ERR_print_errors_fp(fp: File) {.cdecl, dynlib: DLLUtilName, importc,
                                     ...raises: [], tags: [].}
  Source   Edit
proc ErrClearError() {.cdecl, dynlib: DLLUtilName, importc: "ERR_clear_error",
                       ...raises: [], tags: [].}
  Source   Edit
proc ErrFreeStrings() {.cdecl, dynlib: DLLUtilName, importc: "ERR_free_strings",
                        ...raises: [], tags: [].}
  Source   Edit
proc ErrRemoveState(pid: cint) {.cdecl, dynlib: DLLUtilName,
                                 importc: "ERR_remove_state", ...raises: [],
                                 tags: [].}
  Source   Edit
proc EVP_DigestFinal_ex(ctx: EVP_MD_CTX; buffer: pointer; size: ptr cuint): cint {.
    cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_DigestInit_ex(ctx: EVP_MD_CTX; typ: PEVP_MD; engine: SslPtr = nil): cint {.
    cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_DigestSignFinal(ctx: EVP_MD_CTX; data: pointer; len: ptr csize_t): cint {.
    cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_DigestSignInit(ctx: EVP_MD_CTX; pctx: ptr EVP_PKEY_CTX; typ: EVP_MD;
                        e: ENGINE; pkey: EVP_PKEY): cint {.cdecl, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc EVP_DigestUpdate(ctx: EVP_MD_CTX; data: pointer; len: cuint): cint {.cdecl,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_dss(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_dss1(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_ecdsa(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_md2(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_md4(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_md5(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_MD_CTX_cleanup(ctx: EVP_MD_CTX): cint {.cdecl,
    importc: "EVP_MD_CTX_cleanup", ...raises: [], tags: [].}
  Source   Edit
proc EVP_MD_CTX_create(): EVP_MD_CTX {.cdecl, importc: "EVP_MD_CTX_new",
                                       ...raises: [], tags: [].}
  Source   Edit
proc EVP_MD_CTX_destroy(ctx: EVP_MD_CTX) {.cdecl, importc: "EVP_MD_CTX_free",
    ...raises: [], tags: [].}
  Source   Edit
proc EVP_md_null(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_MD_size(md: EVP_MD): cint {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_mdc2(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_PKEY_CTX_free(pkeyCtx: EVP_PKEY_CTX) {.cdecl, importc, ...raises: [],
    tags: [].}
  Source   Edit
proc EVP_PKEY_CTX_new(pkey: EVP_PKEY; e: ENGINE): EVP_PKEY_CTX {.cdecl, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc EVP_PKEY_free(p: EVP_PKEY) {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_PKEY_sign_init(c: EVP_PKEY_CTX): cint {.cdecl, importc, ...raises: [],
    tags: [].}
  Source   Edit
proc EVP_ripemd160(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha1(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha224(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha256(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha384(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_sha512(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc EVP_whirlpool(): EVP_MD {.cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc getOpenSSLVersion(): culong {....raises: [Exception], tags: [RootEffect].}
Return OpenSSL version as unsigned long or 0 if not available   Source   Edit
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, ...raises: [],
    tags: [].}
  Source   Edit
proc i2d_X509(cert: PX509): string {....raises: [Exception], tags: [].}
encode cert to DER string   Source   Edit
proc i2d_X509(cert: PX509; o: ptr ptr uint8): cint {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc md5(d: ptr uint8; n: csize_t; md: ptr uint8): ptr uint8 {.importc: "MD5",
    ...raises: [], tags: [].}
  Source   Edit
proc md5_File(file: string): string {....raises: [IOError, Exception],
                                      tags: [ReadIOEffect].}
Generate MD5 hash for a file. Result is a 32 character   Source   Edit
proc md5_Final(md: cstring; c: var MD5_CTX): cint {.importc: "MD5_Final",
    ...raises: [], tags: [].}
  Source   Edit
proc md5_Init(c: var MD5_CTX): cint {.importc: "MD5_Init", ...raises: [], tags: [].}
  Source   Edit
proc md5_Str(str: string): string {....raises: [], tags: [].}
Generate MD5 hash for a string. Result is a 32 character hex string with lowercase characters   Source   Edit
proc md5_Transform(c: var MD5_CTX; b: ptr uint8) {.importc: "MD5_Transform",
    ...raises: [], tags: [].}
  Source   Edit
proc md5_Update(c: var MD5_CTX; data: pointer; len: csize_t): cint {.
    importc: "MD5_Update", ...raises: [], tags: [].}
  Source   Edit
proc OpenSSL_add_all_algorithms() {....raises: [Exception], tags: [RootEffect].}
  Source   Edit
proc OPENSSL_config(configName: cstring) {.cdecl, dynlib: DLLUtilName, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc OPENSSL_sk_num(stack: PSTACK): int {.cdecl, dynlib: DLLSSLName, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc OPENSSL_sk_value(stack: PSTACK; index: int): pointer {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_bio_PrivateKey(bp: BIO; x: ptr EVP_PKEY; cb: pointer; u: pointer): EVP_PKEY {.
    cdecl, importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_bio_RSA_PUBKEY(bp: BIO; x: ptr PRSA; pw: pem_password_cb;
                             u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_bio_RSAPrivateKey(bp: BIO; x: ptr PRSA; cb: pem_password_cb;
                                u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_bio_RSAPublicKey(bp: BIO; x: ptr PRSA; cb: pem_password_cb;
                               u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_RSA_PUBKEY(fp: pointer; x: ptr PRSA; cb: pem_password_cb;
                         u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_RSAPrivateKey(fp: pointer; x: ptr PRSA; cb: pem_password_cb;
                            u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc PEM_read_RSAPublicKey(fp: pointer; x: ptr PRSA; cb: pem_password_cb;
                           u: pointer): PRSA {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc RSA_free(rsa: PRSA) {.cdecl, dynlib: DLLUtilName, importc, ...raises: [],
                           tags: [].}
  Source   Edit
proc RSA_private_decrypt(flen: cint; fr: ptr uint8; to: ptr uint8; rsa: PRSA;
                         padding: PaddingType): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc RSA_private_encrypt(flen: cint; fr: ptr uint8; to: ptr uint8; rsa: PRSA;
                         padding: PaddingType): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc RSA_public_decrypt(flen: cint; fr: ptr uint8; to: ptr uint8; rsa: PRSA;
                        padding: PaddingType): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc RSA_public_encrypt(flen: cint; fr: ptr uint8; to: ptr uint8; rsa: PRSA;
                        padding: PaddingType): cint {.cdecl,
    dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc RSA_size(rsa: PRSA): cint {.cdecl, dynlib: DLLUtilName, importc,
                                 ...raises: [], tags: [].}
  Source   Edit
proc RSA_verify(kind: cint; origMsg: pointer; origMsgLen: cuint;
                signature: pointer; signatureLen: cuint; rsa: PRSA): cint {.
    cdecl, dynlib: DLLUtilName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_accept(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc,
                                     ...raises: [], tags: [].}
  Source   Edit
proc SSL_connect(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc,
                                      ...raises: [], tags: [].}
  Source   Edit
proc SSL_ctrl(ssl: SslPtr; cmd: cint; larg: int; parg: pointer): int {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_check_private_key(ctx: SslCtx): cint {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_ctrl(ctx: SslCtx; cmd: cint; larg: clong; parg: pointer): clong {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_free(arg0: SslCtx) {.cdecl, dynlib: DLLSSLName, importc,
                                  ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_get_ex_data(ssl: SslCtx; idx: cint): pointer {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
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, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_load_verify_locations(ctx: SslCtx; CAfile: cstring; CApath: cstring): cint {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_new(meth: PSSL_METHOD): SslCtx {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_set_cipher_list(s: SslCtx; ciphers: cstring): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_set_ciphersuites(ctx: SslCtx; str: cstring): cint {.
    ...raises: [Exception, LibraryError], tags: [RootEffect].}
  Source   Edit
proc SSL_CTX_set_ecdh_auto(ctx: SslCtx; onoff: cint): cint {.inline,
    ...raises: [Exception], tags: [RootEffect].}

Set automatic curve selection.

On OpenSSL >= 1.1.0 this is on by default and cannot be disabled.

  Source   Edit
proc SSL_CTX_set_ex_data(ssl: SslCtx; idx: cint; arg: pointer): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_set_psk_client_callback(ctx: SslCtx; callback: PskClientCallback) {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
Set callback called when OpenSSL needs PSK (for client).   Source   Edit
proc SSL_CTX_set_psk_server_callback(ctx: SslCtx; callback: PskServerCallback) {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
Set callback called when OpenSSL needs PSK (for server).   Source   Edit
proc SSL_CTX_set_session_id_context(context: SslCtx; sid_ctx: string;
                                    sid_ctx_len: int) {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_set_tlsext_servername_arg(ctx: SslCtx; arg: pointer): int {.
    ...raises: [], tags: [].}
Set the pointer to be used in the callback registered to SSL_CTX_set_tlsext_servername_callback.   Source   Edit
proc SSL_CTX_set_tlsext_servername_callback(ctx: SslCtx;
    cb: proc (ssl: SslPtr; cb_id: int; arg: pointer): int {.cdecl.}): int {.
    ...raises: [], tags: [].}

Set the callback to be used on listening SSL connections when the client hello is received.

The callback should return one of:

  • SSL_TLSEXT_ERR_OK
  • SSL_TLSEXT_ERR_ALERT_WARNING
  • SSL_TLSEXT_ERR_ALERT_FATAL
  • SSL_TLSEXT_ERR_NOACK
  Source   Edit
proc SSL_CTX_set_verify(s: SslCtx; mode: int;
                        cb: proc (a: int; b: pointer): int {.cdecl.}) {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_use_certificate_chain_file(ctx: SslCtx; filename: cstring): cint {.
    stdcall, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_use_certificate_file(ctx: SslCtx; filename: cstring; typ: cint): cint {.
    stdcall, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_use_PrivateKey_file(ctx: SslCtx; filename: cstring; typ: cint): cint {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_CTX_use_psk_identity_hint(ctx: SslCtx; hint: cstring): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
Set PSK identity hint to use.   Source   Edit
proc SSL_free(ssl: SslPtr) {.cdecl, dynlib: DLLSSLName, importc, ...raises: [],
                             tags: [].}
  Source   Edit
proc SSL_get0_verified_chain(ssl: SslPtr): PSTACK {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_get_error(s: SslPtr; ret_code: cint): cint {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_get_peer_certificate(ssl: SslCtx): PX509 {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_get_psk_identity(ssl: SslPtr): cstring {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
Get PSK identity.   Source   Edit
proc SSL_get_servername(ssl: SslPtr; typ: cint = TLSEXT_NAMETYPE_host_name): cstring {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
Retrieve the server name requested in the client hello. This can be used in the callback set in SSL_CTX_set_tlsext_servername_callback to implement virtual hosting. May return nil.   Source   Edit
proc SSL_get_shutdown(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName,
    importc: "SSL_get_shutdown", ...raises: [], tags: [].}
  Source   Edit
proc SSL_get_SSL_CTX(ssl: SslPtr): SslCtx {.cdecl, dynlib: DLLSSLName, importc,
    ...raises: [], tags: [].}
  Source   Edit
proc SSL_get_verify_result(ssl: SslPtr): int {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_in_init(ssl: SslPtr): cint {....raises: [Exception, LibraryError],
                                      tags: [RootEffect].}
  Source   Edit
proc SSL_library_init(): cint {.discardable, ...raises: [Exception, LibraryError],
                                tags: [RootEffect].}
Initialize SSL using OPENSSL_init_ssl for OpenSSL >= 1.1.0 otherwise SSL_library_init   Source   Edit
proc SSL_load_error_strings() {....raises: [Exception], tags: [RootEffect].}
  Source   Edit
proc SSL_new(context: SslCtx): SslPtr {.cdecl, dynlib: DLLSSLName, importc,
                                        ...raises: [], tags: [].}
  Source   Edit
proc SSL_pending(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc,
                                      ...raises: [], tags: [].}
  Source   Edit
proc SSL_read(ssl: SslPtr; buf: pointer; num: int): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_set_fd(ssl: SslPtr; fd: SocketHandle): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_set_shutdown(ssl: SslPtr; mode: cint) {.cdecl, dynlib: DLLSSLName,
    importc: "SSL_set_shutdown", ...raises: [], tags: [].}
  Source   Edit
proc SSL_set_SSL_CTX(ssl: SslPtr; ctx: SslCtx): SslCtx {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSL_set_tlsext_host_name(ssl: SslPtr; name: cstring): int {....raises: [],
    tags: [].}
Set the SNI server name extension to be used in a client hello. Returns 1 if SNI was set, 0 if current SSL configuration doesn't support SNI.   Source   Edit
proc SSL_shutdown(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName, importc,
                                       ...raises: [], tags: [].}
  Source   Edit
proc SSL_write(ssl: SslPtr; buf: cstring; num: int): cint {.cdecl,
    dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc SSLCTXSetMode(ctx: SslCtx; mode: int): int {....raises: [], tags: [].}
  Source   Edit
proc sslDoHandshake(ssl: SslPtr): cint {.cdecl, dynlib: DLLSSLName,
    importc: "SSL_do_handshake", ...raises: [], tags: [].}
  Source   Edit
proc sslPeek(ssl: SslPtr; buf: cstring; num: cint): cint {.cdecl,
    dynlib: DLLSSLName, importc: "SSL_peek", ...raises: [], tags: [].}
  Source   Edit
proc sslRead(ssl: SslPtr; buf: cstring; num: cint): cint {.cdecl,
    dynlib: DLLSSLName, importc: "SSL_read", ...raises: [], tags: [].}
  Source   Edit
proc sslSetAcceptState(s: SslPtr) {.cdecl, dynlib: DLLSSLName,
                                    importc: "SSL_set_accept_state", ...raises: [],
                                    tags: [].}
  Source   Edit
proc sslSetBio(ssl: SslPtr; rbio, wbio: BIO) {.cdecl, dynlib: DLLSSLName,
    importc: "SSL_set_bio", ...raises: [], tags: [].}
  Source   Edit
proc sslSetConnectState(s: SslPtr) {.cdecl, dynlib: DLLSSLName,
                                     importc: "SSL_set_connect_state",
                                     ...raises: [], tags: [].}
  Source   Edit
proc SSLv2_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                   tags: [RootEffect].}
  Source   Edit
proc SSLv3_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                   tags: [RootEffect].}
  Source   Edit
proc SSLv23_client_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
    tags: [RootEffect].}
  Source   Edit
proc SSLv23_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                    tags: [RootEffect].}
  Source   Edit
proc sslWrite(ssl: SslPtr; buf: cstring; num: cint): cint {.cdecl,
    dynlib: DLLSSLName, importc: "SSL_write", ...raises: [], tags: [].}
  Source   Edit
proc TLS_client_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                        tags: [RootEffect].}
  Source   Edit
proc TLS_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                 tags: [RootEffect].}
  Source   Edit
proc TLS_server_method(): PSSL_METHOD {....raises: [Exception, LibraryError],
                                        tags: [RootEffect].}
  Source   Edit
proc TLSv1_method(): PSSL_METHOD {.cdecl, dynlib: DLLSSLName, importc,
                                   ...raises: [], tags: [].}
  Source   Edit
proc X509_check_host(cert: PX509; name: cstring; namelen: cint; flags: cuint;
                     peername: cstring): cint {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_free(cert: PX509) {.cdecl, dynlib: DLLSSLName, importc, ...raises: [],
                              tags: [].}
  Source   Edit
proc X509_get_issuer_name(a: PX509): PX509_NAME {.cdecl, dynlib: DLLUtilName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_get_subject_name(a: PX509): PX509_NAME {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_NAME_get_text_by_NID(subject: cstring; NID: cint; buf: cstring;
                               size: cint): cint {.cdecl, dynlib: DLLSSLName,
    importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_NAME_oneline(a: PX509_NAME; buf: cstring; size: cint): cstring {.
    cdecl, dynlib: DLLSSLName, importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_OBJECT_free(a: PX509_OBJECT) {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_OBJECT_new(): PX509_OBJECT {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_add_cert(ctx: PX509_STORE; x: PX509): cint {.importc,
    ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_free(v: PX509_STORE) {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_lock(ctx: PX509_STORE): cint {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_new(): PX509_STORE {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_set_flags(ctx: PX509_STORE; flags: culong): cint {.importc,
    ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_set_purpose(ctx: PX509_STORE; purpose: cint): cint {.importc,
    ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_set_trust(ctx: PX509_STORE; trust: cint): cint {.importc,
    ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_unlock(ctx: PX509_STORE): cint {.importc, ...raises: [], tags: [].}
  Source   Edit
proc X509_STORE_up_ref(v: PX509_STORE): cint {.importc, ...raises: [], tags: [].}
  Source   Edit