/// <reference types="node" />
import { EllipticPair } from '@muirglacier/jellyfish-crypto';
import { Script, SIGHASH, Transaction, TransactionSegWit, Vout, Witness } from '@muirglacier/jellyfish-transaction';
export interface SignInputOption {
    /**
     * Prevout of this input
     */
    prevout: Vout;
    /**
     * @return {Promise<Buffer>} compressed public key
     */
    publicKey: () => Promise<Buffer>;
    /**
     * @param {Buffer} hash to sign
     * @return {Buffer} signature in DER format, SIGHASHTYPE not included
     * @see https://tools.ietf.org/html/rfc6979
     * @see https://github.com/bitcoin/bitcoin/pull/13666
     */
    sign: (hash: Buffer) => Promise<Buffer>;
    /**
     * Optionally provide a witness script,
     * or it will be guessed if it can be guessed.
     */
    witnessScript?: Script;
}
export interface SignOption {
    sigHashType?: SIGHASH;
    validate?: {
        version?: boolean;
        lockTime?: boolean;
    };
}
/**
 * TransactionSigner
 * 1. you can sign an unsigned transaction and get a signed transaction.
 * 2. you can sign a vin and get a witness in tx for that vin
 *
 * https://github.com/bitcoin/bips/blob/master/bip-0144.mediawiki
 * https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki
 * https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
 */
export declare const TransactionSigner: {
    /**
     * @param {Transaction} transaction to sign
     * @param {number} index of the vin to sign
     * @param {SignInputOption} option input option
     * @param {SIGHASH} sigHashType SIGHASH type
     */
    signInput(transaction: Transaction, index: number, option: SignInputOption, sigHashType?: SIGHASH): Promise<Witness>;
    sign(transaction: Transaction, inputOptions: SignInputOption[], option?: SignOption): Promise<TransactionSegWit>;
    signPrevoutsWithEllipticPairs(transaction: Transaction, prevouts: Vout[], ellipticPairs: EllipticPair[], option?: SignOption): Promise<TransactionSegWit>;
    validate(transaction: Transaction, inputOptions: SignInputOption[], option: SignOption): void;
};
//# sourceMappingURL=tx_signature.d.ts.map