From 07b1080b3d2b65b00639d28da35afb849a23ac28 Mon Sep 17 00:00:00 2001 From: jude Date: Fri, 24 Mar 2023 12:41:54 +0000 Subject: [PATCH] Fix some stuff and sort of implement proving --- static/js/modules/crypto/paillier.js | 2 +- static/js/modules/interface/main.js | 11 ++++ static/js/modules/interface/map.js | 77 +++++++++++++++++++++++++- static/js/modules/interface/packet.js | 34 +++++++++++- static/js/modules/interface/player.js | 15 +++-- whitepaper/Dissertation.pdf | Bin 307080 -> 307354 bytes whitepaper/Dissertation.tex | 19 +++---- 7 files changed, 137 insertions(+), 21 deletions(-) diff --git a/static/js/modules/crypto/paillier.js b/static/js/modules/crypto/paillier.js index dca1d08..5b6c4fa 100644 --- a/static/js/modules/crypto/paillier.js +++ b/static/js/modules/crypto/paillier.js @@ -86,7 +86,7 @@ export class ReadOnlyCyphertext { this.cyphertext = (this.cyphertext * c.cyphertext) % this.pubKey.n ** 2n; } - prove(plainText, a) { + prove(tag, plainText, a) { return new ProofSessionVerifier(this, plainText, a); } } diff --git a/static/js/modules/interface/main.js b/static/js/modules/interface/main.js index e6c3891..9149355 100644 --- a/static/js/modules/interface/main.js +++ b/static/js/modules/interface/main.js @@ -157,6 +157,17 @@ document.addEventListener("ACT", async (ev) => { } }); +// todo has to filter by player +document.addEventListener("PROOF", async (ev) => { + const data = ev.detail; + if (data.stage === "CONJECTURE") { + // find the relevant entity + let region = Region.getRegion(data.region); + + region.prove(data.plainText, data.noise()); + } +}); + document.addEventListener("endTurn", () => { if (game.isPregame() && game.allReinforcementsPlaced()) { game.incrementState(); diff --git a/static/js/modules/interface/map.js b/static/js/modules/interface/map.js index 87d7ac7..606be8b 100644 --- a/static/js/modules/interface/map.js +++ b/static/js/modules/interface/map.js @@ -1,3 +1,5 @@ +import { Packet } from "./packet.js"; + const REGIONS = {}; class Continent { @@ -22,6 +24,71 @@ class Strength { this.assumedStrength = null; } + + prove(region) { + if (this.cipherText.readOnly) { + return; + } + + const controller = new AbortController(); + let proofSessionProver = this.cipherText.prove(); + + document.addEventListener( + "PROOF", + (ev) => { + const data = ev.detail; + + if (data.region === region && data.stage === "CHALLENGE") { + let z = proofSessionProver.prove(data.challenge); + + socket.emit("message", Packet.createProof(region, z)); + controller.abort(); + } + }, + { signal: controller.signal } + ); + + socket.emit( + "message", + Packet.createProofConjecture( + region, + this.cipherText.plainText, + proofSessionProver.a + ) + ); + } + + verify(region, plainText, a) { + if (!this.cipherText.readOnly) { + return; + } + + const controller = new AbortController(); + let proofSessionVerifier = this.cipherText.prove(plainText, a); + + document.addEventListener( + "PROOF", + (ev) => { + const data = ev.detail; + + if (data.region === region && data.stage === "PROOF") { + if (proofSessionVerifier.verify(data.z)) { + console.log("verified"); + this.assumedStrength = plainText; + controller.abort(); + } else { + console.warn("Failed to verify ciphertext!"); + } + } + }, + { signal: controller.signal } + ); + + socket.emit( + "message", + Packet.createProofChallenge(region, proofSessionVerifier.challenge) + ); + } } export class Region { @@ -72,13 +139,19 @@ export class Region { if (this.owner === null) { return ""; } else if (!this.strength.cipherText.readOnly) { - return this.strength.cipherText.plainText; + return this.strength.cipherText.plainText.toString(); } else if (this.strength.assumedStrength !== null) { - return `${this.strength.assumedStrength}`; + return this.strength.assumedStrength.toString(); } else { return "?"; } } + + prove() {} + + verify(plainText, a) { + this.strength.verify(this.name, plainText, a); + } } const EAST = new Continent("East"); diff --git a/static/js/modules/interface/packet.js b/static/js/modules/interface/packet.js index 53396aa..312769f 100644 --- a/static/js/modules/interface/packet.js +++ b/static/js/modules/interface/packet.js @@ -1,4 +1,4 @@ -import { ID, game } from "./main.js"; +import { ID } from "./main.js"; export class Packet { static _createBase(name) { @@ -85,10 +85,10 @@ export class Packet { }); } - static createReinforce(regionCyphertexts) { + static createReinforce(regionCipherTexts) { return this._sign({ ...this._createBase("ACT"), - regions: regionCyphertexts, + regions: regionCipherTexts, }); } @@ -116,4 +116,32 @@ export class Packet { action: "END", }); } + + static createProofConjecture(region, plainText, a) { + return this._sign({ + ...this._createBase("PROOF"), + stage: "CONJECTURE", + plainText: plainText, + a: a, + region: region, + }); + } + + static createProofChallenge(region, challenge) { + return this._sign({ + ...this._createBase("PROOF"), + stage: "CHALLENGE", + challenge: challenge, + region: region, + }); + } + + static createProof(region, z) { + return this._sign({ + ...this._createBase("PROOF"), + stage: "PROOF", + z: z, + region: region, + }); + } } diff --git a/static/js/modules/interface/player.js b/static/js/modules/interface/player.js index 0cabdcb..2edba23 100644 --- a/static/js/modules/interface/player.js +++ b/static/js/modules/interface/player.js @@ -15,7 +15,7 @@ const PHASE_FORTIFY = 3; let totalDice = 0; export class Player { - constructor(id, local, rsa_key, paillier_key) { + constructor(id, local, rsaKey, paillierKey) { // Game state this.totalStrength = 0; this.ready = false; @@ -23,8 +23,8 @@ export class Player { // Protocol state this.timeout = null; this.id = id; - this.rsaPubKey = RsaPubKey.fromJSON(rsa_key); - this.paillierPubKey = PaillierPubKey.fromJSON(paillier_key); + this.rsaPubKey = RsaPubKey.fromJSON(rsaKey); + this.paillierPubKey = PaillierPubKey.fromJSON(paillierKey); this.lastPacket = 0; // Data which is reset every turn @@ -88,7 +88,7 @@ export class Player { if (region.owner === null) { region.claim( this, - new ReadOnlyCyphertext(this.paillierPubKey, data.cipherText) + new ReadOnlyCyphertext(this.paillierPubKey, BigInt(data.cipherText)) ); this.totalStrength += 1; @@ -111,7 +111,12 @@ export class Player { let region = Region.getRegion(regionName); if (region.owner === this) { - region.reinforce(BigInt(data.regions[regionName])); + region.reinforce( + new ReadOnlyCyphertext( + this.paillierPubKey, + BigInt(data.regions[regionName]) + ) + ); } } diff --git a/whitepaper/Dissertation.pdf b/whitepaper/Dissertation.pdf index 91b5f8ee9a14d01440be903f85c733af9390989e..c82c6d8a80070aa82f0329e406b02316c50e627b 100644 GIT binary patch delta 19819 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 W(gv4buLK?oHZe9b3MC~)PeuyrBn-&_ delta 19512 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