Swift 的 ASN.1 解码器
生成的 API 文档可在 https://gematik.github.io/ASN1Kit 获取。
根据 Apache License, Version 2.0 获得许可。
此库可用于根据 ITU-T X.690 使用可区分编码规则 (DER) 进行 ASN.1(抽象语法表示法一)编码/解码
更多信息,请查阅完整的 X.690-0207.pdf 规范。
ASN1Kit 需要 Swift 5.1。
Carthage: 将此添加到您的 Cartfile
中
github "gematik/ASN1Kit" ~> 1.0
您将需要 Bundler、XcodeGen 和 fastlane 以方便地使用已建立的开发环境。
检出(并构建)依赖项并生成 xcodeproj
$ make setup
构建项目
$ make cibuild
使用 ASN1Decoder.decode(asn1:)
解码序列化数据,并使用 String(from:)
获取其十六进制表示形式
构造您选择的 ASN1Object
并对其进行序列化
let data = Data([0x0, 0x1, 0x2, 0x4]) as ASN1EncodableType
let data2 = Data([0x4, 0x3, 0x2, 0x1]) as ASN1EncodableType
let array = [data, data2]
let expected = Data([0x30, 0xc, 0x4, 0x4, 0x0, 0x1, 0x2, 0x4, 0x4, 0x4, 0x4, 0x3, 0x2, 0x1])
expect(try array.asn1encode().serialize()) == expected
ASN.1 编码 Swift 原始类型并提取编码值
//0x0080 = 128
let expected = Data([0x00, 0x80])
expect(try 128.asn1encode(tag: nil).data.primitive) == expected
提取构造的 ASN1Object
的第一个元素的标签
let data = Data([0x1, 0x2, 0x3, 0x4, 0x8])
let tag1 = ASN1Primitive(data: .primitive(data), tag: .taggedTag(3)) // context-specific class tag
let tag2 = ASN1Primitive(data: .primitive(data), tag: .universal(ASN1Tag.octetString))
let implicitTag = ASN1Primitive(data: .constructed([tag1, tag2]), tag: .taggedTag(83))
expect(implicitTag.data.items?.first?.tag) == .taggedTag(3)