/*! Copyright 2025 the gnablib contributors MPL-1.1 */
import { U64MutArray } from '../../primitive/number/U64.js';
import { IBlockCrypt } from '../interfaces/IBlockCrypt.js';
export declare class Tweak {
    private readonly t8;
    readonly t64: U64MutArray;
    private _lock;
    constructor(tweak?: Uint8Array);
    set isFirst(value: boolean);
    set isLast(value: boolean);
    set lock(value: boolean);
    incr(by: number): void;
    makeCfg(blockSize: number): void;
    makeKdf(): void;
    makeMsg(): void;
    makeOut(): void;
    static NewKey(): Tweak;
}
export declare class Key {
    private readonly k8;
    readonly k64: U64MutArray;
    private _lock;
    private constructor();
    get length(): number;
    set lock(value: boolean);
    static fromSize(size: number): Key;
    static fromKey(key: Uint8Array): Key;
}
declare abstract class AThreefish {
    #private;
    readonly qr: number;
    private readonly t;
    readonly blockSize: number;
    constructor(qr: number, key: Key, t: Tweak);
    protected addRk(d: U64MutArray, r: number): void;
    protected subRk(d: U64MutArray, r: number): void;
    protected abstract _encBlock(data: Uint8Array): void;
    protected abstract _decBlock(data: Uint8Array): void;
    encryptBlock(block: Uint8Array, offset?: number): void;
    decryptBlock(block: Uint8Array, offset?: number): void;
}
export declare class Threefish256 extends AThreefish implements IBlockCrypt {
    constructor(key: Key | Uint8Array, tweak: Tweak | Uint8Array);
    private swap;
    private mixPerm;
    private permUnmix;
    protected _encBlock(data: Uint8Array): void;
    protected _decBlock(data: Uint8Array): void;
}
export declare class Threefish512 extends AThreefish implements IBlockCrypt {
    constructor(key: Key | Uint8Array, tweak: Tweak | Uint8Array);
    private swap;
    private unswap;
    private mixPerm;
    private permUnmix;
    protected _encBlock(data: Uint8Array): void;
    protected _decBlock(data: Uint8Array): void;
}
export declare class Threefish1024 extends AThreefish implements IBlockCrypt {
    constructor(key: Key | Uint8Array, tweak: Tweak | Uint8Array);
    private swap;
    private unswap;
    private mixPerm;
    private permUnmix;
    protected _encBlock(data: Uint8Array): void;
    protected _decBlock(data: Uint8Array): void;
}
export {};
