import { Cipher } from '../../crypto/types.js'; import { ByteArray } from '../../types.js'; import { PdfSecurityHandler } from '../handlers/base.js'; import { PdfCryptFilterDictionary } from '../types.js'; /** * Configuration options for creating a crypt filter. */ export type CryptFilterOptions = { /** Security handler for key derivation and encryption operations. */ securityHandler?: PdfSecurityHandler; /** Crypt filter method: 'None' (identity), 'V2' (RC4), 'AESV2' (AES-128), or 'AESV3' (AES-256). */ cfm: 'None' | 'V2' | 'AESV2' | 'AESV3'; /** Event that triggers authentication: 'DocOpen' or 'EFOpen' (embedded file open). */ authEvent: 'DocOpen' | 'EFOpen'; /** Key length in bits. */ length?: number; }; /** * Abstract base class for PDF crypt filters. * Crypt filters define how specific types of data (strings, streams, files) are encrypted. * * @example * ```typescript * const filter = new AesV2CryptFilter({ authEvent: 'DocOpen' }) * filter.setSecurityHandler(securityHandler) * const encrypted = await filter.encrypt(data, objectNumber, generationNumber) * ``` */ export declare abstract class PdfCryptFilter { /** Crypt filter method identifier. */ cfm: 'None' | 'V2' | 'AESV2' | 'AESV3'; /** Authentication event trigger. */ authEvent?: 'DocOpen' | 'EFOpen'; /** Key length in bits. */ length: number; /** Security handler for cryptographic operations. */ protected securityHandler?: PdfSecurityHandler; /** * Creates a new crypt filter with the specified options. * * @param options - Configuration options for the crypt filter. */ constructor(options: CryptFilterOptions); /** * Sets the security handler for this crypt filter. * * @param handler - The security handler to use for key derivation. */ setSecurityHandler(handler: PdfSecurityHandler): void; /** * Gets the current security handler. * * @returns The security handler, or undefined if not set. */ getSecurityHandler(): PdfSecurityHandler | undefined; /** * Gets a cipher instance for encrypting/decrypting data. * * @param objectNumber - The PDF object number for key derivation. * @param generationNumber - The PDF generation number for key derivation. * @returns A cipher instance for encryption/decryption operations. */ abstract getCipher(objectNumber?: number, generationNumber?: number): Promise; /** * Encrypts data using this crypt filter. * * @param data - The data to encrypt. * @param objectNumber - The PDF object number for key derivation. * @param generationNumber - The PDF generation number for key derivation. * @returns The encrypted data. */ encrypt(data: ByteArray, objectNumber?: number, generationNumber?: number): Promise; /** * Decrypts data using this crypt filter. * * @param data - The data to decrypt. * @param objectNumber - The PDF object number for key derivation. * @param generationNumber - The PDF generation number for key derivation. * @returns The decrypted data. */ decrypt(data: ByteArray, objectNumber?: number, generationNumber?: number): Promise; /** * Converts this crypt filter to a PDF dictionary representation. * * @returns The crypt filter dictionary. */ toDictionary(): PdfCryptFilterDictionary; }