import { type Kupyna } from "../const.js";
import { type TArg, type TRet } from "../utils.js";
/** Abstract class for 256/512 bit */
export declare abstract class KupynaBase<T> implements Kupyna<KupynaBase<T>> {
    readonly blockLen: number;
    abstract readonly outputLen: number;
    /** Rounds count */
    abstract readonly rounds: number;
    /** Offsets for transformations */
    abstract readonly offsets: number[];
    /** State size */
    readonly stSize: number;
    /** Threshold for padding */
    readonly threshold: number;
    protected s: BigUint64Array;
    protected x: Uint8Array;
    protected nx: number;
    protected len: bigint;
    constructor(blockLen: number);
    abstract clone(): KupynaBase<T>;
    /** Update hash buffer */
    update(data: TArg<Uint8Array>): this;
    digest(): TRet<Uint8Array>;
    private final;
    private byte;
    private G;
    private G1;
    private G2;
    private P;
    private Q;
    private outputTransform;
    private transform;
    private block;
}
/** Abstract class for derived versions (48/304/384 bit) */
export declare abstract class KupynaDerived<T> implements Kupyna<KupynaDerived<T>> {
    hash: () => KupynaBase<T>;
    protected readonly slice: number;
    readonly outputLen: number;
    readonly blockLen: number;
    buffer: Uint8Array;
    constructor(hash: () => KupynaBase<T>, slice: number);
    abstract clone(): KupynaDerived<T>;
    update(data: TArg<Uint8Array>): this;
    digest(): TRet<Uint8Array>;
    private final;
}
