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":[]}