{"_attachments":{},"_id":"scrypt-kdf","_rev":"1109822-61f2ad20575b7399aa1213ce","author":{"name":"Chris Veness"},"description":"Scrypt Key Derivation Function","dist-tags":{"latest":"4.0.0"},"license":"MIT","maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"name":"scrypt-kdf","readme":"Scrypt Key Derivation Function\n==============================\n\n![Node.js CI](https://github.com/chrisveness/scrypt-kdf/actions/workflows/node.js.yml/badge.svg)\n\nScrypt is a *password-based [key derivation function](https://en.wikipedia.org/wiki/Key_derivation_function)*, useful for storing password hashes for verifying interactive logins.\n\nPasswords should never, of course, be stored as plaintext, but even salted hashed passwords can be susceptible to brute-force attack using custom hardware. Key derivation functions can be tuned to be computationally expensive to calculate, in order to protect against attack.\n\nScrypt is a ‘memory-hard’ algorithm, meaning that it will produce keys (hashes) which are strongly resistant to attack using GPUs and other custom hardware, which may be computationally powerful but have limited memory. It is designed to be stronger than earlier KDFs [bcrypt](PBKDF2) and  [PBKDF2](https://en.wikipedia.org/wiki/PBKDF2).\n\nIt was originally developed by Colin Percival as part of the [Tarsnap](http://www.tarsnap.com/scrypt.html) file encryption utility. It is fully described in Percival’s paper [Stronger Key Derivation via Sequential Memory-Hard Functions](http://www.tarsnap.com/scrypt/scrypt.pdf), and is specified in [RFC 7841](https://tools.ietf.org/html/rfc7914).\n\n`scrypt-kdf` is a zero-dependency JavaScript implementation of the [Node.js crypto](https://nodejs.org/api/crypto.html#crypto_crypto_scrypt_password_salt_keylen_options_callback) wrapper around the [OpenSSL EVP_KDF-SCRYPT](https://docs.openssl.org/master/man7/EVP_KDF-SCRYPT) function; it returns the KDF as a key incorporating[<sup>*</sup>](#key-format) the scrypt parameters and salt, enabling it to be stored in a form which can readily be used for verification.\n\n- the `kdf(passphrase, params)` function returns a key (together with scrypt parameters and salt in Colin Percival’s [standard file header format](#key-format):), which can be stored for later verification\n- the `verify(key, passphrase)` function verifies that the stored key was derived from the supplied password.\n\n\nExample usage\n-------------\n\n`scrypt-kdf` is available from [npm](https://www.npmjs.com/package/scrypt-kdf):\n\n    $ npm install scrypt-kdf\n\n### hashing\n\n    import Scrypt from 'scrypt-kdf');\n\n    const key = await Scrypt.kdf('my secret pw', { logN: 15 }); // key is Uint8Array\n\n    // key can be used as Uint8Array, or converted to (base64) String or (Node.js) Buffer\n    const keyStr = key.toBase64();\n    const keyBuf = Buffer.from(key);\n\n    // the passphrase can also be supplied as a Uint8Array (including a Node.js Buffer)\n    const key = await Scrypt.kdf(new TextEncoder().encode('my secret pw'), { logN: 15 }); // Uint8Array\n    const key = await Scrypt.kdf(Buffer.from('my secret pw'), { logN: 15 });              // Node.js Buffer\n\n    // (note: Uint8Array.toBase64() is not available on Node.js < v24.8.1 or Deno < v2.5.0,\n    // so use btoa(new TextDecoder('utf8').decode(key)) on older versions)\n\n### verifying\n\n    import Scrypt from 'scrypt-kdf');\n\n    const user = await users.findOne({ email: req.body.email });      // for example\n    const ok = await Scrypt.verify(user.password, req.body.password); // user.password is a base64 string\n\n    // key may be either (base64) string or Uint8Array, and passphrase may be either string or Uint8Array\n\n### in Deno:\n\n    import Scrypt from 'npm:scrypt-kdf@^4';\n\nAPI\n---\n\n### – hash\n\n`Scrypt.kdf(passphrase, params)` – derive key from given passphrase (async).\n\n- `passphrase` is a user-supplied password string/Uint8Array to be hashed and stored.\n- `params` is an object with properties `logN`, `r`, `p`.\n  - `logN` is a CPU/memory cost parameter: an integer *work factor* which determines the cost of the key derivation function, and hence the security of the stored key; for sub-100ms interactive logins, a [value of 15 is recommended](https://blog.filippo.io/the-scrypt-parameters/) for current (2017) hardware (increased from the original 2009 recommendation of 14)\n  - `r` (optional) is a block size parameter, an integer conventionally fixed at 8.\n  - `p` (optional) is a parallelization parameter, an integer conventionally fixed at 1.\n- returns: (promised) key as a Uint8Array which can be stored in any preferred format.\n\n### – verify\n\n`Scrypt.verify(key, passphrase)` – confirm key was derived from passphrase (async).\n\n- `key` is a Uint8Array obtained from `Scrypt.kdf()` (or corresponding base64 string / Node.js Buffer).\n- `passphrase` is the password string/Uint8Array/Buffer used to derive the stored `key`.\n- returns: (promised) `true` for successful verification, `false` otherwise.\n\n### – view parameters\n\n`Scrypt.viewParams(key)` – return the `logN`, `r`, `p` parameters used to derive `key`.\n\n- `key` is a Uint8Array (or base64 string or Node.js Buffer) obtained from `Scrypt.kdf()`.\n- returns `{ logN, r, p }` object.\n\n### – pick parameters\n\n`Scrypt.pickParams(maxtime, maxmem, maxmemfrac)` – return scrypt parameters for given operational parameters.\n\nPercival’s calculation for optimal parameters can be used to verify Valsorda’s / Percival’s [recommendation of 15](https://words.filippo.io/the-scrypt-parameters) for logN; though in empirical tests (in 2024) it appears to underestimate logN by one or two – timing tests are the most reliable way to validate optimal parameters.\n\n- `maxtime` is the maximum time in seconds scrypt will spend computing the derived encryption key from the password (0.1 seconds is recommended for interactive logins).\n- `maxmem` (optional) is the maximum RAM scrypt will use when computing the derived encryption key, in bytes (default maximum available physical memory).\n- `maxmemfrac` (optional) is the maximum fraction of available RAM scrypt will use for computing the derived encryption key (default 0.5); if not within the range 0 < maxmemfrac <= 0.5, this will be set to 0.5.\n- returns `{ logN, r, p }` object.\n\nNote that results are dependent on the computer the calculation is run on; calculated parameters may vary depending on computer specs & current loading.\n\n\nKey format\n----------\n\nThe key is returned as a 96-byte Uint8Array for maximum flexibility, in Colin Percival’s [standard file header format](https://github.com/Tarsnap/scrypt/blob/master/FORMAT):\n\n| offset | length | value\n| -----: | -----: | :----\n|      0 |      6 | ‘scrypt’\n|      6 |      1 | version [0]\n|      7 |      1 | log2(N) (1..63)\n|      8 |      4 | r (big-endian integer; r·p < 2³⁰)\n|     12 |      4 | p (big-endian integer; r·p < 2³⁰)\n|     16 |     32 | (random) salt\n|     48 |     16 | checksum: first 16 bytes of SHA256(bytes 0–47)\n|     64 |     32 | HMAC-SHA256(bytes 0–63), with scrypt(password, salt, 64, { N, r, p }) as key\n\nIf converted to base-64 (for trouble-free storage or transmission), the key will be a 128-character string, which will always begin with *c2NyeXB0*, as this is ‘scrypt’ encoded as base-64.\n","time":{"created":"2022-01-27T14:33:04.206Z","modified":"2025-10-27T19:41:30.988Z","2.0.1":"2019-05-03T13:21:25.966Z","2.0.0":"2019-02-15T17:47:23.529Z","1.1.0":"2018-12-20T19:14:16.332Z","1.0.1":"2018-10-11T16:43:16.930Z","1.0.0":"2018-07-02T15:59:38.321Z","3.0.0":"2024-10-20T18:01:03.517Z","4.0.0":"2025-10-27T19:41:16.586Z"},"versions":{"2.0.1":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"2.0.1","license":"MIT","main":"scrypt.js","types":"scrypt.d.ts","engines":{"node":">=8.5.0"},"scripts":{"test":"mocha --exit test/scrypt-tests.js","lint":"eslint scrypt.js test/scrypt-tests.js","cover":"nyc --reporter=html npm test; rm -r ./.nyc_output"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","coveralls":"^3.0.3","eslint":"^5.16.0","mocha":"^6.1.4","nyc":"^14.1.0"},"eslintConfig":{"env":{"mocha":true,"node":true},"parserOptions":{"ecmaVersion":2017},"extends":"eslint:recommended","globals":{"ArrayBuffer":true,"Uint8Array":true,"Float64Array":true,"DataView":true}},"gitHead":"2d9a9b7adf4c94acfa09d86719c844b3c3a207ab","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_id":"scrypt-kdf@2.0.1","_nodeVersion":"12.1.0","_npmVersion":"6.9.0","dist":{"shasum":"3355224c52d398331b2cbf2b70a7be26b52c53e6","size":13008,"noattachment":false,"tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-2.0.1.tgz","integrity":"sha512-dMhpgBVJPDWZP5erOCwTjI6oAO9hKhFAjZsdSQ0spaWJYHuA/wFNF2weQQfsyCIk8eNKoLfEDxr3zAtM+gZo0Q=="},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_2.0.1_1556889685839_0.6572701940660755"},"_hasShrinkwrap":false,"publish_time":1556889685966,"_cnpm_publish_time":1556889685966,"_cnpmcore_publish_time":"2021-12-17T15:04:59.736Z"},"2.0.0":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"2.0.0","license":"MIT","main":"scrypt.js","types":"scrypt.d.ts","engines":{"node":">=10.5.0"},"scripts":{"test":"mocha --exit test/scrypt-tests.js","lint":"eslint scrypt.js test/scrypt-tests.js","cover":"nyc --reporter=html npm test; rm -r ./.nyc_output"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","coveralls":"3.0.2","eslint":"^5.13.0","mocha":"^5.2.0","nyc":"^13.3.0"},"eslintConfig":{"env":{"mocha":true,"node":true},"parserOptions":{"ecmaVersion":2017},"extends":"eslint:recommended","globals":{"ArrayBuffer":true,"Uint8Array":true,"Float64Array":true,"DataView":true}},"gitHead":"77381ee4f8e8c64a8b18a0b6df28600b2900fc08","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_id":"scrypt-kdf@2.0.0","_npmVersion":"6.5.0-next.0","_nodeVersion":"11.6.0","_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"dist":{"shasum":"0c76d9f02d6326cc8ab1013664b00f4407dc02e3","size":13708,"noattachment":false,"tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-2.0.0.tgz","integrity":"sha512-QdV1AVwpAuzENaCT2eH30mnZ7ZymQ+vug0F+8625THBRFi8Ziqy4oyanmVCZYWhTaI8LOgmBEf7j+/RwhrLgfQ=="},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_2.0.0_1550252843363_0.9247723084975594"},"_hasShrinkwrap":false,"publish_time":1550252843529,"_cnpm_publish_time":1550252843529,"_cnpmcore_publish_time":"2021-12-17T15:05:00.145Z"},"1.1.0":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"1.1.0","license":"MIT","main":"scrypt.js","types":"scrypt.d.ts","engines":{"node":">=10.5.0"},"scripts":{"test":"mocha --exit test/scrypt-tests.js","lint":"eslint scrypt.js test/scrypt-tests.js","cover":"nyc --reporter=html npm test; rm -r ./.nyc_output"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","coveralls":"3.0.2","eslint":"^5.10.0","mocha":"^5.2.0","nyc":"^13.1.0"},"eslintConfig":{"env":{"mocha":true,"node":true},"parserOptions":{"ecmaVersion":2017},"extends":"eslint:recommended","globals":{"ArrayBuffer":true,"Uint8Array":true,"DataView":true}},"gitHead":"3541b1165145effaccbbefc61ad2814c4e860cd5","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_id":"scrypt-kdf@1.1.0","_npmVersion":"5.6.0","_nodeVersion":"10.0.0","_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"dist":{"shasum":"557cefc95086fe76271db7334bb40078ac48f3ef","size":12665,"noattachment":false,"tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-1.1.0.tgz","integrity":"sha512-w0u/p+Ah2zFWGVF5i2DD4nb884n454JuP09s03CDtTYYyluoYayplUZ447ogsQ4EUbYS5t9agK5T202U02ZBpA=="},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_1.1.0_1545333256156_0.1564797812205383"},"_hasShrinkwrap":false,"publish_time":1545333256332,"_cnpm_publish_time":1545333256332,"_cnpmcore_publish_time":"2021-12-17T15:05:00.452Z"},"1.0.1":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto scrypt kdf password hash login authenticate verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"1.0.1","license":"MIT","main":"scrypt.js","engineStrict":">=10.5.0","scripts":{"test":"mocha --exit test/scrypt-tests.js","lint":"eslint scrypt.js test/scrypt-tests.js","cover":"nyc --reporter=html mocha --exit test/scrypt-tests.js; rm -r ./.nyc_output"},"dependencies":{},"devDependencies":{"chai":"^4.2.0","eslint":"^5.6.1","mocha":"^5.2.0","nyc":"^13.0.1"},"eslintConfig":{"env":{"mocha":true,"node":true},"parserOptions":{"ecmaVersion":2017},"extends":"eslint:recommended","globals":{"ArrayBuffer":true,"Uint8Array":true,"DataView":true}},"gitHead":"69de46018080eb208f9bee76d1b016928ffe28cd","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_id":"scrypt-kdf@1.0.1","_npmVersion":"6.4.1","_nodeVersion":"10.12.0","_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"dist":{"shasum":"9260869f492626ea191852c254868b43288c2322","size":10729,"noattachment":false,"tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-1.0.1.tgz","integrity":"sha512-HRUAqPjN9iKxzK4u4TYHkRvk9zRGDFyr9TrDY0QtJleSmqLd9PqBxUoTPA9wHL1LjQLC7VF/Tz8vMelgscvmng=="},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_1.0.1_1539276196798_0.6006921946861772"},"_hasShrinkwrap":false,"publish_time":1539276196930,"_cnpm_publish_time":1539276196930,"_cnpmcore_publish_time":"2021-12-17T15:05:00.665Z"},"1.0.0":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto scrypt kdf password hash login authenticate verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"1.0.0","license":"MIT","main":"scrypt.js","engineStrict":">=10.5.0","scripts":{"test":"mocha --exit test/scrypt-tests.js","lint":"eslint scrypt.js test/scrypt-tests.js","cover":"nyc --reporter=html mocha --exit test/scrypt-tests.js; rm -r ./.nyc_output"},"dependencies":{},"devDependencies":{"chai":"^4.1.2","eslint":"^5.0.1","mocha":"^5.2.0","nyc":"^12.0.2"},"eslintConfig":{"env":{"mocha":true,"node":true},"parserOptions":{"ecmaVersion":2017},"extends":"eslint:recommended","globals":{"ArrayBuffer":true,"Uint8Array":true,"DataView":true}},"gitHead":"c0e62e944ee9c659a05052018357e8453d0d8401","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_id":"scrypt-kdf@1.0.0","_npmVersion":"6.1.0","_nodeVersion":"10.5.0","_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"dist":{"shasum":"b409251929bff6fe9f8b3cf863d5cd709ff75438","size":10071,"noattachment":false,"tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-1.0.0.tgz","integrity":"sha512-KX7HpR2fpPC/qVtbq2Sum+iTNfz9tSkwpCf5M44HEQ0CFghlAG1OtIq7tUQ/C54S5cT/yzZd+R0IocW5TvMsrw=="},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_1.0.0_1530547178228_0.027897185280756576"},"_hasShrinkwrap":false,"publish_time":1530547178321,"_cnpm_publish_time":1530547178321,"_cnpmcore_publish_time":"2021-12-17T15:05:00.920Z"},"3.0.0":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"3.0.0","license":"MIT","main":"scrypt.js","type":"module","types":"scrypt.d.ts","engines":{"node":">=18.0.0"},"scripts":{"test":"npm run test-node && npm run test-deno","test-node":"node --test test/tests-node.js","test-deno":"deno test -NES test/tests-deno.js","lint":"eslint scrypt.js test/tests-*.js","cover":"c8 npm test"},"devDependencies":{"@babel/eslint-parser":"^7","@babel/plugin-syntax-import-attributes":"^7","@eslint/js":"^9","@types/node":"^22","c8":"^10","globals":"^15"},"_id":"scrypt-kdf@3.0.0","gitHead":"961b547ea612b618fd1ada8e0310ed2282f5c4e3","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_resolved":"git+ssh://git@github.com/chrisveness/scrypt-kdf.git#961b547ea612b618fd1ada8e0310ed2282f5c4e3","_from":"github:chrisveness/scrypt-kdf","_nodeVersion":"22.8.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-mjIh7zT3Bs0c1G9wcYiLC1rDeG/JhnBtcQDY+dzbQFmxQ92V5LxN5GxVAYi/Wn9aBkqGbIYt1ekaVigvegYycg==","shasum":"d3efda9724f1c035db49ee5aab13fcc1bf73bf32","tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-3.0.0.tgz","fileCount":10,"unpackedSize":46792,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIDNtx/8QdspGnKoG3qtllV9LysdmihBQtEyTWMmI/eFYAiBBhyf4fZkHkf31vUlbUXuBfonVVONs3QbCtc93OTl3Kg=="}],"size":10910},"_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"directories":{},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/scrypt-kdf_3.0.0_1729447263096_0.9721632923411341"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-10-20T18:01:03.517Z","publish_time":1729447263517,"_source_registry_name":"default"},"4.0.0":{"name":"scrypt-kdf","description":"Scrypt Key Derivation Function","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"author":{"name":"Chris Veness"},"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"version":"4.0.0","license":"MIT","main":"scrypt.js","type":"module","types":"scrypt.d.ts","engines":{"node":">=19.0.0","deno":">=2.5.0"},"scripts":{"test":"npm run test-node && npm run test-deno","test-node":"node --test test/tests-node.js","test-deno":"deno test -NES test/tests-deno.js","lint":"eslint scrypt.js test/tests-*.js","cover":"c8 npm test"},"devDependencies":{"@eslint/js":"^9","@types/node":"^24","c8":"^10","eslint-plugin-jsdoc":"^61","globals":"^16"},"_id":"scrypt-kdf@4.0.0","gitHead":"c4df34d9ad167b9f88b6af298bc78c353ad77468","bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","_resolved":"git+ssh://git@github.com/chrisveness/scrypt-kdf.git#c4df34d9ad167b9f88b6af298bc78c353ad77468","_from":"github:chrisveness/scrypt-kdf","_nodeVersion":"22.20.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-Gw7nImFqHQhxCANNnmQFiQIiRVDa/gOpGW6rpD18w+bNjG7x41RvfAcJOdjXiOoI5lPaEWoYZhY7h6qorGdBQw==","shasum":"7d17ff7cb053a8bb6e1ec3ecbf57095878606f65","tarball":"https://registry.npmmirror.com/scrypt-kdf/-/scrypt-kdf-4.0.0.tgz","fileCount":10,"unpackedSize":49976,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIECswTfeLdZN+scBZWrzsBcKOYs/iCTI05ymQNE9FBbQAiEAkgzPO/Z7KSe9X8CWf/xQMSIKnv7zkUhVVC4qHnKggFM="}],"size":11929},"_npmUser":{"name":"chrisveness","email":"chrisv@movable-type.co.uk"},"directories":{},"maintainers":[{"name":"chrisveness","email":"chrisv@movable-type.co.uk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/scrypt-kdf_4.0.0_1761594076380_0.36188573554197623"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-10-27T19:41:16.586Z","publish_time":1761594076586,"_source_registry_name":"default"}},"bugs":{"url":"https://github.com/chrisveness/scrypt-kdf/issues"},"homepage":"https://github.com/chrisveness/scrypt-kdf#readme","keywords":["crypto","scrypt","kdf","password","hash","login","authenticate","verify"],"repository":{"type":"git","url":"git+https://github.com/chrisveness/scrypt-kdf.git"},"_source_registry_name":"default"}