import { Cipher } from '../../crypto/types.js'; import { ByteArray } from '../../types.js'; import { PdfCryptFilter } from '../crypt-filters/base.js'; import { CryptFilterType, PdfEncryptionAlgorithmType, PdfEncryptionDictionary } from '../types.js'; import { PdfStandardSecurityHandlerOptions } from './base.js'; import { PdfV2SecurityHandler } from './v2.js'; /** * V4 security handler implementing AES-128-CBC encryption with crypt filters. * Supports different encryption methods for strings, streams, and embedded files (PDF 1.5). * * @example * ```typescript * const handler = new PdfV4SecurityHandler({ * password: 'user123', * ownerPassword: 'admin456' * }) * handler.setCryptFilter('StmFilter', new AesV2CryptFilter({ authEvent: 'DocOpen' })) * ``` */ export declare class PdfV4SecurityHandler extends PdfV2SecurityHandler { /** Map of named crypt filters. */ protected cryptFilters: Map; /** Mapping of content types to crypt filter names. */ protected cryptFiltersByType: { [key in CryptFilterType]?: string; }; /** * Creates a new V4 security handler with AES-128 encryption. * * @param options - Configuration options for the handler. */ constructor(options: PdfStandardSecurityHandlerOptions); /** * Gets a crypt filter by name. * * @param name - The crypt filter name. * @returns The crypt filter, or undefined if not found. */ getCryptFilter(name: string): PdfCryptFilter | undefined; /** * Gets the crypt filter assigned to a content type. * * @param type - The content type ('string', 'stream', or 'file'). * @returns The assigned crypt filter, or null if none. */ getCryptFilterByType(type: CryptFilterType): PdfCryptFilter | null; /** * Assigns a crypt filter to a content type. * * @param type - The content type. * @param name - The crypt filter name. */ setCryptFilterForType(type: CryptFilterType, name: string): void; /** * Registers a named crypt filter. * * @param name - The filter name. * @param filter - The crypt filter instance. */ setCryptFilter(name: string, filter: PdfCryptFilter): void; /** * Gets the encryption revision number. * * @returns 4 for V4 encryption. */ getRevision(): number; /** * Gets the encryption version number. * * @returns 4 for crypt filter-based encryption. */ getVersion(): number; /** * Computes the object-specific encryption key. * * @param objectNumber - The PDF object number. * @param generationNumber - The PDF generation number. * @param algorithm - Optional algorithm type for key derivation. * @returns The computed object key. * @throws Error if object or generation number is invalid. */ computeObjectKey(objectNumber?: number, generationNumber?: number, algorithm?: PdfEncryptionAlgorithmType): Promise; /** * Gets an AES-128 cipher for the specified object. * * @param objectNumber - The PDF object number. * @param generationNumber - The PDF generation number. * @returns An AES-128 cipher instance. */ protected getCipher(objectNumber?: number, generationNumber?: number): Promise; /** * Reads encryption parameters and crypt filter definitions from the dictionary. * * @param encryptionDictionary - The encryption dictionary from the PDF. */ readEncryptionDictionary(encryptionDictionary: PdfEncryptionDictionary): void; /** * Writes the encryption dictionary including crypt filter definitions. */ write(): Promise; /** * Encrypts data using the appropriate crypt filter for the content type. * * @param type - The type of content being encrypted. * @param data - The data to encrypt. * @param objectNumber - The PDF object number. * @param generationNumber - The PDF generation number. * @returns The encrypted data. */ encrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise; /** * Decrypts data using the appropriate crypt filter for the content type. * * @param type - The type of content being decrypted. * @param data - The encrypted data. * @param objectNumber - The PDF object number. * @param generationNumber - The PDF generation number. * @returns The decrypted data. */ decrypt(type: 'string' | 'stream' | 'file', data: ByteArray, objectNumber?: number, generationNumber?: number): Promise; }