import { EncryptionVersion } from '../../../../api';
import { DklsTypes } from '@bitgo/sdk-lib-mpc';
import { Buffer } from 'buffer';
import { KeychainsTriplet } from '../../../baseCoin';
import { MPCv2BroadcastMessage, MPCv2KeyGenRound1Response, MPCv2KeyGenRound2Response, MPCv2KeyGenRound3Response, MPCv2P2PMessage, MPCv2PartyFromStringOrNumber } from '@bitgo/public-types';
import { Ecdsa } from '../../../../account-lib';
import { Keychain, WebauthnKeyEncryptionInfo } from '../../../keychain';
import { DecryptedRetrofitPayload } from '../../../keychain/iKeychains';
import { MPCv2PartiesEnum } from './typesMPCv2';
import { CustomMPCv2SigningRound1GeneratingFunction, CustomMPCv2SigningRound2GeneratingFunction, CustomMPCv2SigningRound3GeneratingFunction, RequestType, SignatureShareRecord, TSSParams, TSSParamsForMessage, TSSParamsForMessageWithPrv, TssSignTxRequestParamsWithPrv, TxRequest } from '../baseTypes';
import { BaseEcdsaUtils } from './base';
import { EcdsaMPCv2KeyGenSendFn } from './ecdsaMPCv2KeyGenSender';
export declare class EcdsaMPCv2Utils extends BaseEcdsaUtils {
    private static readonly DKLS23_SIGNING_USER_GPG_KEY;
    private static readonly DKLS23_SIGNING_ROUND1_STATE;
    private static readonly DKLS23_SIGNING_ROUND2_STATE;
    /** @inheritdoc */
    createKeychains(params: {
        passphrase: string;
        enterprise: string;
        originalPasscodeEncryptionCode?: string;
        retrofit?: DecryptedRetrofitPayload;
        webauthnInfo?: WebauthnKeyEncryptionInfo;
        encryptionVersion?: EncryptionVersion;
    }): Promise<KeychainsTriplet>;
    createParticipantKeychain(participantIndex: MPCv2PartyFromStringOrNumber, commonKeychain: string, privateMaterial?: Buffer, reducedPrivateMaterial?: Buffer, passphrase?: string, originalPasscodeEncryptionCode?: string, webauthnInfo?: WebauthnKeyEncryptionInfo, encryptionSession?: {
        encrypt(plaintext: string): Promise<string>;
        decrypt(ciphertext: string): Promise<string>;
        destroy(): void;
    }): Promise<Keychain>;
    /**
     * Converts a User or Backup MPCv1 SigningMaterial to RetrofitData needed by MPCv2 DKG.
     *
     * @param decryptedKeyshare - MPCv1 decrypted signing material for user or backup as a json.stringify string and bitgo's Big Si.
     * @param partyId - The party ID of the MPCv1 keyshare.
     * @returns The retrofit data needed to start an MPCv2 DKG session.
     * @deprecated
     */
    static getKeyDataForRetrofit(decryptedKeyshare: string, partyId: MPCv2PartiesEnum.BACKUP | MPCv2PartiesEnum.USER): DklsTypes.RetrofitData;
    /**
     * Converts user and backup MPCv1 SigningMaterial to RetrofitData needed by MPCv2 DKG.
     *
     * @param {Object} params - MPCv1 decrypted signing material for user and backup as a json.stringify string and bitgo's Big Si.
     * @returns {{ mpcv2UserKeyShare: DklsTypes.RetrofitData; mpcv2BakcupKeyShare: DklsTypes.RetrofitData }} - the retrofit data needed to start an MPCv2 DKG session.
     */
    getMpcV2RetrofitDataFromMpcV1Keys(params: {
        mpcv1UserKeyShare: string;
        mpcv1BackupKeyShare: string;
    }): {
        mpcv2UserKeyShare: DklsTypes.RetrofitData;
        mpcv2BackupKeyShare: DklsTypes.RetrofitData;
    };
    /**
     * Get retrofit data from MPCv1 key share.
     * @param mpcv1PartyKeyShare
     * @param mpcv1PartyIndex
     * @param xiList
     * @param mpc
     * @deprecated
     */
    static getMpcV2RetrofitDataFromMpcV1Key({ mpcv1PartyKeyShare, mpcv1PartyIndex, xiList, mpc, }: {
        mpcv1PartyKeyShare: string;
        mpcv1PartyIndex: number;
        xiList: number[][];
        mpc: Ecdsa;
    }): DklsTypes.RetrofitData;
    private addUserKeychain;
    private addBackupKeychain;
    private getUserAndBackupSession;
    private addBitgoKeychain;
    sendKeyGenerationRound1(enterprise: string, userGpgPublicKey: string, backupGpgPublicKey: string, payload: DklsTypes.AuthEncMessages & {
        walletId?: string;
    }): Promise<MPCv2KeyGenRound1Response>;
    sendKeyGenerationRound2(enterprise: string, sessionId: string, payload: DklsTypes.AuthEncMessages): Promise<MPCv2KeyGenRound2Response>;
    sendKeyGenerationRound3(enterprise: string, sessionId: string, payload: DklsTypes.AuthEncMessages): Promise<MPCv2KeyGenRound3Response>;
    sendKeyGenerationRound1BySender(senderFn: EcdsaMPCv2KeyGenSendFn<MPCv2KeyGenRound1Response>, userGpgPublicKey: string, backupGpgPublicKey: string, payload: DklsTypes.AuthEncMessages & {
        walletId?: string;
    }): Promise<MPCv2KeyGenRound1Response>;
    sendKeyGenerationRound2BySender(senderFn: EcdsaMPCv2KeyGenSendFn<MPCv2KeyGenRound2Response>, sessionId: string, payload: DklsTypes.AuthEncMessages): Promise<MPCv2KeyGenRound2Response>;
    sendKeyGenerationRound3BySender(senderFn: EcdsaMPCv2KeyGenSendFn<MPCv2KeyGenRound3Response>, sessionId: string, payload: DklsTypes.AuthEncMessages): Promise<MPCv2KeyGenRound3Response>;
    /**
     * Signs the transaction associated to the transaction request.
     * @param {string | TxRequest} params.txRequest - transaction request object or id
     * @param {string} params.prv - decrypted private key
     * @param {string} params.reqId - request id
     * @param {string} params.mpcv2PartyId - party id for the signer involved in this mpcv2 request (either 0 for user or 1 for backup)
     * @param params.recipientSource - optional; use TssTxRecipientSource.Explicit with a non-empty txParams.recipients
     *   list when you want TypeScript to enforce passing recipient details at compile time.
     * @returns {Promise<TxRequest>} fully signed TxRequest object
     */
    signTxRequest(params: TssSignTxRequestParamsWithPrv): Promise<TxRequest>;
    /**
     * Signs the message associated to the transaction request.
     * @param {string | TxRequest} params.txRequest - transaction request object or id
     * @param {string} params.prv - decrypted private key
     * @param {string} params.reqId - request id
     * @returns {Promise<TxRequest>} fully signed TxRequest object
     */
    signTxRequestForMessage(params: TSSParamsForMessageWithPrv): Promise<TxRequest>;
    private signRequestBase;
    formatBitgoBroadcastMessage(broadcastMessage: MPCv2BroadcastMessage): {
        from: 0 | 1 | 2;
        payload: {
            message: string;
            signature: string;
        };
    };
    formatP2PMessage(p2pMessage: MPCv2P2PMessage, commitment?: string): {
        payload: {
            encryptedMessage: string;
            signature: string;
        };
        from: 0 | 1 | 2;
        to: 0 | 1 | 2;
        commitment: string | undefined;
    };
    /**
     * Get the hash string and derivation path from the transaction request.
     * @param {TxRequest} txRequest - the transaction request object
     * @param {RequestType} requestType - the request type
     * @returns {{ hashBuffer: Buffer; derivationPath: string }} - the hash string and derivation path
     */
    private getHashStringAndDerivationPath;
    /** @inheritdoc */
    signEcdsaMPCv2TssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, externalSignerMPCv2SigningRound1Generator: CustomMPCv2SigningRound1GeneratingFunction, externalSignerMPCv2SigningRound2Generator: CustomMPCv2SigningRound2GeneratingFunction, externalSignerMPCv2SigningRound3Generator: CustomMPCv2SigningRound3GeneratingFunction, requestType?: RequestType): Promise<TxRequest>;
    createOfflineRound1Share(params: {
        txRequest: TxRequest;
        prv: string;
        walletPassphrase: string;
        encryptedPrv?: string;
    }): Promise<{
        signatureShareRound1: SignatureShareRecord;
        userGpgPubKey: string;
        encryptedRound1Session: string;
        encryptedUserGpgPrvKey: string;
    }>;
    createOfflineRound2Share(params: {
        txRequest: TxRequest;
        prv: string;
        walletPassphrase: string;
        bitgoPublicGpgKey: string;
        encryptedUserGpgPrvKey: string;
        encryptedRound1Session: string;
    }): Promise<{
        signatureShareRound2: SignatureShareRecord;
        encryptedRound2Session: string;
    }>;
    createOfflineRound3Share(params: {
        txRequest: TxRequest;
        prv: string;
        walletPassphrase: string;
        bitgoPublicGpgKey: string;
        encryptedUserGpgPrvKey: string;
        encryptedRound2Session: string;
    }): Promise<{
        signatureShareRound3: SignatureShareRecord;
    }>;
}
/**
 * Checks if the given key share, when decrypted, contains valid GG18 signing material.
 *
 * @param {string} keyShare - The encrypted key share string.
 * @param {string|undefined} walletPassphrase - The passphrase used to decrypt the key share
 * @returns {boolean} - Returns `true` if the decrypted data contains valid signing material, otherwise `false`.
 */
export declare function isGG18SigningMaterial(keyShare: string, walletPassphrase: string | undefined): boolean;
/**
 * Get the MPC v2 recovery key shares from the provided user and backup key shares.
 * @param encryptedUserKey encrypted gg18 or MPCv2 user key
 * @param encryptedBackupKey encrypted gg18 or MPCv2 backup key
 * @param walletPassphrase password for user and backup key
 * @returns MPC v2 recovery key shares
 */
export declare function getMpcV2RecoveryKeyShares(encryptedUserKey: string, encryptedBackupKey: string, walletPassphrase?: string): Promise<{
    userKeyShare: Buffer;
    backupKeyShare: Buffer;
    commonKeyChain: string;
}>;
/**
 * Signs a message hash using MPC v2 recovery key shares.
 *
 * @param {Buffer} messageHash
 * @param {Buffer} userKeyShare
 * @param {Buffer} backupKeyShare
 * @param {string} commonKeyChain
 * @returns {Promise<{ recid: number, r: string, s: string, y: string }>}
 *
 * @async
 */
export declare function signRecoveryMpcV2(messageHash: Buffer, userKeyShare: Buffer, backupKeyShare: Buffer, commonKeyChain: string): Promise<{
    recid: number;
    r: string;
    s: string;
    y: string;
}>;
//# sourceMappingURL=ecdsaMPCv2.d.ts.map