From 7f6ceb1968a64db36dd5f3a39d777d23af30029a Mon Sep 17 00:00:00 2001 From: jude Date: Tue, 18 Apr 2023 20:29:39 +0100 Subject: [PATCH] ... --- static/js/modules/interface/packet.js | 3 ++- static/js/modules/interface/player.js | 12 ++++++++++-- static/js/modules/interface/proofs.js | 2 +- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/static/js/modules/interface/packet.js b/static/js/modules/interface/packet.js index fbc9cee..886f7d0 100644 --- a/static/js/modules/interface/packet.js +++ b/static/js/modules/interface/packet.js @@ -85,10 +85,11 @@ export class Packet { }); } - static createReinforce(regionCipherTexts) { + static createReinforce(regionCipherTexts, verification) { return this._sign({ ...this._createBase("ACT"), regions: regionCipherTexts, + verification: verification, }); } diff --git a/static/js/modules/interface/player.js b/static/js/modules/interface/player.js index 65d2e23..ca912e5 100644 --- a/static/js/modules/interface/player.js +++ b/static/js/modules/interface/player.js @@ -4,6 +4,7 @@ import { RsaPubKey } from "../crypto/rsa.js"; import { PaillierPubKey, ReadOnlyCiphertext } from "../crypto/paillier.js"; import { Region } from "./map.js"; import { showDefenseDom } from "./dom.js"; +import { proveRegions, verifyRegions } from "./proofs.js"; // Timeout to consider a player disconnected const TIMEOUT = 30_000; @@ -107,6 +108,11 @@ export class Player { * @param data Data received via socket. */ reinforce(data) { + if (!verifyRegions(data.verification, this.paillierPubKey)) { + console.log("Failed to verify Protocol 4.5!"); + return; + } + for (let regionName of Object.keys(data.regions)) { let region = Region.getRegion(regionName); @@ -153,11 +159,13 @@ export class Player { cipherText = this.paillierPubKey.encrypt(1n); } - regions[ourRegion.name] = cipherText.toString(); + regions[ourRegion.name] = cipherText; ourRegion.reinforce(cipherText); } - socket.emit("message", Packet.createReinforce(regions)); + let verification = proveRegions(regions); + + socket.emit("message", Packet.createReinforce(regions, verification)); this.totalStrength += 1; diff --git a/static/js/modules/interface/proofs.js b/static/js/modules/interface/proofs.js index 0667bfb..7346c4d 100644 --- a/static/js/modules/interface/proofs.js +++ b/static/js/modules/interface/proofs.js @@ -43,7 +43,7 @@ function getCoins(text) { window.cryptoShuffle = cryptoShuffle; -function proveRegions(regions) { +export function proveRegions(regions) { // Construct prover coins let proofs = []; let privateInputs = [];