Skip to content

Hoist XTS mode check out of CipherContext update loop#15273

Merged
alex merged 1 commit into
mainfrom
claude/rust-perf-improvements-jssigo
Jul 17, 2026
Merged

Hoist XTS mode check out of CipherContext update loop#15273
alex merged 1 commit into
mainfrom
claude/rust-perf-improvements-jssigo

Conversation

@reaperhulk

Copy link
Copy Markdown
Member

CipherContext::update_into called back into Python with an
is_instance(XTS) check on every 2^29-byte chunk of every update call,
even though whether the mode is XTS is fixed at construction (where an
identical check already runs). Store the result as a bool on the
context and branch on that instead, removing a Python type lookup and
isinstance call from the streaming cipher hot path.

The py parameter to update_into existed only for that check, so it is
dropped from the internal method and its callers.

Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01XcTyprD7CsgzGHV9kEwksy

CipherContext::update_into called back into Python with an
is_instance(XTS) check on every 2^29-byte chunk of every update call,
even though whether the mode is XTS is fixed at construction (where an
identical check already runs). Store the result as a bool on the
context and branch on that instead, removing a Python type lookup and
isinstance call from the streaming cipher hot path.

The py parameter to update_into existed only for that check, so it is
dropped from the internal method and its callers.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XcTyprD7CsgzGHV9kEwksy
@reaperhulk

Copy link
Copy Markdown
Member Author

This summary isn’t super accurate. When doing large chunks it calls once per 2**29, which is irrelevant, but it also calls once per update no matter what, which is inelegant and pointless.

@alex
alex merged commit b1b616f into main Jul 17, 2026
69 checks passed
@alex
alex deleted the claude/rust-perf-improvements-jssigo branch July 17, 2026 10:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

3 participants