Repository navigation
Releases: MidCoard/keystead
Release list
Keystead Core 0.5.4
Fixes cross-platform sync identity instability: importing unchanged records between Windows and macOS could change content keys and event IDs because profile serialization used platform-specific line endings and did not reliably sort property entries.
- Serialize future sync profiles with sorted property entries and LF delimiters, preserving escaping of actual user content.
- Add
canonicalSyncContentKey(record): authenticate the original ciphertext, advertised content key, and typed payload before returning a canonical comparison key. - Preserve compatibility with authenticated historical CRLF and differently ordered profiles. Existing records do not need to be deleted or rewritten to compare correctly.
Validation: LF → CRLF → LF subprocess round trips now preserve record identity. Legacy representation fixtures remain equivalent, while forged keys, corrupt ciphertext, and invalid typed payloads are rejected. Local Core checks and Javadoc passed: 422 tests passed, 9 platform-dependent skips.
Maven coordinates: top.focess:keystead-core:0.5.4. Applications comparing legacy sync records should use the authenticated canonical comparison API. Both desktop clients should be updated to the corresponding fixed release.
Keystead Core 0.5.3
This release fixes vault persistence and recovery defects found during the Keystead review, and adds APIs needed for secure-note editing and explicit sync conflict resolution.
- Roll back failed compound mutations, including revisions, headers, records, tombstones, and key rotation state.
- Refuse overwriting a restore destination even when it is created concurrently; reject file symlinks that could bypass the vault lock.
- Reject malformed sync timestamps individually and support backup encoding expansion for valid large records.
- Add
updateSecureNoteand authenticatedresolveSyncRecord; explicit resolution preserves record identity and emits a newer revision.
Local validation: 419 tests passed, with 9 platform-dependent skips; Javadoc and formatting passed. New regression tests cover persistence failures, restore races, large backups, malformed timestamps, symlinks, and explicit conflict resolution.
Maven coordinates: top.focess:keystead-core:0.5.3.
Release CI passed on Windows x86-64, macOS ARM64, Linux x86-64, and Linux ARM64. Failure-injection and large-backup test fixtures were made portable without changing production behavior or skipping their assertions.
Keystead Core 0.5.2
Full Changelog: v0.5.1...v0.5.2
keystead-core 0.5.1
Additions
VaultHandle.previewSyncRecord(record, consumer): decrypts a single server sync record under the local DEK, verifies its contentKey, and exposes a short-livedSyncRecordPreview(active record metadata + decoded payload view, or tombstone identity) to a callback without storing. Enables client-side compare-and-decide sync UIs.- New public types
SyncRecordPreview(sealed:Active/Deleted) andSyncPayloadView(sealed:Login/Note/Structured). - README: "Data storage format" section documenting the vault file, container body, sync record, server DB tables, and the identity/dedup/collision model.
Non-breaking. No wire-format changes.
keystead-core 0.5.0
Breaking changes
SecretMetadata record components renamed for naming uniformity with DeletedSecretRecord and the sync/DB layer:
SecretMetadata.id()->secretId()SecretMetadata.type()->secretType()
Consumers must update call sites (keystead-client: LocalVaultSession.kt has 2 metadata.type() call sites).
No wire-format changes: vault files, backup archives, and sync records are unaffected. The backup property keys metadata.id/metadata.type and the sync profile key metadataRevision are unchanged.
keystead-core 0.4.5
Stable KVE2 sync record identity: DEK-keyed contentKey, ciphertext-free event ids, canonical sync encoding. See commit f291c9c.
keystead-core 0.4.4
Release 0.4.4.
- Remove the deprecated local-login recovery package; superseded by the new access/share flows.
- New top.focess.keystead.access package: access and share primitives.
- FullVaultBackupService: encrypted full-vault backup with a versioned archive and dedicated AAD.
- Tolerant sync import with typed rejection reasons and a content-hashed SyncRecordEventId for stable event ids.
- Vault model / store updates: device-key KeySlot, SlotType, VaultHeader, OneFileVaultStore, VaultContainerBody, VaultFileFormat.
- Crypto, vault service, and sync codec updates; module-info and build updates.
keystead-core 0.4.3
What's new
- Vault device-key slot enrollment (core API).
VaultHandle.addDeviceKey(devicePublicKey, context)wraps the current vault key for a device public key and appends a DEVICE slot to the vault header, so that device can thereafter unlock the vault without a passphrase. The data-encryption key is unchanged and no secret records are re-encrypted; existing slots are preserved.VaultHandle.removeDeviceKey(slotKeyId)revokes a device slot and refuses to remove the last remaining slot.
This is an additive API prerequisite for client-side OS-level device-key unlock (no behavioral change for existing vaults).
🤖 Generated with Claude Code
keystead-core 0.4.2
Patch release on top of 0.4.1.
Changes
- Shrink the vault fingerprint from 128 to 64 bits. File format version becomes 3 and the derivation label becomes
keystead-vault-fingerprint-v3; old v2 vaults are rejected cleanly (no migration, per the active-development no-compat stance). - Rewrite and expand the vault documentation: concept-first explanation of envelope encryption, the plaintext header and encrypted envelope, the container body and its two encryption levels, key slots, and end-to-end device/recovery key flows.
- Resolve IDE null-analysis warnings by adding non-null accessors (
KeySlot.requireKdfParameters(),NativeMemoryProtectionReport.requireResult()) for values already guaranteed non-null by upstream guards. No behavior change.
Consuming
Maven Central coordinates (syncing shortly):
top.focess:keystead-core:0.4.2
keystead-core 0.4.1
Patch release on top of 0.4.0.
Changes
- Share polish pass: passphrase policy shared with clients, wrong-passphrase error mapping, share-code copy lifecycle.
- No new public API.
Consuming
Maven Central coordinates (syncing shortly):
top.focess:keystead-core:0.4.1