blindsig-client-server-example/client/loop-test/loop-test.js
client/loop-test/loop-test.jsRaw
1// This version uses https://github.com/arnaucube/blindsecp256k1-js
2
3const blindsecp256k1 = require('blindsecp256k1');
4const 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 console.log("==verification failed on client==", res.data.verification);
56
57 printPoint("signerR", signerR);
58 printPoint("signerQ", signerQ);
59 console.log("m:", m.toString());
60 console.log("mBlinded:", mBlinded.toString());
61 console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`);
62 printPoint("userSecretData.f", userSecretData.f);
63 console.log("blinded sig:", blindedSig.toString());
64 console.log("sig.s:", sig.s.toString());
65 printPoint("sig.f", sig.f);
66 console.log("verify", verified);
67 }
68
69 // send to verify by the go server
70 let data = {
71 m: m.toString(),
72 sig: {
73 S: sig.s.toString(),
74 F: {
75 x: sig.f.affineX.toString(),
76 y: sig.f.affineY.toString()
77 }
78 },
79 q: {
80 x: signerQ.affineX.toString(),
81 y: signerQ.affineY.toString()
82 }
83 };
84 try {
85 let res = await axios.post(apiUrl+'/verify', data);
86 if (!res.data.verification) {
87 errCount++;
88 console.log("==verification failed on server==", res.data.verification);
89
90 printPoint("signerR", signerR);
91 printPoint("signerQ", signerQ);
92 console.log("m:", m.toString());
93 console.log("mBlinded:", mBlinded.toString());
94 console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`);
95 printPoint("userSecretData.f", userSecretData.f);
96 console.log("blinded sig:", blindedSig.toString());
97 console.log("sig.s:", sig.s.toString());
98 printPoint("sig.f", sig.f);
99 console.log("verify", verified);
100 }
101 } catch (error) {
102 console.error(error.response.data);
103 errCount++;
104 console.log("==verification failed on server==", error.response.data.verification);
105
106 printPoint("signerR", signerR);
107 printPoint("signerQ", signerQ);
108 console.log("m:", m.toString());
109 console.log("mBlinded:", mBlinded.toString());
110 console.log(`userSecretData:\n a: ${userSecretData.a.toString()}\n b: ${userSecretData.b.toString()}`);
111 printPoint("userSecretData.f", userSecretData.f);
112 console.log("blinded sig:", blindedSig.toString());
113 console.log("sig.s:", sig.s.toString());
114 printPoint("sig.f", sig.f);
115 console.log("js verify", verified);
116 }
117}
118
119async function iteration() {
120 await newRequest()
121 await askBlindSign()
122 await verify()
123}
124
125async function main() {
126 errCount = 0;
127 for (let i=0; i<10000; i++) {
128 m = blindsecp256k1.newKeyPair().sk;
129
130 await iteration()
131 if (i%100 ==0) {
132 console.log("number of iterations", i);
133 }
134 }
135 console.log("errCount", errCount);
136}
137
138main()