System.Formats.Asn1 9.0.11
About
Provides functionality for parsing, encoding, and decoding data using Abstract Syntax Notation One (ASN.1). ASN.1 is a standard interface description language for defining data structures that can be serialized and deserialized in a cross-platform way.
Key Features
- Parse ASN.1 data into .NET types.
- Encode .NET types into ASN.1 format.
- Support for BER, CER, DER: Handles Basic Encoding Rules (BER), Canonical Encoding Rules (CER), and Distinguished Encoding Rules (DER).
How to Use
Parsing ASN.1 data:
using System.Formats.Asn1;
using System.Numerics;
// Sample ASN.1 encoded data (DER format)
byte[] asn1Data = [0x30, 0x09, 0x02, 0x01, 0x01, 0x02, 0x01, 0x02, 0x02, 0x01, 0x03];
// Create an AsnReader to parse the data
AsnReader reader = new(asn1Data, AsnEncodingRules.DER);
// Parse the sequence
AsnReader sequenceReader = reader.ReadSequence();
// Read integers from the sequence
BigInteger firstInt = sequenceReader.ReadInteger();
BigInteger secondInt = sequenceReader.ReadInteger();
BigInteger thirdInt = sequenceReader.ReadInteger();
Console.WriteLine($"First integer: {firstInt}");
Console.WriteLine($"Second integer: {secondInt}");
Console.WriteLine($"Third integer: {thirdInt}");
// First integer: 1
// Second integer: 2
// Third integer: 3
Decoding ASN.1 data using AsnDecoder:
using System.Formats.Asn1;
using System.Numerics;
using System.Text;
// Sample ASN.1 encoded data
byte[] booleanData = [0x01, 0x01, 0xFF]; // BOOLEAN TRUE
byte[] integerData = [0x02, 0x01, 0x05]; // INTEGER 5
byte[] octetStringData = [0x04, 0x03, 0x41, 0x42, 0x43]; // OCTET STRING "ABC"
byte[] objectIdentifierData = [0x06, 0x03, 0x2A, 0x03, 0x04]; // OBJECT IDENTIFIER 1.2.3.4
byte[] utf8StringData = [0x0C, 0x05, 0x48, 0x65, 0x6C, 0x6C, 0x6F]; // UTF8String "Hello"
int bytesConsumed;
bool booleanValue = AsnDecoder.ReadBoolean(booleanData, AsnEncodingRules.DER, out bytesConsumed);
Console.WriteLine($"Decoded BOOLEAN value: {booleanValue}, Bytes consumed: {bytesConsumed}");
// Decoded BOOLEAN value: True, Bytes consumed: 3
BigInteger integerValue = AsnDecoder.ReadInteger(integerData, AsnEncodingRules.DER, out bytesConsumed);
Console.WriteLine($"Decoded INTEGER value: {integerValue}, Bytes consumed: {bytesConsumed}");
// Decoded INTEGER value: 5, Bytes consumed: 3
byte[] octetStringValue = AsnDecoder.ReadOctetString(octetStringData, AsnEncodingRules.DER, out bytesConsumed);
Console.WriteLine($"Decoded OCTET STRING value: {Encoding.ASCII.GetString(octetStringValue)}, Bytes consumed: {bytesConsumed}");
// Decoded OCTET STRING value: ABC, Bytes consumed: 5
string objectIdentifierValue = AsnDecoder.ReadObjectIdentifier(objectIdentifierData, AsnEncodingRules.DER, out bytesConsumed);
Console.WriteLine($"Decoded OBJECT IDENTIFIER value: {objectIdentifierValue}, Bytes consumed: {bytesConsumed}");
// Decoded OBJECT IDENTIFIER value: 1.2.3.4, Bytes consumed: 5
string utf8StringValue = AsnDecoder.ReadCharacterString(utf8StringData, AsnEncodingRules.DER, UniversalTagNumber.UTF8String, out bytesConsumed);
Console.WriteLine($"Decoded UTF8String value: {utf8StringValue}, Bytes consumed: {bytesConsumed}");
// Decoded UTF8String value: Hello, Bytes consumed: 7
Encoding ASN.1 data:
// Create an AsnWriter to encode data
AsnWriter writer = new(AsnEncodingRules.DER);
// Create a scope for the sequence
using (AsnWriter.Scope scope = writer.PushSequence())
{
// Write integers to the sequence
writer.WriteInteger(1);
writer.WriteInteger(2);
writer.WriteInteger(3);
}
// Get the encoded data
byte[] encodedData = writer.Encode();
Console.WriteLine($"Encoded ASN.1 Data: {BitConverter.ToString(encodedData)}");
// Encoded ASN.1 Data: 30-09-02-01-01-02-01-02-02-01-03
Main Types
The main types provided by this library are:
System.Formats.Asn1.AsnReaderSystem.Formats.Asn1.AsnWriterSystem.Formats.Asn1.AsnDecoderSystem.Formats.Asn1.AsnEncodingRules
Additional Documentation
- API documentation
- X.680 - Abstract Syntax Notation One (ASN.1): Specification of basic notation
- X.690 - ASN.1 encoding rules: Specification of Basic Encoding Rules (BER), Canonical Encoding Rules (CER) and Distinguished Encoding Rules (DER)
Feedback & Contributing
System.Formats.Asn1 is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.
Showing the top 20 packages that depend on System.Formats.Asn1.
| Packages | Downloads |
|---|---|
|
NuGet.Packaging
NuGet's understanding of packages. Reading nuspec, nupkgs and package signing.
|
15 |
|
Microsoft.Build.Tasks.Core
This package contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
|
12 |
|
Oracle.ManagedDataAccess
ODP.NET, Managed Driver is a 100% native code .NET Framework driver for Oracle Database. No additional Oracle Client software is required to be installed to connect to Oracle Database.
|
12 |
|
Microsoft.Build.Tasks.Core
This package contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
|
11 |
|
System.Security.Cryptography.Pkcs
Provides support for PKCS and CMS algorithms.
Commonly Used Types:
System.Security.Cryptography.Pkcs.EnvelopedCms
|
10 |
|
System.Security.Cryptography.Cng
Provides cryptographic algorithm implementations and key management with Windows Cryptographic Next Generation API (CNG).
Commonly Used Types:
System.Security.Cryptography.RSACng
System.Security.Cryptography.ECDsaCng
System.Security.Cryptography.CngKey
When using NuGet 3.x this package requires at least version 3.4.
|
10 |
|
Microsoft.Build.Tasks.Core
This package contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
|
10 |
|
Microsoft.Bcl.Cryptography
Provides support for some cryptographic primitives for .NET Framework and .NET Standard.
|
9 |
|
Microsoft.Build.Tasks.Core
This package contains the Microsoft.Build.Tasks assembly which implements the commonly used tasks of MSBuild.
|
9 |
|
System.Security.Cryptography.Pkcs
Provides support for PKCS and CMS algorithms.
Commonly Used Types:
System.Security.Cryptography.Pkcs.EnvelopedCms
|
9 |
|
OPCFoundation.NetStandard.Opc.Ua.Security.Certificates
OPC UA Security X509 Certificates Class Library
|
9 |
|
System.Security.Cryptography.Cng
Provides cryptographic algorithm implementations and key management with Windows Cryptographic Next Generation API (CNG).
Commonly Used Types:
System.Security.Cryptography.RSACng
System.Security.Cryptography.ECDsaCng
System.Security.Cryptography.CngKey
When using NuGet 3.x this package requires at least version 3.4.
|
9 |
|
MailKit
MailKit is an Open Source cross-platform .NET mail-client library that is based on MimeKit and optimized for mobile devices.
Features include:
* HTTP, Socks4, Socks4a and Socks5 proxy support.
* SASL Authentication via ANONYMOUS, CRAM-MD5, DIGEST-MD5, LOGIN, NTLM, OAUTHBEARER, PLAIN, SCRAM-SHA-1, SCRAM-SHA-256, SCRAM-SHA-512 and XOAUTH2.
* A fully-cancellable SmtpClient with support for STARTTLS, 8BITMIME, BINARYMIME, ENHANCEDSTATUSCODES, SIZE, DSN, PIPELINING and SMTPUTF8.
* A fully-cancellable Pop3Client with support for STLS, UIDL, APOP, PIPELINING, UTF8, and LANG.
* A fully-cancellable ImapClient with support for ACL, QUOTA, LITERAL+, IDLE, NAMESPACE, ID, CHILDREN, LOGINDISABLED, STARTTLS, MULTIAPPEND, UNSELECT, UIDPLUS, CONDSTORE, ESEARCH, SASL-IR, COMPRESS, WITHIN, ENABLE, QRESYNC, SORT, THREAD, ANNOTATE, LIST-EXTENDED, ESORT, METADATA / METADATA-SERVER, NOTIFY, FILTERS, LIST-STATUS, SORT=DISPLAY, SPECIAL-USE / CREATE-SPECIAL-USE, SEARCH=FUZZY, MOVE, UTF8=ACCEPT / UTF8=ONLY, LITERAL-, APPENDLIMIT, STATUS=SIZE, OBJECTID, REPLACE, SAVEDATE, XLIST, and X-GM-EXT1.
* Client-side sorting and threading of messages (the Ordinal Subject and the Jamie Zawinski threading algorithms are supported).
* Asynchronous versions of all methods that hit the network.
* S/MIME, OpenPGP, DKIM and ARC support via MimeKit.
* Microsoft TNEF support via MimeKit.
|
9 |
|
Microsoft.Build.Runtime
This package delivers a complete executable copy of MSBuild. Reference this package only if your application needs to load projects or execute in-process builds without requiring installation of MSBuild. Successfully evaluating projects using this package requires aggregating additional components (like the compilers) into an application directory.
|
9 |
|
NuGet.Packaging
NuGet's understanding of packages. Reading nuspec, nupkgs and package signing.
|
8 |
|
EPPlus
A spreadsheet library for .NET framework and .NET core
|
8 |
|
OPCFoundation.NetStandard.Opc.Ua.Security.Certificates
OPC UA Security X509 Certificates Class Library
|
8 |
|
Microsoft.VisualStudio.Web.CodeGeneration.Templating
Contains Razor based templating host used by ASP.NET Core Code Generators.
|
8 |
|
NuGet.Packaging
NuGet's understanding of packages. Reading nuspec, nupkgs and package signing.
|
7 |
https://go.microsoft.com/fwlink/?LinkID=799421
.NET Framework 4.6.2
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.5)
- System.ValueTuple (>= 4.5.0)
.NET 8.0
- No dependencies.
.NET 9.0
- No dependencies.
.NET Standard 2.0
- System.Buffers (>= 4.5.1)
- System.Memory (>= 4.5.5)