@worldcoin/idkit-core
Version:
Core IDKit SDK for World ID - Pure TypeScript, no dependencies
29 lines (25 loc) • 806 B
JavaScript
;
var sha3 = require('@noble/hashes/sha3');
var utils = require('@noble/hashes/utils');
// src/lib/hashing.ts
function hashToField(input) {
const hash = BigInt("0x" + utils.bytesToHex(sha3.keccak_256(input))) >> 8n;
return utils.hexToBytes(hash.toString(16).padStart(64, "0"));
}
function hashSignal(signal) {
let input;
if (signal instanceof Uint8Array) {
input = signal;
} else if (signal.startsWith("0x") && isValidHex(signal.slice(2))) {
input = utils.hexToBytes(signal.slice(2));
} else {
input = new TextEncoder().encode(signal);
}
return "0x" + utils.bytesToHex(hashToField(input));
}
function isValidHex(s) {
if (s.length === 0) return false;
if (s.length % 2 !== 0) return false;
return /^[0-9a-fA-F]+$/.test(s);
}
exports.hashSignal = hashSignal;