A simple reader and writer for reading and writing ASN.1 encoded bytes.
This project includes the SimpleASN1Reader and SimpleASN1Writer module, written in Swift and featuring a reader and writer that can be used for reading and writing ASN.1 encoded bytes.
Features
Reader
Reading any ASN.1 BER encoding (so, including DER and CER encoding formats)
Reading contents bytes
Readahead of identifier byte
Validation of identifier byte
Validation of an expected array of bytes
Validation of length bytes
Skipping bytes
Writer
Encoding bytes using the ASN.1 DER encoding format
Inserting new bytes on top of all bytes written before (as a sibling)
Inserting a component represented with a simple type on top of all bytes written before (as a sibling)
Composing structured types with a dedicated writer and inserting these components on top of all bytes written before (as a sibling)
Wrapping all bytes written before (as a parent)
Not Supported
Conversion of bytes into Swift data types (such as Int, String etc.)
Reading and writing from and to an underlying Stream
High tag numbers (that is, tag numbers are encoded by a single byte)
Encodings with an indefinite length
ASN.1 CER encoding format when writing bytes
The above items are deliberately not supported to keep both the reader and the writer simple and focused. In addition, the assumption has been made that the last three items are not commonly used. So, it is not expected that one of these items will be supported at some time in the future.
Usage
simple-asn1-reader-writer is a SwiftPM project and can be built and tested using these commands:
$ swift build
$ swift test
To depend on simple-asn1-reader-writer, put the following in the dependencies of your Package.swift:
Your interest in this project is highly appreciated. However, contributions might not be accepted for the following reasons:
The development environment that I currently have at hand is a Linux system on a virtual machine. I will thus not always be able to test how this code runs on a macOS or an iOS platform (although the first version will be tested on an iOS platform).
I’m just one developer and time is scarce.
Some contributions may get accepted if for example a bug should be fixed that prevents parts of the code from being used in a common situation.
Simple ASN.1 Reader and Writer
A simple reader and writer for reading and writing ASN.1 encoded bytes.
This project includes the
SimpleASN1Reader
andSimpleASN1Writer
module, written in Swift and featuring a reader and writer that can be used for reading and writing ASN.1 encoded bytes.Features
Reader
Writer
Not Supported
Int
,String
etc.)Stream
The above items are deliberately not supported to keep both the reader and the writer simple and focused. In addition, the assumption has been made that the last three items are not commonly used. So, it is not expected that one of these items will be supported at some time in the future.
Usage
simple-asn1-reader-writer
is a SwiftPM project and can be built and tested using these commands:To depend on
simple-asn1-reader-writer
, put the following in thedependencies
of yourPackage.swift
:See the rsa-public-key-importer-exporter project for an example of how the reader and writer can be used.
Contribute
Your interest in this project is highly appreciated. However, contributions might not be accepted for the following reasons:
Some contributions may get accepted if for example a bug should be fixed that prevents parts of the code from being used in a common situation.
Resources
A Layman’s Guide to a Subset of ASN.1, BER, and DER
X.690
Thanks
To the following project, which served as reference and inspiration during development:
JOSESwift
License
simple-asn1-reader-writer
is licensed under the MIT License. See LICENSE for details.