结构体

struct DerBlob

public struct DerBlob <: Equatable<DerBlob> & Hashable {
    public init(content: Array<Byte>)
}

功能:Crypto 支持配置二进制证书流,用户读取二进制证书数据并创建 DerBlob 对象后可将其解析成 X509Certificate / X509CertificateRequest / PublicKey / PrivateKey 对象。

prop body

public prop body: Array<Byte>

功能:DerBlob 对象中的字符序列。

类型:Array<Byte>

prop size

public prop size: Int64

功能:DerBlob 对象中字符序列的大小。

类型:Int64

init(Array)

public init(content: Array<Byte>)

功能:构造 DerBlob 对象。

参数:

  • content: Array<Byte> - 二进制字符序列。

func hashCode()

public override func hashCode(): Int64

功能:返回 DerBlob 对象哈希值。

返回值:

  • Int64 - 对 DerBlob 对象进行哈希计算后得到的结果。

operator func !=(DerBlob)

public override operator func !=(other: DerBlob): Bool

功能:判不等。

参数:

返回值:

  • Bool - 若对象不同,返回 true;否则,返回 false。

operator func ==(DerBlob)

public override operator func ==(other: DerBlob): Bool

功能:判等。

参数:

返回值:

  • Bool - 若对象相同,返回 true;否则,返回 false。

struct ExtKeyUsage

public struct ExtKeyUsage <: ToString {
    public static let AnyKey = 0u16
    public static let ServerAuth = 1u16
    public static let ClientAuth = 2u16
    public static let EmailProtection = 3u16
    public static let CodeSigning = 4u16
    public static let OCSPSigning = 5u16
    public static let TimeStamping = 6u16

    public init(keys: Array<UInt16>)

    public override func toString(): String
}

功能:数字证书扩展字段中通常会包含携带扩展密钥用法说明,目前支持的用途有:ServerAuth、ClientAuth、EmailProtection、CodeSigning、OCSPSigning、TimeStamping。

static let AnyKey

public static let AnyKey = 0u16

功能:表示应用于任意用途。

类型:UInt16

static let ClientAuth

public static let ClientAuth = 2u16

功能:表示用于 SSL 的客户端验证。

类型:UInt16

static let CodeSigning

public static let CodeSigning = 4u16

功能:表示用于代码签名。

类型:UInt16

static let EmailProtection

public static let EmailProtection = 3u16

功能:表示用于电子邮件的加解密、签名等。

类型:UInt16

static let OCSPSigning

public static let OCSPSigning = 5u16

功能:用于对 OCSP 响应包进行签名。

类型:UInt16

static let ServerAuth

public static let ServerAuth = 1u16

功能:表示用于 SSL 的服务端验证。

类型:UInt16

static let TimeStamping

public static let TimeStamping = 6u16

功能:用于将对象摘要值与时间绑定。

类型:UInt16

init(Array<UInt16>)

public init(keys: Array<UInt16>)

功能:构造指定用途的扩展密钥用法,需要注意同一个密钥可以有多种用途。

参数:

func toString()

public override func toString(): String

功能:生成扩展密钥用途字符串。

返回值:

  • String - 证书扩展密钥用途字符串。

struct KeyUsage

public struct KeyUsage <: ToString {
    public static let DigitalSignature = 0x0080u16
    public static let NonRepudiation = 0x0040u16
    public static let KeyEncipherment = 0x0020u16
    public static let DataEncipherment = 0x0010u16
    public static let KeyAgreement = 0x0008u16
    public static let CertSign = 0x0004u16
    public static let CRLSign = 0x0002u16
    public static let EncipherOnly = 0x0001u16
    public static let DecipherOnly = 0x0100u16

    public init(keys: UInt16)

    public override func toString(): String
}

功能:数字证书扩展字段中通常会包含携带公钥的用法说明,目前支持的用途有:DigitalSignature、NonRepudiation、KeyEncipherment、DataEncipherment、KeyAgreement、CertSign、CRLSign、EncipherOnly、DecipherOnly。

static let CRLSign

public static let CRLSign = 0x0002u16

功能:表示私钥可用于对 CRL 签名,而公钥可用于验证 CRL 签名。

类型:UInt16

static let CertSign

public static let CertSign = 0x0004u16

功能:表示私钥用于证书签名,而公钥用于验证证书签名,专用于 CA 证书。

类型:UInt16

static let DataEncipherment

public static let DataEncipherment = 0x0010u16

功能:表示公钥用于直接加密数据。

类型:UInt16

static let DecipherOnly

public static let DecipherOnly = 0x0100u16

功能:表示证书中的公钥在密钥协商过程中,仅仅用于解密计算,配合 key Agreement 使用才有意义。

类型:UInt16

static let DigitalSignature

public static let DigitalSignature = 0x0080u16

功能:表示私钥可以用于除了签发证书、签发 CRL 和非否认性服务的各种数字签名操作,而公钥用来验证这些签名。

类型:UInt16

static let EncipherOnly

public static let EncipherOnly = 0x0001u16

功能:表示证书中的公钥在密钥协商过程中,仅仅用于加密计算,配合 key Agreement 使用才有意义。

类型:UInt16

static let KeyAgreement

public static let KeyAgreement = 0x0008u16

功能:表示密钥用于密钥协商。

类型:UInt16

static let KeyEncipherment

public static let KeyEncipherment = 0x0020u16

功能:表示密钥用来加密传输其他的密钥。

类型:UInt16

static let NonRepudiation

public static let NonRepudiation = 0x0040u16

功能:表示私钥可以用于进行非否认性服务中的签名,而公钥用来验证签名。

类型:UInt16

init(UInt16)

public init(keys: UInt16)

功能:构造指定用途的扩展密钥用法,需要注意同一个密钥可以有多种用途。

参数:

  • keys: UInt16 - 密钥的用法,建议使用本结构中所提供的密钥用法变量通过按位或的方式传入参数。

func toString()

public override func toString(): String

功能:生成密钥用途字符串。

返回值:

  • String - 证书密钥用途字符串。

struct Pem

public struct Pem <: Collection<PemEntry> & ToString {
    public Pem(private let items: Array<PemEntry>)
}

功能:结构体 Pem 为条目序列,可以包含多个 PemEntry

prop size

public override prop size: Int64

功能:条目序列的数量。

类型:Int64

Pem(Array<PemEntry>)

public Pem(private let items: Array<PemEntry>)

功能:构造 Pem 对象。

参数:

static func decode(String)

public static func decode(text: String): Pem

功能:将 PEM 文本解码为条目序列。

参数:

  • text: String - PEM 字符串。

返回值:

  • Pem - PEM 条目序列。

func encode()

public func encode(): String

功能:返回PEM格式的字符串。行结束符将根据当前操作系统生成。

返回值:

  • String - PEM 格式的字符串。

func isEmpty()

public override func isEmpty(): Bool

功能:判断 PEM 文本解码为条目序列是否为空。

返回值:

  • Bool - PEM 文本解码为条目序列为空返回 true;否则,返回 false。

func iterator()

public override func iterator(): Iterator<PemEntry>

功能:生成 PEM 文本解码为条目序列的迭代器。

返回值:

func toString()

public override func toString(): String

功能:返回一个字符串,字符串内容是包含每个条目序列的标签。

返回值:

  • String - 包含每个条目序列的标签的字符串。

struct PemEntry

public struct PemEntry <: ToString {
    public PemEntry(
        public let label: String,
        public let headers: Array<(String, String)>,
        public let body: ?DerBlob
    )
    public init(label: String, body: DerBlob)
}

功能:PEM 文本格式经常用于存储证书和密钥,PEM 编码结构包含以下几个部分:

第一行是 “-----BEGIN”,标签和 “-----” 组成的utf8编码的字符串; 中间是正文,是实际二进制内容经过 base64 编码得到的可打印字符串,详细的PEM编码规范可参考 RFC 7468; 最后一行是 “-----END”,标签和 “-----” 组成的 utf8 编码的字符串,详见 RFC 1421。 在旧版的 PEM 编码标准中在第一行和正文之间还包含条目头。

为了支持不同的用户场景,我们提供了 PemEntryPem 类型,PemEntry 用于存储单个PEM 基础结构。

static let LABEL_CERTIFICATE

public static let LABEL_CERTIFICATE = "CERTIFICATE"

功能:记录条目类型为证书。

类型:String

static let LABEL_CERTIFICATE_REQUEST

public static let LABEL_CERTIFICATE_REQUEST = "CERTIFICATE REQUEST"

功能:记录条目类型为证书签名请求。

类型:String

static let LABEL_DH_PARAMETERS

public static let LABEL_DH_PARAMETERS = "DH PARAMETERS"

功能:记录条目类型为 DH 密钥参数。

类型:String

static let LABEL_EC_PARAMETERS

public static let LABEL_EC_PARAMETERS = "EC PARAMETERS"

功能:记录条目类型为椭圆曲线参数。

类型:String

static let LABEL_EC_PRIVATE_KEY

public static let LABEL_EC_PRIVATE_KEY = "EC PRIVATE KEY"

功能:记录条目类型为椭圆曲线私钥。

类型:String

static let LABEL_ENCRYPTED_PRIVATE_KEY

public static let LABEL_ENCRYPTED_PRIVATE_KEY = "ENCRYPTED PRIVATE KEY"

功能:记录条目类型为 PKCS #8 标准加密的私钥。

类型:String

static let LABEL_PRIVATE_KEY

public static let LABEL_PRIVATE_KEY = "PRIVATE KEY"

功能:记录条目类型为 PKCS #8 标准未加密的私钥。

类型:String

static let LABEL_PUBLIC_KEY

public static let LABEL_PUBLIC_KEY = "PUBLIC KEY"

功能:记录条目类型为公钥。

类型:String

static let LABEL_RSA_PRIVATE_KEY

public static let LABEL_RSA_PRIVATE_KEY = "RSA PRIVATE KEY"

功能:记录条目类型为 RSA 私钥。

类型:String

static let LABEL_SM2_PRIVATE_KEY

public static let LABEL_SM2_PRIVATE_KEY = "SM2 PRIVATE KEY"

功能:记录条目类型为 SM2 私钥。

类型:String

static let LABEL_X509_CRL

public static let LABEL_X509_CRL = "X509 CRL"

功能:记录条目类型为证书吊销列表。

类型:String

PemEntry(String, Array<(String, String)>, ?DerBlob)

public PemEntry(
    public let label: String,
    public let headers: Array<(String, String)>,
    public let body: ?DerBlob
)

功能:构造 PemEntry 对象。

参数:

body

public let body: ?DerBlob

功能:PemEntry 实例的二进制内容。

类型:?DerBlob

headers

public let headers: Array<(String, String)>

功能:PemEntry 实例的条目头。

类型:Array<(String, String)>

label

public let label: String

功能:PemEntry 实例的标签。

类型:String

init(String, DerBlob)

public init(label: String, body: DerBlob)

功能:构造 PemEntry 对象。

参数:

func encode()

public func encode(): String

功能:返回PEM格式的字符串。行结束符将根据当前操作系统生成。

返回值:

  • String - PEM 格式的字符串。

func header(String)

public func header(name: String): Iterator<String>

功能:通过条目头名称,找到对应条目内容。

参数:

  • name: String - 条目头名称。

返回值:

func toString()

public override func toString(): String

功能:返回 PEM 对象的标签和二进制内容的长度。

返回值:

  • String - PEM 对象的标签和二进制内容的长度。

struct SerialNumber

public struct SerialNumber <: Equatable<SerialNumber> & Hashable & ToString {
    public init(length!: UInt8 = 16)
}

功能: 结构体 SerialNumber 为数字证书的序列号,是数字证书中的一个唯一标识符,用于标识数字证书的唯一性。根据规范,证书序列号的长度不应超过 20 字节。详见rfc5280

init(UInt8)

public init(length!: UInt8 = 16)

功能:生成指定长度的随机序列号。

参数:

  • length!: UInt8 - 序列号长度,单位为字节,类型为 UInt8,默认值为 16。

异常:

  • X509Exception - length 等于 0 或大于 20 时,抛出异常。

func hashCode()

public override func hashCode(): Int64

功能:返回证书序列号哈希值。

返回值:

  • Int64 - 对证书序列号对象进行哈希计算后得到的结果。

func toString()

public override func toString(): String

功能:生成证书序列号字符串,格式为 16 进制。

返回值:

  • String - 证书序列号字符串。

operator func !=(SerialNumber)

public override operator func !=(other: SerialNumber): Bool

功能:判不等。

参数:

  • other: SerialNumber - 被比较的证书序列号对象。

返回值:

  • Bool - 若序列号不同,返回 true;否则,返回 false。

operator func ==(SerialNumber)

public override operator func ==(other: SerialNumber): Bool

功能:判等。

参数:

  • other: SerialNumber - 被比较的证书序列号对象。

返回值:

  • Bool - 若序列号相同,返回 true;否则,返回 false。

struct Signature

public struct Signature <: Equatable<Signature> & Hashable {
}

功能:数字证书的签名,用来验证身份的正确性。

prop signatureValue

public prop signatureValue: DerBlob

功能:返回证书签名的二进制。

类型:DerBlob

func hashCode()

public override func hashCode(): Int64

功能:返回证书签名哈希值。

返回值:

  • Int64 - 对证书签名对象进行哈希计算后得到的结果。

operator func !=(Signature)

public override operator func !=(other: Signature): Bool

功能:判不等。

参数:

  • other: Signature - 被比较的证书签名。

返回值:

  • Bool - 若证书签名不同,返回 true;否则,返回 false。

operator func ==(Signature)

public override operator func ==(other: Signature): Bool

功能:判等。

参数:

  • other: Signature - 被比较的证书签名。

返回值:

  • Bool - 若证书签名相同,返回 true;否则,返回 false。

struct VerifyOption

public struct VerifyOption {
    public var time: DateTime = DateTime.now()
    public var dnsName: String = ""
    public var roots: Array<X509Certificate> = X509Certificate.systemRootCerts()
    public var intermediates: Array<X509Certificate> = Array<X509Certificate>()
}

dnsName

public var dnsName: String = ""

功能:校验域名,默认为空,只有设置域名时才会进行此处校验。

类型:String

intermediates

public var intermediates: Array<X509Certificate> = Array<X509Certificate>()

功能:中间证书链,默认为空。

类型:Array<X509Certificate>

roots

public var roots: Array<X509Certificate> = X509Certificate.systemRootCerts()

功能:根证书链,默认为系统根证书链。

类型:Array<X509Certificate>

time

public var time: DateTime = DateTime.now()

功能:校验时间,默认为创建选项的时间。

类型:DateTime

struct X509CertificateInfo

public struct X509CertificateInfo {
    public var serialNumber: SerialNumber
    public var notBefore: DateTime
    public var notAfter: DateTime
    public var subject: ?X509Name
    public var dnsNames: Array<String>
    public var emailAddresses: Array<String>
    public var IPAddresses: Array<IP>
    public var keyUsage: ?KeyUsage
    public var extKeyUsage: ?ExtKeyUsage

    public init(
        serialNumber!: ?SerialNumber = None,
        notBefore!: ?DateTime = None,
        notAfter!: ?DateTime = None,
        subject!: ?X509Name = None,
        dnsNames!: Array<String> = Array<String>(),
        emailAddresses!: Array<String> = Array<String>(),
        IPAddresses!: Array<IP> = Array<IP>(),
        keyUsage!: ?KeyUsage = None,
        extKeyUsage!: ?ExtKeyUsage = None
    )
}

功能:X509CertificateInfo 结构包含了证书信息,包括证书序列号、有效期、实体可辨识名称、域名、email 地址、IP 地址、密钥用法和扩展密钥用法。

IPAddresses

public var IPAddresses: Array<IP>

功能:记录证书的 IP 地址。

类型:Array<IP>

dnsNames

public var dnsNames: Array<String>

功能:记录证书的 DNS 域名。

类型:Array<String>

emailAddresses

public var emailAddresses: Array<String>

功能:记录证书的 email 地址。

类型:Array<String>

extKeyUsage

public var extKeyUsage: ?ExtKeyUsage

功能:记录证书的扩展密钥用法。

类型:?ExtKeyUsage

keyUsage

public var keyUsage: ?KeyUsage

功能:记录证书的密钥用法。

类型:?KeyUsage

notAfter

public var notAfter: DateTime

功能:记录证书有效期的结束日期。

类型:DateTime

notBefore

public var notBefore: DateTime

功能:记录证书有效期的起始日期。

类型:DateTime

serialNumber

public var serialNumber: SerialNumber

功能:记录证书的序列号。

类型:SerialNumber

subject

public var subject: ?X509Name

功能:记录证书实体可辨识名称。

类型:?X509Name

init(?SerialNumber, ?DateTime, ?DateTime, ?X509Name, Array<String>, Array<String>, Array<IP>, ?KeyUsage, ?ExtKeyUsage)

public init(
    serialNumber!: ?SerialNumber = None,
    notBefore!: ?DateTime = None,
    notAfter!: ?DateTime = None,
    subject!: ?X509Name = None,
    dnsNames!: Array<String> = Array<String>(),
    emailAddresses!: Array<String> = Array<String>(),
    IPAddresses!: Array<IP> = Array<IP>(),
    keyUsage!: ?KeyUsage = None,
    extKeyUsage!: ?ExtKeyUsage = None
)

功能:构造 X509CertificateInfo 对象。

参数:

  • serialNumber!: ?SerialNumber - 数字证书序列号,默认值为 None,使用默认值时默认的序列号长度为 128 比特。
  • notBefore!: ?DateTime - 数字证书有效期开始时间,默认值为 None,使用默认值时默认的时间为 X509CertificateInfo 创建的时间。
  • notAfter!: ?DateTime - 数字证书有效期截止时间,默认值为 None,使用默认值时默认的时间为 notBefore 往后 1 年的时间。
  • subject!: ?X509Name - 数字证书使用者信息,默认值为 None。
  • dnsNames!: Array<String> - 域名列表,需要用户保证输入域名的有效性,默认值为空的字符串数组。
  • emailAddresses!: Array<String> - email 地址列表,需要用户保证输入 email 的有效性,默认值为空的字符串数组。
  • IPAddresses!: Array<IP> - IP 地址列表,默认值为空的 IP 数组。
  • keyUsage!: ?KeyUsage - 密钥用法,默认值为 None。
  • extKeyUsage!: ?ExtKeyUsage - 扩展密钥用法,默认值为 None。

异常:

  • X509Exception - 输入的 IP 地址列表中包含无效的 IP 地址,则抛出异常。

struct X509CertificateRequestInfo

public struct X509CertificateRequestInfo {
    public var subject: ?X509Name
    public var dnsNames: Array<String>
    public var emailAddresses: Array<String>
    public var IPAddresses: Array<IP>
 
    public init(
        subject!: ?X509Name = None,
        dnsNames!: Array<String> = Array<String>(),
        emailAddresses!: Array<String> = Array<String>(),
        IPAddresses!: Array<IP> = Array<IP>()
    )
}

X509CertificateRequestInfo 结构包含了证书请求信息,包括证书实体可辨识名称、域名、email 地址和 IP 地址。

IPAddresses

public var IPAddresses: Array<IP>

功能:记录证书签名请求的 IP 地址。

类型:Array<IP>

dnsNames

public var dnsNames: Array<String>

功能:记录证书签名请求的 DNS 域名。

类型:Array<String>

emailAddresses

public var emailAddresses: Array<String>

功能:记录证书签名请求的 email 地址。

类型:Array<String>

subject

public var subject: ?X509Name

功能:记录证书签名请求的实体可辨识名称。

init(?X509Name, Array<String>, Array<String>, Array<IP>)

public init(
    subject!: ?X509Name = None,
    dnsNames!: Array<String> = Array<String>(),
    emailAddresses!: Array<String> = Array<String>(),
    IPAddresses!: Array<IP> = Array<IP>()
)

功能:构造 X509CertificateRequestInfo 对象。

参数:

  • subject!: ?X509Name - 数字证书的使用者信息,默认值为 None。
  • dnsNames!: Array<String> - 域名列表,需要用户保证输入域名的有效性,默认值为空的字符串数组。
  • emailAddresses!: Array<String> - email 地址列表,需要用户保证输入 email 的有效性,默认值为空的字符串数组。
  • IPAddresses!: Array<IP> - IP 地址列表,默认值为空的 IP 数组。

异常:

  • X509Exception - 输入的 IP 地址列表中包含无效的 IP 地址,则抛出异常。