/*! Copyright 2023-2024 the gnablib contributors MPL-1.1 */
import { IFullCrypt } from '../interfaces/IFullCrypt.js';
import { IHash } from '../interfaces/IHash.js';
import { IAeadCrypt } from '../interfaces/IAeadCrypt.js';
export declare class Poly1305 implements IHash {
    #private;
    readonly blockSize = 16;
    readonly size = 16;
    private _bPos;
    constructor(key: Uint8Array);
    private hash;
    write(data: Uint8Array): void;
    sum(): Uint8Array;
    sumIn(): Uint8Array;
    reset(): void;
    newEmpty(): IHash;
    clone(): IHash;
    static fromCrypt(c: IFullCrypt): Poly1305;
}
interface IFullCryptBuilder {
    new (key: Uint8Array, nonce: Uint8Array): IFullCrypt;
}
declare class Poly1305Aead implements IAeadCrypt {
    readonly tagSize = 16;
    private _hash;
    private _crypt;
    private _stage;
    private readonly _adLen;
    private readonly _cLen;
    constructor(key: Uint8Array, nonce: Uint8Array, ctor: IFullCryptBuilder);
    get blockSize(): number;
    writeAD(data: Uint8Array): void;
    private finalizeAD;
    encryptInto(enc: Uint8Array, plain: Uint8Array): void;
    decryptInto(plain: Uint8Array, enc: Uint8Array): void;
    verify(tag: Uint8Array): boolean;
    finalize(): Uint8Array;
    encryptSize(plainLen: number): number;
}
export declare class ChaCha20_Poly1305 extends Poly1305Aead {
    constructor(key: Uint8Array, nonce: Uint8Array);
}
export declare class Salsa20_Poly1305 extends Poly1305Aead {
    constructor(key: Uint8Array, nonce: Uint8Array);
}
export declare class XChaCha20_Poly1305 extends Poly1305Aead {
    constructor(key: Uint8Array, nonce: Uint8Array);
}
export declare class XSalsa20_Poly1305 extends Poly1305Aead {
    constructor(key: Uint8Array, nonce: Uint8Array);
}
export {};
