UNPKG

@ieigen/anonmisc

Version:

Eigen Anonymous Misc Library

52 lines (51 loc) 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const chai_1 = require("chai"); var pedersen = require('../lib/pedersen'); var EC = require('elliptic').ec; var ec = new EC('secp256k1'); // pre-generate a bunch of blinding factors var r = Array(10).fill(null).map((x, i) => i).map(i => pedersen.generateRandom()); // this is another point of the curve that will be used // as the generate points for the hidden values var H = pedersen.generateH(); describe('pedersen', () => { it('should commit to a sum of two values', () => { //transfer amount - we want to transfer 5 tokens var tC = pedersen.commitTo(H, r[1], 5); // Alice 10 - 5 = 5 var aC1 = pedersen.commitTo(H, r[2], 10); var aC2 = pedersen.sub(aC1, tC); // bob 7 + 5 (aC2) = 12 var bC1 = pedersen.commitTo(H, r[4], 7); var bC2 = pedersen.add(bC1, tC); // alice's balance to go down by 5 // aC1 - tC = aC2 var checkAC2 = pedersen.subCommitment(H, r[2], r[1], 10, 5); (0, chai_1.expect)(aC2.eq(checkAC2)).to.eq(true); // bob's balance to go up by 5 // bC1 + tC = bC2 var checkBC2 = pedersen.addCommitment(H, r[4], r[1], 7, 5); (0, chai_1.expect)(bC2.eq(checkBC2)).to.eq(true); // verify the commitment (0, chai_1.expect)(pedersen.verify(H, bC2, r[4].add(r[1]), 7 + 5)).to.eq(true); }); it('should fail if not using the correct blinding factors', () => { //transfer amount - we want to transfer 5 tokens var tC = pedersen.commitTo(H, r[1], 5); // Alice 10 - 5 = 5 var aC1 = pedersen.commitTo(H, r[2], 10); var aC2 = pedersen.sub(aC1, tC); // bob 7 + 5 (aC2) = 12 var bC1 = pedersen.commitTo(H, r[4], 7); var bC2 = pedersen.add(bC1, tC); // now to check // r[0] -> is not the correct blinding factor var checkAC2 = pedersen.subCommitment(H, r[0], r[1], 10, 5); (0, chai_1.expect)(aC2.eq(checkAC2)).to.eq(false); // now to check // r[0] -> is not the correct blinding factor var checkBC2 = pedersen.addCommitment(H, r[0], r[1], 7, 5); (0, chai_1.expect)(bC2.eq(checkBC2)).to.eq(false); }); });