arnaucube
arnaucube/blindsig-client-server-examplePublic Self-hosted repository
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