---
title: "Changelog"
url: https://recursiveai.org/onecrypto/docs/changelog/
description: "All notable changes are listed here. The format follows Keep a Changelog and versions follow Semantic Versioning."
version: "0.1.0-preview.1"
source: https://github.com/recursive-ai-oss/onecrypto-csharp/blob/3fcea7e7bbea11c5f528ec1865af04bcba8e23ac/CHANGELOG.md
---

# Changelog

All notable changes are listed here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and versions follow [Semantic Versioning](https://semver.org/).

## [Unreleased]

## [0.1.0-preview.1] - 2026-11-01

First preview of `RecursiveAI.OneCrypto`, the core package. The API is not stable yet. This library has not been independently audited. What is tested, against what, and the documented deviations: [docs/conformance.md](https://recursiveai.org/onecrypto/docs/conformance/).

### Added

- ASN.1 (`RecursiveAI.OneCrypto.Asn1`): BER, CER and DER readers over spans and streams (indefinite lengths in constant memory), DER and streaming BER writers, limits on by default, typed errors with `Try` forms. PEM (RFC 7468).
- Primitives the platform lacks (`RecursiveAI.OneCrypto.Primitives`): Ed25519 (with ctx and ph) and Ed448 (with ph), X25519 and X448; OCB3, EAX and AES key wrap; Argon2d/i/id, scrypt and bcrypt-pbkdf with cost limits; Camellia; CAST5, IDEA, Blowfish and Twofish for decryption only. Secret-handling code avoids secret-dependent branches and table indices.
- Platform dispatch: the platform's own algorithms first; verify-only RSA and ECDSA, SHA-3/SHAKE and ChaCha20-Poly1305 fallbacks only where the platform has none; otherwise `AlgorithmNotSupportedException` naming the algorithm and platform. A generated availability table per platform ([docs/availability.md](https://recursiveai.org/onecrypto/docs/availability/)).
- CMS (RFC 5652 and successors): SignedData, EnvelopedData, AuthEnvelopedData, AuthenticatedData, EncryptedData, DigestedData and CompressedData; every RecipientInfo form including KEMRecipientInfo with ML-KEM (preview); RSA PKCS#1 v1.5 and PSS, ECDSA, Ed25519, Ed448 and ML-DSA signers; countersignatures and ESS signing-certificate attributes; per-signer verification reports; decryption that fails closed; streaming sign, verify, encrypt and decrypt in constant memory with synchronous and asynchronous forms; two-phase signing (`PreparedSignedData`).
- PKCS#8 (plain and encrypted, PBES2 with PBKDF2 or scrypt), PKCS#12 read and write (PBMAC1 and the classic MAC; legacy PBEs read only), legacy PEM private keys, and OpenSSH public keys, private keys and certificates (`RecursiveAI.OneCrypto.Wire.Ssh`).
- Issuer side in core, as I/O-free handlers over the key interfaces with two-phase signing throughout: `CertificateAuthority` (profiles as data: root, intermediate, TLS server/client, S/MIME, code signing, OCSP signing, time-stamping; issuance from a CSR or a key; unpredictable serials; AKI/SKI, AIA and CRL-DP; CRLs and delta CRLs with numbers, reasons and issuing distribution point; the TLS validity schedule of the CA/Browser Forum requirements), `TimeStampRequest`/`TimeStampResponse`/`TstInfo`, `TimeStampVerifier` (structured report per RFC 3161 rule, the authority's certificate validated by `PathValidator` against caller-supplied anchors) and `TimeStampAuthority` (RFC 3161/5816 handler with serial source, accuracy, policy selection and failure info), and `OcspResponder` (RFC 6960 handler: CA or delegated responder, byName/byKey, nonce, multi-request, preproduced responses, errors as statuses). Two-way with OpenSSL 3.5.9 `ts`, `ocsp`, `verify` and `crl`. Docs: `docs/issuance.md`, `docs/tsp.md`, `docs/ocsp-responder.md`.
- `SignedDataVerifyOptions.Chain`: each signer and countersigner of a SignedData is validated by the path validator, with the message's certificates, CRLs and OCSP responses as untrusted input; `SignerReport.Chain` holds the validator's report and the `chain` check summarises it.
- `Crypto.Load`: one call that takes bytes, a stream or a path and returns what a key or certificate file holds, typed (`LoadedItems`): certificates and chains, CRLs, certification requests, OCSP responses, public keys, private keys as usable `ISigningKey`/`IDecryptionKey`/`IAgreementKey`, PKCS#7 certificate bags, PKCS#12 contents, OpenSSH keys, certificates and `authorized_keys`, from PEM or DER by a fixed decision table. A password callback is asked at most once per distinct secret. Bad input raises `CryptoLoadException` (or `Crypto.TryLoad`) with the formats considered. See `docs/load.md`.
- `CryptoPolicy` (`Standard`, `Strict`, dated SHA-1/MD5/RSA rules, explicit reference time, decisions with rule ids and references); key interfaces (`ISigningKey`, `IDecryptionKey`, `IAgreementKey`, `IRsaKey`) with in-memory, library-curve and operating-system backends (`PrivateKey`); `SignatureSpec`; serialisable two-phase signing (`PreparedSignature`) with two-phase certificates, requests and revocation lists. RSASSA-PSS certificates with any salt length or MGF1 hash now verify.
- X.509 models in the root namespace, immutable and lossless over the received octets: `Certificate` (with `X509Certificate2` conversion both ways), `CertificateSigningRequest`, `CertificateRevocationList` (complete, delta and indirect), `OcspRequest`, `OcspResponse`, `OcspBasicResponse` and read-only `AttributeCertificate`, with names (RFC 4514), general names, public keys and typed values for the RFC 5280 extensions; builders for certificates, requests, CRLs and OCSP messages that sign through `X509Signer`; structured signature results. See `docs/x509.md`.
- The RFC 5280 path builder and validator (`RecursiveAI.OneCrypto.Validation`), as a **preview**: per-rule reports for every path tried, revocation from supplied CRLs and OCSP responses (offline is never "good"), validation at any instant, an opt-in server-authentication profile and an opt-in side-by-side report from the platform's chain engine. It has had an internal review; its follow-ups are still landing, so don't rely on it for trust decisions yet.
- Platform gaps in AES-GCM, AES-CCM, named curves (for example Brainpool on macOS) and ML-KEM/ML-DSA keys now surface as `AlgorithmNotSupportedException` naming the algorithm and platform, never the platform's own `PlatformNotSupportedException`; the availability table lists AES-GCM and AES-CCM (macOS has no AES-CCM; AuthEnvelopedData defaults to AES-256-GCM and writes CCM only when asked).
- Package metadata, package validation, NativeAOT and browser-wasm smoke apps, fuzz targets for every parser, and benchmarks against the managed libraries this one replaces.

[Unreleased]: https://github.com/recursive-ai-oss/onecrypto-csharp/compare/v0.1.0-preview.1...HEAD
[0.1.0-preview.1]: https://github.com/recursive-ai-oss/onecrypto-csharp/releases/tag/v0.1.0-preview.1
