Skip to content

Releases: EmptyCode0x86/OffCode-Tor-Chat-E2EE

OffCode Tor Chat 0.1

Choose a tag to compare

@EmptyCode0x86 EmptyCode0x86 released this 12 Aug 17:44
45ebcfa

Info: https://github.com/EmptyCode0x86/OffCode-Tor-Chat-E2EE

https://www.dev-offcode.com/TorChatPage.html

VER: 0.1

  • 12/08/2026

Changes

  • FileSeal: Client wraps a random DEK with the room/hybrid CryptoKey (AES-GCM + AAD), encrypts the file in 256 KiB plaintext chunks, and uploads opaque ciphertext via PUT /api/attachments/{id}/chunks/{n} with HMAC X-Transfer-Token.
  • Manifest v2: Compact envelope (wrap + salts + downloadToken) still goes through E2EE SendEncrypted; legacy v1 Base64 envelopes remain readable.
  • Limits: Max 32 MiB per file; hub Begin/Complete/Cancel; SQLCipher attachment_transfers + disk under the data dir; TTL/orphan cleanup with messages.
  • Policy: attachments_disabled still blocks Begin; text-only PayloadB64 gate unchanged for disabled rooms.
  • Generate new code: Profile button + hub RebindCreatorSecret(old, new) rebinds all room_creators rows to the new SHA-256 hash and revokes the old code immediately. Restore alone does not invalidate server bindings.
  • Hash model docs: Creator/manage/invite tokens use SHA-256 of high-entropy secrets; join proof uses PBKDF2. Weak-restore warning in Profile UI.
  • Invite tokens: Stored as SHA-256 only; plaintext returned once on create/rotate; client caches last link; startup migrates legacy plaintext rows.
  • JoinRoom owner-proof: Server verifies manageToken / creatorSecret only when joins are closed or a hidden room lacks a valid invite; client sends recovery only when this browser likely owns the room (manage token, owned-room cache from create/My rooms/restore, or My rooms page). Owner bypass logs + caller SystemNotice.
  • GetMyRooms IncludePublic: Separate rate limit (5 / min) vs hidden-only My rooms (20 / min).
  • Recovery docs: Profile + README treat recovery as a capability token (Settings, listing, closed rejoin).
  • Attachments disabled: Text-only PayloadB64 gate tightened to ~16 KiB (blind size gate; not content-type).
  • Restore recovery code: After saving the code, client calls GetMyRooms(includePublic: true) and shows a toast listing Hidden (My rooms) vs Public (Public rooms) room ids (or “none” / empty-server message).
  • API: GetMyRoomsRequest.IncludePublic; ListRoomsForCreator(secret, hiddenOnly).
  • Owner bypass on JoinRoom: When joins_closed (and for hidden rooms, disabled invite), the creator can still join by sending manageToken and/or Profile creatorSecret. Other members stay blocked. Password joinProof still required for locked rooms.
  • Client: joinRoom / reconnect attach ownership proof from localStorage recovery + per-room manage token.
  • API: IRoomInviteService.IsOwner; optional fields on JoinRoomRequest.
  • Disable attachments: Creator Room Settings toggle (attachments_disabled in SQLCipher). Members get AttachmentsPolicy on join / toggle; Attach button gated in room-attachments.js. Server enforces a text-only PayloadB64 size cap when disabled (blind relay cannot inspect ciphertext kind).
  • Hub / registry: SetAttachmentsDisabled, InviteStatusResponse.AttachmentsDisabled, registry getters/setters, DB migration.
  • Room Settings UI: Wider two-column layout (Membership | Attachments; Slow mode compact row; Invite / Lock / Delete full width); denser hints and spacing.
  • Max members: Creator Room Settings toggle (max_members in SQLCipher, 0 = off, else 2–50). Enforced in RoomPresenceService.Join; public "Room is full.", hidden generic "Cannot join room.". Existing members stay if the cap is lowered.
  • Announcement / read-only: Creator Room Settings toggle (read_only). Only the creator may SendEncrypted / BeginAttachmentUpload; owner tokens are extra hub args (not persisted). Members get a disabled composer (room-readonly.js).

OffCode Tor chat RELEASE

Choose a tag to compare

@EmptyCode0x86 EmptyCode0x86 released this 23 Jul 01:06
6927a2c