UNPKG

3.63 kBSource Map (JSON)View Raw
1{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scryptify/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAEvE,MAAM,SAAS,GAAG,EAAE,CAAC;AAErB,SAAS,cAAc,CAAC,IAAY,EAAE,MAAc;IAClD,IAAI,QAAQ,KAAK,OAAM,CAAC,IAAI,CAAC,EAAE;QAC7B,MAAM,IAAI,SAAS,CAAC,iDAAiD,IAAI,GAAG,CAAC,CAAC;KAC/E;SAAM,IAAI,QAAQ,KAAK,OAAM,CAAC,MAAM,CAAC,EAAE;QACtC,MAAM,IAAI,SAAS,CAAC,mDAAmD,MAAM,GAAG,CAAC,CAAC;KACnF;SAAM,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;QAC1B,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;KACvD;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,EAAE,EAAE;QAC/B,MAAM,IAAI,UAAU,CAAC,qEAAqE,CAAC,CAAC;KAC7F;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,EAAE,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,cAAc,CAAC,aAAa,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAEjE,OAAO,GAAG,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc;IACtD,cAAc,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAE7B,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,gBAAgB,CAC/B,aAAa,EACb,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EACnB,MAAM,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,CACvB,CAAC;IACF,MAAM,eAAe,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACvE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAErE,OAAO,SAAS,CAAC,QAAQ,EAAE,CAAC;AAC9B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IACxD,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,MAAc;IACxD,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACnC,CAAC","sourcesContent":["import { createCipheriv, createDecipheriv, randomBytes } from 'crypto';\n\nconst IV_LENGTH = 16; /** For AES, this is always 16 */\n\nfunction validateInputs(text: string, secret: string) {\n if ('string' !== typeof(text)) {\n throw new TypeError(`Expected 'text' to be a string, but received '${text}'`);\n } else if ('string' !== typeof(secret)) {\n throw new TypeError(`Expected 'secret' to be a string, but received '${secret}'`);\n } else if (text.length < 1) {\n throw new Error(`'text' must not be an empty string`);\n } else if (secret.length !== 32) {\n throw new RangeError(`Invalid length of 'secret'. Must be 256 bytes or 32 characters long`);\n }\n}\n\nexport function encryptSync(text: string, secret: string) {\n validateInputs(text, secret);\n\n const iv = randomBytes(IV_LENGTH);\n const cipher = createCipheriv('aes-256-cbc', Buffer.from(secret), iv);\n const cipherInitial = cipher.update(Buffer.from(text));\n const encrypted = Buffer.concat([cipherInitial, cipher.final()]);\n\n return `${iv.toString('hex')}:${encrypted.toString('hex')}`;\n}\n\nexport function decryptSync(text: string, secret: string) {\n validateInputs(text, secret);\n\n const [iv, encrypted] = text.split(':');\n const decipher = createDecipheriv(\n 'aes-256-cbc',\n Buffer.from(secret),\n Buffer.from(iv, 'hex')\n );\n const decipherInitial = decipher.update(Buffer.from(encrypted, 'hex'));\n const decrypted = Buffer.concat([decipherInitial, decipher.final()]);\n\n return decrypted.toString();\n}\n\nexport async function encrypt(text: string, secret: string) {\n return encryptSync(text, secret);\n}\n\nexport async function decrypt(text: string, secret: string) {\n return decryptSync(text, secret);\n}\n"]}
\No newline at end of file