Carthage compatible CocoaPods Compatible Swift Package Manager compatible Platform GitHub license

ASN1Swift 提供了一个透明的接口来解码 ASN.1 数据结构。ASN.1 数据结构必须使用 BER/DER 编码规则进行编码。为了简化编码和解码过程,ASN1Swift 实现了 Swift 基础库提供的 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 Manager 进行集成,请将以下内容作为依赖项添加到您的 Package.swift

.package(url: "https://github.com/tikhop/ASN1Swift.git", .branch("master"))

然后,在您希望使用 ASN1Swift 的 Target 中,将 "ASN1Swift" 指定为依赖项。

最后,运行以下命令

swift package update

Carthage

在您的 Cartfile 中添加以下条目

github "tikhop/ASN1Swift" 

然后运行 carthage update

如果这是您第一次在项目中使用 Carthage,您需要按照 Carthage 上的说明 完成一些额外的步骤。

要求

示例

解码 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