/** * CSPRNG Fisher-Yates shuffle. * * Only works on lists up to 255 elements. */ function cryptoShuffle(l) { for (let i = l.length - 1; i > 0; i--) { let value = new Uint8Array([0]); crypto.getRandomValues(value); while (value[0] > i) { crypto.getRandomValues(value); } let temp = l[i]; l[i] = l[value[0]]; l[value[0]] = temp; } return l; } window.cryptoShuffle = cryptoShuffle; function proveRegions(regions) { // Construct prover coins let coins = []; let regionNames = Object.keys(regions.keys()); for (let x = 0; x < 20; x++) { let psi = cryptoShuffle(regionNames).join(""); } // Construct verifier coins let hasher = new jsSHA("SHA3-256", "TEXT"); hasher.update(JSON.stringify(regions)); // Construct prover proofs }