infusion_ffi 1.6.0
infusion_ffi: ^1.6.0 copied to clipboard
Flutter plugin for the Infusion crypto vault — AEAD encryption, Ed25519 signing, BLAKE3 CIDs, BIP-39 wallets, and capability tokens. Prebuilt binaries for all platforms.
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.6.0 - 2026-06-16 #
Added #
- Multi-recipient sealing:
sealMulti/openMulti— seal one frame to N wallets (CEK + per-recipient key wrap, AEAD-bound in the signed frame meta) and open it as any listed recipient. Exposed on the FFI (infusion_seal_multi/infusion_open_multi) and the wasm web backend (infusion_wasm_seal_multi/infusion_wasm_open_multi). A non-recipient cannot open; tampering with the recipient list breaks both the author signature and the AEAD tag.
1.5.1 - 2026-06-07 #
Fixed #
- iOS: ship populated
InfusionFFI.xcframework(iOS device + simulator slices) so pub.dev consumers can build for iOS. The 1.5.0 podspec declaredvendored_frameworks = 'InfusionFFI.xcframework'but the published package shipped empty slice directories (nolibinfusion_ffi.a), causing the build errorBuild input file cannot be found: .../libinfusion_ffi.a. Both slices now contain a real static lib (ios-arm64: arm64;ios-arm64_x86_64-simulator: arm64 + x86_64) plus the CHeaders/infusion.h. - iOS: correct the stale
ios/infusion_ffi.podspecversion (1.4.0-dev.1→1.5.1) and source tag (v1.4.0-dev.1→v1.5.1).
1.5.0 - 2026-06-04 #
Added #
- Web: declare
webin the plugin platform manifest (registrantInfusionFfiWeb) so pub.dev recognizes web support — the WebAssembly backend was already bundled but the platform was undeclared.
Security #
- Capability expiry is now enforced on every
openagainst a trusted clock (native:SystemTime; web: new host importinfusion_wasm_host_now_unix). Previouslyexp_tswas never validated at the FFI/WASM boundary. - Reject malformed key fields in the vault config instead of silently using an all-zero key; secret key material is zeroized on dispose.
- Bundled
infusion_wasm.wasmrebuilt to include the expiry-enforcement change.
1.5.0-dev.1 - 2025-05-17 #
Changed #
- Align
pubspec.yamlversion with published release tags; lockversion.dartconstant. - Add
repository,topics, and improveddescriptiontopubspec.yamlfor pub.dev discoverability. - Rewrite
README.mdwith full API reference, platform table, and security section (English). - Add
README-pt.md(Português) andREADME-es.md(Español) translations.
1.4.4 2025-04-XX #
Added #
- Web: bundle
infusion_wasm.wasmas a Flutter asset — zero-config Wasm support in all browsers. - Web: conditional loader/native backends —
infusion_loader_web.dartandinfusion_native_web.dart. - Web:
InfusionWasmRuntimehandles all Wasm memory and interop for seal, open, sign, and derive operations. - Stub:
infusion_loader_stub.dartandinfusion_native_stub.dartfor unsupported platforms (throwUnsupportedError).
Performance #
- Pre-allocate
Vecinaad_bytes()andserialize()—serialize(64 B–16 KB) is 62–67% faster. - Introduce
seal_inner()— eliminates doubleaad_bytes()call and double serialization perseal. - Direct
matchdispatch inseal()/open()— removesBox<dyn AeadImpl>vtable allocation per call. - Replace generic
serde_json::Valuewith typedFramePolicystruct inopen_bytes. - Add
open_bytes_with_token()— avoids bincode round-trip in the FFI path. - Pre-compute
SigningKeyinVaultContext::new— eliminates per-sealEd25519 derivation. - Eliminate triple CBOR→bincode→bincode conversion in
infusion_open/infusion_open_with_requester. - Merge two
thread_rng()calls into a single instance perinfusion_seal.
Changed #
- Updated 26 Rust packages via
cargo update(blake3 1.8.5, rand 0.8.6, serde_json 1.0.149, and more). flutter_lintsupdated from 3.0 to 6.0 across plugin, example, and test apps.
1.3.20 2024-XX-XX #
1.3.18 2024-XX-XX #
Fixed #
- iOS: ensure
XCFrameworkstatic library names are consistent between device and simulator slices for CocoaPods.
1.3.17 2024-XX-XX #
1.3.16 2024-XX-XX #
Security #
- Desktop: validate cached binaries against SHA-256 checksums before loading; re-download on mismatch.
1.3.15 2024-XX-XX #
1.3.14 2024-XX-XX #
Changed #
- Desktop: select Linux/Windows binary by architecture (
Abi.current()); per-arch release assets required.
1.3.13 2024-XX-XX #
Fixed #
- iOS: expose public plugin header; declare Flutter dependency so CocoaPods generates the module correctly.
1.3.12 2024-XX-XX #
Added #
- Desktop: distribute binaries via public GitHub Releases; CI uploads Linux/Windows artifacts.
1.3.11 2024-XX-XX #
Fixed #
- Load native library from bundled Flutter assets for true zero-config usage on all platforms.
1.3.4 2024-XX-XX #
1.3.1 2024-XX-XX #
Fixed #
- Expose
verifyCapin the Dart FFI wrapper — resolvesInvalidFrame("alg")error during capability verification.
1.2.9 2024-XX-XX #
Fixed #
issueCapno longer generates invalid tokens whenowner_pubis inferred from context.
1.2.5 2024-XX-XX #
1.2.0 2024-XX-XX #
Added #
- BIP-39 mnemonic generation (
mnemonicGenerate) and restoration (mnemonicRestore). InfusionFFI.create()factory — instance-based vault context with explicitdispose().infusion_derive_keyFFI function for deterministic sub-key derivation from master seed.
Changed #
- Breaking: moved from global singleton to instance-based
VaultContexthandles.infusion_init→infusion_new(returns context pointer; all functions now accept it).- Dart:
InfusionFFIis now instance-based; useInfusionFFI.create()anddispose().