attested_secure_keys
Hardware-backed, attestable EC P-256 keys for Flutter — Android Keystore/StrongBox and iOS Secure Enclave, non-exportable, ES256/JOSE, with key attestation.
What this package is like to depend on
Last release 14 days ago
10 Aug 2026
Too new to tell
only 2 release windows
Nearly every release is documented
notes for 2 of 2 stable releases
Nothing withdrawn
no release was ever pulled
2 months old
4 releases · first in 2026
4 releases in the last 12 months
see the full history below
Release timeline
4 releases · Jun 2026 to Aug 2026Releases
latest 4-
0.1.110 Aug 2026Release notes
Open source →The v0.1.1 tag failed to publish anything. Only the app-facing package was
bumped, which broke both workflows: CI's version-lockstep gate rejected the
0.1.0/0.1.1 mix, and the publish job aborted on its first step because
attested_secure_keys_platform_interface was still 0.1.0, a version pub.dev
already has.Bump the platform interface and the two implementation packages to 0.1.1 so
the set is back in lockstep. No code or API changes in any of them.Also guard each publish step with .github/scripts/publish-if-new.sh, which
skips a package whose version is already on pub.dev.dart pub publish
treats that case as a hard error, so a re-run after a partial release would
otherwise keep dying on the packages that already uploaded.Co-Authored-By: Claude Opus 5 (1M context) [email protected]
Release notes
Open source →- Metadata only, no code or API changes.
homepagenow points at the design write-up (https://exilonx.github.io/case-study/attested-secure-keys);repositoryis unchanged.
- Metadata only, no code or API changes.
-
0.1.001 Jul 2026Release notes
Open source →First stable release. The public
AttestedSecureKeysAPI is considered stable for the0.1.xline (breaking changes, if any, will land in0.2.0). Both platforms are device-verified: Android (StrongBox/TEE Keystore attestation) and iOS (Secure Enclave + App Attest). No functional changes since0.1.0-dev.2— promotes the soaked prerelease and clarifies the docs' verification-responsibility boundary (the plugin emits standard-format attestations; verification is the relying party's job). -
0.1.0-dev.201 Jul 2026 pre-releaseRelease notes
Open source →Housekeeping prerelease; no public API changes.
- Renamed the internal Android package and iOS keychain service identifiers
from
ro.roeid.*toio.github.exilonx.*, removing all references to the originating project from the published artifacts. - Reverted
metato^1.17.0to match the Flutter SDK's pin (a^1.18.0floor excluded the SDK-pinned version and brokeflutter pub get).
- Renamed the internal Android package and iOS keychain service identifiers
from
-
0.1.0-dev.125 Jun 2026 pre-releaseRelease notes
Open source →First prerelease — published as
-devto test the release pipeline and soak the implementation before a stable 0.1.0. Both platforms are device-verified: Android (StrongBox/TEE attestation) via Firebase Test Lab, and iOS (Secure Enclave + App Attest) on a physical iPhone.Initial release (milestone M0 — spike + public API).
Added
AttestedSecureKeysfacade modeled onflutter_secure_storage:capabilities,generateKey,sign,attest,getKeyInfo,containsKey,deleteKey,listAliases.- Normalized, platform-independent model:
KeySecurityLevel,KeyAttestationType,UserAuthType,HwKey,Es256Signature,KeyAttestation,HwKeyInfo,DeviceKeyCapabilities,Jwk(RFC 7517 / 7638 thumbprint / RFC 9052 COSE_Key). - Typed
Pigeonplatform channel (Dart ⇄ Kotlin ⇄ Swift). - Android (first-party Keystore): EC P-256 keygen with StrongBox → TEE →
software fallback, ES256 signing with JDK
BigIntegerDER→rawR‖Sconversion, security-level introspection, attestation-chain passthrough, key CRUD, and a capability probe. - iOS (first-party CryptoKit / Security / DeviceCheck): Secure Enclave
keygen + ES256 signing (
rawRepresentation), keychain blob persistence, capability reporting, and an App Attest scaffold that binds the key's JWK thumbprint + server nonce. - Honest, explicit fallback reporting (
requestedvseffectivelevel;attestationType) and typed errors (HwKeyUnsupportedError,UserNotAuthenticatedError,KeyNotFoundError,AttestationUnavailableError). - Example app and a Dart unit-test suite.
Known limitations
- In-app biometric prompt for auth-gated signing (androidx.biometric
BiometricPrompt.CryptoObject) and binding the server nonce as the Android attestation challenge are scheduled for M1. KeyAttestation.toOid4vciKeyAttestationJwt()and the Node verifier are scheduled for M2.- iOS native code is now device-verified on a physical iPhone (Secure Enclave + App Attest); broader OS-version / CI device coverage is ongoing.