websnark/example/index.html
example/index.htmlRaw
1<html>
2<header>
3</header>
4<script src="websnark.js"></script>
5<script>
6
7var witness;
8var provingKey;
9
10function onLoad() {
11
12 fetch("proving_key.bin").then( (response) => {
13 return response.arrayBuffer();
14 }).then( (b) => {
15 provingKey = b;
16 });
17
18 fetch("witness.bin").then( (response) => {
19 return response.arrayBuffer();
20 }).then( (b) => {
21 witness = b;
22 });
23}
24
25function calcProof() {
26 const start = new Date().getTime();
27 document.getElementById("time").innerHTML = "processing....";
28 document.getElementById("proof").innerHTML = "";
29
30 window.genZKSnarkProof(witness, provingKey).then((p)=> {
31 const end = new Date().getTime();
32 const time = end - start;
33 document.getElementById("time").innerHTML = `Time to compute: ${time}ms`;
34 document.getElementById("proof").innerHTML = JSON.stringify(p, null, 1);
35 });
36}
37
38function test() {
39
40 const groth16 = window.groth16;
41 const nSignals = 1;
42
43 const pkey32 = new Uint32Array(provingKey);
44 const pPointsA = pkey32[5];
45
46 const points = provingKey.slice(pPointsA, pPointsA + nSignals*64);
47 const signals = witness.slice(0, nSignals*32);
48
49 const pr1 = groth16.alloc(96);
50 const pPoints = groth16.alloc(points.byteLength);
51 groth16.putBin(pPoints, points);
52
53 const pSignals = groth16.alloc(signals.byteLength);
54 groth16.putBin(pSignals, signals);
55
56 groth16.instance.exports.g1_zero(pr1);
57 groth16.instance.exports.g1_multiexp(pSignals, pPoints, nSignals, 1, pr1);
58 groth16.instance.exports.g1_affine(pr1, pr1);
59 groth16.instance.exports.g1_fromMontgomery(pr1, pr1);
60
61 const r1 = groth16.bin2g1(groth16.getBin(pr1, 96));
62
63 groth16.instance.exports.g1_zero(pr1);
64 groth16.instance.exports.g1_multiexp2(pSignals, pPoints, nSignals, 1, pr1);
65 groth16.instance.exports.g1_affine(pr1, pr1);
66 groth16.instance.exports.g1_fromMontgomery(pr1, pr1);
67
68 const r2 = groth16.bin2g1(groth16.getBin(pr1, 96));
69
70 console.log(r1);
71 console.log(r2);
72}
73
74</script>
75<body onLoad="onLoad()">
76<h1>iden3</h1>
77<h2>Zero knowledge proof generator</h2>
78<button onClick="calcProof()">Test</button>
79<div id="time"></div>
80<pre id="proof"></pre>
81
82</body>
83</html>