import * as BN from "bn.js";
export declare enum Purpose {
    MASTER_KEY_DERIVE = 0,
    AUTH_KEY_DERIVE = 1,
    POLICY_ENGINE = 2
}
export declare enum SigAlg {
    ECDSA_SECP256K1 = 0,
    EDDSA_ED25519 = 1,
    BLS_BN12_381 = 2,
    SCHNORR_SECP256K1 = 3,
    ECDSA_P256 = 4,
    SCHNORR_P256 = 5
}
export declare class MasterKeyPair {
    readonly xprv: string;
    readonly xpub: string;
    constructor(xprv: string, xpub: string);
    static _checkIsValidChainCode(masterKeyShares: MasterKeyShare[]): boolean;
    static _checkIsFullChainCode(masterKeyShares: MasterKeyShare[]): boolean;
    /**
     * Recover master key pair from all the MasterKeyShares
     * @param masterKeyShares
     * @param sigAlg
     */
    static recoverFromMasterKeyShares(masterKeyShares: MasterKeyShare[], sigAlg: SigAlg): MasterKeyPair;
    private static _recoverFromMnemonics;
    /**
     * Recover master key pair from all the Mnemonics
     * @param mnemonics
     * @param sigAlg
     */
    static recoverFromMnemonics(mnemonics: Mnemonics[], sigAlg: SigAlg): MasterKeyPair;
}
export declare class MasterKeyShare {
    readonly keyShare: BN;
    readonly chainCodeShare: BN;
    readonly isFullChainCode: boolean;
    constructor(keyShare: BN, chainCodeShare: BN, isFullChainCode: boolean);
}
export declare class Mnemonics {
    readonly mnemo: string;
    readonly extraMnemo: string;
    constructor(mnemo: string, extraMnemo: string);
    /***
     * Create Mnemonics from key share and chain code.
     *
     * Warn: only invoked by the old user of mpc wallet
     *
     * @param keyShare
     * @param chainCode
     */
    static createMnemonics(keyShare: BN, chainCode: BN): Mnemonics;
    /**
     * Create a new Mnemonic
     */
    static generateMnemonic(): Mnemonics;
    private _derive;
    private _derive_old_secp256k1;
    /**
     * Derive function
     * @param purpose
     * @param sigAlg
     * @param alg
     */
    derive(purpose: Purpose, sigAlg: SigAlg, alg: number): MasterKeyShare;
}
export declare function mnemonicToExtendedPub(sigAlg: SigAlg, alt: number, mnemo: string, chaincode?: string): string;
export declare function extendedPubSharesAgg(sigAlg: SigAlg, extendedPubShares: string[], isFullChainCode: boolean): string;
