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 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 }
66}
67
68async function iteration() {
69 await newRequest()
70 await askBlindSign()
71 await verify()
72}
73
74async function main() {
75 errCount = 0;
76 for (let i=0; i<10000; i++) {
77 m = blindsecp256k1.newKeyPair().sk;
78
79 await iteration()
80 if (i%100 ==0) {
81 console.log("number of iterations", i);
82 }
83 }
84 console.log("errCount", errCount);
85}
86
87main()