nim / 1 / openssl.html

openssl

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

Imports

winlean, dynlib, strutils

Types

SslPtr = ptr SslStruct
Source Edit
PSslPtr = ptr SslPtr
Source Edit
SslCtx = SslPtr
Source Edit
PSSL_METHOD = SslPtr
Source Edit
PSTACK = SslPtr
Source Edit
PX509 = SslPtr
Source Edit
PX509_NAME = SslPtr
Source Edit
PEVP_MD = SslPtr
Source Edit
PBIO_METHOD = SslPtr
Source Edit
BIO = SslPtr
Source Edit
EVP_PKEY = SslPtr
Source Edit
PRSA = SslPtr
Source Edit
PASN1_UTCTIME = SslPtr
Source Edit
PASN1_cInt = SslPtr
Source Edit
PPasswdCb = SslPtr
Source Edit
EVP_MD = SslPtr
Source Edit
EVP_MD_CTX = SslPtr
Source Edit
EVP_PKEY_CTX = SslPtr
Source Edit
ENGINE = SslPtr
Source Edit
PFunction = proc () {...}{.cdecl.}
Source Edit
DES_cblock = array[0 .. 7, int8]
Source Edit
PDES_cblock = ptr DES_cblock
Source Edit
des_ks_struct {...}{.final.} = object
  ks*: DES_cblock
  weak_key*: cint
Source Edit
des_key_schedule = array[1 .. 16, des_ks_struct]
Source Edit
pem_password_cb = proc (buf: cstring; size, rwflag: cint; userdata: pointer): cint {...}{.
    cdecl.}
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
PskClientCallback = proc (ssl: SslPtr; hint: cstring; identity: cstring;
                          max_identity_len: cuint; psk: ptr cuchar;
                          max_psk_len: cuint): cuint {...}{.cdecl.}
Source Edit
PskServerCallback = proc (ssl: SslPtr; identity: cstring; psk: ptr cuchar;
                          max_psk_len: cint): cuint {...}{.cdecl.}
Source Edit
MD5_LONG = cuint
Source Edit
MD5_CTX = object
  A, B, C, D, Nl, Nh: MD5_LONG
  data: array[MD5_LBLOCK, MD5_LONG]
  num: cuint
Source Edit
PX509_STORE = SslPtr
Source Edit
PX509_OBJECT = SslPtr
Source Edit

Consts

DLLSSLName = "(libssl-1_1-x64|ssleay64|libssl64).dll"
Source Edit
DLLUtilName = "(libcrypto-1_1-x64|libeay64).dll"
Source Edit
SSL_SENT_SHUTDOWN = 1
Source Edit
SSL_RECEIVED_SHUTDOWN = 2
Source Edit
EVP_MAX_MD_SIZE = 36
Source Edit
SSL_ERROR_NONE = 0
Source Edit
SSL_ERROR_SSL = 1
Source Edit
SSL_ERROR_WANT_READ = 2
Source Edit
SSL_ERROR_WANT_WRITE = 3
Source Edit
SSL_ERROR_WANT_X509_LOOKUP = 4
Source Edit
SSL_ERROR_SYSCALL = 5
Source Edit
SSL_ERROR_ZERO_RETURN = 6
Source Edit
SSL_ERROR_WANT_CONNECT = 7
Source Edit
SSL_ERROR_WANT_ACCEPT = 8
Source Edit
SSL_CTRL_NEED_TMP_RSA = 1
Source Edit
SSL_CTRL_SET_TMP_RSA = 2
Source Edit
SSL_CTRL_SET_TMP_DH = 3
Source Edit
SSL_CTRL_SET_TMP_ECDH = 4
Source Edit
SSL_CTRL_SET_TMP_RSA_CB = 5
Source Edit
SSL_CTRL_SET_TMP_DH_CB = 6
Source Edit
SSL_CTRL_SET_TMP_ECDH_CB = 7
Source Edit
SSL_CTRL_GET_SESSION_REUSED = 8
Source Edit
SSL_CTRL_GET_CLIENT_CERT_REQUEST = 9
Source Edit
SSL_CTRL_GET_NUM_RENEGOTIATIONS = 10
Source Edit
SSL_CTRL_CLEAR_NUM_RENEGOTIATIONS = 11
Source Edit
SSL_CTRL_GET_TOTAL_RENEGOTIATIONS = 12
Source Edit
SSL_CTRL_GET_FLAGS = 13
Source Edit
SSL_CTRL_EXTRA_CHAIN_CERT = 14
Source Edit
SSL_CTRL_SET_MSG_CALLBACK = 15
Source Edit
SSL_CTRL_SET_MSG_CALLBACK_ARG = 16
Source Edit
SSL_CTRL_SET_MTU = 17
Source Edit
SSL_CTRL_SESS_NUMBER = 20
Source Edit
SSL_CTRL_SESS_CONNECT = 21
Source Edit
SSL_CTRL_SESS_CONNECT_GOOD = 22
Source Edit
SSL_CTRL_SESS_CONNECT_RENEGOTIATE = 23
Source Edit
SSL_CTRL_SESS_ACCEPT = 24
Source Edit
SSL_CTRL_SESS_ACCEPT_GOOD = 25
Source Edit
SSL_CTRL_SESS_ACCEPT_RENEGOTIATE = 26
Source Edit
SSL_CTRL_SESS_HIT = 27
Source Edit
SSL_CTRL_SESS_CB_HIT = 28
Source Edit
SSL_CTRL_SESS_MISSES = 29
Source Edit
SSL_CTRL_SESS_TIMEOUTS = 30
Source Edit
SSL_CTRL_SESS_CACHE_FULL = 31
Source Edit
SSL_CTRL_OPTIONS = 32
Source Edit
SSL_CTRL_MODE = 33
Source Edit
SSL_CTRL_GET_READ_AHEAD = 40
Source Edit
SSL_CTRL_SET_READ_AHEAD = 41
Source Edit
SSL_CTRL_SET_SESS_CACHE_SIZE = 42
Source Edit
SSL_CTRL_GET_SESS_CACHE_SIZE = 43
Source Edit
SSL_CTRL_SET_SESS_CACHE_MODE = 44
Source Edit
SSL_CTRL_GET_SESS_CACHE_MODE = 45
Source Edit
SSL_CTRL_GET_MAX_CERT_LIST = 50
Source Edit
SSL_CTRL_SET_MAX_CERT_LIST = 51
Source Edit
SSL_CTRL_SET_ECDH_AUTO = 94
Source Edit
TLSEXT_NAMETYPE_host_name = 0
Source Edit
SSL_TLSEXT_ERR_OK = 0
Source Edit
SSL_TLSEXT_ERR_ALERT_WARNING = 1
Source Edit
SSL_TLSEXT_ERR_ALERT_FATAL = 2
Source Edit
SSL_TLSEXT_ERR_NOACK = 3
Source Edit
SSL_MODE_ENABLE_PARTIAL_WRITE = 1
Source Edit
SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER = 2
Source Edit
SSL_MODE_AUTO_RETRY = 4
Source Edit
SSL_MODE_NO_AUTO_CHAIN = 8
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_OP_ALL = 0x000FFFFF
Source Edit
SSL_VERIFY_NONE = 0x00000000
Source Edit
SSL_VERIFY_PEER = 0x00000001
Source Edit
SSL_ST_CONNECT = 0x00001000
Source Edit
SSL_ST_ACCEPT = 0x00002000
Source Edit
SSL_ST_INIT = 12288
Source Edit
OPENSSL_DES_DECRYPT = 0
Source Edit
OPENSSL_DES_ENCRYPT = 1
Source Edit
X509_V_OK = 0
Source Edit
X509_V_ILLEGAL = 1
Source Edit
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT = 2
Source Edit
X509_V_ERR_UNABLE_TO_GET_CRL = 3
Source Edit
X509_V_ERR_UNABLE_TO_DECRYPT_CERT_SIGNATURE = 4
Source Edit
X509_V_ERR_UNABLE_TO_DECRYPT_CRL_SIGNATURE = 5
Source Edit
X509_V_ERR_UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY = 6
Source Edit
X509_V_ERR_CERT_SIGNATURE_FAILURE = 7
Source Edit
X509_V_ERR_CRL_SIGNATURE_FAILURE = 8
Source Edit
X509_V_ERR_CERT_NOT_YET_VALID = 9
Source Edit
X509_V_ERR_CERT_HAS_EXPIRED = 10
Source Edit
X509_V_ERR_CRL_NOT_YET_VALID = 11
Source Edit
X509_V_ERR_CRL_HAS_EXPIRED = 12
Source Edit
X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD = 13
Source Edit
X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD = 14
Source Edit
X509_V_ERR_ERROR_IN_CRL_LAST_UPDATE_FIELD = 15
Source Edit
X509_V_ERR_ERROR_IN_CRL_NEXT_UPDATE_FIELD = 16
Source Edit
X509_V_ERR_OUT_OF_MEM = 17
Source Edit
X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT = 18
Source Edit
X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN = 19
Source Edit
X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY = 20
Source Edit
X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE = 21
Source Edit
X509_V_ERR_CERT_CHAIN_TOO_LONG = 22
Source Edit
X509_V_ERR_CERT_REVOKED = 23
Source Edit
X509_V_ERR_INVALID_CA = 24
Source Edit
X509_V_ERR_PATH_LENGTH_EXCEEDED = 25
Source Edit
X509_V_ERR_INVALID_PURPOSE = 26
Source Edit
X509_V_ERR_CERT_UNTRUSTED = 27
Source Edit
X509_V_ERR_CERT_REJECTED = 28
Source Edit
X509_V_ERR_SUBJECT_ISSUER_MISMATCH = 29
Source Edit
X509_V_ERR_AKID_SKID_MISMATCH = 30
Source Edit
X509_V_ERR_AKID_ISSUER_SERIAL_MISMATCH = 31
Source Edit
X509_V_ERR_KEYUSAGE_NO_CERTSIGN = 32
Source Edit
X509_V_ERR_UNABLE_TO_GET_CRL_ISSUER = 33
Source Edit
X509_V_ERR_UNHANDLED_CRITICAL_EXTENSION = 34
Source Edit
X509_V_ERR_APPLICATION_VERIFICATION = 50
Source Edit
SSL_FILETYPE_ASN1 = 2
Source Edit
SSL_FILETYPE_PEM = 1
Source Edit
EVP_PKEY_RSA = 6
Source Edit
MD5_CBLOCK = 64
Source Edit
MD5_LBLOCK = 16
Source Edit
MD5_DIGEST_LENGTH = 16
Source Edit

Procs

proc TLSv1_method(): PSSL_METHOD {...}{.cdecl, dynlib: DLLSSLName, importc.}
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 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 SSLv2_method(): PSSL_METHOD {...}{.raises: [Exception, LibraryError],
                                   tags: [RootEffect].}
Source Edit
proc SSLv3_method(): PSSL_METHOD {...}{.raises: [Exception, LibraryError],
                                   tags: [RootEffect].}
Source Edit
proc TLS_method(): PSSL_METHOD {...}{.raises: [Exception, LibraryError],
                                 tags: [RootEffect].}
Source Edit
proc TLS_client_method(): PSSL_METHOD {...}{.raises: [Exception, LibraryError],
                                        tags: [RootEffect].}
Source Edit
proc TLS_server_method(): PSSL_METHOD {...}{.raises: [Exception, LibraryError],
                                        tags: [RootEffect].}
Source Edit
proc OpenSSL_add_all_algorithms() {...}{.raises: [Exception], tags: [RootEffect].}
Source Edit
proc getOpenSSLVersion(): culong {...}{.raises: [Exception], tags: [RootEffect].}
Return OpenSSL version as unsigned long or 0 if not available Source Edit
proc SSL_in_init(ssl: SslPtr): cint {...}{.raises: [Exception, LibraryError],
                                      tags: [RootEffect].}
Source Edit
proc SSL_CTX_set_ciphersuites(ctx: SslCtx; str: cstring): cint {...}{.
    raises: [Exception, LibraryError], tags: [RootEffect].}
Source Edit
proc ERR_load_BIO_strings() {...}{.cdecl, dynlib: DLLUtilName, importc.}
Source Edit
proc SSL_new(context: SslCtx): SslPtr {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_free(ssl: SslPtr) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_get_SSL_CTX(ssl: SslPtr): SslCtx {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_set_SSL_CTX(ssl: SslPtr; ctx: SslCtx): SslCtx {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_set_session_id_context(context: SslCtx; sid_ctx: string;
                                    sid_ctx_len: int) {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_get0_verified_chain(ssl: SslPtr): PSTACK {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc SSL_CTX_new(meth: PSSL_METHOD): SslCtx {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_load_verify_locations(ctx: SslCtx; CAfile: cstring; CApath: cstring): cint {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_free(arg0: SslCtx) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_set_verify(s: SslCtx; mode: int;
                        cb: proc (a: int; b: pointer): int {...}{.cdecl.}) {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_get_verify_result(ssl: SslPtr): int {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc SSL_CTX_set_cipher_list(s: SslCtx; ciphers: cstring): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_use_certificate_file(ctx: SslCtx; filename: cstring; typ: cint): cint {...}{.
    stdcall, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_use_certificate_chain_file(ctx: SslCtx; filename: cstring): cint {...}{.
    stdcall, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_use_PrivateKey_file(ctx: SslCtx; filename: cstring; typ: cint): cint {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_check_private_key(ctx: SslCtx): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
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.}
Source Edit
proc SSL_CTX_set_ex_data(ssl: SslCtx; idx: cint; arg: pointer): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_CTX_get_ex_data(ssl: SslCtx; idx: cint): pointer {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_set_fd(ssl: SslPtr; fd: SocketHandle): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_shutdown(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_set_shutdown(ssl: SslPtr; mode: cint) {...}{.cdecl, dynlib: DLLSSLName,
    importc: "SSL_set_shutdown".}
Source Edit
proc SSL_get_shutdown(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc: "SSL_get_shutdown".}
Source Edit
proc SSL_connect(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_read(ssl: SslPtr; buf: pointer; num: int): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_write(ssl: SslPtr; buf: cstring; num: int): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_get_error(s: SslPtr; ret_code: cint): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc SSL_accept(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_pending(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc BIO_new_mem_buf(data: pointer; len: cint): BIO {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc BIO_new_ssl_connect(ctx: SslCtx): BIO {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc BIO_ctrl(bio: BIO; cmd: cint; larg: int; arg: cstring): int {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc BIO_get_ssl(bio: BIO; ssl: ptr SslPtr): int {...}{.raises: [], tags: [].}
Source Edit
proc BIO_set_conn_hostname(bio: BIO; name: cstring): int {...}{.raises: [], tags: [].}
Source Edit
proc BIO_do_handshake(bio: BIO): int {...}{.raises: [], tags: [].}
Source Edit
proc BIO_do_connect(bio: BIO): int {...}{.raises: [], tags: [].}
Source Edit
proc BIO_read(b: BIO; data: cstring; length: cint): cint {...}{.cdecl,
    dynlib: DLLUtilName, importc.}
Source Edit
proc BIO_write(b: BIO; data: cstring; length: cint): cint {...}{.cdecl,
    dynlib: DLLUtilName, importc.}
Source Edit
proc BIO_free(b: BIO): cint {...}{.cdecl, dynlib: DLLUtilName, importc.}
Source Edit
proc ERR_print_errors_fp(fp: File) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc ERR_error_string(e: culong; buf: cstring): cstring {...}{.cdecl,
    dynlib: DLLUtilName, importc.}
Source Edit
proc ERR_get_error(): culong {...}{.cdecl, dynlib: DLLUtilName, importc.}
Source Edit
proc ERR_peek_last_error(): culong {...}{.cdecl, dynlib: DLLUtilName, importc.}
Source Edit
proc OPENSSL_config(configName: cstring) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc OPENSSL_sk_num(stack: PSTACK): int {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc OPENSSL_sk_value(stack: PSTACK; index: int): pointer {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc d2i_X509(px: ptr PX509; i: ptr ptr cuchar; len: cint): PX509 {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc i2d_X509(cert: PX509; o: ptr ptr cuchar): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc d2i_X509(b: string): PX509 {...}{.raises: [Exception], tags: [].}
decode DER/BER bytestring into X.509 certificate struct Source Edit
proc i2d_X509(cert: PX509): string {...}{.raises: [Exception], tags: [].}
encode cert to DER string Source Edit
proc CRYPTO_malloc_init() {...}{.raises: [], tags: [].}
Source Edit
proc SSL_CTX_ctrl(ctx: SslCtx; cmd: cint; larg: clong; parg: pointer): clong {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc SSLCTXSetMode(ctx: SslCtx; mode: int): int {...}{.raises: [], tags: [].}
Source Edit
proc SSL_ctrl(ssl: SslPtr; cmd: cint; larg: int; parg: pointer): int {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc SSL_set_tlsext_host_name(ssl: SslPtr; name: cstring): int {...}{.raises: [],
    tags: [].}
Source Edit
proc SSL_get_servername(ssl: SslPtr; typ: cint = TLSEXT_NAMETYPE_host_name): cstring {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
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_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_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_psk_client_callback(ctx: SslCtx; callback: PskClientCallback) {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
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.}
Set callback called when OpenSSL needs PSK (for server). Source Edit
proc SSL_CTX_use_psk_identity_hint(ctx: SslCtx; hint: cstring): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Set PSK identity hint to use. Source Edit
proc SSL_get_psk_identity(ssl: SslPtr): cstring {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Get PSK identity. 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 bioNew(b: PBIO_METHOD): BIO {...}{.cdecl, dynlib: DLLUtilName,
                                   importc: "BIO_new".}
Source Edit
proc bioFreeAll(b: BIO) {...}{.cdecl, dynlib: DLLUtilName, importc: "BIO_free_all".}
Source Edit
proc bioSMem(): PBIO_METHOD {...}{.cdecl, dynlib: DLLUtilName, importc: "BIO_s_mem".}
Source Edit
proc bioCtrlPending(b: BIO): cint {...}{.cdecl, dynlib: DLLUtilName,
                                    importc: "BIO_ctrl_pending".}
Source Edit
proc bioRead(b: BIO; Buf: cstring; length: cint): cint {...}{.cdecl,
    dynlib: DLLUtilName, importc: "BIO_read".}
Source Edit
proc bioWrite(b: BIO; Buf: cstring; length: cint): cint {...}{.cdecl,
    dynlib: DLLUtilName, importc: "BIO_write".}
Source Edit
proc sslSetConnectState(s: SslPtr) {...}{.cdecl, dynlib: DLLSSLName,
                                     importc: "SSL_set_connect_state".}
Source Edit
proc sslSetAcceptState(s: SslPtr) {...}{.cdecl, dynlib: DLLSSLName,
                                    importc: "SSL_set_accept_state".}
Source Edit
proc sslRead(ssl: SslPtr; buf: cstring; num: cint): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc: "SSL_read".}
Source Edit
proc sslPeek(ssl: SslPtr; buf: cstring; num: cint): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc: "SSL_peek".}
Source Edit
proc sslWrite(ssl: SslPtr; buf: cstring; num: cint): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc: "SSL_write".}
Source Edit
proc sslSetBio(ssl: SslPtr; rbio, wbio: BIO) {...}{.cdecl, dynlib: DLLSSLName,
    importc: "SSL_set_bio".}
Source Edit
proc sslDoHandshake(ssl: SslPtr): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc: "SSL_do_handshake".}
Source Edit
proc ErrClearError() {...}{.cdecl, dynlib: DLLUtilName, importc: "ERR_clear_error".}
Source Edit
proc ErrFreeStrings() {...}{.cdecl, dynlib: DLLUtilName, importc: "ERR_free_strings".}
Source Edit
proc ErrRemoveState(pid: cint) {...}{.cdecl, dynlib: DLLUtilName,
                                 importc: "ERR_remove_state".}
Source Edit
proc PEM_read_bio_RSA_PUBKEY(bp: BIO; x: ptr PRSA; pw: pem_password_cb;
                             u: pointer): PRSA {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc RSA_verify(kind: cint; origMsg: pointer; origMsgLen: cuint;
                signature: pointer; signatureLen: cuint; rsa: PRSA): cint {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc PEM_read_RSAPrivateKey(fp: pointer; x: ptr PRSA; cb: pem_password_cb;
                            u: pointer): PRSA {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc PEM_read_RSAPublicKey(fp: pointer; x: ptr PRSA; cb: pem_password_cb;
                           u: pointer): PRSA {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc PEM_read_bio_RSAPublicKey(bp: BIO; x: ptr PRSA; cb: pem_password_cb;
                               u: pointer): PRSA {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc PEM_read_bio_RSAPrivateKey(bp: BIO; x: ptr PRSA; cb: pem_password_cb;
                                u: pointer): PRSA {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc RSA_private_encrypt(flen: cint; fr: ptr cuchar; to: ptr cuchar; rsa: PRSA;
                         padding: PaddingType): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc RSA_public_encrypt(flen: cint; fr: ptr cuchar; to: ptr cuchar; rsa: PRSA;
                        padding: PaddingType): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc RSA_private_decrypt(flen: cint; fr: ptr cuchar; to: ptr cuchar; rsa: PRSA;
                         padding: PaddingType): cint {...}{.cdecl,
    dynlib: DLLSSLName, importc.}
Source Edit
proc RSA_public_decrypt(flen: cint; fr: ptr cuchar; to: ptr cuchar; rsa: PRSA;
                        padding: PaddingType): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc RSA_free(rsa: PRSA) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc RSA_size(rsa: PRSA): cint {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc EVP_md_null(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_md2(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_md4(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_md5(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha1(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_dss(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_dss1(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_ecdsa(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha224(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha256(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha384(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_sha512(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_mdc2(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_ripemd160(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_whirlpool(): EVP_MD {...}{.cdecl, importc.}
Source Edit
proc EVP_MD_size(md: EVP_MD): cint {...}{.cdecl, importc.}
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.}
Source Edit
proc PEM_read_bio_PrivateKey(bp: BIO; x: ptr EVP_PKEY; cb: pointer; u: pointer): EVP_PKEY {...}{.
    cdecl, importc.}
Source Edit
proc EVP_PKEY_free(p: EVP_PKEY) {...}{.cdecl, importc.}
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.}
Source Edit
proc EVP_DigestInit_ex(ctx: EVP_MD_CTX; typ: PEVP_MD; engine: SslPtr = nil): cint {...}{.
    cdecl, importc.}
Source Edit
proc EVP_DigestUpdate(ctx: EVP_MD_CTX; data: pointer; len: cuint): cint {...}{.cdecl,
    importc.}
Source Edit
proc EVP_DigestFinal_ex(ctx: EVP_MD_CTX; buffer: pointer; size: ptr cuint): cint {...}{.
    cdecl, importc.}
Source Edit
proc EVP_DigestSignFinal(ctx: EVP_MD_CTX; data: pointer; len: ptr csize_t): cint {...}{.
    cdecl, importc.}
Source Edit
proc EVP_PKEY_CTX_new(pkey: EVP_PKEY; e: ENGINE): EVP_PKEY_CTX {...}{.cdecl, importc.}
Source Edit
proc EVP_PKEY_CTX_free(pkeyCtx: EVP_PKEY_CTX) {...}{.cdecl, importc.}
Source Edit
proc EVP_PKEY_sign_init(c: EVP_PKEY_CTX): cint {...}{.cdecl, importc.}
Source Edit
proc EVP_MD_CTX_create(): EVP_MD_CTX {...}{.cdecl, importc: "EVP_MD_CTX_new".}
Source Edit
proc EVP_MD_CTX_destroy(ctx: EVP_MD_CTX) {...}{.cdecl, importc: "EVP_MD_CTX_free".}
Source Edit
proc EVP_MD_CTX_cleanup(ctx: EVP_MD_CTX): cint {...}{.cdecl,
    importc: "EVP_MD_CTX_cleanup".}
Source Edit
proc md5_Init(c: var MD5_CTX): cint {...}{.importc: "MD5_Init".}
Source Edit
proc md5_Update(c: var MD5_CTX; data: pointer; len: csize_t): cint {...}{.
    importc: "MD5_Update".}
Source Edit
proc md5_Final(md: cstring; c: var MD5_CTX): cint {...}{.importc: "MD5_Final".}
Source Edit
proc md5(d: ptr cuchar; n: csize_t; md: ptr cuchar): ptr cuchar {...}{.importc: "MD5".}
Source Edit
proc md5_Transform(c: var MD5_CTX; b: ptr cuchar) {...}{.importc: "MD5_Transform".}
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_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 SSL_get_peer_certificate(ssl: SslCtx): PX509 {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc X509_get_subject_name(a: PX509): PX509_NAME {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc X509_get_issuer_name(a: PX509): PX509_NAME {...}{.cdecl, dynlib: DLLUtilName,
    importc.}
Source Edit
proc X509_NAME_oneline(a: PX509_NAME; buf: cstring; size: cint): cstring {...}{.
    cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc X509_NAME_get_text_by_NID(subject: cstring; NID: cint; buf: cstring;
                               size: cint): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc X509_check_host(cert: PX509; name: cstring; namelen: cint; flags: cuint;
                     peername: cstring): cint {...}{.cdecl, dynlib: DLLSSLName,
    importc.}
Source Edit
proc X509_free(cert: PX509) {...}{.cdecl, dynlib: DLLSSLName, importc.}
Source Edit
proc X509_OBJECT_new(): PX509_OBJECT {...}{.importc.}
Source Edit
proc X509_OBJECT_free(a: PX509_OBJECT) {...}{.importc.}
Source Edit
proc X509_STORE_new(): PX509_STORE {...}{.importc.}
Source Edit
proc X509_STORE_free(v: PX509_STORE) {...}{.importc.}
Source Edit
proc X509_STORE_lock(ctx: PX509_STORE): cint {...}{.importc.}
Source Edit
proc X509_STORE_unlock(ctx: PX509_STORE): cint {...}{.importc.}
Source Edit
proc X509_STORE_up_ref(v: PX509_STORE): cint {...}{.importc.}
Source Edit
proc X509_STORE_set_flags(ctx: PX509_STORE; flags: culong): cint {...}{.importc.}
Source Edit
proc X509_STORE_set_purpose(ctx: PX509_STORE; purpose: cint): cint {...}{.importc.}
Source Edit
proc X509_STORE_set_trust(ctx: PX509_STORE; trust: cint): cint {...}{.importc.}
Source Edit
proc X509_STORE_add_cert(ctx: PX509_STORE; x: PX509): cint {...}{.importc.}
Source Edit

© 2006–2021 Andreas Rumpf
Licensed under the MIT License.
https://nim-lang.org/docs/openssl.html