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 // send to verify by the go server
68 let data = {
69 m: mBlinded.toString(),
70 sig: {
71 s: sig.s.toString(),
72 f: {
73 x: sig.f.affineX.toString(),
74 y: sig.f.affineY.toString()
75 }
76 }
77 };
78 let res = await axios.post(apiUrl+'/blindsign', data);
79 console.log("res", res.data);
80 console.log("ver by server", res.data.verification);
81}
82
83async function iteration() {
84 await newRequest()
85 await askBlindSign()
86 await verify()
87}
88
89async function start() {
90 errCount = 0;
91 for (let i=0; i<10000; i++) {
92 m = blindsecp256k1.newKeyPair().sk;
93
94 await iteration()
95 if (i%100 ==0) {
96 console.log("number of iterations", i);
97 }
98 }
99 console.log("errCount", errCount);
100}
101