import { Hash, Input } from "../../crypto/sm3/utils.js";
/**
 * 循环左移
 */
export declare function rotl(x: number, n: number): number;
export declare abstract class SHA2<T extends SHA2<T>> extends Hash<T> {
    readonly blockLen: number;
    outputLen: number;
    readonly padOffset: number;
    readonly isLE: boolean;
    protected abstract process(buf: DataView, offset: number): void;
    protected abstract get(): number[];
    protected abstract set(...args: number[]): void;
    abstract destroy(): void;
    protected abstract roundClean(): void;
    protected buffer: Uint8Array;
    protected view: DataView;
    protected finished: boolean;
    protected length: number;
    protected pos: number;
    protected destroyed: boolean;
    constructor(blockLen: number, outputLen: number, padOffset: number, isLE: boolean);
    update(data: Input): this;
    digestInto(out: Uint8Array): void;
    digest(): Uint8Array<ArrayBuffer>;
    _cloneInto(to?: T): T;
}
declare class SM3 extends SHA2<SM3> {
    A: number;
    B: number;
    C: number;
    D: number;
    E: number;
    F: number;
    G: number;
    H: number;
    constructor();
    protected get(): [
        number,
        number,
        number,
        number,
        number,
        number,
        number,
        number
    ];
    protected set(A: number, B: number, C: number, D: number, E: number, F: number, G: number, H: number): void;
    protected process(view: DataView, offset: number): void;
    protected roundClean(): void;
    destroy(): void;
}
export declare const sm3: {
    (msg: Input): Uint8Array;
    outputLen: number;
    blockLen: number;
    create(): Hash<SM3>;
};
export {};
//# sourceMappingURL=sm3.d.ts.map