Skip to content

Releases: rbenzing/LibEmiddle

LibEmiddle v2.6.0

21 Mar 22:48

Choose a tag to compare

🎯 Overview

Production-readiness sprint delivering security hardening, encrypted persistence, structured error handling, and comprehensive test coverage across the full Signal Protocol stack.


✨ What's New

🔒 Security Hardening

  • NEW: Group session replay attack protection — per-sender message ID tracking with 1,000-entry cap
  • NEW: Chat session replay protection — 500-message sliding window FIFO ring buffer
  • NEW: Post-removal forward secrecy — automatic chain key rotation when a group member is removed
  • NEW: Encrypted device list persistence — AES-GCM authenticated storage with atomic writes

📡 API & Messaging

  • NEW: StartListeningAsync() now auto-starts mailbox polling — no extra call needed
  • NEW: O(1) message routing via SenderIdentityKey field on EncryptedMessage — replaces O(n) brute-force session scan
  • NEW: CreateChatSessionAsync(byte[] identityKey) overload — cache-first, transport fallback
  • NEW: SendToDeviceAsync(deviceId, message) — device-to-device encrypted message routing
  • NEW: FetchRecipientKeyBundleAsync() — validates bundle signature before caching
  • NEW: OPKManager one-time prekey consumption tracking with automatic replenishment

🗄️ Persistence & Lifecycle

  • NEW: DeviceStorage — survives process restarts with encrypted device list files
  • NEW: IAsyncDisposable on LibEmiddleClient — safe await using cleanup
  • NEW: LibEmiddleException with typed LibEmiddleErrorCode — 12 structured error codes replacing generic exceptions

🧪 Testing

  • NEW: Concurrency tests — 7 tests covering multi-thread encrypt/decrypt, session isolation, nonce uniqueness
  • NEW: Stress tests — 10 sessions × 50 messages, 5 group sessions × 20 messages, error path coverage

⚠️ Important Changes

  • Password KDF migrated from HKDF + fixed salt to Argon2id (64 MB, 2 passes) — stronger brute-force resistance
  • SecureWebSocketClient now throws LibEmiddleException(TransportError) instead of bare Exception
  • Fixed AES-GCM detached decryption P/Invoke signature (was silently failing all decryption)
  • Fixed MessageSigning.VerifyObject<T>() reversed argument order (was failing all signature verification)

✅ Compatibility

Fully backward compatible with v2.5.1 — drop-in replacement, no code changes needed for existing integrations.


📊 Testing

  • ✅ 532 tests passing (up from 388 baseline)
  • ✅ No breaking changes
  • ✅ No new failures

v2.5.1

23 Dec 02:16

Choose a tag to compare

LibEmiddle v2.5.1 - Documentation & Refactoring Release

🎯 Overview

Documentation and code quality release addressing user feedback about the mailbox transport system.

✨ What's New

📚 Comprehensive Documentation

🔧 Code Improvements

  • Refactored polling logic, eliminated ~120 lines of duplicate code
  • Created StartPollingLoopAsync() helper in BaseMailboxTransport
  • Improved maintainability across transport implementations

⚠️ Important Clarifications

  • WebRTC Transport: Clarified as stub only (not production-ready), planned for v3.0
  • Updated all documentation to reflect accurate feature status

✅ Compatibility

Fully backward compatible with v2.5.0 - Drop-in replacement, no code changes needed!

📊 Testing

  • ✅ All 275 tests passing (improved from 273 baseline)
  • ✅ No breaking changes
  • ✅ No new failures

v2.5.0

24 Aug 21:02
d9da398

Choose a tag to compare

What's Changed

New Contributors

Full Changelog: v2.0.0...v2.5.0

v2.0.0

09 Jun 14:36

Choose a tag to compare