mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-10 00:16:59 +00:00
Add first-class support for Marmot (MLS-over-Nostr) group avatars. Protocol (quartz): - Implement the canonical `marmot-group-image-v1` scheme: raw ChaCha20-Poly1305 key + 12-byte nonce, AAD = "marmot-group-image-v1" || 0x00 || media_type, image_hash = SHA-256(ciphertext). MarmotGroupImageEncryption emits canonical and decrypts both canonical and the deprecated MIP-01 HKDF-seed scheme. - Add the `image_media_type` field to MarmotGroupData as a trailing TLS field (older readers ignore it; disappearing_message_secs stays positionally unambiguous). Add withImage/withoutImage helpers. - MarmotGroupImageCipher (NostrCipher) drives both encrypted upload and transparent decrypt-on-download. Model/manager (commons): - MarmotGroupChatroom exposes an `image` StateFlow; MarmotManager.syncMetadataTo populates it from the group metadata. Android: - Show the decrypted group icon in the Messages feed; when a group has no image, fall back to the NIP-11 icon of one of its relays (fetched on cache miss). - Group metadata editing gains an icon picker (add/change/remove) in both the create and edit screens; create also gains a description field. Icons are encrypted and uploaded to Blossom via UploadOrchestrator, signed with a fresh per-image keypair stored as image_upload_key. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JL3GXW1fmHa3xWfQjLLqfp