{"_id":"@noble/ciphers","_rev":"4579002","name":"@noble/ciphers","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","dist-tags":{"latest":"2.1.1"},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"time":{"modified":"2026-04-10T15:52:41.000Z","created":"2023-06-28T23:34:52.873Z","2.1.1":"2025-12-07T05:03:40.873Z","2.0.1":"2025-09-22T15:54:07.131Z","2.0.0":"2025-08-25T15:10:19.949Z","2.0.0-beta.4":"2025-08-17T12:03:15.267Z","2.0.0-beta.3":"2025-07-30T03:46:20.339Z","2.0.0-beta.2":"2025-07-15T21:08:47.084Z","2.0.0-beta.1":"2025-05-29T14:58:52.632Z","1.3.0":"2025-04-24T17:04:06.305Z","1.2.1":"2025-01-18T09:35:24.025Z","1.2.0":"2025-01-03T01:05:12.934Z","1.1.3":"2024-11-30T16:03:57.160Z","1.1.2":"2024-11-28T13:36:04.478Z","1.1.1":"2024-11-26T21:02:06.333Z","1.1.0":"2024-11-23T08:11:24.350Z","1.0.0":"2024-09-12T23:29:01.728Z","0.6.0":"2024-08-05T22:56:39.774Z","0.5.3":"2024-05-06T13:43:32.048Z","0.5.2":"2024-03-25T17:02:12.371Z","0.5.1":"2024-02-09T18:10:22.584Z","0.5.0":"2024-02-09T12:54:37.675Z","0.4.1":"2023-12-11T23:17:59.983Z","0.4.0":"2023-10-19T17:24:03.690Z","0.3.0":"2023-08-31T00:49:21.827Z","0.2.0":"2023-07-31T16:45:38.156Z","0.1.4":"2023-07-15T06:08:06.143Z","0.1.3":"2023-06-29T23:56:14.109Z","0.1.2":"2023-06-28T23:34:52.873Z"},"users":{},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"versions":{"2.1.1":{"name":"@noble/ciphers","version":"2.1.1","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","devDependencies":{"@paulmillr/jsbt":"0.4.5","@scure/base":"2.0.0","@types/node":"24.2.1","fast-check":"4.2.0","prettier":"3.6.2","typescript":"5.9.2"},"scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"cd test/benchmark; npm install; node compare.ts","build":"tsc","build:release":"npx --no @paulmillr/jsbt esbuild test/build","build:clean":"rm *.{js,js.map,d.ts,d.ts.map} 2> /dev/null","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:slow":"node test/crosstest.test.ts slow"},"exports":{".":"./index.js","./_arx.js":"./_arx.js","./_poly1305.js":"./_poly1305.js","./_polyval.js":"./_polyval.js","./aes.js":"./aes.js","./chacha.js":"./chacha.js","./ff1.js":"./ff1.js","./salsa.js":"./salsa.js","./utils.js":"./utils.js","./webcrypto.js":"./webcrypto.js"},"engines":{"node":">= 20.19.0"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"homepage":"https://paulmillr.com/noble/","funding":"https://paulmillr.com/funding/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"type":"module","main":"index.js","module":"index.js","types":"index.d.ts","sideEffects":false,"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"license":"MIT","gitHead":"785181b0772ba84afbe812025714163e4e48262f","_id":"@noble/ciphers@2.1.1","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"shasum":"c8c74fcda8c3d1f88797d0ecda24f9fc8b92b052","size":107210,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.1.1.tgz"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:551738a6-0371-418b-a874-d1107d712582"}},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.1.1_1765083820718_0.7658131460379438"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-12-07T05:03:40.873Z","publish_time":1765083820873,"_source_registry_name":"default","_cnpm_publish_time":1765083820873},"2.0.1":{"name":"@noble/ciphers","version":"2.0.1","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","devDependencies":{"@paulmillr/jsbt":"0.4.4","@scure/base":"2.0.0","@types/node":"24.2.1","fast-check":"4.2.0","prettier":"3.6.2","typescript":"5.9.2"},"scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"cd test/benchmark; npm install; node compare.ts","build":"tsc","build:release":"npx --no @paulmillr/jsbt esbuild test/build","build:clean":"rm *.{js,js.map,d.ts,d.ts.map} 2> /dev/null","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.ts slow"},"exports":{".":"./index.js","./_arx.js":"./_arx.js","./_poly1305.js":"./_poly1305.js","./_polyval.js":"./_polyval.js","./aes.js":"./aes.js","./chacha.js":"./chacha.js","./ff1.js":"./ff1.js","./salsa.js":"./salsa.js","./utils.js":"./utils.js","./webcrypto.js":"./webcrypto.js"},"engines":{"node":">= 20.19.0"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"homepage":"https://paulmillr.com/noble/","funding":"https://paulmillr.com/funding/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"type":"module","main":"index.js","module":"index.js","types":"index.d.ts","sideEffects":false,"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"license":"MIT","_id":"@noble/ciphers@2.0.1","gitHead":"7630b75e025639f33a58214502f5bd6277f8cf44","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.8.0","_npmVersion":"11.6.0","dist":{"shasum":"fb07d6479d11fd10d7f601b6fb8fb9925b7accf7","size":99198,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.1_1758556446854_0.8777689453257047"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-09-22T15:54:07.131Z","publish_time":1758556447131,"_source_registry_name":"default","_cnpm_publish_time":1758556447131},"2.0.0":{"name":"@noble/ciphers","version":"2.0.0","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","devDependencies":{"@paulmillr/jsbt":"0.4.4","@scure/base":"2.0.0","@types/node":"24.2.1","fast-check":"4.2.0","prettier":"3.6.2","typescript":"5.9.2"},"scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"cd test/benchmark; npm install; node compare.ts","build":"tsc","build:release":"npx --no @paulmillr/jsbt esbuild test/build","build:clean":"rm *.{js,js.map,d.ts,d.ts.map} 2> /dev/null","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.js slow"},"engines":{"node":">= 20.19.0"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"homepage":"https://paulmillr.com/noble/","funding":"https://paulmillr.com/funding/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"type":"module","main":"index.js","module":"index.js","types":"index.d.ts","sideEffects":false,"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"license":"MIT","_id":"@noble/ciphers@2.0.0","gitHead":"1fb6315cc40856d9d8723c34aae3f551a0e383fb","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.6.0","_npmVersion":"11.5.1","dist":{"shasum":"2d3044c63f1885aa25d02311d8d6a8ffe1f8f536","size":99118,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.0_1756134619717_0.5316724863890083"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-25T15:10:19.949Z","publish_time":1756134619949,"_source_registry_name":"default","_cnpm_publish_time":1756134619949},"2.0.0-beta.4":{"name":"@noble/ciphers","version":"2.0.0-beta.4","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","devDependencies":{"@paulmillr/jsbt":"0.4.2","@scure/base":"1.2.5","@types/node":"24.2.1","fast-check":"4.2.0","micro-bmark":"0.4.2","micro-should":"0.5.3","prettier":"3.6.2","typescript":"5.9.2"},"scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"node test/benchmark/compare.ts","bench:install":"cd test/benchmark; npm install","build":"tsc","build:release":"npx --no @paulmillr/jsbt esbuild test/build","build:clean":"rm *.{js,js.map,d.ts,d.ts.map} 2> /dev/null","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.js slow"},"engines":{"node":">= 20.19.0"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"homepage":"https://paulmillr.com/noble/","funding":"https://paulmillr.com/funding/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"type":"module","main":"index.js","module":"index.js","types":"index.d.ts","sideEffects":false,"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"license":"MIT","_id":"@noble/ciphers@2.0.0-beta.4","readmeFilename":"README.md","gitHead":"ad7119d1121bb84ade15380e46a0ba2f51575908","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"shasum":"2a1bc9979edc4737dcff7e4f45f096ba61cd0185","size":99139,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.0-beta.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.0-beta.4.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.0-beta.4_1755432195067_0.24267056917578644"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-08-17T12:03:15.267Z","publish_time":1755432195267,"_source_registry_name":"default","deprecated":"beta","_cnpm_publish_time":1755432195267},"2.0.0-beta.3":{"name":"@noble/ciphers","version":"2.0.0-beta.3","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"node test/benchmark/compare.ts","bench:install":"cd test/benchmark; npm install","build":"npm run build:clean; tsc","build:release":"npx --no @paulmillr/jsbt esbuild test/build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.js slow"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.4.1","@scure/base":"1.2.5","@types/node":"22.15.23","fast-check":"4.1.1","micro-bmark":"0.4.2","micro-should":"0.5.3","prettier":"3.5.3","typescript":"5.8.3"},"engines":{"node":">= 20.19.0"},"type":"module","module":"index.js","main":"index.js","sideEffects":false,"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@2.0.0-beta.3","readmeFilename":"README.md","gitHead":"f79fea86a6bf12ed1a3cc87911c2680068142c5b","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.4.1","_npmVersion":"11.4.2","dist":{"shasum":"87d51c2172eebaa4333475fbf16158dfb5adf7e6","size":99148,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.0-beta.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.0-beta.3.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.0-beta.3_1753847180132_0.29859442280544024"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-07-30T03:46:20.339Z","publish_time":1753847180339,"_source_registry_name":"default","deprecated":"beta","_cnpm_publish_time":1753847180339},"2.0.0-beta.2":{"name":"@noble/ciphers","version":"2.0.0-beta.2","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"node test/benchmark/compare.ts","bench:install":"cd test/benchmark; npm install","build":"npm run build:clean; tsc","build:release":"npx jsbt esbuild test/build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.js slow"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.4.1","@scure/base":"1.2.5","@types/node":"22.15.23","fast-check":"4.1.1","micro-bmark":"0.4.2","micro-should":"0.5.3","prettier":"3.5.3","typescript":"5.8.3"},"engines":{"node":">= 20.19.0"},"type":"module","module":"index.js","main":"index.js","sideEffects":false,"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@2.0.0-beta.2","readmeFilename":"README.md","gitHead":"5ab1933ed096f66535df8f75b13244e1cc110a8c","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.1.0","_npmVersion":"11.3.0","dist":{"shasum":"a7b9ddd598e90b55e8ca4c2c972fbd0d51fd3057","size":98239,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.0-beta.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.0-beta.2.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.0-beta.2_1752613726810_0.0958235975368964"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-07-15T21:08:47.084Z","publish_time":1752613727084,"_source_registry_name":"default","deprecated":"beta","_cnpm_publish_time":1752613727084},"2.0.0-beta.1":{"name":"@noble/ciphers","version":"2.0.0-beta.1","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node test/benchmark/noble.ts","bench:compare":"node test/benchmark/compare.ts","bench:install":"cd test/benchmark; npm install","build":"npm run build:clean; tsc","build:release":"npx jsbt esbuild test/build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --experimental-strip-types --no-warnings test/index.ts","test:bun":"bun test/index.ts","test:deno":"deno --allow-env --allow-read test/index.ts","test:node20":"cd test; npx tsc; node compiled/test/index.js","test:big":"node test/crosstest.test.js slow"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.4.1","@scure/base":"1.2.5","fast-check":"4.1.1","micro-bmark":"0.4.2","micro-should":"0.5.3","prettier":"3.5.3","typescript":"5.8.3"},"engines":{"node":">= 20.19.0"},"type":"module","module":"index.js","main":"index.js","sideEffects":false,"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@2.0.0-beta.1","readmeFilename":"README.md","gitHead":"60391df2f5e41f087a49bb8dc6cf07918d5f3b78","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"24.0.1","_npmVersion":"11.3.0","dist":{"shasum":"8d3cb6b8e9bae20a4b4770d181a5b665a70f7d6d","size":92459,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-2.0.0-beta.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-2.0.0-beta.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_2.0.0-beta.1_1748530732420_0.5310689831848721"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-05-29T14:58:52.632Z","publish_time":1748530732632,"_source_registry_name":"default","deprecated":"beta","_cnpm_publish_time":1748530732632},"1.3.0":{"name":"@noble/ciphers","version":"1.3.0","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/noble.js","bench:compare":"node benchmark/compare.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.cjs.json","build:release":"npx jsbt esbuild test/build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --import ./test/esm-register.js test/index.js","test:bun":"bun test/index.js","test:deno":"deno --allow-env --allow-read --import-map=./test/import_map.json test/index.js","test:big":"node --import ./test/esm-register.js test/crosstest.test.js slow"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.3.3","@scure/base":"1.2.5","fast-check":"3.0.0","micro-bmark":"0.4.1","micro-should":"0.5.2","prettier":"3.5.3","typescript":"5.8.3"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"},"./_micro.js":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305.js":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval.js":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes.js":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha.js":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto.js":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1.js":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index.js":{"import":"./esm/index.js","require":"./index.js"},"./salsa.js":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils.js":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto.js":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.3.0","gitHead":"953f9aabb4dd91f02bb64a8df424dd1912ddd62a","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"shasum":"f64b8ff886c240e644e5573c097f86e5b43676dc","size":121164,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.3.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_1.3.0_1745514246089_0.4413852669332903"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-04-24T17:04:06.305Z","publish_time":1745514246305,"_source_registry_name":"default","_cnpm_publish_time":1745514246305},"1.2.1":{"name":"@noble/ciphers","version":"1.2.1","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/noble.js","bench:compare":"node benchmark/compare.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.cjs.json","build:release":"npx jsbt esbuild test/build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node --import ./test/esm-register.js test/index.js","test:bun":"bun test/index.js","test:deno":"deno --allow-env --allow-read --import-map=./test/import_map.json test/index.js","test:big":"node --import ./test/esm-register.js test/crosstest.test.js slow"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.3.1","@scure/base":"1.2.1","fast-check":"3.0.0","micro-bmark":"0.4.0","micro-should":"0.5.1","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.2.1","gitHead":"63df5811e3eb9f83bf0104a943c0a841853c35ca","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"22.13.0","_npmVersion":"10.9.2","dist":{"shasum":"3812b72c057a28b44ff0ad4aff5ca846e5b9cdc9","size":119450,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.2.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.2.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_1.2.1_1737192923809_0.1218367615147351"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-01-18T09:35:24.025Z","publish_time":1737192924025,"_source_registry_name":"default","_cnpm_publish_time":1737192924025},"1.2.0":{"name":"@noble/ciphers","version":"1.2.0","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/noble.js","bench:compare":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js","test:coverage":"c8 node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.2.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","c8":"10.1.3","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.2.0","gitHead":"07a965bd4a63633922c48422ab441978c7f2e74d","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.18.1","_npmVersion":"11.0.0","dist":{"shasum":"a7858e18eb620f6b2a327a7f0e647b6a78fd0727","size":118717,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.2.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/ciphers_1.2.0_1735866312727_0.09083093331405179"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2025-01-03T01:05:12.934Z","publish_time":1735866312934,"_source_registry_name":"default","_cnpm_publish_time":1735866312934},"1.1.3":{"name":"@noble/ciphers","version":"1.1.3","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.1.3","gitHead":"341a4ae15e45555f8a50c50a1d4a5df84484916b","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.18.1","_npmVersion":"10.9.1","dist":{"shasum":"eb27085aa7ce94d8c6eaeb64299bab0589920ec1","size":116134,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.1.3.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_1.1.3_1732982636901_0.10528216728425255"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-11-30T16:03:57.160Z","publish_time":1732982637160,"_source_registry_name":"default","_cnpm_publish_time":1732982637160},"1.1.2":{"name":"@noble/ciphers","version":"1.1.2","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.1.2","gitHead":"8e935efce66159bef1ce882be0e2a4476346bf2f","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.18.1","_npmVersion":"10.9.1","dist":{"shasum":"d9f543a13896004d3dca49f6eb38933da117bb7a","size":115139,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.1.2.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_1.1.2_1732800964259_0.13096959010334608"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-11-28T13:36:04.478Z","publish_time":1732800964478,"_source_registry_name":"default","_cnpm_publish_time":1732800964478},"1.1.1":{"name":"@noble/ciphers","version":"1.1.1","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.1.1","gitHead":"b4e769e6668a890d726f80dfe59135863cf9acec","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.18.1","_npmVersion":"10.9.1","dist":{"shasum":"3a30877b0681c278ad98c3461bda3285f4b78abf","size":114414,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.1.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.1.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_1.1.1_1732654926144_0.343826999477447"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-11-26T21:02:06.333Z","publish_time":1732654926333,"_source_registry_name":"default","_cnpm_publish_time":1732654926333},"1.1.0":{"name":"@noble/ciphers","version":"1.1.0","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark; npm install; npm install .. --install-links","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.1.0","gitHead":"4378c6a83dfe068caaaebcd30a695c4e07f3b0e8","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.18.0","_npmVersion":"10.9.1","dist":{"shasum":"ebe2d3aa656c1afe6a14bb95af73f3851c162d73","size":114667,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.1.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_1.1.0_1732349484059_0.46835090835428606"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-11-23T08:11:24.350Z","publish_time":1732349484350,"_source_registry_name":"default","_cnpm_publish_time":1732349484350},"1.0.0":{"name":"@noble/ciphers","version":"1.0.0","description":"Audited & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"npm pack && mv *.tgz benchmark/noble-ciphers.tgz && cd benchmark && npm install && cd ..","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"engines":{"node":"^14.21.3 || >=16"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@1.0.0","gitHead":"428b2118e623405e6fbdce1573ae15ff4b931529","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.17.0","_npmVersion":"10.8.3","dist":{"shasum":"34758a1cbfcd4126880f83e6b1cdeb88785b7970","size":113899,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-1.0.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_1.0.0_1726183741529_0.5680503069309075"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-09-12T23:29:01.728Z","publish_time":1726183741728,"_source_registry_name":"default","_cnpm_publish_time":1726183741728},"0.6.0":{"name":"@noble/ciphers","version":"0.6.0","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"npm pack && mv *.tgz benchmark/noble-ciphers.tgz && cd benchmark && npm install && cd ..","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build:release","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@paulmillr/jsbt":"0.2.1","@scure/base":"1.1.7","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.3.2","typescript":"5.5.2"},"main":"index.js","exports":{".":{"import":"./esm/index.js","require":"./index.js"},"./_micro":{"import":"./esm/_micro.js","require":"./_micro.js"},"./_poly1305":{"import":"./esm/_poly1305.js","require":"./_poly1305.js"},"./_polyval":{"import":"./esm/_polyval.js","require":"./_polyval.js"},"./aes":{"import":"./esm/aes.js","require":"./aes.js"},"./chacha":{"import":"./esm/chacha.js","require":"./chacha.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./ff1":{"import":"./esm/ff1.js","require":"./ff1.js"},"./index":{"import":"./esm/index.js","require":"./index.js"},"./salsa":{"import":"./esm/salsa.js","require":"./salsa.js"},"./utils":{"import":"./esm/utils.js","require":"./utils.js"},"./webcrypto":{"import":"./esm/webcrypto.js","require":"./webcrypto.js"}},"sideEffects":false,"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.6.0","gitHead":"7e88191cd23ea7e36b97698916bb29cb90c5ee90","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.16.0","_npmVersion":"10.8.2","dist":{"shasum":"a3d82c72ce71ba43128e7eb71757b5ecb75b1273","size":113356,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.6.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.6.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.6.0_1722898599363_0.6264207172690275"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-08-05T22:56:39.774Z","publish_time":1722898599774,"_source_registry_name":"default","_cnpm_publish_time":1722898599774},"0.5.3":{"name":"@noble/ciphers","version":"0.5.3","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","sideEffects":false,"devDependencies":{"@paulmillr/jsbt":"0.1.0","@scure/base":"1.1.3","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.1.1","typescript":"5.3.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto":{"types":"./webcrypto.d.ts","import":"./esm/webcrypto.js","default":"./webcrypto.js"}},"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.5.3","gitHead":"df9fa72cbbd553c7f86082ea3b7c4c493a83bcd7","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.12.2","_npmVersion":"10.7.0","dist":{"shasum":"48b536311587125e0d0c1535f73ec8375cd76b23","size":94941,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.5.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.5.3.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.5.3_1715003011882_0.9925035315540254"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-05-06T13:43:32.048Z","publish_time":1715003012048,"_source_registry_name":"default","_cnpm_publish_time":1715003012048},"0.5.2":{"name":"@noble/ciphers","version":"0.5.2","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build && npm i && npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","sideEffects":false,"devDependencies":{"@paulmillr/jsbt":"0.1.0","@scure/base":"1.1.3","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.1.1","typescript":"5.3.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto":{"types":"./webcrypto.d.ts","import":"./esm/webcrypto.js","default":"./webcrypto.js"}},"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.5.2","gitHead":"3359d966278df56fb0a8a5ef2ec4a317396d6179","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.11.1","_npmVersion":"10.5.0","dist":{"shasum":"879367fd51d59185259eb844d5b9a78f408b4a12","size":94564,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.5.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.5.2.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.5.2_1711386132208_0.8747932021535318"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-03-25T17:02:12.371Z","publish_time":1711386132371,"_source_registry_name":"default","_cnpm_publish_time":1711386132371},"0.5.1":{"name":"@noble/ciphers","version":"0.5.1","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","sideEffects":false,"devDependencies":{"@scure/base":"1.1.3","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.1.1","typescript":"5.3.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto":{"types":"./webcrypto.d.ts","import":"./esm/webcrypto.js","default":"./webcrypto.js"}},"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.5.1","gitHead":"1a951ca6bd3aad0c2e11b05c14157d2b86ad2d8a","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.11.0","_npmVersion":"10.4.0","dist":{"shasum":"292f388b69c9ed80d49dca1a5cbfd4ff06852111","size":93052,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.5.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.5.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.5.1_1707502222373_0.975196263203268"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-02-09T18:10:22.584Z","publish_time":1707502222584,"_source_registry_name":"default","_cnpm_publish_time":1707502222584},"0.5.0":{"name":"@noble/ciphers","version":"0.5.0","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","sideEffects":false,"devDependencies":{"@scure/base":"1.1.3","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.1.1","typescript":"5.3.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./crypto":{"types":"./crypto.d.ts","node":{"import":"./esm/cryptoNode.js","default":"./cryptoNode.js"},"import":"./esm/crypto.js","default":"./crypto.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto":{"types":"./webcrypto.d.ts","import":"./esm/webcrypto.js","default":"./webcrypto.js"}},"browser":{"node:crypto":false,"./crypto":"./crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.5.0","gitHead":"c558337e018fbeb591222944f07681582781b19d","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.11.0","_npmVersion":"10.4.0","dist":{"shasum":"310c896cdc25c851f4c726ecd57dd7e376564798","size":93068,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.5.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.5.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.5.0_1707483277513_0.9749014218832865"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2024-02-09T12:54:37.675Z","publish_time":1707483277675,"_source_registry_name":"default","_cnpm_publish_time":1707483277675},"0.4.1":{"name":"@noble/ciphers","version":"0.4.1","description":"Auditable & minimal JS implementation of Salsa20, ChaCha and AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null; rm -r webcrypto esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.3","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"3.1.1","typescript":"5.3.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv","ff1"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.4.1","gitHead":"1287b8598fc6429421bae1d6f166b083629d2779","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.10.0","_npmVersion":"10.2.5","dist":{"shasum":"977fc35f563a4ca315ebbc4cbb1f9b670bd54456","size":93381,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.4.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.4.1.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.4.1_1702336679819_0.44505651109261524"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-12-11T23:17:59.983Z","publish_time":1702336679983,"_source_registry_name":"default","_cnpm_publish_time":1702336679983},"0.4.0":{"name":"@noble/ciphers","version":"0.4.0","description":"Auditable & minimal JS implementation of Salsa20, ChaCha & AES","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null; rm -r webcrypto esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./_polyval":{"types":"./_polyval.d.ts","import":"./esm/_polyval.js","default":"./_polyval.js"},"./aes":{"types":"./aes.d.ts","import":"./esm/aes.js","default":"./aes.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./ff1":{"types":"./ff1.d.ts","import":"./esm/ff1.js","default":"./ff1.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.4.0","gitHead":"9326efde01cb4c79d8aba0554c5973cab0b26dcd","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.8.1","_npmVersion":"10.2.1","dist":{"shasum":"e3f69e3ce935683dd8dadb636652a5cb5cd5958c","size":92559,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.4.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.4.0_1697736243470_0.7181132072713337"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-10-19T17:24:03.690Z","publish_time":1697736243690,"_source_registry_name":"default","_cnpm_publish_time":1697736243690},"0.3.0":{"name":"@noble/ciphers","version":"0.3.0","description":"Auditable & minimal JS implementation of Salsa20, ChaCha, Poly1305 & AES-SIV","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null; rm -r esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/siv":{"types":"./webcrypto/siv.d.ts","import":"./esm/webcrypto/siv.js","default":"./webcrypto/siv.js"},"./webcrypto/ff1":{"types":"./webcrypto/ff1.d.ts","import":"./esm/webcrypto/ff1.js","default":"./webcrypto/ff1.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.3.0","gitHead":"48f982a65d425e3469992bb95819a28dd946a324","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.5.1","_npmVersion":"9.8.1","dist":{"shasum":"6ba3090afdc7a7051393486f6af210e62e0f04ec","size":70268,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.3.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.3.0_1693442961584_0.25096887905314524"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-08-31T00:49:21.827Z","publish_time":1693442961827,"_source_registry_name":"default","_cnpm_publish_time":1693442961827},"0.2.0":{"name":"@noble/ciphers","version":"0.2.0","description":"Auditable & minimal JS implementation of Salsa20, ChaCha, Poly1305 & AES-SIV","scripts":{"bench":"node benchmark/aead.js noble && node benchmark/ciphers.js noble","bench:all":"node benchmark/{aead,ciphers,poly}.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} 2> /dev/null; rm -r esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./simple":{"types":"./simple.d.ts","import":"./esm/simple.js","default":"./simple.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/siv":{"types":"./webcrypto/siv.d.ts","import":"./esm/webcrypto/siv.js","default":"./webcrypto/siv.js"},"./webcrypto/ff1":{"types":"./webcrypto/ff1.d.ts","import":"./esm/webcrypto/ff1.js","default":"./webcrypto/ff1.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["salsa20","chacha","aes","cryptography","crypto","noble","cipher","ciphers","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael","siv"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.2.0","gitHead":"2ab7b23fc24ce48b808519db2379b67fb64a3614","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.5.0","_npmVersion":"9.8.1","dist":{"shasum":"a12cda60f3cf1ab5d7c77068c3711d2366649ed7","size":70368,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.2.0.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.2.0_1690821937962_0.5061862136777535"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-07-31T16:45:38.156Z","publish_time":1690821938156,"_source_registry_name":"default","_cnpm_publish_time":1690821938156},"0.1.4":{"name":"@noble/ciphers","version":"0.1.4","description":"Auditable & minimal JS implementation of Salsa20, ChaCha, Poly1305 & AES-SIV","scripts":{"bench":"node benchmark/index.js noble","bench:all":"node benchmark/index.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm -r *.{js,d.ts,js.map,d.ts.map} esm/*.{js,d.ts,js.map,d.ts.map} webcrypto esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_micro":{"types":"./_micro.d.ts","import":"./esm/_micro.js","default":"./_micro.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/siv":{"types":"./webcrypto/siv.d.ts","import":"./esm/webcrypto/siv.js","default":"./webcrypto/siv.js"},"./webcrypto/ff1":{"types":"./webcrypto/ff1.d.ts","import":"./esm/webcrypto/ff1.js","default":"./webcrypto/ff1.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["cryptography","crypto","noble","cipher","ciphers","aes","gcm","siv","salsa20","chacha20","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael"],"funding":"https://paulmillr.com/funding/","_id":"@noble/ciphers@0.1.4","gitHead":"9be52190cbfcb11e58a70f6884e1ef141b99a4e2","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_nodeVersion":"20.4.0","_npmVersion":"9.8.0","dist":{"shasum":"96327dca147829ed9eee0d96cfdf7c57915765f0","size":66721,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.1.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.1.4.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.1.4_1689401285877_0.3914962647808313"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-07-15T06:08:06.143Z","publish_time":1689401286143,"_source_registry_name":"default","_cnpm_publish_time":1689401286143},"0.1.3":{"name":"@noble/ciphers","version":"0.1.3","description":"Auditable & minimal JS implementation of Salsa20, ChaCha, Poly1305 & AES-SIV","scripts":{"bench":"node benchmark/index.js noble","bench:all":"node benchmark/index.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,js.map,d.ts.map} webcrypto esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_slow":{"types":"./_slow.d.ts","import":"./esm/_slow.js","default":"./_slow.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/siv":{"types":"./webcrypto/siv.d.ts","import":"./esm/webcrypto/siv.js","default":"./webcrypto/siv.js"},"./webcrypto/ff1":{"types":"./webcrypto/ff1.d.ts","import":"./esm/webcrypto/ff1.js","default":"./webcrypto/ff1.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["cryptography","crypto","noble","cipher","ciphers","aes","gcm","siv","salsa20","chacha20","xsalsa20","xchacha20","poly1305","xsalsa20poly1305","chacha20poly1305","xchacha20poly1305","secretbox","rijndael"],"funding":"https://paulmillr.com/funding/","gitHead":"9d8cca6f390aea735e530f08e3d863dfbd671c27","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_id":"@noble/ciphers@0.1.3","_nodeVersion":"20.3.1","_npmVersion":"9.7.2","dist":{"shasum":"13d3e26dd9bfcb28cd5ea7640f2c28e8feb08e46","size":61285,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.1.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.1.3.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.1.3_1688082973843_0.21054799655518686"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-06-29T23:56:14.109Z","publish_time":1688082974109,"_source_registry_name":"default","_cnpm_publish_time":1688082974109},"0.1.2":{"name":"@noble/ciphers","version":"0.1.2","description":"Auditable & minimal JS implementation of AES SIV, Salsa20 and ChaCha20","scripts":{"bench":"node benchmark/index.js noble","bench:all":"node benchmark/index.js","bench:install":"cd benchmark && npm install && cd ../../","build":"npm run build:clean; tsc && tsc -p tsconfig.esm.json","build:release":"cd build; npm i; npm run build","build:clean":"rm *.{js,d.ts,js.map,d.ts.map} esm/*.{js,js.map,d.ts.map} webcrypto esm/webcrypto 2> /dev/null","lint":"prettier --check 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","format":"prettier --write 'src/**/*.{js,ts}' 'test/**/*.{js,ts,mjs}'","test":"node test/index.js"},"author":{"name":"Paul Miller","url":"https://paulmillr.com"},"homepage":"https://paulmillr.com/noble/","repository":{"type":"git","url":"git+https://github.com/paulmillr/noble-ciphers.git"},"license":"MIT","devDependencies":{"@scure/base":"1.1.1","fast-check":"3.0.0","micro-bmark":"0.3.1","micro-should":"0.4.0","prettier":"2.8.4","typescript":"5.0.2"},"main":"index.js","exports":{".":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/crypto":{"types":"./webcrypto/crypto.d.ts","node":{"import":"./esm/webcrypto/cryptoNode.js","default":"./webcrypto/cryptoNode.js"},"import":"./esm/webcrypto/crypto.js","default":"./webcrypto/crypto.js"},"./_slow":{"types":"./_slow.d.ts","import":"./esm/_slow.js","default":"./_slow.js"},"./_poly1305":{"types":"./_poly1305.d.ts","import":"./esm/_poly1305.js","default":"./_poly1305.js"},"./chacha":{"types":"./chacha.d.ts","import":"./esm/chacha.js","default":"./chacha.js"},"./salsa":{"types":"./salsa.d.ts","import":"./esm/salsa.js","default":"./salsa.js"},"./utils":{"types":"./utils.d.ts","import":"./esm/utils.js","default":"./utils.js"},"./index":{"types":"./index.d.ts","import":"./esm/index.js","default":"./index.js"},"./webcrypto/aes":{"types":"./webcrypto/aes.d.ts","import":"./esm/webcrypto/aes.js","default":"./webcrypto/aes.js"},"./webcrypto/siv":{"types":"./webcrypto/siv.d.ts","import":"./esm/webcrypto/siv.js","default":"./webcrypto/siv.js"},"./webcrypto/ff1":{"types":"./webcrypto/ff1.d.ts","import":"./esm/webcrypto/ff1.js","default":"./webcrypto/ff1.js"},"./webcrypto/utils":{"types":"./webcrypto/utils.d.ts","import":"./esm/webcrypto/utils.js","default":"./webcrypto/utils.js"}},"browser":{"node:crypto":false,"./webcrypto/crypto":"./webcrypto/crypto.js"},"keywords":["cryptography","crypto","noble","cipher","ciphers","aes","gcm","siv","salsa20","chacha20","xsalsa20","xchacha20","poly1305","secretbox","rijndael"],"funding":"https://paulmillr.com/funding/","gitHead":"88bc7f77e18590de3ac9bb4d02f945a13609b7e7","types":"./index.d.ts","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"_id":"@noble/ciphers@0.1.2","_nodeVersion":"20.3.1","_npmVersion":"9.7.2","dist":{"shasum":"c52d9dfa8a7b34811ba93c5bfd1d887c6d6addb8","size":60839,"noattachment":false,"key":"/@noble/ciphers/-/@noble/ciphers-0.1.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/@noble/ciphers/download/@noble/ciphers-0.1.2.tgz"},"_npmUser":{"name":"paulmillr","email":"paul@paulmillr.com"},"directories":{},"maintainers":[{"name":"paulmillr","email":"paul@paulmillr.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/ciphers_0.1.2_1687995292661_0.85506778765882"},"_hasShrinkwrap":false,"_cnpmcore_publish_time":"2023-06-28T23:34:52.873Z","publish_time":1687995292873,"_source_registry_name":"default","_cnpm_publish_time":1687995292873}},"readme":"# noble-ciphers\n\nAudited & minimal JS implementation of Salsa20, ChaCha and AES.\n\n- ???? [**Audited**](#security) by an independent security firm\n- ???? Tree-shakeable: unused code is excluded from your builds\n- ???? Fast: hand-optimized for caveats of JS engines\n- ???? Reliable: property-based / cross-library / wycheproof tests ensure correctness\n- ???? AES: ECB, CBC, CTR, CFB, GCM, SIV (nonce misuse-resistant), AESKW, AESKWP\n- ???? Salsa20, ChaCha, XSalsa20, XChaCha, ChaCha8, ChaCha12, Poly1305\n- ???? Two AES implementations: pure JS or friendly WebCrypto wrapper\n- ???? 11KB (gzipped) for everything, 3KB for ChaCha-only build\n\nCheck out [Upgrading](#upgrading) for information about upgrading from previous versions.\nTake a glance at [GitHub Discussions](https://github.com/paulmillr/noble-ciphers/discussions) for questions and support.\n\n### This library belongs to _noble_ cryptography\n\n> **noble cryptography** — high-security, easily auditable set of contained cryptographic libraries and tools.\n\n- Zero or minimal dependencies\n- Highly readable TypeScript / JS code\n- PGP-signed releases and transparent NPM builds\n- All libraries:\n  [ciphers](https://github.com/paulmillr/noble-ciphers),\n  [curves](https://github.com/paulmillr/noble-curves),\n  [hashes](https://github.com/paulmillr/noble-hashes),\n  [post-quantum](https://github.com/paulmillr/noble-post-quantum),\n  5kb [secp256k1](https://github.com/paulmillr/noble-secp256k1) /\n  [ed25519](https://github.com/paulmillr/noble-ed25519)\n- [Check out homepage](https://paulmillr.com/noble/)\n  for reading resources, documentation and apps built with noble\n\n## Usage\n\n> `npm install @noble/ciphers`\n\n> `deno add jsr:@noble/ciphers`\n\nWe support all major platforms and runtimes.\nFor React Native, you may need a\n[polyfill for getRandomValues](https://github.com/LinusU/react-native-get-random-values).\nA standalone file\n[noble-ciphers.js](https://github.com/paulmillr/noble-ciphers/releases) is also available.\n\n```ts\n// import * from '@noble/ciphers'; // Error: use sub-imports, to ensure small app size\nimport { gcm, gcmsiv } from '@noble/ciphers/aes.js';\nimport { chacha20poly1305, xchacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { xsalsa20poly1305 } from '@noble/ciphers/salsa.js';\n\n// Unauthenticated encryption: make sure to use HMAC or similar\nimport { ctr, cfb, cbc, ecb } from '@noble/ciphers/aes.js';\nimport { salsa20, xsalsa20 } from '@noble/ciphers/salsa.js';\nimport { chacha20, xchacha20, chacha8, chacha12 } from '@noble/ciphers/chacha.js';\nimport { aeskw, aeskwp } from '@noble/ciphers/aes.js'; // KW\nimport { bytesToHex, hexToBytes, managedNonce, randomBytes } from '@noble/ciphers/utils.js';\n```\n\n- [Examples](#examples)\n  - [XChaCha20-Poly1305 encryption](#xchacha20-poly1305-encryption)\n  - [AES-256-GCM encryption](#aes-256-gcm-encryption)\n  - [managedNonce: automatic nonce handling](#managednonce-automatic-nonce-handling)\n  - [AES: gcm, siv, ctr, cfb, cbc, ecb, aeskw](#aes-gcm-siv-ctr-cfb-cbc-ecb-aeskw)\n  - [AES: friendly WebCrypto wrapper](#aes-friendly-webcrypto-wrapper)\n  - [Reuse array for input and output](#reuse-array-for-input-and-output)\n  - [Use password for encryption](#use-password-for-encryption)\n- [Internals](#internals)\n  - [Picking a cipher](#picking-a-cipher)\n  - [How to encrypt properly](#how-to-encrypt-properly)\n  - [Nonces](#nonces)\n  - [Encryption limits](#encryption-limits)\n  - [AES block modes](#aes-block-modes)\n  - [Implemented primitives](#implemented-primitives)\n- [Security](#security)\n- [Speed](#speed)\n- [Upgrading](#upgrading)\n- [Contributing & testing](#contributing--testing)\n- [License](#license)\n\n## Examples\n\n> [!NOTE]\n> Use different nonce every time `encrypt()` is done.\n\n#### XChaCha20-Poly1305 encryption\n\n```js\nimport { xchacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { randomBytes } from '@noble/ciphers/utils.js';\nconst key = randomBytes(32); // random key\n// const key = new Uint8Array([ // existing key\n//   169, 88, 160, 139, 168, 29, 147, 196, 14, 88, 237, 76, 243, 177, 109, 140,\n//   195, 140, 80, 10, 216, 134, 215, 71, 191, 48, 20, 104, 189, 37, 38, 55,\n// ]);\n// import { hexToBytes } from '@noble/ciphers/utils.js'; // hex key\n// const key = hexToBytes('4b7f89bac90a1086fef73f5da2cbe93b2fae9dfbf7678ae1f3e75fd118ddf999');\nconst nonce = randomBytes(24);\nconst chacha = xchacha20poly1305(key, nonce);\nconst data = new TextEncoder().encode('hello noble');\nconst ciphertext = chacha.encrypt(data);\nconst data_ = chacha.decrypt(ciphertext); // new TextDecoder().decode(data_) === data\n```\n\n#### AES-256-GCM encryption\n\n```js\nimport { gcm } from '@noble/ciphers/aes.js';\nimport { randomBytes } from '@noble/ciphers/utils.js';\nconst key = randomBytes(32);\nconst nonce = randomBytes(24);\nconst data = new TextEncoder().encode('hello noble');\nconst aes = gcm(key, nonce);\nconst ciphertext = aes.encrypt(data);\nconst data_ = aes.decrypt(ciphertext); // new TextDecoder().decode(data_) === data\n```\n\n#### managedNonce: automatic nonce handling\n\nWe provide API that manages nonce internally instead of exposing them to library's user.\n\nFor `encrypt`: a `nonceBytes`-length buffer is fetched from CSPRNG and prenended to encrypted ciphertext.\n\nFor `decrypt`: first `nonceBytes` of ciphertext are treated as nonce.\n\n> [!NOTE]\n> AES-GCM & ChaCha (NOT XChaCha) [limit amount of messages](#encryption-limits)\n> encryptable under the same key.\n\n```js\nimport { xchacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { hexToBytes, managedNonce } from '@noble/ciphers/utils.js';\nconst key = hexToBytes('fa686bfdffd3758f6377abbc23bf3d9bdc1a0dda4a6e7f8dbdd579fa1ff6d7e1');\nconst chacha = managedNonce(xchacha20poly1305)(key); // manages nonces for you\nconst data = new TextEncoder().encode('hello noble');\nconst ciphertext = chacha.encrypt(data);\nconst data_ = chacha.decrypt(ciphertext);\n```\n\n#### AES: gcm, siv, ctr, cfb, cbc, ecb, aeskw\n\n```js\nimport { gcm, gcmsiv, aessiv, ctr, cfb, cbc, ecb } from '@noble/ciphers/aes.js';\nimport { randomBytes } from '@noble/ciphers/utils.js';\nconst plaintext = new Uint8Array(32).fill(16);\nfor (let cipher of [gcm, gcmsiv, aessiv]) {\n  const key = randomBytes(32); // 24 for AES-192, 16 for AES-128\n  const nonce = randomBytes(12);\n  const ciphertext_ = cipher(key, nonce).encrypt(plaintext);\n  const plaintext_ = cipher(key, nonce).decrypt(ciphertext_);\n}\nfor (const cipher of [ctr, cbc, cfb]) {\n  const key = randomBytes(32); // 24 for AES-192, 16 for AES-128\n  const nonce = randomBytes(16);\n  const ciphertext_ = cipher(key, nonce).encrypt(plaintext);\n  const plaintext_ = cipher(key, nonce).decrypt(ciphertext_);\n}\nfor (const cipher of [ecb]) {\n  const key = randomBytes(32); // 24 for AES-192, 16 for AES-128\n  const ciphertext_ = cipher(key).encrypt(plaintext);\n  const plaintext_ = cipher(key).decrypt(ciphertext_);\n}\n\n// AESKW, AESKWP\nimport { aeskw, aeskwp } from '@noble/ciphers/aes.js';\nimport { hexToBytes } from '@noble/ciphers/utils.js';\n\nconst kek = hexToBytes('000102030405060708090A0B0C0D0E0F');\nconst keyData = hexToBytes('00112233445566778899AABBCCDDEEFF');\nconst ciphertext = aeskw(kek).encrypt(keyData);\n```\n\n#### AES: friendly WebCrypto wrapper\n\nNoble implements AES. Sometimes people want to use built-in `crypto.subtle` instead. However, it has terrible API. We simplify access to built-ins.\n\n> [!NOTE]\n> Webcrypto methods are always async.\n\n```js\nimport { gcm, ctr, cbc, randomBytes } from '@noble/ciphers/utils.js';\nconst plaintext = new Uint8Array(32).fill(16);\nconst key = randomBytes(32);\nfor (const cipher of [gcm]) {\n  const nonce = randomBytes(12);\n  const ciphertext_ = await cipher(key, nonce).encrypt(plaintext);\n  const plaintext_ = await cipher(key, nonce).decrypt(ciphertext_);\n}\nfor (const cipher of [ctr, cbc]) {\n  const nonce = randomBytes(16);\n  const ciphertext_ = await cipher(key, nonce).encrypt(plaintext);\n  const plaintext_ = await cipher(key, nonce).decrypt(ciphertext_);\n}\n```\n\n#### Reuse array for input and output\n\nTo avoid additional allocations, Uint8Array can be reused\nbetween encryption and decryption calls.\n\n> [!NOTE]\n> Some ciphers don't support unaligned (`byteOffset % 4 !== 0`) Uint8Array as\n> destination. It can decrease performance, making the optimization pointless.\n\n```js\nimport { chacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { randomBytes } from '@noble/ciphers/utils.js';\n\nconst key = randomBytes(32);\nconst nonce = randomBytes(12);\nconst chacha = chacha20poly1305(key, nonce);\n\nconst input = new TextEncoder().encode('hello noble'); // length == 12\nconst inputLength = input.length;\nconst tagLength = 16;\n\nconst buf = new Uint8Array(inputLength + tagLength);\nconst start = buf.subarray(0, inputLength);\nstart.set(input); // copy input to buf\n\nchacha.encrypt(start, buf); // encrypt into `buf`\nchacha.decrypt(buf, start); // decrypt into `start`\n```\n\nxsalsa20poly1305 also supports this, but requires 32 additional bytes for encryption / decryption,\ndue to its inner workings.\n\n#### Randomness generation\n\nWe provide userspace CSPRNG (cryptographically secure pseudorandom number generator).\nIt's best to limit their usage to non-production, non-critical cases: for example, test-only usage.\nChaCha-based CSPRNG does not have a specification as per 2025, which makes it less secure.\n\n```js\nimport { randomBytes } from '@noble/ciphers/utils.js';\nimport { rngAesCtrDrbg256 } from '@noble/ciphers/aes.js';\nimport { rngChacha8, rngChacha20 } from '@noble/ciphers/chacha.js';\n\n// 1. Best: WebCrypto\nconst rnd1 = randomBytes(32);\n// 2. AES-CTR DRBG\nconst rnd2 = rngAesCtrDrbg256(randomBytes(32)).randomBytes(1024);\n// 3. ChaCha8 CSPRNG\nconst rnd3 = rngChacha8(randomBytes(32)).randomBytes(1024);\n```\n\n#### Use password for encryption\n\nIt is not safe to convert password into Uint8Array.\nInstead, KDF stretching function like PBKDF2 / Scrypt / Argon2id\nshould be applied to convert password to AES key.\nMake sure to use salt (app-specific secret) in addition to password.\n\n```js\nimport { xchacha20poly1305 } from '@noble/ciphers/chacha.js';\nimport { managedNonce } from '@noble/ciphers/utils.js';\nimport { scrypt } from '@noble/hashes/scrypt.js';\n\n// Convert password into 32-byte key using scrypt\nconst PASSWORD = 'correct-horse-battery-staple';\nconst APP_SPECIFIC_SECRET = 'salt-12345678-secret';\nconst SECURITY_LEVEL = 2 ** 20; // requires 1GB of RAM to calculate\n// sync, but scryptAsync is also available\nconst key = scrypt(PASSWORD, APP_SPECIFIC_SECRET, { N: SECURITY_LEVEL, r: 8, p: 1, dkLen: 32 });\n\n// Use random, managed nonce\nconst chacha = managedNonce(xchacha20poly1305)(key);\n\nconst data = new TextEncoder().encode('hello noble');\nconst ciphertext = chacha.encrypt(data);\nconst data_ = chacha.decrypt(ciphertext);\n```\n\n## Internals\n\n### Picking a cipher\n\nWe suggest to use **XChaCha20-Poly1305** because it's very fast and allows random keys.\n**AES-GCM-SIV** is also a good idea, because it provides resistance against nonce reuse.\n**AES-GCM** is a good option when those two are not available.\n\n### How to encrypt properly\n\n- Use unpredictable key with enough entropy\n  - Random key must be using cryptographically secure random number generator (CSPRNG), not `Math.random` etc.\n  - Non-random key generated from KDF is fine\n  - Re-using key is fine, but be aware of rules for cryptographic key wear-out and [encryption limits](#encryption-limits)\n- Use new nonce every time and [don't repeat it](#nonces)\n  - chacha and salsa20 are fine for sequential counters that _never_ repeat: `01, 02...`\n  - xchacha and xsalsa20 can use random nonces instead\n  - AES-GCM should use 12-byte nonces: smaller nonces are security risk\n- Prefer authenticated encryption (AEAD)\n  - Good: chacha20poly1305, GCM, GCM-SIV, ChaCha+HMAC, CTR+HMAC, CBC+HMAC\n  - Bad: chacha20, raw CTR, raw CBC\n  - Flipping bits or ciphertext substitution won't be detected in unauthenticated ciphers\n  - Polynomial MACs are not perfect for every situation:\n    they lack Random Key Robustness: the MAC can be forged, and can't\n    be used in PAKE schemes. See\n    [invisible salamanders attack](https://keymaterial.net/2020/09/07/invisible-salamanders-in-aes-gcm-siv/).\n    To combat salamanders, `hash(key)` can be included in ciphertext,\n    however, this would violate ciphertext indistinguishability:\n    an attacker would know which key was used - so `HKDF(key, i)`\n    could be used instead.\n- Don't re-use keys between different protocols\n  - For example, using ECDH key in AES can be bad\n  - Use hkdf or, at least, a hash function to create sub-key instead\n\n### Nonces\n\nMost ciphers need a key and a nonce (aka initialization vector / IV) to encrypt a data.\nRepeating (key, nonce) pair with different plaintexts would allow an attacker to decrypt it.\n\n    ciphertext_a = encrypt(plaintext_a, key, nonce)\n    ciphertext_b = encrypt(plaintext_b, key, nonce)\n    stream_diff = xor(ciphertext_a, ciphertext_b)    # Break encryption\n\nOne way of not repeating nonces is using counters:\n\n    for i in 0..:\n        ciphertext[i] = encrypt(plaintexts[i], key, i)\n\nAnother is generating random nonce every time:\n\n    for i in 0..:\n        rand_nonces[i] = random()\n        ciphertext[i] = encrypt(plaintexts[i], key, rand_nonces[i])\n\n- Counters are OK, but it's not always possible to store current counter value:\n  e.g. in decentralized, unsyncable systems.\n- Randomness is OK, but there's a catch:\n  ChaCha20 and AES-GCM use 96-bit / 12-byte nonces, which implies higher chance of collision.\n  In the example above, `random()` can collide and produce repeating nonce.\n  Chance is even higher for 64-bit nonces, which GCM allows - don't use them.\n- To safely use random nonces, utilize XSalsa20 or XChaCha:\n  they increased nonce length to 192-bit, minimizing a chance of collision.\n  AES-SIV is also fine. In situations where you can't use eXtended-nonce\n  algorithms, key rotation is advised. hkdf would work great for this case.\n\n### Encryption limits\n\nA \"protected message\" would mean a probability of `2**-50` that a passive attacker\nsuccessfully distinguishes the ciphertext outputs of the AEAD scheme from the outputs\nof a random function.\n\n- Max message size:\n  - AES-GCM: ~68GB, `2**36-256`\n  - Salsa, ChaCha, XSalsa, XChaCha: ~256GB, `2**38-64`\n- Max amount of protected messages, under same key:\n  - AES-GCM: `2**32.5`\n  - Salsa, ChaCha: `2**46`, but only integrity (MAC) is affected, not confidentiality (encryption)\n  - XSalsa, XChaCha: `2**72`\n- Max amount of protected messages, across all keys:\n  - AES-GCM: `2**69/B` where B is max blocks encrypted by a key. Meaning\n    `2**59` for 1KB, `2**49` for 1MB, `2**39` for 1GB\n  - Salsa, ChaCha, XSalsa, XChaCha: `2**100`\n- Max amount of protected messages, under same key, using **random nonce**:\n  - Relevant for 12-byte nonces with `managedNonce`: AES-GCM, ChaCha\n  - `2**23` (8M) messages for `2**-50` chance, `2**32.5` (4B) for `2**-32.5` chance\n\nCheck out [draft-irtf-cfrg-aead-limits](https://datatracker.ietf.org/doc/draft-irtf-cfrg-aead-limits/) for details.\n\n### Implemented primitives\n\n- Salsa20 stream cipher, released in 2005.\n  Salsa's goal was to implement AES replacement that does not rely on S-Boxes,\n  which are hard to implement in a constant-time manner.\n  Salsa20 is usually faster than AES, a big deal on slow, budget mobile phones.\n  - [XSalsa20](https://cr.yp.to/snuffle/xsalsa-20110204.pdf), extended-nonce\n    variant was released in 2008. It switched nonces from 96-bit to 192-bit,\n    and became safe to be picked at random.\n  - Nacl / Libsodium popularized term \"secretbox\", - which is just xsalsa20poly1305.\n    We provide the alias and corresponding seal / open methods.\n    \"crypto_box\" and \"sealedbox\" are available in package [noble-sodium](https://github.com/serenity-kit/noble-sodium).\n  - Check out [PDF](https://cr.yp.to/snuffle/salsafamily-20071225.pdf)\n    and [website](https://cr.yp.to/snuffle.html).\n- ChaCha20 stream cipher, released in 2008. Developed after Salsa20,\n  ChaCha aims to increase diffusion per round.\n  - [XChaCha20](https://datatracker.ietf.org/doc/html/draft-irtf-cfrg-xchacha)\n    extended-nonce variant is also provided. Similar to XSalsa, it's safe to use with\n    randomly-generated nonces.\n  - Check out\n    [RFC 8439](https://www.rfc-editor.org/rfc/rfc8439),\n    [PDF](http://cr.yp.to/chacha/chacha-20080128.pdf) and\n    [website](https://cr.yp.to/chacha.html).\n- AES is a variant of Rijndael block cipher, standardized by NIST in 2001.\n  We provide the fastest available pure JS implementation.\n  - We support AES-128, AES-192 and AES-256: the mode is selected dynamically,\n    based on key length (16, 24, 32).\n  - AES-GCM-SIV nonce-misuse-resistant mode is also provided. Our implementation of SIV\n    has the same speed as GCM: there is no performance hit.\n    The mode is described in [RFC 8452](https://www.rfc-editor.org/rfc/rfc8452).\n  - There is a separate AES-SIV mode, described in [RFC 5297](https://www.rfc-editor.org/rfc/rfc5297)\n  - We also have AESKW and AESKWP from\n    [RFC 3394](https://www.rfc-editor.org/rfc/rfc3394) & [RFC 5649](https://www.rfc-editor.org/rfc/rfc5649)\n  - Format-preserving encryption algorithm (FPE-FF1) specified in\n    [NIST SP 800-38G](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38G.pdf).\n  - Check out [AES block modes](#aes-block-modes),\n    [FIPS 197](https://csrc.nist.gov/files/pubs/fips/197/final/docs/fips-197.pdf) and\n    [original proposal](https://csrc.nist.gov/csrc/media/projects/cryptographic-standards-and-guidelines/documents/aes-development/rijndael-ammended.pdf).\n- Polynomial-evaluation MACs are available: Poly1305, AES-GCM's GHash and AES-SIV's Polyval.\n  - Poly1305 ([PDF](https://cr.yp.to/mac/poly1305-20050329.pdf),\n    [website](https://cr.yp.to/mac.html))\n    is a fast and parallel secret-key message-authentication code suitable for\n    a wide variety of applications. It was standardized in\n    [RFC 8439](https://www.rfc-editor.org/rfc/rfc8439) and is now used in TLS 1.3.\n  - Ghash is used in AES-GCM: see NIST SP 800-38G\n  - Polyval is used in AES-GCM-SIV: see [RFC 8452](https://www.rfc-editor.org/rfc/rfc8452)\n\n##### AES block modes\n\nFor non-deterministic (not ECB) schemes, initialization vector (IV) is mixed to block/key;\nand each new round either depends on previous block's key, or on some counter.\n\n- **ECB** (Electronic Codebook): Deterministic encryption; identical plaintext blocks yield identical ciphertexts. Not secure due to pattern leakage. due to pattern leakage.\n  See [AES Penguin](https://words.filippo.io/the-ecb-penguin/)\n- **CBC** (Cipher Block Chaining): Each plaintext block is XORed with the previous block of ciphertext\n  before encryption. Hard to use: requires proper padding and an IV. Unauthenticated: needs MAC.\n- **CTR** (Counter Mode): Turns a block cipher into a stream cipher using a counter and IV (nonce).\n  Efficient and parallelizable. Requires a unique nonce per encryption. Unauthenticated: needs MAC.\n- **GCM** (Galois/Counter Mode): Combines CTR mode with polynomial MAC. Efficient and widely used. Not perfect:\n  a) conservative key wear-out is `2**32` (4B) msgs.\n  b) key wear-out under random nonces is even smaller: `2**23` (8M) messages for `2**-50` chance.\n  c) MAC can be forged: see Poly1305 documentation.\n- **SIV** (Synthetic IV): GCM with nonce-misuse resistance; repeating nonces reveal only the fact plaintexts\n  are identical. Also suffers from GCM issues: key wear-out limits & MAC forging.\n- **XTS**: Designed for disk encryption.\n  Similar to ECB (deterministic), but has `[i][j]` tweak arguments corresponding to\n  sector i and 16-byte block (part of sector) j. Lacks MAC.\n\n## Security\n\nThe library has been independently audited:\n\n- at version 1.0.0, in Sep 2024, by [cure53](https://cure53.de)\n  - PDFs: [website](https://cure53.de/audit-report_noble-crypto-libs.pdf), [in-repo](./audit/2024-09-cure53-audit-nbl4.pdf)\n  - [Changes since audit](https://github.com/paulmillr/noble-ciphers/compare/1.0.0..main)\n  - Scope: everything\n  - The audit has been funded by [OpenSats](https://opensats.org)\n\nIt is tested against property-based, cross-library and Wycheproof vectors,\nand is being fuzzed in [the separate repo](https://github.com/paulmillr/fuzzing).\n\nIf you see anything unusual: investigate and report.\n\n### Constant-timeness\n\nWe're targetting algorithmic constant time. _JIT-compiler_ and _Garbage Collector_ make \"constant time\"\nextremely hard to achieve [timing attack](https://en.wikipedia.org/wiki/Timing_attack) resistance\nin a scripting language. Which means _any other JS library can't have\nconstant-timeness_. Even statically typed Rust, a language without GC,\n[makes it harder to achieve constant-time](https://www.chosenplaintext.ca/open-source/rust-timing-shield/security)\nfor some cases. If your goal is absolute security, don't use any JS lib — including bindings to native ones.\nUse low-level libraries & languages.\n\nThe library uses T-tables for AES, which\n[leak access timings](https://cr.yp.to/antiforgery/cachetiming-20050414.pdf).\nThis is also done in [OpenSSL](https://github.com/openssl/openssl/blob/2f33265039cdbd0e4589c80970e02e208f3f94d2/crypto/aes/aes_core.c#L706) and\n[Go stdlib](https://cs.opensource.google/go/go/+/refs/tags/go1.22.6:src/crypto/aes/const.go;l=90) for performance reasons.\nThe analysis was mentioned in [hal-04652991](https://hal.science/hal-04652991/document).\n\n### Supply chain security\n\n- **Commits** are signed with PGP keys, to prevent forgery. Make sure to verify commit signatures\n- **Releases** are transparent and built on GitHub CI.\n  Check out [attested checksums of single-file builds](https://github.com/paulmillr/noble-ciphers/attestations)\n  and [provenance logs](https://github.com/paulmillr/noble-ciphers/actions/workflows/release.yml)\n- **Rare releasing** is followed to ensure less re-audit need for end-users\n- **Dependencies** are minimized and locked-down: any dependency could get hacked and users will be downloading malware with every install.\n  - We make sure to use as few dependencies as possible\n  - Automatic dep updates are prevented by locking-down version ranges; diffs are checked with `npm-diff`\n- **Dev Dependencies** are disabled for end-users; they are only used to develop / build the source code\n\nFor this package, there are 0 dependencies; and a few dev dependencies:\n\n- jsbt is used for benchmarking / testing / build tooling and developed by the same author\n- prettier, fast-check and typescript are used for code quality / test generation / ts compilation. It's hard to audit their source code thoroughly and fully because of their size\n\n### Randomness\n\nWe're deferring to built-in\n[crypto.getRandomValues](https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues)\nwhich is considered cryptographically secure (CSPRNG).\n\nIn the past, browsers had bugs that made it weak: it may happen again.\nImplementing a userspace CSPRNG to get resilient to the weakness\nis even worse: there is no reliable userspace source of quality entropy.\n\n### Quantum computers\n\nCryptographically relevant quantum computer, if built, will allow to\nutilize Grover's algorithm to break ciphers in 2^n/2 operations, instead of 2^n.\n\nThis means AES128 should be replaced with AES256. Salsa and ChaCha are already safe.\n\nAustralian ASD prohibits AES128 [after 2030](https://www.cyber.gov.au/resources-business-and-government/essential-cyber-security/ism/cyber-security-guidelines/guidelines-cryptography).\n\n## Speed\n\n```sh\nnpm run bench\n```\n\nTo summarize, noble is the fastest JS implementation of Salsa, ChaCha and AES.\nYou can gain additional speed-up and\navoid memory allocations by passing `output`\nuint8array into encrypt / decrypt methods.\n\nBenchmarks measured on Apple M4:\n\n```\n64B\nxsalsa20poly1305 x 735,835 ops/sec @ 1μs/op\nchacha20poly1305 x 581,395 ops/sec @ 1μs/op\nxchacha20poly1305 x 468,384 ops/sec @ 2μs/op\naes-256-gcm x 201,126 ops/sec @ 4μs/op\naes-256-gcm-siv x 162,284 ops/sec @ 6μs/op\n# Unauthenticated encryption\nsalsa20 x 1,655,629 ops/sec @ 604ns/op\nxsalsa20 x 1,400,560 ops/sec @ 714ns/op\nchacha20 x 1,996,007 ops/sec @ 501ns/op\nxchacha20 x 1,404,494 ops/sec @ 712ns/op\nchacha8 x 2,145,922 ops/sec @ 466ns/op\nchacha12 x 2,036,659 ops/sec @ 491ns/op\naes-ecb-256 x 1,019,367 ops/sec @ 981ns/op\naes-cbc-256 x 931,966 ops/sec @ 1μs/op\naes-ctr-256 x 954,198 ops/sec @ 1μs/op\n\n1MB\nxsalsa20poly1305 x 334 ops/sec @ 2ms/op\nchacha20poly1305 x 333 ops/sec @ 2ms/op\nxchacha20poly1305 x 334 ops/sec @ 2ms/op\naes-256-gcm x 94 ops/sec @ 10ms/op\naes-256-gcm-siv x 90 ops/sec @ 11ms/op\n# Unauthenticated encryption\nsalsa20 x 831 ops/sec @ 1ms/op\nxsalsa20 x 830 ops/sec @ 1ms/op\nchacha20 x 804 ops/sec @ 1ms/op\nxchacha20 x 797 ops/sec @ 1ms/op\nchacha8 x 1,495 ops/sec @ 668μs/op\nchacha12 x 1,148 ops/sec @ 871μs/op\naes-ecb-256 x 289 ops/sec @ 3ms/op\naes-cbc-256 x 114 ops/sec @ 8ms/op\naes-ctr-256 x 127 ops/sec @ 7ms/op\n# Wrapper over built-in webcrypto\nwebcrypto ctr-256 x 6,508 ops/sec @ 153μs/op\nwebcrypto cbc-256 x 1,820 ops/sec @ 549μs/op\nwebcrypto gcm-256 x 5,106 ops/sec @ 195μs/op\n```\n\nCompare to other implementations:\n\n```\nxsalsa20poly1305 (encrypt, 1MB)\n├─tweetnacl x 196 ops/sec\n└─noble x 305 ops/sec\n\nchacha20poly1305 (encrypt, 1MB)\n├─node x 1,668 ops/sec\n├─stablelib x 202 ops/sec\n└─noble x 319 ops/sec\n\naes-ctr-256 (encrypt, 1MB)\n├─stablelib x 123 ops/sec\n├─aesjs x 42 ops/sec\n├─noble-webcrypto x 5,965 ops/sec\n└─noble x 124 ops/sec\n```\n\n## Upgrading\n\nSupported node.js versions:\n\n- v2: v20.19+ (ESM-only)\n- v1: v14.21+ (ESM & CJS)\n\nChangelog of v2, when upgrading from ciphers v1:\n\n- The package is now ESM-only. ESM can finally be loaded from common.js on node v20.19+\n- `.js` extension must be used for all modules\n    - Old: `@noble/ciphers/aes`\n    - New: `@noble/ciphers/aes.js`\n    - This simplifies working in browsers natively without transpilers\n- webcrypto: move `randomBytes` and `managedNonce` to `utils.js`\n- ghash, poly1305, polyval: only allow Uint8Array as hash inputs, prohibit `string`\n- utils: new abytes; remove ahash, toBytes\n- Remove modules `_assert` (use `utils`), `_micro` and `crypto` (use `webcrypto`)\n- Bump TS compilation target from es2020 to es2022\n- Massively improve error messages, make them more descriptive\n\n## Contributing & testing\n\n- `npm install && npm run build && npm test` will build the code and run tests.\n- `npm run lint` / `npm run format` will run linter / fix linter issues.\n- `npm run bench` will run benchmarks\n- `npm run build:release` will build single file\n\nSee [paulmillr.com/noble](https://paulmillr.com/noble/)\nfor useful resources, articles, documentation and demos\nrelated to the library.\n\n## License\n\nThe MIT License (MIT)\n\nCopyright (c) 2023 Paul Miller [(https://paulmillr.com)](https://paulmillr.com)\nCopyright (c) 2016 Thomas Pornin <pornin@bolet.org>\n\nSee LICENSE file.\n","_attachments":{},"homepage":"https://paulmillr.com/noble/","bugs":{"url":"https://github.com/paulmillr/noble-ciphers/issues"},"license":"MIT"}