Why WvdS.System.Security.Cryptography instead of .NET 10 PQC?
Microsoft has built native PQC support into .NET 10 (Preview, GA November 2025)1):
MLDsa / MLDsaCng / MLDsaOpenSsl - ML-DSA signaturesMLKem / MLKemCng / MLKemOpenSsl - ML-KEM key encapsulationSlhDsa / SlhDsaCng / SlhDsaOpenSsl - SLH-DSA signaturesCompositeMLDsa - Hybrid approach (manual)| Aspect | Microsoft .NET 10 | WvdS Solution |
|---|---|---|
| Availability | .NET 10+ (November 2025) | .NET 8.0+ (available now) |
| Migration Strategy | New API, code changes | Drop-in replacement, 2 lines |
| Hybrid Mode | Manual via CompositeMLDsa | Automatic with CryptoMode.Hybrid |
| Existing Code | Must be rewritten | Works unchanged |
| X.509 Integration | New classes | Extends existing X509Certificate2 |
| CMS/PKCS#7 | Not documented | Full support |
| RSA/ECDSA Extensions | Separate classes | Extends existing RSA, ECDsa |
// .NET 10: Completely new code required using var mlDsa = MLDsa.Create(MLDsaAlgorithm.MLDsa65); byte[] signature = mlDsa.SignData(data); // Hybrid implemented manually using var composite = CompositeMLDsa.Create( CompositeMLDsaAlgorithm.MlDsa65Ecdsa256); byte[] hybridSig = composite.SignData(data); // Existing RSA code NO LONGER works // using var rsa = RSA.Create(); // -> no PQ signature
using WvdS.System.Security.Cryptography; // Two lines - done! CryptoConfig.DefaultMode = CryptoMode.Hybrid; // Existing code automatically works with PQ using var rsa = RSA.Create(4096); byte[] signature = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); // -> Automatically contains RSA + ML-DSA signature
Problem: Large project with hundreds of RSA/ECDSA calls.
| .NET 10 | Change every location in code, use new classes |
| WvdS | CryptoConfig.DefaultMode = CryptoMode.Hybrid; - done |
Problem: Partners don't support PQC yet.
| .NET 10 | Two code paths: classical for old, PQ for new partners |
| WvdS | Hybrid mode: Old partners ignore PQ extension, new ones validate it |
Problem: Existing SignedCms integration.
| .NET 10 | Not documented, likely manual integration |
| WvdS | SignedCmsExtensions extends existing API transparently |
Problem: X509Chain.Build() should validate PQ signatures.
| .NET 10 | New chain classes required (unclear) |
| WvdS | Existing X509Chain works, PQ validation automatic |
Microsoft .NET 10 PQC can make sense when:
WvdS.System.Security.Cryptography is better when:
| Criterion | Recommendation |
|---|---|
| Existing project | WvdS |
| .NET 8.0 LTS | WvdS |
| Hybrid strategy | WvdS |
| CMS/PKCS#7 | WvdS |
| Greenfield + .NET 10 only | .NET 10 or WvdS |
| PQ only (no hybrid) | Either works |
Conclusion: For most real-world migration scenarios, WvdS.System.Security.Cryptography offers the simplest and lowest-risk path to post-quantum cryptography.
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional