blindsig-client-server-example/client/loop.js
client/loop.jsRaw
1// This version uses https://github.com/arnaucube/blindsecp256k1-js
2
3// const blindsecp256k1 = require('blindsecp256k1');
4// const axios = require('axios');
5
6let signerR, signerQ, m, mBlinded, userSecretData, blindedSig, sig, errCount, verified;
7
8const apiUrl = "http://127.0.0.1:3000";
9
10function printPoint(name, p) {
11 console.log(`${name}:\n x: ${p.affineX.toString()}\n y: ${p.affineY.toString()}`);
12}
13
14async function newRequest() {
15 try {
16 const res = await axios.get(apiUrl+'/request');
17 signerR = blindsecp256k1.Point.fromAffine(blindsecp256k1.ecparams,
18 blindsecp256k1.newBigFromString(res.data.signerR.x),
19 blindsecp256k1.newBigFromString(res.data.signerR.y));
20 signerQ = blindsecp256k1.Point.fromAffine(blindsecp256k1.ecparams,
21 blindsecp256k1.newBigFromString(res.data.signerQ.x),
22 blindsecp256k1.newBigFromString(res.data.signerQ.y));
23
24 let blindRes = blindsecp256k1.blind(m, signerR);
25 mBlinded = blindRes.mBlinded;
26 userSecretData = blindRes.userSecretData;
27 } catch (error) {
28 console.error(error);
29 }
30}
31
32async function askBlindSign() {
33 try {
34 let data = {
35 m: mBlinded.toString(),
36 r: {
37 x: signerR.affineX.toString(),
38 y: signerR.affineY.toString()
39 }
40 };
41 let res = await axios.post(apiUrl+'/blindsign', data);
42 blindedSig = blindsecp256k1.newBigFromString(res.data.sBlind);
43 sig = blindsecp256k1.unblind(
44 blindedSig,
45 userSecretData);
46 } catch (error) {
47 console.error(error);
48 }
49}
50
51async function verify() {
52 verified = blindsecp256k1.verify(m, sig, signerQ);
53 if (!verified) {
54 errCount++;
55 printPoint("signerR", signerR);
56 printPoint("signerQ", signerQ);
57 console.log("m:", m.toString());
58 console.log("mBlinded:", mBlinded.toString());
59 console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`);
60 printPoint("userSecretData.f", userSecretData.f);
61 console.log("blinded sig:", blindedSig.toString());
62 console.log("sig.s:", sig.s.toString());
63 printPoint("sig.f", sig.f);
64 console.log("verify", verified);
65 alert("ERROR")
66 }
67}
68
69async function iteration() {
70 await newRequest()
71 await askBlindSign()
72 await verify()
73}
74
75async function start() {
76 errCount = 0;
77 for (let i=0; i<10000; i++) {
78 m = blindsecp256k1.newKeyPair().sk;
79
80 await iteration()
81 if (i%100 ==0) {
82 console.log("number of iterations", i);
83 }
84 }
85 console.log("errCount", errCount);
86}
87