---@meta ssl.x509

--------------------------------------------------------------------------------
-- LuaSec X509 C 模块
--------------------------------------------------------------------------------

---@class ssl_x509_name_entry
---@field oid string OID
---@field name string 名称
---@field value string 值

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

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

--- 从 PEM 或 DER 字符串加载证书。
---@param data string 证书数据
---@return ssl_x509_certificate*? cert 证书对象
function M.load(data) end

--- 计算证书摘要。
---@param digest? 'sha1'|'sha256'|'sha512' 摘要算法
---@return string? digest 摘要十六进制字符串
---@return string? errMsg 错误信息
function ssl_x509_certificate:digest(digest) end

--- 设置名称字段编码。
---@param encoding 'ai5'|'utf8' 编码
---@return boolean ok 是否成功
function ssl_x509_certificate:setencode(encoding) end

--- 获取扩展字段。
---@return table extensions 扩展字段
function ssl_x509_certificate:extensions() end

--- 获取签名算法名称。
---@return string? name 签名算法名称
function ssl_x509_certificate:getsignaturename() end

--- 获取签发者。
---@return ssl_x509_name_entry[] issuer 签发者字段
function ssl_x509_certificate:issuer() end

--- 获取 Not Before 时间文本。
---@return string notBefore 时间文本
function ssl_x509_certificate:notbefore() end

--- 获取 Not After 时间文本。
---@return string notAfter 时间文本
function ssl_x509_certificate:notafter() end

--- 获取 Not Before Unix 时间戳。
---@return integer notBefore 时间戳
function ssl_x509_certificate:notbefore_t() end

--- 获取 Not After Unix 时间戳。
---@return integer notAfter 时间戳
function ssl_x509_certificate:notafter_t() end

--- 检查是否由另一个证书签发。
---@param issuer ssl_x509_certificate* 签发者证书
---@return boolean issued 是否签发
function ssl_x509_certificate:issued(issuer) end

--- 导出 PEM。
---@return string? pem PEM 内容
---@return string? errMsg 错误信息
function ssl_x509_certificate:pem() end

--- 导出公钥。
---@return string? publicKey 公钥 PEM
---@return string? errMsg 错误信息
function ssl_x509_certificate:pubkey() end

--- 获取序列号。
---@return string serial 序列号
function ssl_x509_certificate:serial() end

--- 获取 subject。
---@return ssl_x509_name_entry[] subject subject 字段
function ssl_x509_certificate:subject() end

--- 检查给定时间点证书是否有效。
---@param time integer Unix 时间戳
---@return boolean valid 是否有效
function ssl_x509_certificate:validat(time) end

return M
