ed486b431a9f0e6b7582fc55104af2932988ba6446c7a9948ed776e104f790a9.json raw

   1  {"ast":null,"code":"// nip49.ts\nimport { scrypt } from \"@noble/hashes/scrypt\";\nimport { xchacha20poly1305 } from \"@noble/ciphers/chacha\";\nimport { concatBytes as concatBytes2, randomBytes } from \"@noble/hashes/utils\";\n\n// nip19.ts\nimport { bytesToHex, concatBytes, hexToBytes } from \"@noble/hashes/utils\";\nimport { bech32 } from \"@scure/base\";\nvar Bech32MaxSize = 5e3;\nfunction encodeBech32(prefix, data) {\n  let words = bech32.toWords(data);\n  return bech32.encode(prefix, words, Bech32MaxSize);\n}\nfunction encodeBytes(prefix, bytes) {\n  return encodeBech32(prefix, bytes);\n}\n\n// nip49.ts\nimport { bech32 as bech322 } from \"@scure/base\";\nfunction encrypt(sec, password, logn = 16, ksb = 2) {\n  let salt = randomBytes(16);\n  let n = 2 ** logn;\n  let key = scrypt(password.normalize(\"NFKC\"), salt, {\n    N: n,\n    r: 8,\n    p: 1,\n    dkLen: 32\n  });\n  let nonce = randomBytes(24);\n  let aad = Uint8Array.from([ksb]);\n  let xc2p1 = xchacha20poly1305(key, nonce, aad);\n  let ciphertext = xc2p1.encrypt(sec);\n  let b = concatBytes2(Uint8Array.from([2]), Uint8Array.from([logn]), salt, nonce, aad, ciphertext);\n  return encodeBytes(\"ncryptsec\", b);\n}\nfunction decrypt(ncryptsec, password) {\n  let {\n    prefix,\n    words\n  } = bech322.decode(ncryptsec, Bech32MaxSize);\n  if (prefix !== \"ncryptsec\") {\n    throw new Error(`invalid prefix ${prefix}, expected 'ncryptsec'`);\n  }\n  let b = new Uint8Array(bech322.fromWords(words));\n  let version = b[0];\n  if (version !== 2) {\n    throw new Error(`invalid version ${version}, expected 0x02`);\n  }\n  let logn = b[1];\n  let n = 2 ** logn;\n  let salt = b.slice(2, 2 + 16);\n  let nonce = b.slice(2 + 16, 2 + 16 + 24);\n  let ksb = b[2 + 16 + 24];\n  let aad = Uint8Array.from([ksb]);\n  let ciphertext = b.slice(2 + 16 + 24 + 1);\n  let key = scrypt(password.normalize(\"NFKC\"), salt, {\n    N: n,\n    r: 8,\n    p: 1,\n    dkLen: 32\n  });\n  let xc2p1 = xchacha20poly1305(key, nonce, aad);\n  let sec = xc2p1.decrypt(ciphertext);\n  return sec;\n}\nexport { decrypt, encrypt };","map":null,"metadata":{},"sourceType":"module","externalDependencies":[]}