// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. import{ assert }from"../testing/asserts.ts"; /** Compare to array buffers or data views in a way that timing based attacks * cannot gain information about the platform. */exportfunctiontimingSafeEqual( a:ArrayBufferView|ArrayBufferLike|DataView, b:ArrayBufferView|ArrayBufferLike|DataView,):boolean{if(a.byteLength!== b.byteLength){returnfalse;}if(!(a instanceofDataView)){ a =newDataView(ArrayBuffer.isView(a)? a.buffer: a);}if(!(b instanceofDataView)){ b =newDataView(ArrayBuffer.isView(b)? b.buffer: b);}assert(a instanceofDataView);assert(b instanceofDataView);const length = a.byteLength;let out =0;let i =-1;while(++i < length){ out |= a.getUint8(i)^ b.getUint8(i);}return out ===0;}