From 4a63330a15a4fc8effd653ab253bf5bd8eae4da7 Mon Sep 17 00:00:00 2001 From: arnaucube Date: Wed, 10 Feb 2021 22:24:29 +0100 Subject: [PATCH] Add loop browser client test --- client/loop-test/loop-test.js | 2 +- client/loop.html | 17 +++++++ client/loop.js | 87 +++++++++++++++++++++++++++++++++++ 3 files changed, 105 insertions(+), 1 deletion(-) create mode 100644 client/loop.html create mode 100644 client/loop.js diff --git a/client/loop-test/loop-test.js b/client/loop-test/loop-test.js index 1ba4d1c..8d171e2 100644 --- a/client/loop-test/loop-test.js +++ b/client/loop-test/loop-test.js @@ -54,7 +54,7 @@ async function verify() { errCount++; printPoint("signerR", signerR); printPoint("signerQ", signerQ); - console.log("m:", m); + console.log("m:", m.toString()); console.log("mBlinded:", mBlinded.toString()); console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`); printPoint("userSecretData.f", userSecretData.f); diff --git a/client/loop.html b/client/loop.html new file mode 100644 index 0000000..95f5aa3 --- /dev/null +++ b/client/loop.html @@ -0,0 +1,17 @@ + + + + blindsig-client-server-example + + +

loop-test browser version

+ + +

Open the console to see the logs (you may want to disable the 'Warnings' to avoid flooding the logs with innecessary messages)

+ + + + + + + diff --git a/client/loop.js b/client/loop.js new file mode 100644 index 0000000..3c662a5 --- /dev/null +++ b/client/loop.js @@ -0,0 +1,87 @@ +// This version uses https://github.com/arnaucube/blindsecp256k1-js + +// const blindsecp256k1 = require('blindsecp256k1'); +// const axios = require('axios'); + +let signerR, signerQ, m, mBlinded, userSecretData, blindedSig, sig, errCount, verified; + +const apiUrl = "http://127.0.0.1:3000"; + +function printPoint(name, p) { + console.log(`${name}:\n x: ${p.affineX.toString()}\n y: ${p.affineY.toString()}`); +} + +async function newRequest() { + try { + const res = await axios.get(apiUrl+'/request'); + signerR = blindsecp256k1.Point.fromAffine(blindsecp256k1.ecparams, + blindsecp256k1.newBigFromString(res.data.signerR.x), + blindsecp256k1.newBigFromString(res.data.signerR.y)); + signerQ = blindsecp256k1.Point.fromAffine(blindsecp256k1.ecparams, + blindsecp256k1.newBigFromString(res.data.signerQ.x), + blindsecp256k1.newBigFromString(res.data.signerQ.y)); + + let blindRes = blindsecp256k1.blind(m, signerR); + mBlinded = blindRes.mBlinded; + userSecretData = blindRes.userSecretData; + } catch (error) { + console.error(error); + } +} + +async function askBlindSign() { + try { + let data = { + m: mBlinded.toString(), + r: { + x: signerR.affineX.toString(), + y: signerR.affineY.toString() + } + }; + let res = await axios.post(apiUrl+'/blindsign', data); + blindedSig = blindsecp256k1.newBigFromString(res.data.sBlind); + sig = blindsecp256k1.unblind( + blindedSig, + userSecretData); + } catch (error) { + console.error(error); + } +} + +async function verify() { + verified = blindsecp256k1.verify(m, sig, signerQ); + if (!verified) { + errCount++; + printPoint("signerR", signerR); + printPoint("signerQ", signerQ); + console.log("m:", m.toString()); + console.log("mBlinded:", mBlinded.toString()); + console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`); + printPoint("userSecretData.f", userSecretData.f); + console.log("blinded sig:", blindedSig.toString()); + console.log("sig.s:", sig.s.toString()); + printPoint("sig.f", sig.f); + console.log("verify", verified); + alert("ERROR") + } +} + +async function iteration() { + await newRequest() + await askBlindSign() + await verify() +} + +async function start() { + errCount = 0; + for (let i=0; i<10000; i++) { + m = blindsecp256k1.newKeyPair().sk; + + await iteration() + if (i%100 ==0) { + console.log("number of iterations", i); + } + } + console.log("errCount", errCount); +} +