....
This commit is contained in:
parent
0e30ee5334
commit
d3e309c1e3
@ -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 {
|
||||||
|
@ -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;
|
||||||
|
Loading…
Reference in New Issue
Block a user