TypeScript implementation of QuickXorHash, the 160-bit non-cryptographic hash Microsoft uses on OneDrive for Business and SharePoint.
A quick, simple non-cryptographic hash algorithm that works by XORing the bytes in a circular-shifting fashion. — Microsoft OneDrive Dev Center
npm add @cloudraker/quickxorhashRuns anywhere that supports BigUint64Array and TextEncoder (Node ≥ 18,
modern browsers, Bun, Deno). No dependencies.
import { QuickXorHash } from "@cloudraker/quickxorhash";
QuickXorHash.hashBase64("hello world"); // base64 string
QuickXorHash.hashHex("hello world"); // hex string
QuickXorHash.hash(buf); // Uint8Array (20 bytes)
QuickXorHash.hash(buf, "base64"); // base64 string
QuickXorHash.hash(buf, "hex"); // hex stringimport { createReadStream } from "node:fs";
import { QuickXorHash } from "@cloudraker/quickxorhash";
const qx = new QuickXorHash();
for await (const chunk of createReadStream("big-file.bin")) {
qx.update(chunk);
}
console.log(qx.digest("base64"));update() accepts Uint8Array, ArrayBuffer (or any ArrayBufferLike), or
string (UTF-8) and returns this for chaining. digest() is idempotent and leaves the internal state
untouched — call reset() to reuse the instance.
QuickXorHash is also available as the default export:
import QuickXorHash from "@cloudraker/quickxorhash";For convenience, The package ships a quickxorhash script that hashes one or more files and
prints the base64 digest, in the style of shasum:
quickxorhash file.bin
# aZ4QPiBp1z…=
quickxorhash a.bin b.bin
# aZ4QPiBp1z…= a.bin
# 0KQwHs3Bk2…= b.binExits non-zero if any file can't be read.
Accepted input types (HashInput): Uint8Array | ArrayBufferLike | string.
| Member | Returns |
|---|---|
new QuickXorHash() |
instance |
QuickXorHash.hashBase64(data) |
string |
QuickXorHash.hashHex(data) |
string |
QuickXorHash.hash(data) |
Uint8Array (20 bytes) |
QuickXorHash.hash(data, 'base64') |
string |
QuickXorHash.hash(data, 'hex') |
string |
hash.update(chunk) |
this |
hash.digest() |
Uint8Array (20 bytes) |
hash.digest('base64' | 'hex') |
string |
hash.reset() |
this |
pnpm test- QuickXorHash algorithm — Microsoft's specification with reference C# code