Repository navigation
e2ee: encrypt group messages with the group key's spec version - #275
Merged
Merged
Conversation
LINE stores a Letter Sealing spec version on each chat's group key. When it is 1, LINE rejects V2 messages with TalkException 82 "specVersion does not match". Encrypt V1 for those chats, as the LINE Chrome extension does, and set e2eeVersion from the chunks we actually send.
|
No issues found.
All CI checks passed on
Select any unchecked box below to run or rerun that agent. Full resultsIndent Review Agent
|
highesttt
approved these changes
Oct 25, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
In some LINE groups and multi-person chats, every text sent from the bridge fails:
Code 82 is
E2EE_RETRY_ENCRYPT. LINE keeps a Letter Sealing spec version on each chat's group key (specVersioningetLastE2EEGroupSharedKey). The LINE Chrome extension (3.7.2) reads it inunwrapGroupKey, encrypts with V1 when it is 1 and sendse2eeVersionset to that value. We already parseSpecVersionbut never used it: group messages were always V2 withe2eeVersion: "2".This stores the latest group key's spec version, encrypts V1 when it is 1, and sets
e2eeVersionfrom the chunks we actually send. That also fixes the existing V2 → V1 fallback, which sent V1 chunks labelled as version 2.Fetched group shared keynow logsspec_version.Over the last 7 weeks, 14 chats for 13 users hit this, and no text was ever sent successfully in any of them. Reactions and plain-flow images in the same chats went through.
Before / after
Not run. It needs a chat whose group key is spec version 1, and I don't have one on a test account. Once deployed,
spec_versionin the logs and the next send in an affected chat will confirm it.go buildandgo vetpass.Tag
@indentto continue the conversation here.