UNPKG

node-ciphers

Version:

Lightweight AES and DES encryption library for Node.js, featuring flexible encoding, multiple cipher modes, and TypeScript support.

1 lines 6.35 kB
{"version":3,"file":"ccm.cjs","sources":["../../src/aes/ccm.ts"],"sourcesContent":["import { randomBytes } from 'node:crypto';\nimport type { BinaryLike } from 'node:crypto';\nimport type { TransformOptions } from 'node:stream';\n\nimport type {\n HasAuthTagAesCipherEncodingOptions,\n Result,\n} from '../types';\n\nimport { BaseAesCipher } from './base';\n\ntype AvailableIvLength = 7 | 8 | 9 | 10 | 11 | 12 | 13;\n\nexport class Ccm extends BaseAesCipher<HasAuthTagAesCipherEncodingOptions> {\n readonly #authTagLength: number;\n readonly #ivLength: AvailableIvLength;\n\n constructor(\n key: BinaryLike,\n encodingOptions?: HasAuthTagAesCipherEncodingOptions,\n authTagLength: number = 16,\n ivLength: AvailableIvLength = 12,\n ) {\n super(key, 'ccm', encodingOptions);\n this.#authTagLength = authTagLength;\n this.#ivLength = ivLength;\n }\n\n decrypt(\n encryptedData: BinaryLike,\n iv: BinaryLike,\n authTag: BinaryLike,\n authTagLength: number = this.#authTagLength,\n encodingOptions?: HasAuthTagAesCipherEncodingOptions.Decrypt,\n decipherOptions?: TransformOptions,\n ): Result<string> {\n try {\n const decipher = this.createDecipher(\n this.dataToBuffer(iv, encodingOptions?.iv || this.encodingOptions.iv),\n {\n authTagLength,\n ...decipherOptions,\n },\n );\n\n decipher.setAuthTag(this.dataToBuffer(authTag, encodingOptions?.authTag || this.encodingOptions.authTag));\n return this.createOkResult(this.getDecipherResult(decipher, encryptedData, encodingOptions));\n } catch (error) {\n return this.createErrorResult(error);\n }\n }\n\n decryptToJson<T = any>(\n encryptedData: BinaryLike,\n iv: BinaryLike,\n authTag: BinaryLike,\n authTagLength: number = this.#authTagLength,\n encodingOptions?: HasAuthTagAesCipherEncodingOptions.Decrypt,\n decipherOptions?: TransformOptions,\n ): Result<T> {\n const result = this.decrypt(encryptedData, iv, authTag, authTagLength, encodingOptions, decipherOptions);\n if (!result.ok) return result;\n return this.parseJson<T>(result.value);\n }\n\n encrypt(\n data: BinaryLike,\n authTagLength: number = this.#authTagLength,\n ivLength: AvailableIvLength = this.#ivLength,\n encodingOptions?: HasAuthTagAesCipherEncodingOptions.Encrypt,\n cipherOptions?: TransformOptions,\n ): Result<{ authTag: string; authTagLength: number; data: string; iv: string }> {\n const iv = randomBytes(ivLength);\n try {\n const cipher = this.createCipher(\n iv,\n {\n authTagLength,\n ...cipherOptions,\n },\n );\n\n const encryptedData = this.getCipherResult(cipher, data, encodingOptions);\n return this.createOkResult({\n authTag: cipher.getAuthTag().toString(encodingOptions?.authTag || this.encodingOptions.authTag),\n authTagLength,\n data: encryptedData,\n iv: iv.toString(encodingOptions?.iv || this.encodingOptions.iv),\n });\n } catch (error) {\n return this.createErrorResult(error);\n }\n }\n\n encryptJson(\n data: any,\n authTagLength: number = this.#authTagLength,\n ivLength: AvailableIvLength = this.#ivLength,\n encodingOptions?: HasAuthTagAesCipherEncodingOptions.Encrypt,\n cipherOptions?: TransformOptions,\n ): Result<{ authTag: string; authTagLength: number; data: string; iv: string }> {\n try {\n return this.encrypt(JSON.stringify(data), authTagLength, ivLength, encodingOptions, cipherOptions);\n } catch (error) {\n return this.createErrorResult(error);\n }\n }\n}\n"],"names":["BaseAesCipher","randomBytes"],"mappings":"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"}