
--------------------------------------------------------------------------------
-- LuaSec SSL 模块
--------------------------------------------------------------------------------

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

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

---@type ssl_core*
local core = require("ssl.core")

---@type ssl_context_core*
local context = require("ssl.context")

---@type ssl_x509*
local x509 = require("ssl.x509")

---@type ssl_config_core*
local config = require("ssl.config")

---@class ssl_config*
---@field mode? 'client'|'server' SSL 模式
---@field protocol? string 协议
---@field key? string 私钥路径
---@field certificate? string 证书路径
---@field cafile? string CA 文件路径
---@field capath? string CA 目录路径
---@field verify? string|string[] 校验选项
---@field options? string|string[] SSL 选项
---@field ciphers? string 加密套件
---@field password? string|function 私钥密码
---@field alpn? string[] ALPN 协议列表

---@class ssl*
---@field _VERSION string 版本
---@field _COPYRIGHT string 版权信息
---@field config ssl_config_core* 默认配置
---@type ssl*
local M = {}

M.config = config

--- 创建 SSL context
---@param cfg ssl_config* 配置
---@return ssl_context*? context SSL context
---@return string? errMsg 错误信息
function M.newcontext(cfg) end

--- 包装 socket 为 SSL socket
---@param sock any socket 对象
---@param cfg ssl_config*|ssl_context* SSL 配置或 context
---@return ssl_connection*? conn SSL socket
---@return string? errMsg 错误信息
function M.wrap(sock, cfg) end

--- 加载证书
---@param data string 证书数据或路径
---@return any certificate 证书对象
function M.loadcertificate(data) end

--- 执行 SSL 握手
---@return boolean? ok 是否成功
---@return string? errMsg 错误信息
function ssl_connection:dohandshake() end

--- 发送数据
---@param data string 数据
---@param from? integer 起始位置
---@param to? integer 结束位置
---@return integer? sent 已发送字节数
---@return string? errMsg 错误信息
---@return integer? lastIndex 最后发送位置
function ssl_connection:send(data, from, to) end

--- 接收数据
---@param pattern? '*l'|'*a'|integer 接收模式
---@param prefix? string 前缀
---@return string? data 数据
---@return string? errMsg 错误信息
---@return string? partial 部分数据
function ssl_connection:receive(pattern, prefix) end

--- 设置超时
---@param timeout number 超时秒数
---@param mode? string 模式
---@return boolean? ok 是否成功
---@return string? errMsg 错误信息
function ssl_connection:settimeout(timeout, mode) end

--- 关闭连接
---@return boolean? ok 是否成功
---@return string? errMsg 错误信息
function ssl_connection:close() end

--- 获取连接信息
---@param field? string 字段名
---@return any info 信息
---@return string? errMsg 错误信息
function ssl_connection:info(field) end

return M
