ASN1Kit

1.2.1

ASN.1 Encoder\Decoder for Swift
gematik/ASN1Kit

What's New

1.2.1

2023-08-01T11:09:52Z
  • Fix development dependency

ASN1Kit

ASN.1 Decoder for Swift

API Documentation

Generated API docs are available at https://gematik.github.io/ASN1Kit.

Overview

This library can be used for ASN.1 (Abstract Syntax Notation One) encoding/decoding using distinguished encoding rules (DER) according to the ITU-T X.690

For more info, please find the complete X.690-0207.pdf specification.

Getting Started

ASN1Kit requires Swift 5.1.

Setup for integration

Carthage

Put this in your Cartfile:

github "gematik/ASN1Kit" ~> 1.0

Setup for development

You will need Bundler, XcodeGen and fastlane to conveniently use the established development environment.

  1. Checkout (and build) dependencies and generate the xcodeproject

    $ make setup
  2. Build the project

    $ make cibuild

Code Samples

Use ASN1Decoder.decode(asn1:) to decode serialized data:

let expected = Data([0xB, 0xB, 0x0])
let serialized = Data([0x23, 0x0C,
                       0x03, 0x02, 0x00, 0x0B,
                       0x03, 0x02, 0x00, 0x0B,
                       0x03, 0x02, 0x04, 0x0F])
expect(try Data(from: ASN1Decoder.decode(asn1: serialized))) == expected

Construct an ASN1Object of your choice and serialize it:

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-encode Swift primitives and extract the encoded value(s):

// 0x0080 = 128
let expected = Data([0x00, 0x80])
expect(try 128.asn1encode(tag: nil).data.primitive) == expected
// 0x0080 = 128
let expected = Data([0x00, 0x80])
expect(try UInt(128).asn1encode(tag: nil).data.primitive) == expected

Extract the tag of the first element of a constructed 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)

License

Apache License Version 2.0

See LICENSE.

Description

  • Swift Tools 5.5.0
View More Packages from this Author

Dependencies

Last updated: Wed Mar 13 2024 00:07:48 GMT-0900 (Hawaii-Aleutian Daylight Time)