blocklock-js
Version:
A library for encrypting and decrypting data for the future
69 lines (68 loc) • 2.51 kB
TypeScript
import { BytesLike } from "ethers";
import * as mcl from "mcl-wasm";
import type { G1, G2, Fr, Fp, Fp2 } from "mcl-wasm";
/**
* Mcl wrapper for BLS operations
* Adapted from: https://github.com/kilic/evmbls
*/
declare class BlsBn254 {
static readonly FIELD_ORDER = 21888242871839275222246405745257275088696311157297823662689037894645226208583n;
readonly G1: G1;
readonly G2: G2;
private constructor();
static create(): Promise<BlsBn254>;
newG1(): G1;
newG2(): G2;
newFp(): Fp;
expandMsg(domain: Uint8Array, msg: Uint8Array, outLen: number): Uint8Array;
hashToField(domain: Uint8Array, msg: Uint8Array, count: number): bigint[];
hashToPoint(domain: Uint8Array, msg: Uint8Array): G1;
serialiseFp(p: Fp | Fp2): `0x${string}`;
serialiseG1Point(p: G1): [bigint, bigint];
serialiseG2Point(p: G2): [bigint, bigint, bigint, bigint];
deserialiseFp2([x, y]: [bigint, bigint]): Fp2;
g1FromEvmHex(input: BytesLike): mcl.G1;
g1FromEvm(g1X: bigint, g1Y: bigint): mcl.G1;
g2FromEvm([x1, x2, y1, y2]: [bigint, bigint, bigint, bigint]): mcl.G2;
g2From(input: BytesLike): G2;
createKeyPair(_secretKey?: `0x${string}`): {
secretKey: mcl.Fr;
_secretKey: `0x${string}`;
pubKey: mcl.G2;
};
createKeyPairG1PublicKey(_secretKey?: `0x${string}`): {
secretKey: mcl.Fr;
_secretKey: `0x${string}`;
pubKey: mcl.G1;
};
sign(M: G1, secret: Fr): {
signature: mcl.G1;
M: mcl.G1;
};
verify(h_m: G1, pk: G2, signature: G1): boolean;
toArgs(pubKey: G2, M: G1, signature: G1): {
signature: [bigint, bigint];
pubKey: [bigint, bigint, bigint, bigint];
M: [bigint, bigint];
};
mapToPoint(eHex: `0x${string}`): G1;
private g;
private neg;
private mul;
private add;
private sub;
private exp;
private sqrt;
private sgn0;
private inv0;
private legendre;
aggregate(acc: G1 | G2, other: G1 | G2): mcl.G1 | mcl.G2;
}
export declare function byteSwap(hex: string, n: number): string;
export declare function kyberMarshalG2(p: G2): string;
export declare function kyberMarshalG1(p: G1): string;
export declare function toHex(n: bigint): `0x${string}`;
declare function bytesEqual(bytes1: BytesLike, bytes2: BytesLike): boolean;
export declare function serialiseG2Point(p: G2): [bigint, bigint, bigint, bigint];
export declare function serialiseFp(p: Fp | Fp2): `0x${string}`;
export { BlsBn254, bytesEqual };