Skip to content

Releases: MidCoard/keystead

Keystead Core 0.5.4

Choose a tag to compare

@MidCoard MidCoard released this 05 Sep 09:09

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

Choose a tag to compare

@MidCoard MidCoard released this 05 Sep 07:44

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 updateSecureNote and authenticated resolveSyncRecord; 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

Choose a tag to compare

@MidCoard MidCoard released this 03 Sep 20:49

Full Changelog: v0.5.1...v0.5.2

keystead-core 0.5.1

Choose a tag to compare

@MidCoard MidCoard released this 07 Aug 18:45

Additions

  • VaultHandle.previewSyncRecord(record, consumer): decrypts a single server sync record under the local DEK, verifies its contentKey, and exposes a short-lived SyncRecordPreview (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) and SyncPayloadView (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

Choose a tag to compare

@MidCoard MidCoard released this 05 Aug 19:08

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

Choose a tag to compare

@MidCoard MidCoard released this 05 Aug 11:25

Stable KVE2 sync record identity: DEK-keyed contentKey, ciphertext-free event ids, canonical sync encoding. See commit f291c9c.

keystead-core 0.4.4

Choose a tag to compare

@MidCoard MidCoard released this 03 Aug 09:42

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

Choose a tag to compare

@MidCoard MidCoard released this 30 Jul 08:00

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

Choose a tag to compare

@MidCoard MidCoard released this 30 Jul 07:09

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

Choose a tag to compare

@MidCoard MidCoard released this 27 Jul 16:04

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