import { EddsaMPCv2KeyGenRound1Request, EddsaMPCv2KeyGenRound1Response, EddsaMPCv2KeyGenRound2Request, EddsaMPCv2KeyGenRound2Response, MPCv2PartyFromStringOrNumber } from '@bitgo/public-types';
import { KeychainsTriplet } from '../../../baseCoin';
import { Keychain, WebauthnKeyEncryptionInfo } from '../../../keychain';
import { CustomEddsaMPCv2SigningRound1GeneratingFunction, CustomEddsaMPCv2SigningRound2GeneratingFunction, CustomEddsaMPCv2SigningRound3GeneratingFunction, RequestType, SignatureShareRecord, TSSParams, TSSParamsForMessage, TSSParamsForMessageWithPrv, TSSParamsWithPrv, TxRequest } from '../baseTypes';
import { BaseEddsaUtils } from './base';
import { EddsaMPCv2KeyGenSendFn } from './eddsaMPCv2KeyGenSender';
export declare class EddsaMPCv2Utils extends BaseEddsaUtils {
    private static readonly MPS_DSG_SIGNING_USER_GPG_KEY;
    private static readonly MPS_DSG_SIGNING_ROUND1_STATE;
    private static readonly MPS_DSG_SIGNING_ROUND2_STATE;
    /** @inheritdoc */
    createKeychains(params: {
        passphrase: string;
        enterprise: string;
        originalPasscodeEncryptionCode?: string;
        webauthnInfo?: WebauthnKeyEncryptionInfo;
    }): Promise<KeychainsTriplet>;
    createParticipantKeychain(participantIndex: MPCv2PartyFromStringOrNumber, commonKeychain: string, privateMaterial?: Buffer, reducedPrivateMaterial?: Buffer, passphrase?: string, originalPasscodeEncryptionCode?: string, webauthnInfo?: WebauthnKeyEncryptionInfo): Promise<Keychain>;
    private addUserKeychain;
    private addBackupKeychain;
    private addBitgoKeychain;
    sendKeyGenerationRound1(enterprise: string, payload: EddsaMPCv2KeyGenRound1Request): Promise<EddsaMPCv2KeyGenRound1Response>;
    sendKeyGenerationRound1BySender(senderFn: EddsaMPCv2KeyGenSendFn<EddsaMPCv2KeyGenRound1Response>, payload: EddsaMPCv2KeyGenRound1Request): Promise<EddsaMPCv2KeyGenRound1Response>;
    sendKeyGenerationRound2(enterprise: string, payload: EddsaMPCv2KeyGenRound2Request): Promise<EddsaMPCv2KeyGenRound2Response>;
    sendKeyGenerationRound2BySender(senderFn: EddsaMPCv2KeyGenSendFn<EddsaMPCv2KeyGenRound2Response>, payload: EddsaMPCv2KeyGenRound2Request): Promise<EddsaMPCv2KeyGenRound2Response>;
    /**
     * Signs the transaction associated with 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
     */
    signTxRequest(params: TSSParamsWithPrv): Promise<TxRequest>;
    /**
     * Signs the message associated with 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
     */
    signTxRequestForMessage(params: TSSParamsForMessageWithPrv): Promise<TxRequest>;
    /**
     * Full 3-round EdDSA MPCv2 (MPS) online signing orchestration.
     *
     * Protocol overview:
     *   WASM Round 0  → getFirstMessage()      (produces userMsg1)
     *   API  Round 1  → send userMsg1 / recv bitgoMsg1
     *   WASM Round 1  → handleIncomingMessages([userMsg1, bitgoMsg1])  (produces userMsg2)
     *   API  Round 2  → send userMsg2 / recv bitgoMsg2
     *   WASM Round 2  → handleIncomingMessages([userMsg2, bitgoMsg2])  (produces userMsg3)
     *   API  Round 3  → send userMsg3 (WP finalises; no BitGo msg returned to client)
     */
    private signRequestBase;
    createOfflineRound1Share(params: {
        txRequest: TxRequest;
        prv: string;
        walletPassphrase: string;
        encryptedPrv?: string;
    }): Promise<{
        signatureShareRound1: SignatureShareRecord;
        userGpgPubKey: string;
        encryptedRound1Session: string;
        encryptedUserGpgPrvKey: string;
    }>;
    createOfflineRound2Share(params: {
        txRequest: TxRequest;
        walletPassphrase: string;
        bitgoPublicGpgKey: string;
        encryptedUserGpgPrvKey: string;
        encryptedRound1Session: string;
    }): Promise<{
        signatureShareRound2: SignatureShareRecord;
        encryptedRound2Session: string;
    }>;
    createOfflineRound3Share(params: {
        txRequest: TxRequest;
        walletPassphrase: string;
        bitgoPublicGpgKey: string;
        encryptedUserGpgPrvKey: string;
        encryptedRound2Session: string;
    }): Promise<{
        signatureShareRound3: SignatureShareRecord;
    }>;
    /** @inheritdoc */
    signEddsaMPCv2TssUsingExternalSigner(params: TSSParams | TSSParamsForMessage, externalSignerEddsaMPCv2SigningRound1Generator: CustomEddsaMPCv2SigningRound1GeneratingFunction, externalSignerEddsaMPCv2SigningRound2Generator: CustomEddsaMPCv2SigningRound2GeneratingFunction, externalSignerEddsaMPCv2SigningRound3Generator: CustomEddsaMPCv2SigningRound3GeneratingFunction, requestType?: RequestType): Promise<TxRequest>;
}
//# sourceMappingURL=eddsaMPCv2.d.ts.map