ASN1Swift provides a transparent interface to decode ASN.1 data structures. The ASN.1 Data Structure must be encoded using BER/DER Encoding Rules. To simplify encoding and decoding process ASN1Swift implement Encoder/Decoder protocol provided by swift foundation. In other words it works preciesly the same as JSONEncoder/JSONDecoder.
Installation
CocoaPods
To integrate ASN1Swift into your project using CocoaPods, specify it in your Podfile:
platform :ios, '13.0'
target 'YOUR_TARGET' do
use_frameworks!
pod 'ASN1Swift'
endThen, run the following command:
$ pod installIn any swift file you'd like to use ASN1Swift, import the framework with import ASN1Swift.
Swift Package Manager
To integrate using Apple's Swift package manager, add the following as a dependency to your Package.swift:
.package(url: "https://github.com/tikhop/ASN1Swift.git", .branch("master"))Then, specify "ASN1Swift" as a dependency of the Target in which you wish to use ASN1Swift.
Lastly, run the following command:
swift package updateCarthage
Make the following entry in your Cartfile:
github "tikhop/ASN1Swift" 
Then run carthage update.
If this is your first time using Carthage in the project, you'll need to go through some additional steps as explained over at Carthage.
Requirements
- iOS 10.0+ / OSX 10.11+
- Swift 5.2+
Example
Decoding 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
            }
        }
    }
}
....Benchmarks
| Library | Decoding Time | 
|---|---|
| ASN1Swift | 0.154 seconds | 
| filom/ASN1Decoder | 1.032 seconds | 
| asn1c | ??? | 
| mrdepth/ASN1Decoder | ??? | 
License
ASN1Swift is released under a BSD-3-Clause. See LICENSE for more information.
