Skip to content

ASN.1/DER

ASN.1/DER: binary serialization of ASN.1/DER content via kotlinx.serialization. Additionally, library provides ASN.1 modules/declarations from different RFCs, f.e. SubjectPublicKeyInfo from RFC5280 and PrivateKeyInfo from RFC5208

ASN.1 functionality is currently experimental and is subject to API/ABI changes

Example

Defining custom DER serializable class:

@Serializable
class SimpleAlgorithmIdentifier(
    val algorithm: ObjectIdentifier,
    val parameters: Nothing?,
)

val algorithm = SimpleAlgorithmIdentifier(ObjectIdentifier("1.2.840.113549.1.1.11"), null)

// encoding
val bytes = DER.encodeToByteArray(algorithm)

println(bytes.toHexString()) // prints "300d06092a864886f70d01010b0500"

// decoding
val decoded = DER.decodeFromByteArray<SimpleAlgorithmIdentifier>(bytes)

println(decoded.algorithm.value) // prints "1.2.840.113549.1.1.11"

Using SubjectPublicKeyInfo coming from cryptography-serialization-asn1-modules dependency:

val rsaPublicKey: ByteArray = TODO("...")

val spkiPublicKey: ByteArray = DER.encodeToByteArray(
    SubjectPublicKeyInfo(ObjectIdentifier.RSA, rsaPublicKey)
)

Using in your projects

dependencies {
    implementation("dev.whyoleg.cryptography:cryptography-serialization-asn1:0.5.0")
    implementation("dev.whyoleg.cryptography:cryptography-serialization-asn1-modules:0.5.0")
}