---@meta ssl.context

--------------------------------------------------------------------------------
-- LuaSec SSL context C 模块
--------------------------------------------------------------------------------

---@class ssl_context*
local ssl_context = {}

---@class ssl_context_core*
---@type ssl_context_core*
local M = {}

--- 创建 SSL context。
---@param protocol string 协议，例如 any、tls、tlsv1_2、tlsv1_3
---@return ssl_context*? context SSL context
---@return string? errMsg 错误信息
function M.create(protocol) end

--- 加载 CA 文件或目录。
---@param context ssl_context* SSL context
---@param cafile? string CA 文件路径
---@param capath? string CA 目录路径
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.locations(context, cafile, capath) end

--- 加载证书链文件。
---@param context ssl_context* SSL context
---@param filename string 证书链文件路径
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.loadcert(context, filename) end

--- 加载私钥文件。
---@param context ssl_context* SSL context
---@param filename string 私钥文件路径
---@param password? string|function 私钥密码或回调
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.loadkey(context, filename, password) end

--- 检查私钥和证书是否匹配。
---@param context ssl_context* SSL context
---@return boolean ok 是否匹配
function M.checkkey(context) end

--- 设置 ALPN 协议列表。
---@param context ssl_context* SSL context
---@param protocols string wire-format ALPN 字符串
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setalpn(context, protocols) end

--- 设置服务端 ALPN 回调。
---@param context ssl_context* SSL context
---@param callback function ALPN 回调
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setalpncb(context, callback) end

--- 设置 cipher list。
---@param context ssl_context* SSL context
---@param ciphers string cipher list
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setcipher(context, ciphers) end

--- 设置 TLS 1.3 cipher suites。
---@param context ssl_context* SSL context
---@param ciphersuites string cipher suites
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setciphersuites(context, ciphersuites) end

--- 设置证书校验深度。
---@param context ssl_context* SSL context
---@param depth integer 深度
---@return boolean ok 是否成功
function M.setdepth(context, depth) end

--- 设置 DH 参数回调。
---@param context ssl_context* SSL context
---@param callback function DH 参数回调
---@return boolean ok 是否成功
function M.setdhparam(context, callback) end

--- 设置证书校验模式。
---@param context ssl_context* SSL context
---@param ... 'none'|'peer'|'client_once'|'fail_if_no_peer_cert' 校验选项
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setverify(context, ...) end

--- 设置 OpenSSL options。
---@param context ssl_context* SSL context
---@param ... string OpenSSL option 名称
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setoptions(context, ...) end

--- 设置 context 模式。
---@param context ssl_context* SSL context
---@param mode 'client'|'server' 模式
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setmode(context, mode) end

--- 设置椭圆曲线。
---@param context ssl_context* SSL context
---@param curve string 曲线名
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setcurve(context, curve) end

--- 设置椭圆曲线列表。
---@param context ssl_context* SSL context
---@param curves string 曲线列表
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setcurveslist(context, curves) end

--- 设置 PSK identity hint。
---@param context ssl_context* SSL context
---@param hint string identity hint
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setpskhint(context, hint) end

--- 设置服务端 PSK 回调。
---@param context ssl_context* SSL context
---@param callback function PSK 回调
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setserverpskcb(context, callback) end

--- 设置客户端 PSK 回调。
---@param context ssl_context* SSL context
---@param callback function PSK 回调
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setclientpskcb(context, callback) end

--- 启用 DANE。
---@param context ssl_context* SSL context
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function M.setdane(context) end

--- 设置扩展校验选项。
---@param ... 'lsec_continue'|'lsec_ignore_purpose'|'crl_check'|'crl_check_chain' 扩展校验选项
---@return boolean ok 是否成功
---@return string? errMsg 错误信息
function ssl_context:setverifyext(...) end

return M
