This commit is contained in:
jude 2023-04-13 16:33:32 +01:00
parent 0e30ee5334
commit d3e309c1e3
2 changed files with 42 additions and 9 deletions

View File

@ -5,7 +5,16 @@ const PAILLIER = 0;
const JURIK = 1; const JURIK = 1;
class Ciphertext { class Ciphertext {
constructor(key, plainText, r) { constructor(key, plainText, r, set) {
if (set !== undefined) {
this.pubKey = key;
this.plainText = plainText;
this.readOnly = false;
return;
}
if (r === undefined) { if (r === undefined) {
// Use the optimised form using Jacobi classes // Use the optimised form using Jacobi classes
r = cryptoRandom(); r = cryptoRandom();
@ -107,6 +116,15 @@ class Ciphertext {
asReadOnlyCiphertext() { asReadOnlyCiphertext() {
return new ReadOnlyCiphertext(this.pubKey, this.cipherText); return new ReadOnlyCiphertext(this.pubKey, this.cipherText);
} }
clone() {
let c = new Ciphertext(this.pubKey, this.plainText, 0, true);
c.cipherText = this.cipherText;
c.r = this.r;
c.mode = this.mode;
return c;
}
} }
class ValueProofSessionProver { class ValueProofSessionProver {

View File

@ -4,6 +4,7 @@
* Only works on lists up to 255 elements. * Only works on lists up to 255 elements.
*/ */
function cryptoShuffle(l) { function cryptoShuffle(l) {
let out = [];
for (let i = l.length - 1; i > 0; i--) { for (let i = l.length - 1; i > 0; i--) {
let value = new Uint8Array([0]); let value = new Uint8Array([0]);
crypto.getRandomValues(value); crypto.getRandomValues(value);
@ -11,12 +12,13 @@ function cryptoShuffle(l) {
crypto.getRandomValues(value); crypto.getRandomValues(value);
} }
let temp = l[i]; let v = l.splice(value[0], 1);
l[i] = l[value[0]]; out.push(v[0]);
l[value[0]] = temp;
} }
return l; out.push(l[0]);
return out;
} }
window.cryptoShuffle = cryptoShuffle; window.cryptoShuffle = cryptoShuffle;
@ -25,14 +27,27 @@ function proveRegions(regions) {
// Construct prover coins // Construct prover coins
let coins = []; let coins = [];
let regionNames = Object.keys(regions.keys()); let regionNames = Object.keys(regions);
for (let x = 0; x < 20; x++) { for (let x = 0; x < 40; x++) {
let psi = cryptoShuffle(regionNames).join(""); let psi = cryptoShuffle(structuredClone(regionNames)).join("");
let newRegions = structuredClone(regions);
// rearrange keys
for (let index = 0; index < regionNames.length; index++) {
let c = regions[psi[index]].clone();
// re-blind
c.update(c.pubKey.encrypt(0n));
newRegions[regionNames[index]] = c.toString();
}
coins.push(newRegions);
} }
// Construct verifier coins // Construct verifier coins
let hasher = new jsSHA("SHA3-256", "TEXT"); let hasher = new jsSHA("SHA3-256", "TEXT");
hasher.update(JSON.stringify(regions)); hasher.update(JSON.stringify(coins));
console.log(hasher.getHash("UINT8ARRAY"));
// Construct prover proofs // Construct prover proofs
} }
window.proveRegions = proveRegions;