libsignal 1.1.0
libsignal: ^1.1.0 copied to clipboard
Dart FFI bindings for libsignal — Signal Protocol implementation for end-to-end encryption, sealed sender, group messaging, and secure cryptographic operations.
Changelog #
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased #
1.1.0 - 2026-01-08 #
Added #
- Add
make setup-buildcommand to install native build dependencies (Rust, protoc) - Add
make setup-fvmcommand (renamed from previousmake setup) - Restructure
make setupto run full setup (FVM + build dependencies) - Add "Skip Build Hook Pattern" documentation to CLAUDE.md
- Add multi-platform testing: Linux x86_64, Linux ARM64, macOS ARM64, Windows x86_64
- Add reusable test workflow (
test-reusable.yml) to eliminate code duplication betweentest.ymlandpublish.yml
Changed #
- Replace
softprops/action-gh-releasewith officialghCLI in CI workflows - Update GitHub Actions to latest versions:
actions/create-github-app-tokenv1 → v2peter-evans/create-pull-requestv7 → v8ilammy/msvc-dev-cmdv1 → v1.13.0
- Tests now run in parallel on all 4 platforms
- Extract test logic into reusable workflow for better maintainability
- Update libsignal native library to v0.86.10 (release notes)
- Simplify
check-libsignal-updates.ymlworkflow:- Remove AI analysis (GitHub Models) - now only updates
native_versionin pubspec.yaml - Remove automatic FFI bindings regeneration (now manual step after merge)
- Add clear instructions in PR body for manual steps after build completes
- Remove AI analysis (GitHub Models) - now only updates
- Simplify
check_updates.dartscript:- Remove
--ai,--no-ai,--bump,--no-changelogoptions - No longer updates package version or CHANGELOG.md automatically
- Remove
- Remove
scripts/src/ai_analysis.dart(no longer needed) - Use GitHub App token instead of
GITHUB_TOKENin workflows:check-libsignal-updates.yml: PR creationbuild-libsignal.yml: release version checks
- Skip tests for bot PRs in
test.yml(native libraries not yet built for version updates) - Discard FVM config changes in CI to prevent unwanted
.fvmrcand.vscode/settings.jsonmodifications in PRs - Extract Rust setup into reusable
.github/actions/setup-rustaction
Fixed #
- Fix duplicate "v" prefix in native library release notes (
vv0.86.10→v0.86.10) - Remove redundant "Usage" section from native library release description
- Fix ARM64 group messaging crash caused by
SignalUuid16-byte struct-by-value FFI limitation (dart-lang/sdk#36730)- Pass
SignalUuidas twoInt64values matching ARM64 AAPCS64 register layout - Affects
signal_sender_key_distribution_message_createandsignal_group_encrypt_message
- Pass
- Fix Windows native library build in CI
- Create shell wrapper for
fvminsetup-fvmaction (Git Bash cannot execute.batfiles) - Use PowerShell for build step to ensure MSVC
link.exeis used instead of Git's/usr/bin/link
- Create shell wrapper for
- Fix
make regenCI failure whencbindgenis not pre-installed - Fix
make regenCI failure due to missingprotoc(required by libsignal's spqr dependency) - Add
protocto build prerequisites documentation (README.md, CLAUDE.md)
1.0.1 - 2026-01-02 #
Added #
- Added
make doccommand for local API documentation generation - Added "Implementation Status" section to README.md with overview of wrapped native functionality
- Added pre-commit git hook for format check and static analysis (configured via
make setup) - Added
workflow_dispatchtrigger to test workflow (allows manual test runs from GitHub Actions)
Changed #
- Improved test coverage to 98.4%
- Added
// coverage:ignorecomments to genuinely untestable code (FFI callbacks, finalizers, defensive null checks) - Removed unused
extractOwnedBufferfunction fromFfiHelpers - Refactored CI update workflow: moved AI analysis from bash to Dart script
- Simplified
check-libsignal-updates.ymlworkflow (~530 → ~220 lines) - Added
--ai,--no-ai,--ciflags tocheck_updates.dartscript - Script now writes directly to
GITHUB_OUTPUTin CI mode (no jq parsing needed) build-libsignal.ymlworkflow now skips build if release already exists (prevents unnecessary rebuilds when only package version changes)
Fixed #
- Fixed
publish.ymlworkflow: use Flutter SDK (via FVM) instead of Dart SDK for publishing Flutter packages - Added
workflow_dispatchwith dry-run option to publish workflow - Added duplicate version check (validates against pub.flutter-io.cn API before publishing)
- Added
publish-dry-runvalidation step before actual publishing - Aligned publish workflow structure with liboqs_dart for consistency
- Fixed version parsing in
build-libsignal.ymlworkflow (use Dart script instead of grep for reliable parsing) - Fixed unresolved dartdoc references in
LibSignalException,GroupSession, andInMemoryIdentityKeyStore - Fixed
.pubignoreto includeCONTRIBUTING.mdin published package - Fixed
.pubignoreto exclude generateddoc/directory - Fixed LICENSE file format for proper pub.flutter-io.cn recognition (added full AGPL-3.0 text with SPDX identifier)
1.0.0 - 2025-12-31 #
Added #
- Pre-built native libraries for all platforms (iOS, Android, macOS, Linux, Windows)
- Signal Protocol: Double Ratchet algorithm for forward secrecy and break-in recovery
- X3DH: Extended Triple Diffie-Hellman for asynchronous key agreement
- Key Management: Curve25519 key pairs (
PrivateKey,PublicKey,IdentityKeyPair) - Pre-keys:
PreKeyRecord,SignedPreKeyRecord,PreKeyBundlefor session establishment - Post-quantum: Kyber key pairs (
KyberKeyPair,KyberPreKeyRecord) for quantum resistance - Sessions:
SessionRecord,ProtocolAddressfor session management - Messages:
SignalMessage,PreKeySignalMessagefor encrypted communication - Sealed Sender: Anonymous message sending (
ServerCertificate,SenderCertificate) - Group Messaging: SenderKey distribution (
GroupSession,SenderKeyRecord,SenderKeyDistributionMessage) - Cryptographic utilities: AES-256-GCM-SIV (
Aes256GcmSiv), HKDF (Hkdf), identity fingerprints (Fingerprint) - Storage interfaces:
SessionStore,IdentityKeyStore,PreKeyStore,SignedPreKeyStore,KyberPreKeyStore,SenderKeyStore - In-memory store implementations for testing and prototyping
- Automatic native library download via build hooks
- SHA256 verification for native library integrity
LibSignal.init()for optional library pre-initialization- Comprehensive exception handling with
SignalException - GitHub Actions CI/CD pipeline for automated testing and publishing
- Automated upstream version tracking with AI-powered changelog generation
- Cross-platform build scripts for native library compilation
- Example Flutter application and CLI example demonstrating all features
Security #
- Based on libsignal v0.86.9 from Signal Foundation
- Secret keys are handled securely with proper memory management
- Cryptographic operations use constant-time implementations where applicable