Skip to content

test(crypto): fix 1/256 flaky tampered-ciphertext test - #199

Merged
CallMeTechie merged 1 commit into
masterfrom
fix/crypto-test-flake
Jun 26, 2026
Merged

test(crypto): fix 1/256 flaky tampered-ciphertext test#199
CallMeTechie merged 1 commit into
masterfrom
fix/crypto-test-flake

Conversation

@CallMeTechie

Copy link
Copy Markdown
Owner

Flaky-Test-Fix: crypto.test.js „throws on tampered ciphertext"

Symptom: Build & Release #197 (Merge feature/pihole-followups) schlug an genau diesem Test fehl (Missing expected exception, 1 von 1913) → release-Job übersprungen.

Ursache (NICHT die PR-Logik): Der Test „tampert" den Ciphertext, indem er das erste Byte mit 'ff' überschreibt:

parts[2] = 'ff' + parts[2].slice(2);

Das Ciphertext-Format ist iv:tag:encrypted (Hex, AES-256-GCM, zufälliger IV pro Aufruf). Beginnt die zufällige Nutzlast bereits mit 0xff (≈1/256 pro Lauf), ist das „Tampern" ein No-Op → der GCM-Auth-Tag bleibt gültig → decrypt() wirft NICHT → assert.throws schlägt fehl. Reiner ~0,39 %-Flake.

Fix: Deterministisch tampern via XOR-Flip (matcht die bestehende Konvention in guac_token.test.js, buf[...] ^= 0xff):

const buf = Buffer.from(parts[2], 'hex');
buf[0] ^= 0xff;            // garantiert geändertes Byte
parts[2] = buf.toString('hex');

Evidenz:

  • Fix: crypto.test.js 200/200 grün (deterministisch).
  • Alt: empirisch 26/5120 (~0,51 %) No-Op-Tamper — bestätigt den 1/256-Mechanismus.

Nur die Test-Datei geändert, keine Produktionslogik. Geschwister-Tamper-Tests (guac_token.test.js, e2ee.test.js) nutzen bereits sichere Muster — kein weiterer Handlungsbedarf.

🤖 Generated with Claude Code

@CallMeTechie
CallMeTechie merged commit 24f8025 into master Jun 26, 2026
8 checks passed
@CallMeTechie
CallMeTechie deleted the fix/crypto-test-flake branch June 26, 2026 21:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant