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")
}