ASN1Swift 提供了解码 ASN.1 数据结构的透明接口。ASN.1 数据结构必须使用 BER/DER 编码规则进行编码。为了简化编码和解码过程,ASN1Swift 实现了由 Swift Foundation 提供的 Encoder/Decoder 协议。换句话说,它的工作方式与 JSONEncoder/JSONDecoder 非常相似。
安装
CocoaPods
要使用 CocoaPods 将 ASN1Swift 集成到您的项目中,在您的 Podfile
中指定它
platform :ios, '13.0'
target 'YOUR_TARGET' do
use_frameworks!
pod 'ASN1Swift'
end
然后,运行以下命令
$ pod install
在任何想要使用 ASN1Swift 的 Swift 文件中,使用 import ASN1Swift
导入框架。
Swift Package Manager
要使用 Apple 的 Swift 包管理器进行集成,将以下内容作为依赖项添加到您的 Package.swift
.package(url: "https://github.com/tikhop/ASN1Swift.git", .branch("master"))
然后,将 "ASN1Swift"
指定为目标中您希望使用 ASN1Swift 的依赖项。
最后,运行以下命令
swift package update
Carthage
在您的 Cartfile 中添加以下条目
github "tikhop/ASN1Swift"
然后运行 carthage update
。
如果您首次在项目中使用Carthage,您需要按照以下步骤进行操作,具体请参考Carthage之上的说明。
需求
- iOS 10.0+ / OSX 10.11+
- Swift 5.2+
示例
解码InAppReceipt
let asn1Decoder = ASN1Decoder()
let r = try! asn1Decoder.decode(Receipt.self, from: Data(...))
struct Receipt: ASN1Decodable
{
static var template: ASN1Template
{
return ASN1Template.universal(16).constructed()
}
var oid: ASN1SkippedField
var signedData: SignedData
enum CodingKeys: ASN1CodingKey
{
case oid
case signedData
var template: ASN1Template
{
switch self
{
case .oid:
return .universal(ASN1Identifier.Tag.objectIdentifier)
case .signedData:
return SignedData.template
}
}
}
}
....
基准测试
库 | 解码时间 |
---|---|
ASN1Swift | 0.154秒 |
filom/ASN1Decoder | 1.032秒 |
asn1c | ??? |
mrdepth/ASN1Decoder | ??? |
许可证
ASN1Swift遵循BSD-3-Clause发布。更多信息请参见LICENSE。