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 };
