Skip to content

Releases: Lumoin/Lumoin.Base

v0.0.12

Choose a tag to compare

@veikkoeeva veikkoeeva released this 02 Sep 08:56
8ed9797

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 02 Sep 06:30
207b0a0

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 02 Sep 06:09
4960ac3

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 12 Aug 10:02
fdc0f87

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 27 Jul 06:31
e7c7fa3

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 22 Jul 05:57
50d50c4

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 11 Jul 05:36
5aa2f74

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 10 Jul 15:24
f702fb3
  • 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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 27 Jun 22:43
6b6eb96

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

Choose a tag to compare

@veikkoeeva veikkoeeva released this 27 Jun 18:24
b7ec8ad

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.