Releases: Lumoin/Lumoin.Base
Release list
v0.0.12
A disposal-hygiene release: a disposed pool now reads as disposed.
- Utf8StringPool.Count throws ObjectDisposedException after disposal, like Intern, TryGet and
Reset, instead of reporting a cleared table as zero. - The pool's observable instruments publish no measurement once disposed, rather than a
healthy-looking zero. They are registered on a caller-supplied meter that outlives the pool, so
a disposed pool kept reporting UniqueCount=0 and TotalBytesInterned=0 indefinitely.
See CHANGELOG.md for the full list.
v0.0.11
A rebuild release: no library or package changes since 0.0.10.
- The only change since 0.0.10 is spacing inside Lumoin.Base's own test files, so the shipped
assemblies and package contents are unchanged.
See CHANGELOG.md for the full list.
v0.0.10
An interner release: a shared instance and a strict path for ill-formed text.
- Utf8StringInterner.Shared is a self-creating, bounded, thread-safe interner on the type's
constructor defaults, so a consumer needing one process-wide instance installs nothing. Its
bound is on entries rather than bytes: each interned value is retained until evicted. - TryIntern(string, out Utf8String) reports ill-formed UTF-16 as false instead of replacing an
unpaired surrogate with U+FFFD, and interns nothing on that path. Intern(string) keeps the
replacement behaviour and now documents it. - Build-time tooling: harden-runner 2.21.1 and code coverage 18.10.0. SIL.ReleaseTasks is
removed along with the System.Security.Cryptography.Xml pin it required; package release
notes are authored by hand.
See CHANGELOG.md for the full list.
v0.0.9
The mobile release: the same package now carries every head's native.
- Lumoin.Base.Libsodium natives now also cover win-arm64, android-arm64 and android-x64
(runtimes//native), and iOS/Mac Catalyst app builds link a bundled static xcframework
wired in by the package's buildTransitive NativeReference targets. - The package multi-targets net10.0, net10.0-ios and net10.0-maccatalyst; the Apple assemblies
import through __Internal, the resolution mechanism statically linked code requires. - The prove gate is two-tier: binaries the build runner can load pass the package's own test
suite; cross-compiled mobile binaries ship on pinned-source provenance with architecture and
exported-symbol verification.
See CHANGELOG.md for the full list.
v0.0.8
The libsodium release: crypto arrives, batteries included.
- New package Lumoin.Base.Libsodium: a raw libsodium 1.0.22 binding - Ed25519 seed-keypair
generation, detached sign/verify, Ed25519-to-X25519 key conversion, X25519 scalar
multiplication, XChaCha20-Poly1305 AEAD, and the ML-KEM-768 (FIPS 203) and X-Wing hybrid
post-quantum KEMs - plus SodiumBacking, the libsodium implementation of the
NativeBackingAllocator seam for BaseMemoryPool guarded allocations. - The libsodium native library ships inside the package for win-x64, linux-x64, linux-arm64,
osx-x64 and osx-arm64, built in this repository's CI from the pinned, checksum-verified
upstream release source. The package works as-is from NuGet. - Lumoin.Base.Sodium is retired; its guarded-memory backing moved into Lumoin.Base.Libsodium.
0.0.7 remains the last release of that package id.
See CHANGELOG.md for the full list.
v0.0.7
A dependency refresh release: all three packages rebuilt on the updated toolchain, with no library code changes.
- .NET SDK 10.0.302; MSTest 4.3.2 and Microsoft.Testing.Platform extensions 2.3.2 across the test suites.
- The build-time System.Security.Cryptography.Xml pin moved to 10.0.10, addressing published advisories against 10.0.9.
- CI actions updated to their latest pinned releases.
See CHANGELOG.md for the full list.
v0.0.6
Adds Lumoin.Base.MemoryProtection: the OS-twin locked-memory implementation of the NativeBackingAllocator seam (VirtualLock on Windows, mlock plus best-effort MADV_DONTDUMP on Linux and Android, mlock on Apple platforms and FreeBSD). Pure P/Invoke into kernel32 and libc with zero native assets; resolves glibc, Apple, FreeBSD and musl C libraries. Details in CHANGELOG.md.
v0.0.5
- New package Lumoin.Base.Sodium: a RID-agnostic libsodium binding for the NativeBackingAllocator seam; Native rents become per-rent sodium_malloc guarded allocations. No native assets; the library resolves at runtime.
- BaseMemoryPool gains NativeRentMode: PerRentIsolated (default) or ProtectedSlab with per-segment software canaries, CanaryViolationException, a canary-violations counter and a nativeRentMode activity tag.
- Segment clearing now uses CryptographicOperations.ZeroMemory so wipes cannot be elided.
- Utf8String, Utf8StringPool, Utf8StringInterner, SensitiveMemory, SlabBufferWriter, EmptyMemoryOwner and the redesigned Tag from the preceding merges are included.
- Full details in CHANGELOG.md.
v0.0.4
Adds a concurrent, GC-evictable string interner alongside the single-writer arena pool, plus a cheap pool reset.
- Utf8StringInterner: a process-wide, thread-safe, self-bounding interner (hot/cold generation eviction) — the concurrent counterpart to Utf8StringPool. Managed-only; an outstanding Utf8String keeps its own bytes alive, so eviction never dangles a value already handed out.
- Utf8StringPool.Reset(): bulk reclaim and table clear for scoped reuse.
- OpenTelemetry metrics via Utf8StringInternerMetrics, an optional maximum value length that leaves oversized values uncached, and an untrusted-input hardening note.
See CHANGELOG.md for the full list.
v0.0.3
Adds byte-native UTF-8 string handling and completes the sensitive-memory primitives.
- Utf8String, Utf8StringPool, and Utf8StringComparer for byte-native UTF-8.
- SensitiveMemory OTel lifetime span and EmptyMemoryOwner-safe disposal.
- Tag redesigned as a bespoke type with content-based, order-independent equality (breaking).
- EmptyMemoryOwner and SensitiveMemoryTelemetry primitives.
See CHANGELOG.md for the full list.