/** * Represents binary input data that can be processed by AES APIs. * When providing a string, it must be base64-encoded. */ export type BinaryInput = string | Uint8Array | ArrayBuffer; /** * AES key sizes in bits. */ export enum AESKeySize { /** 128-bit AES key */ AES128 = 128, /** 192-bit AES key. It is unsupported on Web. * @platform apple * @platform android */ AES192 = 192, /** 256-bit AES key */ AES256 = 256, } /** * Byte length of the GCM authentication tag, is a security parameter. * The AES-GCM specification recommends that it should be 16, 15, 14, 13, or 12 bytes, * although 8 or 4 bytes may be acceptable in some applications. * For additional guidance, see [Appendix C](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf) of the NIST Publication * on "Recommendation for Block Cipher Modes of Operation". * * Default and recommended value is 16. On Apple, the only supported value for encryption is 16. */ export type GCMTagByteLength = 16 | 15 | 14 | 13 | 12 | 8 | 4; /** * Configuration for parsing sealed data from combined format. */ export interface AESSealedDataConfig { /** * The length of the initialization vector in bytes. * @default 12 */ ivLength: number; /** * The length of the authentication tag in bytes. * @default 16 */ tagLength: GCMTagByteLength; } /** * Options for the decryption process. */ export interface AESDecryptOptions { /** * Output format for the decrypted data. * @default 'bytes' */ output?: 'bytes' | 'base64'; /** * Additional authenticated data (AAD) for GCM mode. * When provided as a string, it must be base64-encoded. */ additionalData?: BinaryInput; } /** * @hidden * Decrypt options that return the result as a `base64` string. */ export interface Base64DecryptOptions extends AESDecryptOptions { output: 'base64'; } /** * @hidden * Decrypt options that return the result as a `Uint8Array`. */ export interface ArrayBufferDecryptOptions extends AESDecryptOptions { output?: 'bytes'; } /** * Configuration for the nonce (initialization vector) during encryption. * Can specify either the byte length of the IV to generate or provide an IV directly. */ export type GCMNonceParam = | { /** * Byte length of nonce to be generated. * @default 12 */ length: number; } | { /** * Provided nonce bytes. */ bytes: BinaryInput; }; /** * Options for the encryption process. */ export interface AESEncryptOptions { /** * Parameters for nonce generation. * @default { length: 12 } */ nonce?: GCMNonceParam; /** * The length of the authentication tag in bytes. * * > **Note:** On Apple, this option is ignored. The tag will always have 16 bytes. * * @platform android * @platform web * @default 16 */ tagLength?: GCMTagByteLength; /** * Additional authenticated data (AAD) for GCM mode. * When provided as a string, it must be base64-encoded. */ additionalData?: BinaryInput; }