Skip to content

feat(notes): share passwords as encrypted .menewsecret files - #29

Merged
Quost merged 1 commit into
mainfrom
feat/share-secrets
Nov 13, 2026
Merged

Quost merged 1 commit into
mainfrom
feat/share-secrets

Conversation

@Quost

@Quost Quost commented Nov 13, 2026

Copy link
Copy Markdown
Owner

What

A protected note can now be shared as an encrypted .menewsecret file instead of pasting the password into Teams or Slack.

  • To a contact. Each Menew keeps an X25519 key in the Keychain. People exchange their public "Menew code" once, which is safe to send over chat. The file is sealed to the recipient with ephemeral and static key agreement, HKDF and AES-GCM, so only their Mac can open it and the sender shows as verified.
  • With a password. Menew generates a 16-character passphrase (≈79 bits) and derives the key with PBKDF2-SHA256 at 600,000 rounds. The UI warns to send the passphrase through another channel.
  • Receiving. Drop the file on the notch, double-click it (new exported UTI com.matheusquost.menew.secret plus a document type in Info.plist), or use Notes › Share passwords › Import file. The secret is written straight to the Keychain as a protected note and never touches notes.json.
  • Header protection. The whole header is authenticated data, so changing the sender, recipient, salt or rounds makes the file fail to open.
  • Scope. No network calls and no new dependencies (CryptoKit and CommonCrypto only).

UI

  • A share button on protected notes, also in the ⋯ menu and the right-click menu. You pick which fields go, then choose a contact or a password.
  • A new Share passwords screen, opened from the Notes list header: your code with a short fingerprint, your contacts, and Import.
  • An import screen that shows the sender (verified or unknown, with an option to save them as a contact) and the field names with their values hidden.

Checklist

  • Translations: 53 new strings in en, de, es and zh (check-l10n.py passes)
  • Snapshots: new share-* screens, plus regenerated popover-notes and note-passwords in all 5 languages
  • README: Notes, Privacy and Roadmap
  • Site: f6_d in all 5 languages, rebuilt with build-site.py
  • CHANGELOG: Unreleased › New
  • swift test: 119 tests pass, 6 of them new in SecretShareTests

Not verified

  • Not clicked through in an installed build. Double-click only registers once the app is in /Applications.

🤖 Generated with Claude Code

A protected note can now be shared as an encrypted file instead of pasting
the password in a chat. Two modes:

- To a contact: each Menew has an X25519 key in the Keychain; the file is
  sealed to the recipient's public code (ephemeral + static key agreement,
  HKDF, AES-GCM), so only their Mac opens it and the sender is verified.
- With a password: a generated 16-character passphrase, PBKDF2-SHA256
  with 600,000 rounds, AES-GCM.

Receiving works by dropping the file on the notch, double-clicking it
(new document type in Info.plist) or Notes > Share passwords > Import.
Imported secrets go straight to the Keychain as a protected note.

Includes translations, snapshots, README, site and CHANGELOG updates.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Quost
Quost merged commit cb2913e into main Nov 13, 2026
11 checks passed
@Quost
Quost deleted the feat/share-secrets branch November 13, 2026 20:11
@Quost Quost self-assigned this Nov 13, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant