import { ethers } from "ethers";
import { type PrivateKeyType } from "../chain/PrivateKey.js";
import { PublicKey } from "../chain/PublicKey.js";
export interface SignerProvider {
    /**
     * Public key of the signer in wire format
     */
    pubKey: PublicKey;
    /**
     * Sign an arbitrary message payload.
     * Returns raw sig bytes as Uint8Array.
     */
    sign(msg: string | Uint8Array): Promise<Uint8Array>;
}
/**
 * Create an Ethereum signer provider.
 * @param signer The ethers.js JsonRpcSigner instance.
 * @param pubKey The public key of the signer.
 * @returns A SignerProvider for Ethereum signing.
 */
export declare const createEmSigner: (signer: ethers.providers.JsonRpcSigner, pubKey: PublicKey) => SignerProvider;
/**
 * Create an ED25519 signer provider.
 * @param adapter The Phantom adapter for signing messages.
 * @param pubKey The public key of the signer.
 * @returns A SignerProvider for ED25519 signing.
 */
export declare const createEdSigner: (adapter: SupportedAdapters, pubKey: PublicKey) => SignerProvider;
/**
 * Create a classic signer provider for K1/R1-style keys.
 *
 * This signer expects a precomputed 32-byte digest payload (the same digest
 * produced by transaction.signingDigest(...).msgBytes for classic keys) and
 * signs it directly via `signDigest` to avoid double-hashing.
 *
 * The returned bytes are in raw `[r||s||v]` format so callers can pass them
 * into `Signature.fromRaw(...)` without additional conversion.
 *
 * @param privateKey Private key in any supported `PrivateKeyType` representation.
 * @returns A `SignerProvider` for classic elliptic-curve signing.
 */
export declare function createClassicSigner(privateKey: PrivateKeyType): SignerProvider;
/** @Internal */
interface SupportedAdapters {
    signMessage: (msg: Uint8Array) => Promise<Uint8Array>;
}
export {};
//# sourceMappingURL=SignerProvider.d.ts.map