{"version":3,"file":"noble.mjs","names":[],"sources":["../../src/utils/noble.ts"],"sourcesContent":["import { gcm, cbc, ctr } from '@noble/ciphers/aes.js';\nimport { sha256 } from '@noble/hashes/sha2.js';\nimport { bytesToHex } from '@noble/hashes/utils.js';\n\nimport {\n  arrayBufferToBase64,\n  base64ToArrayBuffer,\n  concat,\n  split,\n} from './base64-buffer';\nimport { deriveSyncKey, encoder, decoder } from './pbkdf2';\n\nimport type { EncryptAlgorithms, SyncEncryptation } from '@/@types';\nimport type { Cipher, CipherWithOutput, TArg } from '@noble/ciphers/utils.js';\n\ninterface AlgorithmType {\n  ivLength: number;\n  create: (key: Uint8Array, iv: Uint8Array) => Cipher | CipherWithOutput;\n}\n\ntype AlgorithmInterface = Record<EncryptAlgorithms, AlgorithmType>;\n\nconst algorithms: AlgorithmInterface = {\n  'AES-GCM': {\n    ivLength: 12,\n    create: (key: Uint8Array, iv: Uint8Array) => gcm(key, iv),\n  },\n\n  'AES-CBC': {\n    ivLength: 16,\n    create: (key: Uint8Array, iv: Uint8Array) => cbc(key, iv),\n  },\n\n  'AES-CTR': {\n    ivLength: 16,\n    create: (key: Uint8Array, iv: Uint8Array) => ctr(key, iv),\n  },\n};\n\nexport function getSyncEncryptation(\n  encryptationAlgorithm: EncryptAlgorithms,\n  secretKey: string,\n): SyncEncryptation {\n  const key = deriveSyncKey(secretKey);\n  const config = algorithms[encryptationAlgorithm];\n\n  return {\n    encrypt(value: string): string {\n      const iv = globalThis.crypto.getRandomValues(\n        new Uint8Array(config.ivLength),\n      );\n\n      const cipher = config.create(key, iv).encrypt(encoder.encode(value));\n\n      return arrayBufferToBase64(concat(iv, cipher));\n    },\n    decrypt(value: string): string {\n      const payload = base64ToArrayBuffer(value);\n\n      const { iv, cipher } = split(payload, config.ivLength);\n\n      const decrypted = config.create(key, iv).decrypt(cipher);\n\n      return decoder.decode(decrypted);\n    },\n  };\n}\n\nexport function hashSyncNobleSHA256(value: string, secret: string): string {\n  const key = deriveSyncKey(secret);\n  const payload = new Uint8Array(concat(key, encoder.encode(value)));\n  const hashedValue = bytesToHex(\n    sha256(payload as TArg<Uint8Array<ArrayBufferLike>>),\n  );\n\n  return hashedValue;\n}\n"],"mappings":"kVAsBA,MAAM,EAAiC,CACrC,UAAW,CACT,SAAU,GACV,QAAS,EAAiB,IAAmB,EAAI,EAAK,CAAE,CAC1D,EAEA,UAAW,CACT,SAAU,GACV,QAAS,EAAiB,IAAmB,EAAI,EAAK,CAAE,CAC1D,EAEA,UAAW,CACT,SAAU,GACV,QAAS,EAAiB,IAAmB,EAAI,EAAK,CAAE,CAC1D,CACF,EAEA,SAAgB,EACd,EACA,EACkB,CAClB,IAAM,EAAM,EAAc,CAAS,EAC7B,EAAS,EAAW,GAE1B,MAAO,CACL,QAAQ,EAAuB,CAC7B,IAAM,EAAK,WAAW,OAAO,gBAC3B,IAAI,WAAW,EAAO,QAAQ,CAChC,EAIA,OAAO,EAAoB,EAAO,EAFnB,EAAO,OAAO,EAAK,CAAE,CAAC,CAAC,QAAQ,EAAQ,OAAO,CAAK,CAEvB,CAAC,CAAC,CAC/C,EACA,QAAQ,EAAuB,CAG7B,GAAM,CAAE,KAAI,UAAW,EAFP,EAAoB,CAED,EAAG,EAAO,QAAQ,EAE/C,EAAY,EAAO,OAAO,EAAK,CAAE,CAAC,CAAC,QAAQ,CAAM,EAEvD,OAAO,EAAQ,OAAO,CAAS,CACjC,CACF,CACF,CAEA,SAAgB,EAAoB,EAAe,EAAwB,CACzE,IAAM,EAAM,EAAc,CAAM,EAMhC,OAJoB,EAClB,EAAO,IAFW,WAAW,EAAO,EAAK,EAAQ,OAAO,CAAK,CAAC,CAEjD,CAAsC,CAGpC,CACnB"}