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