From 40bde8c627589880725a6a797cfa062b912988e1 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bernd=20Pr=C3=BCnster?=
+cryptography-kotlin strives for covering a wide range of targets and a broad range of operations based on a flexible provider architecture.
+Signum, on the other hand, focuses on tight platform integration (**including hardware-backed crypto and attestation!**),
+and comprehensive ASN.1, JOSE, and COSE support.
+
+More…
+
+Signum was born from the need to have cryptographic data structures available across platforms, such as public keys, signatures,
+certificates, CSRs, as well as COSE and JOSE data. Hence, we needed a fully-featured ASN.1 engine and mappings from
+X.509 to COSE and JOSE datatypes. We required comprehensive ASN.1 introspection and builder capabilities across platforms.
+Most notably, Apple has been notoriously lacking anything even remotely usable
+and [SwiftASN1](https://github.com/apple/swift-asn1) was out of the question for a couple of reasons.
+Most notably, it did not exist, when we started work on Signum.
+As it stands now, our ASN.1 engine can handle almost anything you throw at it, in some areas even exceeding Bouncy Castle!
+cryptography-kotlin only added basic ASN.1 capabilities over a year after Signum's development started.
+
+We are also unaware of any other library offering comprehensive JOSE and COSE data structures based on kotlinx-serialization.
+Hence, we implemented those ourselves, with first-class interop to our generic cryptographic data structures.
+We also support platform-native interop meaning that you can easily convert a Json Web Key to a JCA key or even a `SecKeyRef`.
+
+Having actual implementations of cryptographic operations available was only second on our list of priorities. From the
+get-go, it was clear that we wanted the tightest possible platform integration on Android and iOS, including hardware-backed
+storage of key material and in-hardware execution of cryptographic operations whenever possible.
+We also needed platform-native attestation capabilities (and so will you sooner or later, if you are doing anything
+mission-critical on mobile targets!).
+While this approach does limit the number of available cryptographic operations, it also means that all cryptographic operations
+involving secrets (e.g. private keys) provide the same security guarantees as platform-native implementations do —
+**because they are the same** under the hood. Most notably: private keys never leave the platform and **hardware-backed private keys
+never even leave the hardware crypto modules**!
+This tight integration and our focus on mobile comes at the cost of the **Supreme KMP crypto provider only supporting JVM,
+Android, and iOS**.
+cryptography-kotlin, on the other hand allows you to perform a wider range of cryptographic functions an all KMP targets,
+Most prominently, it already supports RSA encryption, key stretching, and key derivation, which Signum currently lacks.
+On the other hand, cryptography-kotlin currently offers neither hardware-backed crypto, nor attestation capabilities.
+
+