ASN1Kit

Swift 的 ASN.1 解码器

API 文档

生成的 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。

集成设置

开发设置

您将需要 BundlerXcodeGenfastlane 以方便地使用已建立的开发环境。

  1. 检出(并构建)依赖项并生成 xcodeproj

    $ make setup
    
  2. 构建项目

    $ 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)