Summary
Encrypted images sent in Q-Chat (PMs and private groups) decrypt and display correctly in Hub, but fail in both Qortal Go and the Chrome Extension.
Symptoms:
- Images show "Unable to decrypt" or never render.
- Inline display fails even though raw encrypted attachments exist.
- Preview/full-size display is missing or broken.
This issue tracks full parity for encrypted image support across Mobile and Extension.
⚠️ This is a functional interoperability bug, not just a UX polish item.
Users on Mobile and Extension must be able to see encrypted chat images the same way Hub users can.
Current Behavior
Hub (reference)
- Correctly:
- Uploads encrypted images using group/PM encryption keys.
- Fetches image bytes from Core via
/chat/attachment/...
- Core decrypts using the user's keys.
- Hub displays images inline + full-size modal.
- Group encryption model allows new members to decrypt older images.
Mobile (Go)
From analysis in go_implementation_plan.md:
- Attachment decrypt path likely not calling the correct Qortal API method.
- Fetch logic may be using QDN URL directly instead of Core's decrypt endpoint.
- RN image component cannot render because it receives undecrypted bytes or errors.
- No full-screen viewer implemented.
Chrome Extension
From chrome_extension_implementation_plan.md:
- Similar pattern: fetches encrypted bytes raw, without Core decrypt.
- Some logic attempts base64 decode directly in JS (which will fail).
- No inline
<img> renderer for decrypted blobs.
- “Unable to decrypt” errors common.
Target Behavior (Parity with Hub)
Across both Mobile and Extension:
- Encrypted images:
- Fetch through Qortal Core, not via raw QDN URL.
- Decrypt using the user's identity keys (Core handles this automatically).
- Render inline in chat using normal image components.
- Messages with images must:
- Show a thumbnail-size inline preview.
- Open full-screen viewer/modal on tap/click.
- Failure states:
- If decrypt fails, show a clean fallback (“Unable to decrypt image”), not a broken layout.
- UX constraints:
- Chat scrolling must remain smooth even with images.
- Cached images should reuse blob/URI after first fetch.
Acceptance Criteria
Fetch & Decrypt
Inline Display
Full-Size Preview
Error Handling
Compatibility Tests
How to Test
- Use two identities: one on Hub, one on the test app.
- Send encrypted image (private group or PM).
- Confirm:
- Inline shows image,
- Full-size viewer works,
- Fallback appears on invalid content,
- New group member can decrypt past images.
- Test on:
- Android device,
- Chrome + Chromium-based browser.
Links
-
Trifecta parity matrix: (from uploaded report)
Encrypted images = Broken/Divergent on Go & Extension
-
Implementation plans:
/mnt/data/go_implementation_plan.md
/mnt/data/chrome_extension_implementation_plan.md
-
Related features already completed: avatars, node status, context menus.
Summary
Encrypted images sent in Q-Chat (PMs and private groups) decrypt and display correctly in Hub, but fail in both Qortal Go and the Chrome Extension.
Symptoms:
This issue tracks full parity for encrypted image support across Mobile and Extension.
Current Behavior
Hub (reference)
/chat/attachment/...Mobile (Go)
From analysis in
go_implementation_plan.md:Chrome Extension
From
chrome_extension_implementation_plan.md:<img>renderer for decrypted blobs.Target Behavior (Parity with Hub)
Across both Mobile and Extension:
Acceptance Criteria
Fetch & Decrypt
qortalRequest({ action:"GET_IMAGE", ... })or equivalent decrypt-enabled endpoint is used.<Image>or<img>display.Inline Display
Full-Size Preview
Error Handling
Compatibility Tests
How to Test
Links
Trifecta parity matrix: (from uploaded report)
Encrypted images = Broken/Divergent on Go & Extension
Implementation plans:
/mnt/data/go_implementation_plan.md/mnt/data/chrome_extension_implementation_plan.mdRelated features already completed: avatars, node status, context menus.