@eristack/checksum
Version:
SHA-256 hex normalize and constant-time compare for exports and file refs
1 lines • 2.24 kB
Source Map (JSON)
{"version":3,"sources":["../src/index.ts","../src/core/checksum.ts","../src/core/errors.ts"],"sourcesContent":["export {\n ChecksumParseError,\n checksumEquals,\n normalizeChecksumHex,\n sha256Hex,\n} from \"./core/index.js\";\n","import { createHash, timingSafeEqual } from \"node:crypto\";\n\nimport { ChecksumParseError } from \"./errors.js\";\n\nconst HEX_RE = /^[0-9a-fA-F]+$/;\n\nexport function sha256Hex(input: string | Uint8Array): string {\n const hash = createHash(\"sha256\");\n if (typeof input === \"string\") {\n hash.update(input, \"utf8\");\n } else {\n hash.update(input);\n }\n return hash.digest(\"hex\");\n}\n\nexport function normalizeChecksumHex(value: string): string {\n const trimmed = value.trim().toLowerCase();\n if (!trimmed || !HEX_RE.test(trimmed) || trimmed.length % 2 !== 0) {\n throw new ChecksumParseError(\"Checksum must be even-length hex\");\n }\n return trimmed;\n}\n\nexport function checksumEquals(a: string, b: string): boolean {\n const left = Buffer.from(normalizeChecksumHex(a), \"hex\");\n const right = Buffer.from(normalizeChecksumHex(b), \"hex\");\n if (left.length !== right.length) {\n return false;\n }\n return timingSafeEqual(left, right);\n}\n","export class ChecksumParseError extends Error {\n readonly code = \"CHECKSUM_PARSE_ERROR\" as const;\n\n constructor(message: string) {\n super(message);\n this.name = \"ChecksumParseError\";\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,yBAA4C;;;ACArC,IAAM,qBAAN,cAAiC,MAAM;AAAA,EACnC,OAAO;AAAA,EAEhB,YAAY,SAAiB;AAC3B,UAAM,OAAO;AACb,SAAK,OAAO;AAAA,EACd;AACF;;;ADHA,IAAM,SAAS;AAER,SAAS,UAAU,OAAoC;AAC5D,QAAM,WAAO,+BAAW,QAAQ;AAChC,MAAI,OAAO,UAAU,UAAU;AAC7B,SAAK,OAAO,OAAO,MAAM;AAAA,EAC3B,OAAO;AACL,SAAK,OAAO,KAAK;AAAA,EACnB;AACA,SAAO,KAAK,OAAO,KAAK;AAC1B;AAEO,SAAS,qBAAqB,OAAuB;AAC1D,QAAM,UAAU,MAAM,KAAK,EAAE,YAAY;AACzC,MAAI,CAAC,WAAW,CAAC,OAAO,KAAK,OAAO,KAAK,QAAQ,SAAS,MAAM,GAAG;AACjE,UAAM,IAAI,mBAAmB,kCAAkC;AAAA,EACjE;AACA,SAAO;AACT;AAEO,SAAS,eAAe,GAAW,GAAoB;AAC5D,QAAM,OAAO,OAAO,KAAK,qBAAqB,CAAC,GAAG,KAAK;AACvD,QAAM,QAAQ,OAAO,KAAK,qBAAqB,CAAC,GAAG,KAAK;AACxD,MAAI,KAAK,WAAW,MAAM,QAAQ;AAChC,WAAO;AAAA,EACT;AACA,aAAO,oCAAgB,MAAM,KAAK;AACpC;","names":[]}