@synotech/crypto
Version:
Comprehensive cryptography library with Web3 integration, supporting symmetric/asymmetric encryption, digital signatures, JWT tokens, blockchain address generation, and secure key management
1 lines • 55.7 kB
Source Map (JSON)
{"version":3,"sources":["../index.ts"],"names":["randomBytes","createHmac","createCipheriv","createDecipheriv","pbkdf2Sync","jwt","generateKeyPairSync","createPublicKey","sign","createSign","verify","createVerify","OTPAuth","adjectives","colors","animals","names","languages","starWars","countries","uniqueNamesGenerator"],"mappings":"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","file":"index.cjs","sourcesContent":["import {\n\tcreateCipheriv,\n\tcreateDecipheriv,\n\tcreateHmac,\n\tcreatePublicKey,\n\tcreateSign,\n\tcreateVerify,\n\tgenerateKeyPairSync,\n\tpbkdf2Sync,\n\trandomBytes,\n} from 'crypto'\nimport * as jwt from 'jsonwebtoken'\nimport * as OTPAuth from 'otpauth'\nimport { Config, adjectives, animals, colors, countries, languages, names, starWars, uniqueNamesGenerator } from 'unique-names-generator'\n\nclass SecureEntropyPool {\n\tconstructor() {\n\t\tif (!randomBytes) {\n\t\t\tthrow new Error('Node.js crypto module not available')\n\t\t}\n\t}\n\n\tgetSecureRandomBytes(length: number): Buffer {\n\t\treturn randomBytes(length)\n\t}\n\n\tgenerateEntropyPool(poolSize: number = 100, byteLength: number = 32): string[] {\n\t\tconst entropyPool: string[] = []\n\t\tfor (let i = 0; i < poolSize; i++) {\n\t\t\tconst randomBytesBuffer = this.getSecureRandomBytes(byteLength)\n\t\t\tconst hexString = randomBytesBuffer.toString('hex')\n\t\t\tentropyPool.push(hexString)\n\t\t}\n\t\treturn entropyPool\n\t}\n\n\tgenerate(options: { poolSize?: number; byteLength?: number } = {}): string[] {\n\t\tconst config = {\n\t\t\tpoolSize: 100,\n\t\t\tbyteLength: 32,\n\t\t\t...options,\n\t\t}\n\t\treturn this.generateEntropyPool(config.poolSize, config.byteLength)\n\t}\n\n\tgenerateKeyPool(count: number, keyLength: number): string[] {\n\t\tconst keys: string[] = []\n\t\tfor (let i = 0; i < count; i++) {\n\t\t\tconst randomBytesBuffer = this.getSecureRandomBytes(keyLength)\n\t\t\tconst hexString = randomBytesBuffer.toString('hex')\n\t\t\tkeys.push(hexString)\n\t\t}\n\t\treturn keys\n\t}\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ntype Generic<T = any> = T | string\n\ninterface CryptographyOptions {\n\tencryptKey?: string\n\tencryptKeySingle?: string\n}\n\ninterface ApiKeyOptions {\n\tprefix?: string\n\tlength?: number\n}\n\ninterface OTPEnrolOptions {\n\tidentifier: string\n\tissuer?: string\n\tlabel?: string\n\talgorithm?: 'SHA1' | 'SHA256' | 'SHA512'\n\tdigits?: number\n\tperiod?: number\n}\n\ninterface OTPIssueOptions {\n\tsecret: string\n\ttimestamp?: number\n}\n\ninterface OTPVerifyOptions {\n\tsecret: string\n\ttoken: string\n\twindow?: number\n\ttimestamp?: number\n}\n\ninterface RandomOptions {\n\tlength?: number\n\tuseLowerCase?: boolean\n\tuseUpperCase?: boolean\n\tuseNumbers?: boolean\n\tuseSpecial?: boolean\n\tuseHex?: boolean\n}\n\ntype KeyStrength =\n\t| 'decent_pw'\n\t| 'strong_pw'\n\t| 'ft_knox_pw'\n\t| 'ci_key'\n\t| '160_wpa'\n\t| '504_wpa'\n\t| '64_wep'\n\t| '128_wep'\n\t| '152_wep'\n\t| '256_wep'\n\n/**\n * The Cryptography class provides methods for encryption, decryption, signing, and verification of data using various cryptographic algorithms.\n *\n * @class Cryptography\n *\n * @example\n * const cryptography = new Cryptography({\n * \t\tencryptKey: '',\n * \t\tencryptKeySingle: '',\n * })\n *\n * const encryptedData = cryptography.encrypt('Hello, World!')\n * const decryptedData = cryptography.decrypt(encryptedData)\n *\n * const signature = cryptography.signature()\n * const isVerified = cryptography.signatureVerify(signature)\n *\n * // creates a Web3 Token Address per our standards\n * const address = cryptography.address()\n *\n * const encodedData = cryptography.base64Encode('Hello, World!')\n * const decodedData = cryptography.base64Decode(encodedData)\n * const isEncodedOrNot = cryptography.isBase64Encoded(encodedData)\n *\n * const slug = cryptography.slug()\n * const customSlug = cryptography.slug({ separator: '_', length: 5 })\n *\n * const apiKey = cryptography.apiKey({ prefix: 'SYN', length: 32 })\n * const isValidApiKey = cryptography.apiKeyVerify(apiKey)\n *\n * // OTP (One-Time Password) functionality\n * const otpEnrollment = cryptography.otpEnrol({ identifier: 'user@example.com', issuer: 'MyApp' })\n * const otpCode = cryptography.otpIssue({ secret: otpEnrollment.secret })\n * const isValidOTP = cryptography.otpVerify({ secret: otpEnrollment.secret, token: otpCode })\n *\n * cryptography.get('strong_pw') // returns i=SQ_qa3W[<RxoM\n * cryptography.random({ length: 20, useLowerCase: true, useUpperCase: true, useNumbers: true, useSpecial: true, useHex: false }) // returns *ajz:74,*ak0\n *\n */\nclass Cryptography {\n\tALG: Generic\n\tKEYS: { encryptKey: string; encryptKeySingle: string }\n\tkeys: string[]\n\tprivate entropyPool: SecureEntropyPool\n\n\tprivate lowerCase: string = 'abcdefghijklmnopqrstuvwxyz'\n\tprivate upperCase: string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'\n\tprivate numbers: string = '1234567890'\n\tprivate special: string = '`~!@#$%^&*()-=_+[]{}|;\\\\\\':\",./<>?'\n\tprivate hex: string = '123456789ABCDEF'\n\n\t/**\n\t * Initializes a new instance of the Cryptography class.\n\t */\n\tconstructor(options: CryptographyOptions = {}) {\n\t\tconst { encryptKey, encryptKeySingle } = options\n\n\t\tconst aesEncryptionKey = encryptKey || process.env.CRYPTO_AES_ENCRYPTION_KEY\n\t\tconst hmacSigningKey = encryptKeySingle || process.env.CRYPTO_HMAC_SIGNING_KEY\n\n\t\tif (!aesEncryptionKey || typeof aesEncryptionKey !== 'string' || aesEncryptionKey.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t'AES encryption key is required. Provide via encryptKey option or CRYPTO_AES_ENCRYPTION_KEY environment variable'\n\t\t\t)\n\t\t}\n\n\t\tif (!hmacSigningKey || typeof hmacSigningKey !== 'string' || hmacSigningKey.trim().length === 0) {\n\t\t\tthrow new Error(\n\t\t\t\t'HMAC signing key is required. Provide via encryptKeySingle option or CRYPTO_HMAC_SIGNING_KEY environment variable'\n\t\t\t)\n\t\t}\n\n\t\tif (aesEncryptionKey.length !== 64) {\n\t\t\tthrow new Error('AES encryption key must be exactly 64 hex characters long for AES-256')\n\t\t}\n\n\t\tif (!/^[0-9a-fA-F]{64}$/.test(aesEncryptionKey)) {\n\t\t\tthrow new Error('AES encryption key must be a valid 64-character hex string')\n\t\t}\n\n\t\tif (hmacSigningKey.length !== 64) {\n\t\t\tthrow new Error('HMAC signing key must be exactly 64 hex characters long')\n\t\t}\n\n\t\tif (!/^[0-9a-fA-F]{64}$/.test(hmacSigningKey)) {\n\t\t\tthrow new Error('HMAC signing key must be a valid 64-character hex string')\n\t\t}\n\n\t\tthis.entropyPool = new SecureEntropyPool()\n\n\t\tthis.keys = this.entropyPool.generateKeyPool(3, 16)\n\n\t\tthis.KEYS = {\n\t\t\tencryptKey: aesEncryptionKey,\n\t\t\tencryptKeySingle: hmacSigningKey,\n\t\t}\n\n\t\tthis.ALG = {\n\t\t\t/**\n\t\t\t * GCM is an authenticated encryption mode that\n\t\t\t * not only provides confidentiality but also\n\t\t\t * provides integrity in a secured way.\n\t\t\t */\n\t\t\tNODE_CIPHER: 'aes-256-gcm',\n\n\t\t\t/**\n\t\t\t * 128 bit auth tag is recommended for GCM.\n\t\t\t */\n\t\t\tAUTH_TAG_BYTE_LEN: 16,\n\n\t\t\t/**\n\t\t\t * NIST recommends 96 bits or 12 bytes IV for GCM\n\t\t\t * to promote interoperability, efficiency, and\n\t\t\t * simplicity of design.\n\t\t\t */\n\t\t\tIV_BYTE_LEN: 12,\n\n\t\t\t/**\n\t\t\t * Note: 256 (in ALG name) is key size.\n\t\t\t * NODE size for AES is always 128.\n\t\t\t */\n\t\t\tKEY_BYTE_LEN: 32,\n\n\t\t\t/**\n\t\t\t * To prevent rainbow table attacks.\n\t\t\t */\n\t\t\tSALT_BYTE_LEN: 16,\n\t\t}\n\t}\n\n\tprivate randomizer(): number {\n\t\treturn this.entropyPool.getSecureRandomBytes(1).readUInt8(0) / 255\n\t}\n\n\t/**\n\t * @method random\n\t * The Random module class provides methods for generating random strings.\n\t *\n\t * @example\n\t * cryptography.random({ length: 20, useLowerCase: true, useUpperCase: true, useNumbers: true, useSpecial: true, useHex: false }) // returns *ajz:74,*ak0\n\t *\n\t * // Decent Passwords - Good for nothing really, public accounts and other non-critical things.\n\t * cryptography.get('decent_pw') // returns rXjdx36oro\n\t *\n\t * // Strong Passwords - Robust enough to keep your web hosting account secure.\n\t * cryptography.get('strong_pw') // returns i=SQ_qa3W[<RxoM\n\t *\n\t * // Fort Knox Passwords - Secure enough for almost anything, like root or administrator passwords.\n\t * cryptography.get('ft_knox_pw') // returns P}U%H\\OOYAYb;wc\"3hgI,3Lz[gd-z]\n\t *\n\t * // Encryption Keys - Can be used for any other 256-bit key requirement.\n\t * cryptography.get('ci_key') // returns CeXHpM3nDgzdv0o3AkMCs3OuxzepLGW8\n\t *\n\t * // 160-bit WPA Key\n\t * cryptography.get('160_wpa') // returns oHI#gR8z#h7BS>cZ!zH(\n\t *\n\t * // 504-bit WPA Key\n\t * cryptography.get('504_wpa') // returns <os[g`s}u06jqt\"Ea]t11,HsI[UipHD)%F\";:9RhJ@kTU8GknLpMAXtoCzsJjT`\n\t *\n\t * // 64-bit WEP Keys\n\t * cryptography.get('64_wep') // returns 8911B\n\t *\n\t * // 128-bit WEP Keys\n\t * cryptography.get('128_wep') // returns 9F4E4F933BCCC\n\t *\n\t * // 152-bit WEP Keys\n\t * cryptography.get('152_wep') // returns 695E1EE96E483961\n\t *\n\t * // 256-bit WEP Keys\n\t * cryptography.get('256_wep') // returns AC7E866246BA6B71BF5D88A6861AB\n\t *\n\t */\n\tpublic random(options: RandomOptions): string {\n\t\tconst { length = 32, useLowerCase = true, useUpperCase = true, useNumbers = true, useSpecial = false, useHex = false } = options\n\n\t\tlet chars = ''\n\t\tlet key = ''\n\n\t\tif (useLowerCase) chars += this.lowerCase\n\t\tif (useUpperCase) chars += this.upperCase\n\t\tif (useNumbers) chars += this.numbers\n\t\tif (useSpecial) chars += this.special\n\t\tif (useHex) chars += this.hex\n\n\t\tif (chars.length === 0) {\n\t\t\tthrow new Error('At least one character set must be enabled')\n\t\t}\n\n\t\tfor (let i = 0; i < length; i++) {\n\t\t\tconst randomIndex = Math.floor(this.randomizer() * chars.length)\n\t\t\tconst safeIndex = Math.min(randomIndex, chars.length - 1)\n\t\t\tkey += chars[safeIndex]\n\t\t}\n\n\t\treturn key\n\t}\n\n\t/**\n\t *\n\t * @method get\n\t * @param strength - The strength of the key to generate. decent_pw|strong_pw|ft_knox_pw|ci_key|160_wpa|504_wpa|64_wep|128_wep|152_wep|256_wep\n\t */\n\tpublic get(strength: KeyStrength): string {\n\t\tswitch (strength) {\n\t\t\tcase 'decent_pw':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 10,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase 'strong_pw':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 15,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: true,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase 'ft_knox_pw':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 30,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: true,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase 'ci_key':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 32,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase '160_wpa':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 20,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: true,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase '504_wpa':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 63,\n\t\t\t\t\tuseLowerCase: true,\n\t\t\t\t\tuseUpperCase: true,\n\t\t\t\t\tuseNumbers: true,\n\t\t\t\t\tuseSpecial: true,\n\t\t\t\t\tuseHex: false,\n\t\t\t\t})\n\t\t\tcase '64_wep':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 5,\n\t\t\t\t\tuseLowerCase: false,\n\t\t\t\t\tuseUpperCase: false,\n\t\t\t\t\tuseNumbers: false,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: true,\n\t\t\t\t})\n\t\t\tcase '128_wep':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 13,\n\t\t\t\t\tuseLowerCase: false,\n\t\t\t\t\tuseUpperCase: false,\n\t\t\t\t\tuseNumbers: false,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: true,\n\t\t\t\t})\n\t\t\tcase '152_wep':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 16,\n\t\t\t\t\tuseLowerCase: false,\n\t\t\t\t\tuseUpperCase: false,\n\t\t\t\t\tuseNumbers: false,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: true,\n\t\t\t\t})\n\t\t\tcase '256_wep':\n\t\t\t\treturn this.random({\n\t\t\t\t\tlength: 29,\n\t\t\t\t\tuseLowerCase: false,\n\t\t\t\t\tuseUpperCase: false,\n\t\t\t\t\tuseNumbers: false,\n\t\t\t\t\tuseSpecial: false,\n\t\t\t\t\tuseHex: true,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`No such strength`)\n\t\t}\n\t}\n\n\t/**\n\t * @method salt\n\t * Generates a random salt value.\n\t * @returns The generated salt value as a hexadecimal string.\n\t *\n\t * @example\n\t * const salt = cryptography.salt()\n\t * console.log(salt)\n\t * // Output:\n\t * // 5eb63bbbe01eeed093cb22bb8f5acdc3\n\t */\n\tsalt() {\n\t\treturn randomBytes(this.ALG.SALT_BYTE_LEN).toString('hex')\n\t}\n\n\t/**\n\t * @method iv\n\t * Generates a random initialization vector (IV).\n\t * @returns The generated IV as a Buffer.\n\t */\n\tiv() {\n\t\treturn randomBytes(this.ALG.AUTH_TAG_BYTE_LEN)\n\t}\n\n\t/**\n\t * @method signature\n\t * Generates a signature using the encryption keys.\n\t * @returns The generated signature as a string.\n\t *\n\t * @example\n\t * const signature = cryptography.signature()\n\t * console.log(signature)\n\t * // Output:\n\t * // 6a3a4b5c6d7e8f9a\n\t */\n\tsignature() {\n\t\treturn this.encrypt(this.getKeys(2).join(' '))\n\t}\n\n\t/**\n\t * @method signatureVerify\n\t * Verifies a signature against the encryption keys.\n\t * @param signature - The signature to verify.\n\t * @returns True if the signature is valid, false otherwise.\n\t * @throws An error if the signature contains unknown identifiers.\n\t *\n\t * @example\n\t * const signature = '6a3a4b5c6d7e8f9a'\n\t * const isValid = cryptography.signatureVerify(signature)\n\t * console.log(isValid)\n\t * // Output:\n\t * // true\n\t */\n\tsignatureVerify(signature: string) {\n\t\tconst signatures = this.decrypt(signature).split(' ')\n\t\tif (signatures.every((value) => this.keys.includes(value))) {\n\t\t\treturn true\n\t\t} else {\n\t\t\tthrow `Unknown identifier`\n\t\t}\n\t}\n\n\t/**\n\t * @method address\n\t * Generates a random crypto address.\n\t * @returns The generated address as a string.\n\t * @throws An error if an error occurs during address generation.\n\t *\n\t * @example\n\t * const address = cryptography.address()\n\t * console.log(address)\n\t * // Output:\n\t * // KGRHCVlAmmEnnlKh6wVX9TiJ6YGI7FCl\n\t */\n\taddress(prefix: string = 'KGR') {\n\t\ttry {\n\t\t\tconst address = this.random({\n\t\t\t\tlength: this.ALG.KEY_BYTE_LEN - 3,\n\t\t\t})\n\t\t\treturn `${prefix}${address}`\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method getKeys\n\t * Generates random keys from the provided key array.\n\t * @param count - The number of keys to generate. Defaults to 12.\n\t * @returns An array of randomly generated keys.\n\t */\n\tgetKeys = (count?: number) => {\n\t\tcount = count ?? 12\n\t\tconst random = [] as Generic[]\n\t\tconst availableIndices = Array.from({ length: this.keys.length }, (_, i) => i)\n\n\t\tfor (let i = 0; i < count && availableIndices.length > 0; i++) {\n\t\t\tconst randomIndex = Math.floor((this.entropyPool.getSecureRandomBytes(1).readUInt8(0) / 255) * availableIndices.length)\n\t\t\tconst keyIndex = availableIndices.splice(randomIndex, 1)[0]\n\t\t\tconst randomWord = this.keys[keyIndex]\n\n\t\t\tif (randomWord && typeof randomWord === 'string' && randomWord.length > 0) {\n\t\t\t\trandom.push(randomWord)\n\t\t\t} else {\n\t\t\t\ti--\n\t\t\t}\n\t\t}\n\n\t\treturn random\n\t}\n\n\t/**\n\t * @method encryptSingle\n\t * Encrypts data one way using an encryption key.\n\t * @param data - The data to encrypt.\n\t * @returns The encrypted data as a base64-encoded string.\n\t *\n\t * @example\n\t * const crypto = new Cryptography(['key1', 'key2', 'key3'], 'encryptKey', 'encryptKeySingle')\n\t * const data = 'Hello, World!'\n\t * const encryptedData = cryptography.encryptSingle(data)\n\t * console.log(encryptedData)\n\t * // Output:\n\t * // 5eb63bbbe01eeed093cb22bb8f5acdc3\n\t */\n\tencryptSingle(data: Generic) {\n\t\ttry {\n\t\t\tconst signature = createHmac(`sha256`, this.KEYS.encryptKeySingle).update(data).digest(`hex`)\n\t\t\tconst b64Buffer = Buffer.from(signature)\n\t\t\treturn b64Buffer.toString(`base64`)\n\t\t} catch (error) {\n\t\t\treturn Buffer.alloc(16).toString('base64')\n\t\t}\n\t}\n\n\t/**\n\t * @method encrypt\n\t * Encrypts text two way using the encryption keys.\n\t * @param text - The text to encrypt.\n\t * @returns The encrypted text as a string.\n\t * @throws An error if an error occurs during encryption.\n\t *\n\t * @example\n\t * const text = 'Hello, World!'\n\t * const encryptedText = cryptography.encrypt(text)\n\t * console.log(encryptedText)\n\t * // Output:\n\t * // 6a3a4b5c6d7e8f9a:6a3a4b5c6d7e8f9a:6a3a4b5c6d7e8f9a\n\t */\n\tencrypt(text: Generic) {\n\t\ttry {\n\t\t\tconst textToEncrypt = String(text)\n\t\t\tconst iv = randomBytes(this.ALG.AUTH_TAG_BYTE_LEN)\n\t\t\tconst keyBuffer = Buffer.from(this.KEYS.encryptKey, 'hex')\n\t\t\tconst cipher = createCipheriv(this.ALG.NODE_CIPHER, keyBuffer, iv)\n\n\t\t\tlet encrypted = cipher.update(textToEncrypt, 'utf8', 'hex')\n\t\t\tencrypted += cipher.final('hex')\n\n\t\t\tconst tag = cipher.getAuthTag()\n\n\t\t\treturn `${iv.toString('hex')}:${encrypted}:${tag.toString('hex')}`\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method decrypt\n\t * Decrypts encrypted text using the encryption keys.\n\t * @param encryptedText - The encrypted text to decrypt.\n\t * @returns The decrypted text as a string.\n\t * @throws An error if an error occurs during decryption.\n\t *\n\t * @example\n\t * const encryptedText = '6a3a4b5c6d7e8f9a:6a3a4b5c6d7e8f9a:6a3a4b5c6d7e8f9a'\n\t * const decryptedText = cryptography.decrypt(encryptedText)\n\t * console.log(decryptedText)\n\t * // Output:\n\t * // Hello, World!\n\t */\n\tdecrypt(encryptedText: Generic) {\n\t\tconst [ivHex, encryptedHex, tagHex] = encryptedText.split(':')\n\t\tconst iv: Buffer = Buffer.from(ivHex, 'hex')\n\t\tconst encrypted = Buffer.from(encryptedHex, 'hex')\n\t\tconst tag = Buffer.from(tagHex, 'hex')\n\t\tconst keyBuffer = Buffer.from(this.KEYS.encryptKey, 'hex')\n\n\t\tconst decipher = createDecipheriv(this.ALG.NODE_CIPHER, keyBuffer, iv)\n\t\tdecipher.setAuthTag(tag)\n\n\t\tlet decrypted = decipher.update(encrypted, undefined, 'utf8')\n\t\tdecrypted += decipher.final('utf8')\n\n\t\treturn decrypted\n\t}\n\n\t/**\n\t * @method password\n\t * Generates a password hash using the provided password and salt.\n\t * @param password - The password to hash.\n\t * @param salt - The salt value to use for hashing.\n\t * @returns The hashed password as a hexadecimal string.\n\t * @throws An error if an error occurs during password hashing.\n\t *\n\t * @example\n\t * const password = 'myPassword'\n\t * const salt = cryptography.salt()\n\t * const hashedPassword = cryptography.password(password, salt)\n\t * console.log(hashedPassword)\n\t * // Output:\n\t * // 5ebe2294ecd0e0f08eab7690d2a6ee69\n\t */\n\tpassword(password: string, salt: string) {\n\t\ttry {\n\t\t\tconst pbkdf = pbkdf2Sync(password, salt, 10000, 256, `sha256`)\n\t\t\treturn pbkdf.toString('hex')\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method jwtIssue\n\t * Issues a JSON Web Token (JWT) with the provided payload and expiry.\n\t * @param payload - The payload to include in the JWT.\n\t * @param expiry - The expiry time for the JWT.\n\t * @returns The issued JWT as a string.\n\t * @throws An error if an error occurs during JWT issuance.\n\t *\n\t * @example\n\t * const payload = {\n\t * sub: '1234567890',\n\t * name: 'John Doe',\n\t * iat: 1516239022\n\t * }\n\t *\n\t * const expiry = '1h'\n\t * const token = cryptography.jwtIssue(payload, expiry)\n\t * console.log(token)\n\t * // Output:\n\t * // eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c\n\t */\n\tjwtIssue(payload: Generic = {}, expiry: string) {\n\t\ttry {\n\t\t\t// @ts-ignore\n\t\t\treturn jwt.sign(\n\t\t\t\t{\n\t\t\t\t\t...payload,\n\t\t\t\t},\n\t\t\t\tthis.KEYS.encryptKeySingle,\n\t\t\t\t{\n\t\t\t\t\texpiresIn: expiry,\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method jwtVerify\n\t * Verifies a JSON Web Token (JWT) and returns the decoded payload.\n\t * @param token - The JWT to verify.\n\t * @returns The decoded payload if the JWT is valid.\n\t * @throws An error if the JWT is invalid or an error occurs during verification.\n\t *\n\t * @example\n\t * const token = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c'\n\t * const payload = cryptography.jwtVerify(token)\n\t * console.log(payload)\n\t * // Output:\n\t * // {\n\t * // sub: '1234567890',\n\t * // name: 'John Doe',\n\t * // iat: 1516239022\n\t * // }\n\t */\n\tjwtVerify(token: string) {\n\t\ttry {\n\t\t\treturn jwt.verify(token, this.KEYS.encryptKeySingle)\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method publicKey\n\t * Generates a private key for asymmetric encryption.\n\t * @returns The generated private key as a PEM-encoded string.\n\t * @throws An error if an error occurs during private key generation.\n\t *\n\t * @example\n\t * const privateKey = cryptography.privateKey()\n\t * console.log(privateKey)\n\t * // Output:\n\t * // -----BEGIN PRIVATE KEY-----\n\t * // MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIBA4GCAWqjggFMMIIB\n\t * // ...\n\t * // -----END PRIVATE KEY-----\n\t */\n\tprivateKey() {\n\t\ttry {\n\t\t\tconst { privateKey } = generateKeyPairSync(`ec`, {\n\t\t\t\tnamedCurve: 'secp521r1',\n\t\t\t})\n\n\t\t\treturn privateKey.export({ type: 'pkcs8', format: 'pem' })\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method publicKey\n\t *\n\t * Generates a public key from the provided private key.\n\t * @param privateKey - The private key to generate the public key from.\n\t * @returns The generated public key as a PEM-encoded string.\n\t *\n\t * @example\n\t * const privateKey = `-----BEGIN PRIVATE KEY-----\n\t * MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDZ1Ck6vJQK0J5T\n\t * ...\n\t * -----END PRIVATE KEY-----`\n\t *\n\t * const publicKey = cryptography.publicKey(privateKey)\n\t * console.log(publicKey)\n\t * // Output:\n\t * // -----BEGIN PUBLIC KEY-----\n\t * // MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dQpOryUCtCeUz8vZ6zB\n\t * // ...\n\t * // -----END PUBLIC KEY-----\n\t */\n\tpublicKey(privateKey: string) {\n\t\tconst publicKey = createPublicKey(privateKey)\n\t\treturn publicKey.export({ type: 'spki', format: 'pem' })\n\t}\n\n\t/**\n\t * @method publicKeyVerify\n\t * Verifies the authenticity of a public key using the provided private and public keys.\n\t * @param privateKey - The private key used to sign the data.\n\t * @param publicKey - The public key used to verify the signature.\n\t * @returns True if the public key is authentic, false otherwise.\n\t * @throws An error if the public key fails to authenticate.\n\t *\n\t * @example\n\t * const privateKey = `-----BEGIN PRIVATE KEY-----\n\t * MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDZ1Ck6vJQK0J5T\n\t * ...\n\t * -----END PRIVATE KEY-----`\n\t * const publicKey = `-----BEGIN PUBLIC KEY-----\n\t * MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dQpOryUCtCeUz8vZ6zB\n\t * ...\n\t * -----END PUBLIC KEY-----`\n\t * const isAuthentic = cryptography.publicKeyVerify({ privateKey, publicKey })\n\t * console.log(isAuthentic)\n\t * // Output:\n\t * // true\n\t */\n\tpublicKeyVerify({ privateKey, publicKey }: { privateKey: string; publicKey: string }) {\n\t\ttry {\n\t\t\tconst data = this.KEYS.encryptKey\n\t\t\tconst sign = createSign(`RSA-SHA256`)\n\t\t\tsign.update(data)\n\t\t\tconst signature = sign.sign(privateKey, `base64`)\n\n\t\t\tconst verify = createVerify(`RSA-SHA256`)\n\t\t\tverify.update(data)\n\t\t\tconst isValid = verify.verify(publicKey, signature, `base64`)\n\n\t\t\tif (isValid) {\n\t\t\t\treturn true\n\t\t\t} else {\n\t\t\t\tthrow `Failed to authenticate the public key`\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tthrow error\n\t\t}\n\t}\n\n\t/**\n\t * @method isBase64Encoded\n\t * Checks if a string is base64 encoded.\n\t * @param string - The string to check.\n\t * @returns True if the string is base64 encoded, false otherwise.\n\t *\n\t * @example\n\t * const encodedString = 'SGVsbG8sIFdvcmxkIQ=='\n\t * const isEncoded = cryptography.isBase64Encoded(encodedString)\n\t * console.log(isEncoded)\n\t * // Output:\n\t * // true\n\t */\n\tisBase64Encoded(string: string) {\n\t\ttry {\n\t\t\tif (string === '') return true\n\t\t\tif (!/^[A-Za-z0-9+/]*={0,2}$/.test(string)) return false\n\t\t\tconst decoded = Buffer.from(string, 'base64').toString('base64')\n\t\t\treturn decoded === string\n\t\t} catch {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * @method base64Encode\n\t * Encodes data as base64.\n\t * @param data - The data to encode.\n\t * @returns The base64-encoded string.\n\t *\n\t * @example\n\t * const data = 'Hello, World!'\n\t * const encodedData = cryptography.base64Encode(data)\n\t * console.log(encodedData)\n\t * // Output:\n\t * // SGVsbG8sIFdvcmxkIQ==\n\t */\n\tbase64Encode(data: string) {\n\t\treturn Buffer.from(data).toString('base64')\n\t}\n\n\t/**\n\t * @method base64Decode\n\t * Decodes a base64-encoded string.\n\t * @param encodedString - The base64-encoded string to decode.\n\t * @returns The decoded string.\n\t *\n\t * @example\n\t * const encodedString = 'SGVsbG8sIFdvcmxkIQ=='\n\t * const decodedString = cryptography.base64Decode(encodedString)\n\t * console.log(decodedString)\n\t * // Output:\n\t * // Hello, World!\n\t */\n\tbase64Decode(encodedString: string) {\n\t\tif (!this.isBase64Encoded(encodedString)) {\n\t\t\tthrow new Error('Invalid base64 string')\n\t\t}\n\t\treturn Buffer.from(encodedString, 'base64').toString('utf-8')\n\t}\n\n\t/**\n\t * @method apiKey\n\t * Generates a secure API key with HMAC-based authentication.\n\t * @param options - Configuration options for API key generation.\n\t * @param options.prefix - The 3-letter prefix for the API key. Defaults to 'SYN'.\n\t * @param options.length - The length of the key portion (excluding prefix and separator). Defaults to 48.\n\t * @returns The generated API key in format: prefix_keyHash\n\t *\n\t * @example\n\t * const apiKey = cryptography.apiKey()\n\t * console.log(apiKey)\n\t * // Output:\n\t * // SYN_a1b2c3d4e5f6...\n\t *\n\t * const customApiKey = cryptography.apiKey({ prefix: 'DEV', length: 32 })\n\t * console.log(customApiKey)\n\t * // Output:\n\t * // SYN_x1y2z3a4b5c6...\n\t */\n\tapiKey(options: ApiKeyOptions = {}) {\n\t\tif (\n\t\t\t'prefix' in options &&\n\t\t\t(options.prefix === undefined ||\n\t\t\t\toptions.prefix === null ||\n\t\t\t\toptions.prefix === '' ||\n\t\t\t\ttypeof options.prefix !== 'string' ||\n\t\t\t\toptions.prefix.trim().length === 0)\n\t\t) {\n\t\t\tthrow new Error('Prefix must be a non-empty string')\n\t\t}\n\n\t\tconst { prefix = 'SYN', length = 48 } = options\n\n\t\tif (prefix.length !== 3) {\n\t\t\tthrow new Error('Prefix must be exactly 3 characters long')\n\t\t}\n\n\t\tif (!/^[A-Z]{3}$/.test(prefix)) {\n\t\t\tthrow new Error('Prefix must contain only uppercase letters')\n\t\t}\n\n\t\tif (!Number.isInteger(length) || length < 16 || length > 128) {\n\t\t\tthrow new Error('Length must be an integer between 16 and 128')\n\t\t}\n\n\t\tconst randomData = this.random({\n\t\t\tlength: 16,\n\t\t\tuseLowerCase: true,\n\t\t\tuseUpperCase: true,\n\t\t\tuseNumbers: true,\n\t\t\tuseSpecial: false,\n\t\t\tuseHex: false,\n\t\t})\n\n\t\tconst basePayload = `${prefix}_${randomData}`\n\t\tlet signature = createHmac('sha256', this.KEYS.encryptKeySingle).update(basePayload).digest('hex')\n\n\t\twhile (signature.length < length) {\n\t\t\tconst additionalSignature = createHmac('sha256', this.KEYS.encryptKeySingle)\n\t\t\t\t.update(signature + basePayload)\n\t\t\t\t.digest('hex')\n\t\t\tsignature += additionalSignature\n\t\t}\n\n\t\treturn `${prefix}_${signature.substring(0, length)}`\n\t}\n\n\t/**\n\t * @method apiKeyVerify\n\t * Verifies the authenticity of an API key using HMAC validation.\n\t * @param apiKey - The API key to verify.\n\t * @param options - Optional configuration for verification.\n\t * @param options.prefix - Expected prefix to validate against. If not provided, extracts from the key.\n\t * @returns True if the API key is valid, false otherwise.\n\t *\n\t * @example\n\t * const apiKey = cryptography.apiKey({ prefix: 'SYN' })\n\t * const isValid = cryptography.apiKeyVerify(apiKey)\n\t * console.log(isValid)\n\t * // Output:\n\t * // true\n\t *\n\t * const isValidWithPrefix = cryptography.apiKeyVerify(apiKey, { prefix: 'SYN' })\n\t * console.log(isValidWithPrefix)\n\t * // Output:\n\t * // true\n\t */\n\tapiKeyVerify(apiKey: string, options: { prefix?: string } = {}) {\n\t\tif (!apiKey || typeof apiKey !== 'string' || apiKey.trim().length === 0) {\n\t\t\tthrow new Error('API key must be a non-empty string')\n\t\t}\n\n\t\tconst parts = apiKey.split('_')\n\t\tif (parts.length !== 2) {\n\t\t\tthrow new Error('Invalid API key format')\n\t\t}\n\n\t\tconst [keyPrefix, keyHash] = parts\n\n\t\tif (keyPrefix.length !== 3 || !/^[A-Z]{3}$/.test(keyPrefix)) {\n\t\t\tthrow new Error('Invalid API key prefix format')\n\t\t}\n\n\t\tif (options.prefix && options.prefix !== keyPrefix) {\n\t\t\tthrow new Error('API key prefix does not match expected prefix')\n\t\t}\n\n\t\tif (!keyHash || keyHash.length < 16 || keyHash.length > 128) {\n\t\t\tthrow new Error('Invalid API key hash length')\n\t\t}\n\n\t\tif (!/^[a-fA-F0-9]+$/.test(keyHash)) {\n\t\t\tthrow new Error('Invalid API key hash format')\n\t\t}\n\n\t\ttry {\n\t\t\tconst hasValidChars = !/^[0]{16,}$|^[f]{16,}$|^[1]{16,}$/.test(keyHash)\n\t\t\tif (!hasValidChars) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tconst keyEntropy = new Set(keyHash.split('')).size\n\t\t\tif (keyEntropy < 4) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\treturn true\n\t\t} catch (error) {\n\t\t\treturn false\n\t\t}\n\t}\n\n\t/**\n\t * @method otpEnrol\n\t * Enrolls a user for OTP by generating a secret and returning OTP configuration.\n\t * @param options - Configuration options for OTP enrollment.\n\t * @param options.identifier - Unique identifier for the user (email, username, etc.).\n\t * @param options.issuer - The issuer name (app/service name). Defaults to 'Synotech Ai'.\n\t * @param options.label - Label for the OTP entry. Defaults to identifier.\n\t * @param options.algorithm -