two_level_qr 0.2.0
two_level_qr: ^0.2.0 copied to clipboard
TwoLevelQR - A Dart SDK that implements a keyed two-level QR mode that hides a secret message, optionally encrypted (AES-SIV, ChaCha20-Poly1305), during encoding of a QR.
Change Log #
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.
0.1.0 - 2026-09-25 #
Initial release
0.1.1 - 2026-09-25 #
Adding files required for publishing to pub.dev
0.2.0 - 2026-10-01 #
Added #
- Encrypted hidden messages:
TwoLevelQr.encodeWithEncryptedHiddenMessageandTwoLevelQr.decodeWithEncryptedHiddenMessage, with separatepositionKeyandencryptionPassphrase. Decoding never falls back to plaintext; failures throwHiddenMessageCryptoExceptionsubclasses. - Pluggable
HiddenMessageCiphercontract. A one-byte scheme ID in the hidden channel tells the receiver which cipher was used. - Built-in ciphers:
AesSivCipher(AES-SIV-CMAC-512, default, all platforms) andChaCha20Poly1305Cipher(native platforms), using pointycastle. PassphraseKdf(PBKDF2-HMAC-SHA256) with a configurable iteration count (default 1000;kdfIterationson the facade,iterationson the ciphers).TwoLevelQr.hiddenMessageCapacityfor plaintext and encrypted modes.EncodeHiddenQr.executeWithPayload,DecodeHiddenQr.extractChannel,EncodeResult.hiddenCipherSchemeId, andHiddenMessageCapacityException.overheadBytes.example/main.dart.- Test vectors: RFC 5297, Wycheproof AES-SIV-CMAC, RFC 8439, RFC 7914.
Fixed #
- The package now compiles for the web. The keyed position scheduler emulates its 64-bit arithmetic, so schedules are bit-identical on every platform and codes created with 0.1.x still decode.
- Automatic version bumping only retries on capacity overflow instead of on
any
ArgumentError.
Changed #
- Minimum Dart SDK is now 3.2.0 (required by pointycastle 4).
- Plaintext hidden-message output is unchanged byte for byte (covered by a golden test).