Problem
src/middleware.ts:28-33 contains a safeEqual function with a timing leak:
functionsafeEqual(a: string,b: string): boolean{if(a.length!==b.length)returnfalse;// ← early return leaks length differenceletresult=0;for(leti=0;i<a.length;i+=1){result|=a.charCodeAt(i)^b.charCodeAt(i);}returnresult===0;}Issues:
- Timing leak — early return on length mismatch leaks string length difference
- Duplication — identical function (with timing-safe Buffer comparison) exists in
src/lib/dispatch-env.ts using Node's crypto.timingSafeEqual - Used in
isBearerAuthorized and isBasicAuthorized
Recommended Fix
Import safeEqual from @/lib/dispatch-env in middleware, or deduplicate to a shared src/lib/crypto.ts.
Acceptance Criteria
Parent:#235 (Weekly tech debt audit: 2026-05-27)
Labels: audit
Problem
src/middleware.ts:28-33contains asafeEqualfunction with a timing leak:Issues:
src/lib/dispatch-env.tsusing Node'scrypto.timingSafeEqualisBearerAuthorizedandisBasicAuthorizedRecommended Fix
Import
safeEqualfrom@/lib/dispatch-envin middleware, or deduplicate to a sharedsrc/lib/crypto.ts.Acceptance Criteria
isBearerAuthorizedandisBasicAuthorizeduse the shared functionParent:#235 (Weekly tech debt audit: 2026-05-27)
Labels:
audit