chore: make quictls optional (#19)

This commit is contained in:
richΛrd
2025-09-03 16:09:11 -04:00
committed by GitHub
parent 6ca91ea115
commit 50c9d44f76
6 changed files with 192 additions and 163 deletions

View File

@@ -1,18 +1,14 @@
ngtcp2 for Nim # ngtcp2 for Nim
==============
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
[![License: Apache](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0) [![License: Apache](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)
![Github action](https://github.com/status-im/nim-bearssl/workflows/CI/badge.svg) ![Github action](https://github.com/status-im/nim-bearssl/workflows/CI/badge.svg)
<img src="https://img.shields.io/badge/nim-%3E%3D1.2.0-orange.svg?style=flat-square" /> <img src="https://img.shields.io/badge/nim-%3E%3D1.2.0-orange.svg?style=flat-square" />
Wrapper around the [ngtcp2](https://github.com/ngtcp2/ngtcp2) C library for Wrapper around the [ngtcp2](https://github.com/ngtcp2/ngtcp2) C library for
[Nim](https://nim-lang.org/). [Nim](https://nim-lang.org/).
Updating to a newer version ## Updating to a newer version
---------------------------
Follow these steps when updating the wrapper to a newer version of ngtcp2: Follow these steps when updating the wrapper to a newer version of ngtcp2:
@@ -21,3 +17,9 @@ Follow these steps when updating the wrapper to a newer version of ngtcp2:
- run `build.sh` (requires Nim, CMake and clang to be installed) - run `build.sh` (requires Nim, CMake and clang to be installed)
- increase the `version` property in the `ngtcp2.nimble` file - increase the `version` property in the `ngtcp2.nimble` file
- commit the changes - commit the changes
### Enabling QuicTLS
```
`-d:ngtcp2_enable_quictls`
```

View File

@@ -13,82 +13,83 @@ type
ptls_handshake_properties_t_anon0_t_server_t_cookie_t* = ptls_handshake_properties_t_anon0_t_server_t_cookie_t* =
struct_st_ptls_handshake_properties_t_anon0_t_server_t_cookie_t struct_st_ptls_handshake_properties_t_anon0_t_server_t_cookie_t
# OpenSSL/QuicTLS crypto support when defined(ngtcp2_enable_quictls):
# OpenSSL/QuicTLS type definitions # OpenSSL/QuicTLS crypto support
type # OpenSSL/QuicTLS type definitions
SSL_CTX* = pointer type
OSSL_ENCRYPTION_LEVEL* = enum SSL_CTX* = pointer
OSSL_ENCRYPTION_LEVEL_INITIAL = 0 OSSL_ENCRYPTION_LEVEL* = enum
OSSL_ENCRYPTION_LEVEL_EARLY_DATA = 1 OSSL_ENCRYPTION_LEVEL_INITIAL = 0
OSSL_ENCRYPTION_LEVEL_HANDSHAKE = 2 OSSL_ENCRYPTION_LEVEL_EARLY_DATA = 1
OSSL_ENCRYPTION_LEVEL_APPLICATION = 3 OSSL_ENCRYPTION_LEVEL_HANDSHAKE = 2
OSSL_ENCRYPTION_LEVEL_APPLICATION = 3
# ngtcp2_crypto_quictls error constants # ngtcp2_crypto_quictls error constants
const const
NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP* = -10001 NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP* = -10001
NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB* = -10002 NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB* = -10002
# ngtcp2_crypto_quictls function bindings # ngtcp2_crypto_quictls function bindings
when not declared(ngtcp2_crypto_quictls_init): when not declared(ngtcp2_crypto_quictls_init):
proc ngtcp2_crypto_quictls_init*(): cint {. proc ngtcp2_crypto_quictls_init*(): cint {.
cdecl, importc: "ngtcp2_crypto_quictls_init" cdecl, importc: "ngtcp2_crypto_quictls_init"
.} .}
else: else:
static: static:
hint( hint(
"Declaration of " & "ngtcp2_crypto_quictls_init" & "Declaration of " & "ngtcp2_crypto_quictls_init" &
" already exists, not redeclaring" " already exists, not redeclaring"
) )
when not declared(ngtcp2_crypto_quictls_from_ossl_encryption_level): when not declared(ngtcp2_crypto_quictls_from_ossl_encryption_level):
proc ngtcp2_crypto_quictls_from_ossl_encryption_level*( proc ngtcp2_crypto_quictls_from_ossl_encryption_level*(
ossl_level: OSSL_ENCRYPTION_LEVEL ossl_level: OSSL_ENCRYPTION_LEVEL
): ngtcp2_encryption_level_553648745 {. ): ngtcp2_encryption_level_553648745 {.
cdecl, importc: "ngtcp2_crypto_quictls_from_ossl_encryption_level" cdecl, importc: "ngtcp2_crypto_quictls_from_ossl_encryption_level"
.} .}
else: else:
static: static:
hint( hint(
"Declaration of " & "ngtcp2_crypto_quictls_from_ossl_encryption_level" & "Declaration of " & "ngtcp2_crypto_quictls_from_ossl_encryption_level" &
" already exists, not redeclaring" " already exists, not redeclaring"
) )
when not declared(ngtcp2_crypto_quictls_from_ngtcp2_encryption_level): when not declared(ngtcp2_crypto_quictls_from_ngtcp2_encryption_level):
proc ngtcp2_crypto_quictls_from_ngtcp2_encryption_level*( proc ngtcp2_crypto_quictls_from_ngtcp2_encryption_level*(
encryption_level: ngtcp2_encryption_level_553648745 encryption_level: ngtcp2_encryption_level_553648745
): OSSL_ENCRYPTION_LEVEL {. ): OSSL_ENCRYPTION_LEVEL {.
cdecl, importc: "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level" cdecl, importc: "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level"
.} .}
else: else:
static: static:
hint( hint(
"Declaration of " & "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level" & "Declaration of " & "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level" &
" already exists, not redeclaring" " already exists, not redeclaring"
) )
when not declared(ngtcp2_crypto_quictls_configure_server_context): when not declared(ngtcp2_crypto_quictls_configure_server_context):
proc ngtcp2_crypto_quictls_configure_server_context*( proc ngtcp2_crypto_quictls_configure_server_context*(
ssl_ctx: SSL_CTX ssl_ctx: SSL_CTX
): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_server_context".} ): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_server_context".}
else: else:
static: static:
hint( hint(
"Declaration of " & "ngtcp2_crypto_quictls_configure_server_context" & "Declaration of " & "ngtcp2_crypto_quictls_configure_server_context" &
" already exists, not redeclaring" " already exists, not redeclaring"
) )
when not declared(ngtcp2_crypto_quictls_configure_client_context): when not declared(ngtcp2_crypto_quictls_configure_client_context):
proc ngtcp2_crypto_quictls_configure_client_context*( proc ngtcp2_crypto_quictls_configure_client_context*(
ssl_ctx: SSL_CTX ssl_ctx: SSL_CTX
): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_client_context".} ): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_client_context".}
else: else:
static: static:
hint( hint(
"Declaration of " & "ngtcp2_crypto_quictls_configure_client_context" & "Declaration of " & "ngtcp2_crypto_quictls_configure_client_context" &
" already exists, not redeclaring" " already exists, not redeclaring"
) )

View File

@@ -20,12 +20,12 @@ else:
{.passl: "-lcrypto".} {.passl: "-lcrypto".}
const root = currentSourcePath.parentDir const root = currentSourcePath.parentDir
const libIncludes = root/"build"/"lib"/"includes" const libIncludes = root / "build" / "lib" / "includes"
const ngtcp2Crypto = root/"libs"/"ngtcp2"/"crypto" const ngtcp2Crypto = root / "libs" / "ngtcp2" / "crypto"
const ngtcp2CryptoIncludes = root/"libs"/"ngtcp2"/"crypto"/"includes" const ngtcp2CryptoIncludes = root / "libs" / "ngtcp2" / "crypto" / "includes"
const ngtcp2Lib = root/"libs"/"ngtcp2"/"lib" const ngtcp2Lib = root / "libs" / "ngtcp2" / "lib"
const ngtcp2LibIncludes = root/"libs"/"ngtcp2"/"lib"/"includes" const ngtcp2LibIncludes = root / "libs" / "ngtcp2" / "lib" / "includes"
const picotlsInclude = root/"libs"/"picotls"/"include" const picotlsInclude = root / "libs" / "picotls" / "include"
{.passc: fmt"-I{libIncludes}".} {.passc: fmt"-I{libIncludes}".}
{.passc: fmt"-I{ngtcp2Crypto}".} {.passc: fmt"-I{ngtcp2Crypto}".}
@@ -34,9 +34,10 @@ const picotlsInclude = root/"libs"/"picotls"/"include"
{.passc: fmt"-I{ngtcp2LibIncludes}".} {.passc: fmt"-I{ngtcp2LibIncludes}".}
{.passc: fmt"-I{picotlsInclude}".} {.passc: fmt"-I{picotlsInclude}".}
# QuicTLS/OpenSSL crypto support when defined(ngtcp2_enable_quictls):
{.passc: "-DNGTCP2_CRYPTO_QUICTLS".} # QuicTLS/OpenSSL crypto support
{.passc: "-I/usr/include/openssl".} {.localpassc: "-DNGTCP2_CRYPTO_QUICTLS".}
{.localpassc: "-I/usr/include/openssl".}
{.compile: "./libs/picotls/picotlsvs/picotls/wintimeofday.c".} {.compile: "./libs/picotls/picotlsvs/picotls/wintimeofday.c".}
{.compile: "./libs/picotls/lib/pembase64.c".} {.compile: "./libs/picotls/lib/pembase64.c".}
@@ -1056,11 +1057,11 @@ type
handshake_properties*: ptls_handshake_properties_t_553648999 handshake_properties*: ptls_handshake_properties_t_553648999
ngtcp2_crypto_picotls_ctx_553649050 = struct_ngtcp2_crypto_picotls_ctx_553649049 ## Generated based on /nim-ngtcp2/libs/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h:53:3 ngtcp2_crypto_picotls_ctx_553649050 = struct_ngtcp2_crypto_picotls_ctx_553649049 ## Generated based on /nim-ngtcp2/libs/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h:53:3
struct_ptls_cred_buffer_s_553649052 {.pure, inheritable, bycopy.} = object struct_ptls_cred_buffer_s_553649052 {.pure, inheritable, bycopy.} = object
base*: cstring ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/utils/cred_buffer.h:8:16 base*: cstring ## Generated based on /home/r/vacp2p/nim-ngtcp2/build/lib/includes/utils/cred_buffer.h:8:16
len*: csize_t len*: csize_t
off*: csize_t off*: csize_t
owns_base*: cint owns_base*: cint
ptls_cred_buffer_t_553649054 = struct_ptls_cred_buffer_s_553649053 ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/utils/cred_buffer.h:16:3 ptls_cred_buffer_t_553649054 = struct_ptls_cred_buffer_s_553649053 ## Generated based on /home/r/vacp2p/nim-ngtcp2/build/lib/includes/utils/cred_buffer.h:16:3
sa_family_t_553649056 = cushort ## Generated based on /usr/include/x86_64-linux-gnu/bits/sockaddr.h:28:28 sa_family_t_553649056 = cushort ## Generated based on /usr/include/x86_64-linux-gnu/bits/sockaddr.h:28:28
in_port_t_553649058 = uint16 ## Generated based on /usr/include/netinet/in.h:125:18 in_port_t_553649058 = uint16 ## Generated based on /usr/include/netinet/in.h:125:18
compiler_socklen_t_553649060 = cuint ## Generated based on /usr/include/x86_64-linux-gnu/bits/types.h:210:23 compiler_socklen_t_553649060 = cuint ## Generated based on /usr/include/x86_64-linux-gnu/bits/types.h:210:23
@@ -4804,21 +4805,21 @@ else:
hint("Declaration of " & "struct_ngtcp2_ccerr" & hint("Declaration of " & "struct_ngtcp2_ccerr" &
" already exists, not redeclaring") " already exists, not redeclaring")
when not declared(NGTCP2_VERSION): when not declared(NGTCP2_VERSION):
when "1.6.0" is static: when "1.11.0-DEV" is static:
const const
NGTCP2_VERSION* = "1.6.0" ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/ngtcp2/version.h:39:9 NGTCP2_VERSION* = "1.11.0-DEV" ## Generated based on /nim-ngtcp2/libs/ngtcp2/lib/includes/ngtcp2/version.h:39:9
else: else:
let NGTCP2_VERSION* = "1.6.0" ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/ngtcp2/version.h:39:9 let NGTCP2_VERSION* = "1.11.0-DEV" ## Generated based on /nim-ngtcp2/libs/ngtcp2/lib/includes/ngtcp2/version.h:39:9
else: else:
static : static :
hint("Declaration of " & "NGTCP2_VERSION" & hint("Declaration of " & "NGTCP2_VERSION" &
" already exists, not redeclaring") " already exists, not redeclaring")
when not declared(NGTCP2_VERSION_NUM): when not declared(NGTCP2_VERSION_NUM):
when 67072 is static: when 68352 is static:
const const
NGTCP2_VERSION_NUM* = 67072 ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/ngtcp2/version.h:49:9 NGTCP2_VERSION_NUM* = 68352 ## Generated based on /nim-ngtcp2/libs/ngtcp2/lib/includes/ngtcp2/version.h:49:9
else: else:
let NGTCP2_VERSION_NUM* = 67072 ## Generated based on /home/andrew/opensource/Vac/nim-ngtcp2/build/lib/includes/ngtcp2/version.h:49:9 let NGTCP2_VERSION_NUM* = 68352 ## Generated based on /nim-ngtcp2/libs/ngtcp2/lib/includes/ngtcp2/version.h:49:9
else: else:
static : static :
hint("Declaration of " & "NGTCP2_VERSION_NUM" & hint("Declaration of " & "NGTCP2_VERSION_NUM" &
@@ -10433,60 +10434,83 @@ type
ptls_handshake_properties_t_anon0_t_server_t_cookie_t* = ptls_handshake_properties_t_anon0_t_server_t_cookie_t* =
struct_st_ptls_handshake_properties_t_anon0_t_server_t_cookie_t struct_st_ptls_handshake_properties_t_anon0_t_server_t_cookie_t
# OpenSSL/QuicTLS crypto support when defined(ngtcp2_enable_quictls):
# OpenSSL/QuicTLS type definitions # OpenSSL/QuicTLS crypto support
type # OpenSSL/QuicTLS type definitions
SSL_CTX* = pointer type
OSSL_ENCRYPTION_LEVEL* = enum SSL_CTX* = pointer
OSSL_ENCRYPTION_LEVEL_INITIAL = 0 OSSL_ENCRYPTION_LEVEL* = enum
OSSL_ENCRYPTION_LEVEL_EARLY_DATA = 1 OSSL_ENCRYPTION_LEVEL_INITIAL = 0
OSSL_ENCRYPTION_LEVEL_HANDSHAKE = 2 OSSL_ENCRYPTION_LEVEL_EARLY_DATA = 1
OSSL_ENCRYPTION_LEVEL_APPLICATION = 3 OSSL_ENCRYPTION_LEVEL_HANDSHAKE = 2
OSSL_ENCRYPTION_LEVEL_APPLICATION = 3
# ngtcp2_crypto_quictls error constants # ngtcp2_crypto_quictls error constants
const const
NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP* = -10001 NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP* = -10001
NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB* = -10002 NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB* = -10002
# ngtcp2_crypto_quictls function bindings # ngtcp2_crypto_quictls function bindings
when not declared(ngtcp2_crypto_quictls_init): when not declared(ngtcp2_crypto_quictls_init):
proc ngtcp2_crypto_quictls_init*(): cint {. proc ngtcp2_crypto_quictls_init*(): cint {.
cdecl, importc: "ngtcp2_crypto_quictls_init".} cdecl, importc: "ngtcp2_crypto_quictls_init"
else: .}
static :
hint("Declaration of " & "ngtcp2_crypto_quictls_init" &
" already exists, not redeclaring")
when not declared(ngtcp2_crypto_quictls_from_ossl_encryption_level): else:
proc ngtcp2_crypto_quictls_from_ossl_encryption_level*( static:
ossl_level: OSSL_ENCRYPTION_LEVEL): ngtcp2_encryption_level_553648745 {. hint(
cdecl, importc: "ngtcp2_crypto_quictls_from_ossl_encryption_level".} "Declaration of " & "ngtcp2_crypto_quictls_init" &
else: " already exists, not redeclaring"
static : )
hint("Declaration of " & "ngtcp2_crypto_quictls_from_ossl_encryption_level" &
" already exists, not redeclaring")
when not declared(ngtcp2_crypto_quictls_from_ngtcp2_encryption_level): when not declared(ngtcp2_crypto_quictls_from_ossl_encryption_level):
proc ngtcp2_crypto_quictls_from_ngtcp2_encryption_level*( proc ngtcp2_crypto_quictls_from_ossl_encryption_level*(
encryption_level: ngtcp2_encryption_level_553648745): OSSL_ENCRYPTION_LEVEL {. ossl_level: OSSL_ENCRYPTION_LEVEL
cdecl, importc: "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level".} ): ngtcp2_encryption_level_553648745 {.
else: cdecl, importc: "ngtcp2_crypto_quictls_from_ossl_encryption_level"
static : .}
hint("Declaration of " & "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level" &
" already exists, not redeclaring")
when not declared(ngtcp2_crypto_quictls_configure_server_context): else:
proc ngtcp2_crypto_quictls_configure_server_context*(ssl_ctx: SSL_CTX): cint {. static:
cdecl, importc: "ngtcp2_crypto_quictls_configure_server_context".} hint(
else: "Declaration of " & "ngtcp2_crypto_quictls_from_ossl_encryption_level" &
static : " already exists, not redeclaring"
hint("Declaration of " & "ngtcp2_crypto_quictls_configure_server_context" & )
" already exists, not redeclaring")
when not declared(ngtcp2_crypto_quictls_configure_client_context): when not declared(ngtcp2_crypto_quictls_from_ngtcp2_encryption_level):
proc ngtcp2_crypto_quictls_configure_client_context*(ssl_ctx: SSL_CTX): cint {. proc ngtcp2_crypto_quictls_from_ngtcp2_encryption_level*(
cdecl, importc: "ngtcp2_crypto_quictls_configure_client_context".} encryption_level: ngtcp2_encryption_level_553648745
else: ): OSSL_ENCRYPTION_LEVEL {.
static : cdecl, importc: "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level"
hint("Declaration of " & "ngtcp2_crypto_quictls_configure_client_context" & .}
" already exists, not redeclaring")
else:
static:
hint(
"Declaration of " & "ngtcp2_crypto_quictls_from_ngtcp2_encryption_level" &
" already exists, not redeclaring"
)
when not declared(ngtcp2_crypto_quictls_configure_server_context):
proc ngtcp2_crypto_quictls_configure_server_context*(
ssl_ctx: SSL_CTX
): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_server_context".}
else:
static:
hint(
"Declaration of " & "ngtcp2_crypto_quictls_configure_server_context" &
" already exists, not redeclaring"
)
when not declared(ngtcp2_crypto_quictls_configure_client_context):
proc ngtcp2_crypto_quictls_configure_client_context*(
ssl_ctx: SSL_CTX
): cint {.cdecl, importc: "ngtcp2_crypto_quictls_configure_client_context".}
else:
static:
hint(
"Declaration of " & "ngtcp2_crypto_quictls_configure_client_context" &
" already exists, not redeclaring"
)

View File

@@ -1,5 +1,5 @@
packageName = "ngtcp2" packageName = "ngtcp2"
version = "0.37.0" version = "0.38.0"
author = "Status Research & Development GmbH" author = "Status Research & Development GmbH"
description = "Nim wrapper around the ngtcp2 library" description = "Nim wrapper around the ngtcp2 library"
license = "MIT" license = "MIT"

View File

@@ -20,12 +20,12 @@ else:
{.passl: "-lcrypto".} {.passl: "-lcrypto".}
const root = currentSourcePath.parentDir const root = currentSourcePath.parentDir
const libIncludes = root/"build"/"lib"/"includes" const libIncludes = root / "build" / "lib" / "includes"
const ngtcp2Crypto = root/"libs"/"ngtcp2"/"crypto" const ngtcp2Crypto = root / "libs" / "ngtcp2" / "crypto"
const ngtcp2CryptoIncludes = root/"libs"/"ngtcp2"/"crypto"/"includes" const ngtcp2CryptoIncludes = root / "libs" / "ngtcp2" / "crypto" / "includes"
const ngtcp2Lib = root/"libs"/"ngtcp2"/"lib" const ngtcp2Lib = root / "libs" / "ngtcp2" / "lib"
const ngtcp2LibIncludes = root/"libs"/"ngtcp2"/"lib"/"includes" const ngtcp2LibIncludes = root / "libs" / "ngtcp2" / "lib" / "includes"
const picotlsInclude = root/"libs"/"picotls"/"include" const picotlsInclude = root / "libs" / "picotls" / "include"
{.passc: fmt"-I{libIncludes}".} {.passc: fmt"-I{libIncludes}".}
{.passc: fmt"-I{ngtcp2Crypto}".} {.passc: fmt"-I{ngtcp2Crypto}".}
@@ -34,6 +34,7 @@ const picotlsInclude = root/"libs"/"picotls"/"include"
{.passc: fmt"-I{ngtcp2LibIncludes}".} {.passc: fmt"-I{ngtcp2LibIncludes}".}
{.passc: fmt"-I{picotlsInclude}".} {.passc: fmt"-I{picotlsInclude}".}
# QuicTLS/OpenSSL crypto support when defined(ngtcp2_enable_quictls):
{.passc: "-DNGTCP2_CRYPTO_QUICTLS".} # QuicTLS/OpenSSL crypto support
{.passc: "-I/usr/include/openssl".} {.localpassc: "-DNGTCP2_CRYPTO_QUICTLS".}
{.localpassc: "-I/usr/include/openssl".}

View File

@@ -23,16 +23,17 @@ test "ptls_instantiation":
var tls: ptr ptls_t = ptls_client_new(addr ctx) var tls: ptr ptls_t = ptls_client_new(addr ctx)
check tls != nil check tls != nil
test "QuicTLS bindings": when defined(ngtcp2_enable_quictls):
# Test error constants test "QuicTLS bindings":
check NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP == -10001 # Test error constants
check NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB == -10002 check NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_X509_LOOKUP == -10001
check NGTCP2_CRYPTO_QUICTLS_ERR_TLS_WANT_CLIENT_HELLO_CB == -10002
# Test OSSL_ENCRYPTION_LEVEL enum values # Test OSSL_ENCRYPTION_LEVEL enum values
check ord(OSSL_ENCRYPTION_LEVEL_INITIAL) == 0 check ord(OSSL_ENCRYPTION_LEVEL_INITIAL) == 0
check ord(OSSL_ENCRYPTION_LEVEL_EARLY_DATA) == 1 check ord(OSSL_ENCRYPTION_LEVEL_EARLY_DATA) == 1
check ord(OSSL_ENCRYPTION_LEVEL_HANDSHAKE) == 2 check ord(OSSL_ENCRYPTION_LEVEL_HANDSHAKE) == 2
check ord(OSSL_ENCRYPTION_LEVEL_APPLICATION) == 3 check ord(OSSL_ENCRYPTION_LEVEL_APPLICATION) == 3
# Test that SSL_CTX type is properly defined as pointer # Test that SSL_CTX type is properly defined as pointer
check sizeof(SSL_CTX) == sizeof(pointer) check sizeof(SSL_CTX) == sizeof(pointer)