small fixes
This commit is contained in:
parent
f8ba7cbfa7
commit
85c08cfe7a
12
src/bn128.js
12
src/bn128.js
@ -282,6 +282,7 @@ class BN128 {
|
|||||||
this.F2.sub( this.F2.square(G) , E_squared ),
|
this.F2.sub( this.F2.square(G) , E_squared ),
|
||||||
this.F2.add( E_squared , E_squared )); // Y3 = G^2 - 3*E^2
|
this.F2.add( E_squared , E_squared )); // Y3 = G^2 - 3*E^2
|
||||||
current.Z = this.F2.mul( B, H ); // Z3 = B * H
|
current.Z = this.F2.mul( B, H ); // Z3 = B * H
|
||||||
|
|
||||||
const c = {
|
const c = {
|
||||||
ell_0 : this.F2.mul( I, this.twist), // ell_0 = xi * I
|
ell_0 : this.F2.mul( I, this.twist), // ell_0 = xi * I
|
||||||
ell_VW: this.F2.neg( H ), // ell_VW = - H (later: * yP)
|
ell_VW: this.F2.neg( H ), // ell_VW = - H (later: * yP)
|
||||||
@ -300,6 +301,9 @@ class BN128 {
|
|||||||
const y2 = base[1];
|
const y2 = base[1];
|
||||||
|
|
||||||
const D = this.F2.sub( X1, this.F2.mul(x2,Z1) ); // D = X1 - X2*Z1
|
const D = this.F2.sub( X1, this.F2.mul(x2,Z1) ); // D = X1 - X2*Z1
|
||||||
|
|
||||||
|
// console.log("Y: "+ A[0].affine(this.q).toString(16));
|
||||||
|
|
||||||
const E = this.F2.sub( Y1, this.F2.mul(y2,Z1) ); // E = Y1 - Y2*Z1
|
const E = this.F2.sub( Y1, this.F2.mul(y2,Z1) ); // E = Y1 - Y2*Z1
|
||||||
const F = this.F2.square(D); // F = D^2
|
const F = this.F2.square(D); // F = D^2
|
||||||
const G = this.F2.square(E); // G = E^2
|
const G = this.F2.square(E); // G = E^2
|
||||||
@ -333,15 +337,15 @@ class BN128 {
|
|||||||
_mul_by_024(a, ell_0, ell_VW, ell_VV) {
|
_mul_by_024(a, ell_0, ell_VW, ell_VV) {
|
||||||
|
|
||||||
// Old implementation
|
// Old implementation
|
||||||
|
/*
|
||||||
const b = [
|
const b = [
|
||||||
[ell_0, this.F2.zero, ell_VV],
|
[ell_0, this.F2.zero, ell_VV],
|
||||||
[this.F2.zero, ell_VW, this.F2.zero]
|
[this.F2.zero, ell_VW, this.F2.zero]
|
||||||
];
|
];
|
||||||
|
|
||||||
return this.F12.mul(a,b);
|
return this.F12.mul(a,b);
|
||||||
|
*/
|
||||||
|
|
||||||
/*
|
|
||||||
// This is a new implementation,
|
// This is a new implementation,
|
||||||
// But it does not look worthy
|
// But it does not look worthy
|
||||||
// at least in javascript.
|
// at least in javascript.
|
||||||
@ -387,11 +391,10 @@ class BN128 {
|
|||||||
this.F2.add(D0, D2));
|
this.F2.add(D0, D2));
|
||||||
T4 = this.F2.mul(z3, x4);
|
T4 = this.F2.mul(z3, x4);
|
||||||
S1 = this.F2.add(S1, T4);
|
S1 = this.F2.add(S1, T4);
|
||||||
T3 = this.F2.add(T3, T4);
|
|
||||||
|
|
||||||
// For z.b_.a_ = z3 (z3 needs z2)
|
// For z.b_.a_ = z3 (z3 needs z2)
|
||||||
t0 = this.F2.add(z2, z4);
|
t0 = this.F2.add(z2, z4);
|
||||||
z2 = T3;
|
z2 = this.F2.add(T3, T4);
|
||||||
t1 = this.F2.add(x2, x4);
|
t1 = this.F2.add(x2, x4);
|
||||||
T3 = this.F2.sub(
|
T3 = this.F2.sub(
|
||||||
this.F2.mul(t0,t1),
|
this.F2.mul(t0,t1),
|
||||||
@ -424,7 +427,6 @@ class BN128 {
|
|||||||
[z3, z4, z5]
|
[z3, z4, z5]
|
||||||
];
|
];
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,6 +184,7 @@ describe("F12 testing", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe("Pairing", () => {
|
describe("Pairing", () => {
|
||||||
|
/*
|
||||||
it("Should match pairing", () => {
|
it("Should match pairing", () => {
|
||||||
for (let i=0; i<1; i++) {
|
for (let i=0; i<1; i++) {
|
||||||
const bn128 = new BN128();
|
const bn128 = new BN128();
|
||||||
@ -209,5 +210,45 @@ describe("Pairing", () => {
|
|||||||
assert(bn128.F12.equals(res, bn128.F12.one));
|
assert(bn128.F12.equals(res, bn128.F12.one));
|
||||||
}
|
}
|
||||||
}).timeout(10000);
|
}).timeout(10000);
|
||||||
|
*/
|
||||||
|
it("Should generate another pairing pairing", () => {
|
||||||
|
for (let i=0; i<1; i++) {
|
||||||
|
const bn128 = new BN128();
|
||||||
|
|
||||||
|
const g1a = bn128.G1.mulScalar(bn128.G1.g, 10);
|
||||||
|
const g2a = bn128.G2.mulScalar(bn128.G2.g, 1);
|
||||||
|
|
||||||
|
const g1b = bn128.G1.mulScalar(bn128.G1.g, 1);
|
||||||
|
const g2b = bn128.G2.mulScalar(bn128.G2.g, 10);
|
||||||
|
|
||||||
|
const pre1a = bn128.precomputeG1(g1a);
|
||||||
|
const pre2a = bn128.precomputeG2(g2a);
|
||||||
|
const pre1b = bn128.precomputeG1(g1b);
|
||||||
|
const pre2b = bn128.precomputeG2(g2b);
|
||||||
|
|
||||||
|
const r1 = bn128.millerLoop(pre1a, pre2a);
|
||||||
|
const r2 = bn128.finalExponentiation(r1);
|
||||||
|
|
||||||
|
const r3 = bn128.millerLoop(pre1b, pre2b);
|
||||||
|
|
||||||
|
const r4 = bn128.finalExponentiation(r3);
|
||||||
|
|
||||||
|
|
||||||
|
console.log("ML1: " ,r1[0][0][0].affine(bn128.q).toString(16));
|
||||||
|
console.log("FE1: " ,r2[0][0][0].affine(bn128.q).toString(16));
|
||||||
|
console.log("ML2: " ,r3[0][0][0].affine(bn128.q).toString(16));
|
||||||
|
console.log("FE2: " ,r4[0][0][0].affine(bn128.q).toString(16));
|
||||||
|
|
||||||
|
assert(bn128.F12.equals(r2, r4));
|
||||||
|
|
||||||
|
|
||||||
|
/* const r2 = bn128.millerLoop(pre1b, pre2b);
|
||||||
|
|
||||||
|
const rbe = bn128.F12.mul(r1, bn128.F12.inverse(r2));
|
||||||
|
|
||||||
|
const res = bn128.finalExponentiation(rbe);
|
||||||
|
|
||||||
|
assert(bn128.F12.equals(res, bn128.F12.one)); */
|
||||||
|
}
|
||||||
|
}).timeout(10000);
|
||||||
});
|
});
|
||||||
|
Loading…
Reference in New Issue
Block a user