|
| 1 | +import { bn254 } from "ethereum-cryptography/bn"; |
| 2 | +import { deepStrictEqual } from "./assert"; |
| 3 | + |
| 4 | +describe("bls12-381", () => { |
| 5 | + const PointG1 = bn254.G1.ProjectivePoint; |
| 6 | + const PointG2 = bn254.G2.ProjectivePoint; |
| 7 | + const { Fp12 } = bn254.fields; |
| 8 | + |
| 9 | + it("basic", () => { |
| 10 | + const g1 = |
| 11 | + PointG1.BASE.multiply( |
| 12 | + 18097487326282793650237947474982649264364522469319914492172746413872781676n |
| 13 | + ); |
| 14 | + g1.assertValidity(); |
| 15 | + deepStrictEqual(g1.toAffine(), { |
| 16 | + x: 0x16f7535f91f50bb2227f483b54850a63b38206f28e0a1a65c83d0c90762442a9n, |
| 17 | + y: 0x0b46dd0c40725b6b4a298576629d77b41a545060adb4358eabec939e80691a05n, |
| 18 | + }); |
| 19 | + const g2 = |
| 20 | + PointG2.BASE.multiply( |
| 21 | + 20390255904278144451778773028944684152769293537511418234311120800877067946n |
| 22 | + ); |
| 23 | + g2.assertValidity(); |
| 24 | + deepStrictEqual(g2.toAffine(), { |
| 25 | + x: { |
| 26 | + c0: 0x1ecfd2dff2aad18798b64bdb0c2b50c9d73e6c05619e04cbf5b448fd98726880n, |
| 27 | + c1: 0x0e16c8d96362720af0916592be1b839a26f5e6b710f3ede0d8840d9a70eaf97fn, |
| 28 | + }, |
| 29 | + y: { |
| 30 | + c0: 0x2aa778acda9e7d4925c60ad84c12fb3b4f2b9539d5699934b0e6fdd10cc2c0e1n, |
| 31 | + c1: 0x1e8f2c1f441fed039bb46d6bfb91236cf7ba240c75080cedbe40e049c46b26ben, |
| 32 | + }, |
| 33 | + }); |
| 34 | + }); |
| 35 | + it("pairing", () => { |
| 36 | + const g1 = |
| 37 | + PointG1.BASE.multiply( |
| 38 | + 18097487326282793650237947474982649264364522469319914492172746413872781676n |
| 39 | + ); |
| 40 | + const g2 = |
| 41 | + PointG2.BASE.multiply( |
| 42 | + 20390255904278144451778773028944684152769293537511418234311120800877067946n |
| 43 | + ); |
| 44 | + deepStrictEqual( |
| 45 | + bn254.pairing(g1, g2, true), |
| 46 | + // @ts-ignore |
| 47 | + Fp12.fromBigTwelve([ |
| 48 | + 7520311483001723614143802378045727372643587653754534704390832890681688842501n, |
| 49 | + 20265650864814324826731498061022229653175757397078253377158157137251452249882n, |
| 50 | + 11942254371042183455193243679791334797733902728447312943687767053513298221130n, |
| 51 | + 759657045325139626991751731924144629256296901790485373000297868065176843620n, |
| 52 | + 16045761475400271697821392803010234478356356448940805056528536884493606035236n, |
| 53 | + 4715626119252431692316067698189337228571577552724976915822652894333558784086n, |
| 54 | + 14901948363362882981706797068611719724999331551064314004234728272909570402962n, |
| 55 | + 11093203747077241090565767003969726435272313921345853819385060670210834379103n, |
| 56 | + 17897835398184801202802503586172351707502775171934235751219763553166796820753n, |
| 57 | + 1344517825169318161285758374052722008806261739116142912817807653057880346554n, |
| 58 | + 11123896897251094532909582772961906225000817992624500900708432321664085800838n, |
| 59 | + 17453370448280081813275586256976217762629631160552329276585874071364454854650n, |
| 60 | + ]) |
| 61 | + ); |
| 62 | + }); |
| 63 | +}); |
0 commit comments