{"_id":"sodium-universal","_rev":"480409","name":"sodium-universal","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","dist-tags":{"latest":"3.0.4"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"time":{"modified":"2021-08-05T09:33:57.000Z","created":"2017-04-06T12:25:03.444Z","3.0.4":"2021-02-04T10:39:38.173Z","3.0.3":"2020-11-13T15:36:18.376Z","3.0.2":"2020-08-12T13:42:38.303Z","3.0.1":"2020-06-24T14:58:52.502Z","3.0.0":"2020-06-23T14:16:27.091Z","2.0.0":"2017-11-13T21:30:33.689Z","1.4.0":"2017-06-28T09:20:42.694Z","1.3.0":"2017-06-21T09:07:48.402Z","1.2.0":"2017-06-12T08:20:55.580Z","1.1.0":"2017-06-08T09:01:09.352Z","1.0.0":"2017-04-06T13:42:49.042Z","0.0.0":"2017-04-06T12:25:03.444Z"},"users":{"akiva":true},"author":{"name":"Emil Bay","email":"github@tixz.dk"},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"versions":{"3.0.4":{"name":"sodium-universal","version":"3.0.4","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","dependencies":{"resolve":"^1.17.0","sodium-native":"^3.2.0","sodium-javascript":"~0.7.2","blake2b":"^2.1.1","chacha20-universal":"^1.0.4","nanoassert":"^2.0.0","sha256-universal":"^1.1.0","sha512-universal":"^1.1.0","siphash24":"^1.0.1","xsalsa20":"^1.0.0"},"scripts":{"prepublish":"./build-scripts/generate.js"},"browser":{"sodium-native":"sodium-javascript"},"browserify":{"transform":["./build-scripts/transform.js"]},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"c6879ae0a5e9b3ae4f37822719cb28804ef00a03","_id":"sodium-universal@3.0.4","_nodeVersion":"15.7.0","_npmVersion":"6.14.11","dist":{"shasum":"93e08eb9fcef05d26dddd9215bf0c770b6c87b7b","size":7478,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-3.0.4.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-3.0.4.tgz"},"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal_3.0.4_1612435178008_0.4421493031186532"},"_hasShrinkwrap":false,"publish_time":1612435178173,"_cnpm_publish_time":1612435178173},"3.0.3":{"name":"sodium-universal","version":"3.0.3","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","dependencies":{"resolve":"^1.17.0","sodium-native":"^3.2.0","sodium-javascript":"~0.7.2","blake2b":"^2.1.1","chacha20-universal":"^1.0.4","nanoassert":"^2.0.0","sha256-universal":"^1.0.1","sha512-universal":"^1.0.1","siphash24":"^1.0.1","xsalsa20":"^1.0.0"},"scripts":{"prepublish":"./build-scripts/generate.js"},"browser":{"sodium-native":"sodium-javascript"},"browserify":{"transform":["./build-scripts/transform.js"]},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"42fc47255a24107f6434271918c8b47ec243be8f","_id":"sodium-universal@3.0.3","_nodeVersion":"14.15.0","_npmVersion":"6.14.8","dist":{"shasum":"2a9d6d1626252e4bf719eccee003981d36f4cb63","size":7488,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-3.0.3.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-3.0.3.tgz"},"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal_3.0.3_1605281778200_0.8663641331673679"},"_hasShrinkwrap":false,"publish_time":1605281778376,"_cnpm_publish_time":1605281778376},"3.0.2":{"name":"sodium-universal","version":"3.0.2","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","dependencies":{"resolve":"^1.17.0","sodium-native":"^3.2.0","sodium-javascript":"~0.6.2","blake2b":"^2.1.1","chacha20-universal":"^1.0.4","nanoassert":"^2.0.0","sha256-universal":"^1.0.1","sha512-universal":"^1.0.1","siphash24":"^1.0.1","xsalsa20":"^1.0.0"},"scripts":{"prepublish":"./build-scripts/generate.js"},"browser":{"sodium-native":"sodium-javascript"},"browserify":{"transform":["./build-scripts/transform.js"]},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"86ef23917c45bdae2c5ba27fd9295ed46f8312fe","_id":"sodium-universal@3.0.2","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"shasum":"56092be97783eb5f0e924593aede1c348f888b50","size":7487,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-3.0.2.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-3.0.2.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal_3.0.2_1597239758176_0.06044995247096874"},"_hasShrinkwrap":false,"publish_time":1597239758303,"_cnpm_publish_time":1597239758303},"3.0.1":{"name":"sodium-universal","version":"3.0.1","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","dependencies":{"resolve":"^1.17.0","sodium-native":"^3.2.0","sodium-javascript":"~0.6.1","blake2b":"^2.1.1","chacha20-universal":"^1.0.4","nanoassert":"^2.0.0","sha256-wasm":"^1.3.0","sha512-wasm":"^1.2.0","siphash24":"^1.0.1","xsalsa20":"^1.0.0"},"scripts":{"prepublish":"./build-scripts/generate.js"},"browser":{"sodium-native":"sodium-javascript"},"browserify":{"transform":["./build-scripts/transform.js"]},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"4ba6d4a28ce73586f7446e81b5b2cae90a170f73","_id":"sodium-universal@3.0.1","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"shasum":"59a08ecd21e0a3bde201f899da722313b21bc693","size":7427,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-3.0.1.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-3.0.1.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmUser":{"name":"emilbayes","email":"github@tixz.dk"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal_3.0.1_1593010732257_0.7481264195591688"},"_hasShrinkwrap":false,"publish_time":1593010732502,"_cnpm_publish_time":1593010732502},"3.0.0":{"name":"sodium-universal","version":"3.0.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","dependencies":{"resolve":"^1.17.0","sodium-javascript":"~0.6.0","sodium-native":"^3.2.0","blake2b":"^2.1.1","chacha20-universal":"^1.0.4","nanoassert":"^1.0.0","sha256-wasm":"^1.3.0","sha512-wasm":"^1.2.0","siphash24":"^1.0.1","xsalsa20":"^1.0.0"},"scripts":{"prepublish":"./build-scripts/generate.js"},"browser":{"sodium-native":"sodium-javascript"},"browserify":{"transform":["./build-scripts/transform.js"]},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"9351f497360c06fd726e85638b27881b278013b9","_id":"sodium-universal@3.0.0","_nodeVersion":"14.4.0","_npmVersion":"6.14.5","dist":{"shasum":"a362823fe604b00c91a5fe772f6a927eb23607b2","size":7312,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-3.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-3.0.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal_3.0.0_1592921786957_0.08257591170595524"},"_hasShrinkwrap":false,"publish_time":1592921787091,"_cnpm_publish_time":1592921787091},"2.0.0":{"name":"sodium-universal","version":"2.0.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":"browser.js","dependencies":{"sodium-javascript":"~0.5.0","sodium-native":"^2.0.0"},"optionalDependencies":{"sodium-native":"^2.0.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"a17c3c1afbf296ddb235cde1c47c58ad42ab590f","_id":"sodium-universal@2.0.0","_npmVersion":"5.5.1","_nodeVersion":"8.9.1","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"dist":{"shasum":"cfb4e1a9c4afece4382b2c23c53439b443bd2af3","size":2148,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-2.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-2.0.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal-2.0.0.tgz_1510608632781_0.1370716355741024"},"directories":{},"publish_time":1510608633689,"_hasShrinkwrap":false,"_cnpm_publish_time":1510608633689},"1.4.0":{"name":"sodium-universal","version":"1.4.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":"browser.js","dependencies":{"sodium-javascript":"~0.5.0","sodium-native":"^1.8.0"},"optionalDependencies":{"sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"ee5653f284e4dced8a795dd76f286e5717bb4fb4","_id":"sodium-universal@1.4.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"dist":{"shasum":"af6759885004f3aabb70ccd809cf83a9296817a3","size":2167,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-1.4.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-1.4.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal-1.4.0.tgz_1498641641861_0.034383745631203055"},"directories":{},"publish_time":1498641642694,"_hasShrinkwrap":false,"_cnpm_publish_time":1498641642694},"1.3.0":{"name":"sodium-universal","version":"1.3.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":{"./index.js":"./browser.js"},"dependencies":{"sodium-javascript":"~0.3.0","sodium-native":"^1.8.0"},"optionalDependencies":{"sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"4a51d028823243c6384c6d2b62c2900b8b07f0b4","_id":"sodium-universal@1.3.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.1","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"dist":{"shasum":"d335a02882e14458e2a731eec7daf486987e4783","size":2167,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-1.3.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-1.3.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal-1.3.0.tgz_1498036067462_0.030267110792919993"},"directories":{},"publish_time":1498036068402,"_cnpm_publish_time":1498036068402,"_hasShrinkwrap":false},"1.2.0":{"name":"sodium-universal","version":"1.2.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":{"sodium-native":"sodium-javascript"},"dependencies":{"sodium-javascript":"~0.3.0","sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"055eb0642859150fed3236f8d23742e27a22e892","_id":"sodium-universal@1.2.0","_npmVersion":"5.0.3","_nodeVersion":"8.1.0","_npmUser":{"name":"mafintosh","email":"mathiasbuus@gmail.com"},"dist":{"shasum":"8025ba18aee0d229aea191924ee121c82d3fce65","size":1949,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-1.2.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-1.2.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal-1.2.0.tgz_1497255654640_0.9548985774163157"},"directories":{},"publish_time":1497255655580,"_cnpm_publish_time":1497255655580,"_hasShrinkwrap":false},"1.1.0":{"name":"sodium-universal","version":"1.1.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":{"sodium-native":"sodium-javascript"},"dependencies":{"sodium-javascript":"~0.2.0","sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"5fddc042f0a28e99c57e4558939a43024d33d10b","_id":"sodium-universal@1.1.0","_shasum":"f825494b75345dcdfb6cbbec1d3e13ffc957af23","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"emilbayes","email":"github@tixz.dk"},"dist":{"shasum":"f825494b75345dcdfb6cbbec1d3e13ffc957af23","size":1956,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-1.1.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-1.1.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sodium-universal-1.1.0.tgz_1496912468422_0.00932711292989552"},"directories":{},"publish_time":1496912469352,"_hasShrinkwrap":false,"_cnpm_publish_time":1496912469352},"1.0.0":{"name":"sodium-universal","version":"1.0.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":{"sodium-native":"sodium-javascript"},"dependencies":{"sodium-javascript":"0.0.1","sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"a7372680e452facc89dd34b7be2381aced40fe73","_id":"sodium-universal@1.0.0","_shasum":"08c7414ee9615336b522609a5c04a09ee0e3fffc","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"emilbayes","email":"github@tixz.dk"},"dist":{"shasum":"08c7414ee9615336b522609a5c04a09ee0e3fffc","size":1948,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-1.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-1.0.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/sodium-universal-1.0.0.tgz_1491486168504_0.6832927912473679"},"directories":{},"publish_time":1491486169042,"_hasShrinkwrap":false,"_cnpm_publish_time":1491486169042},"0.0.0":{"name":"sodium-universal","version":"0.0.0","description":"Universal wrapper for sodium-javascript and sodium-native working in Node.js and the Browser","main":"index.js","browser":{"sodium-native":"sodium-javascript"},"dependencies":{"sodium-javascript":"0.0.1","sodium-native":"^1.8.0"},"scripts":{},"repository":{"type":"git","url":"git+https://github.com/sodium-friends/sodium-universal.git"},"keywords":["libsodium","sodium","sodium-native","sodium-javascript","browserify"],"author":{"name":"Emil Bay","email":"github@tixz.dk"},"license":"MIT","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","gitHead":"43a2e8004170a5a3dffa2c48b8d9e1d6435e08e6","_id":"sodium-universal@0.0.0","_shasum":"b6880d76ef88298a76d6dfb2e6b27d25e01c5c34","_from":".","_npmVersion":"3.10.10","_nodeVersion":"6.9.5","_npmUser":{"name":"emilbayes","email":"github@tixz.dk"},"dist":{"shasum":"b6880d76ef88298a76d6dfb2e6b27d25e01c5c34","size":1292,"noattachment":false,"key":"/sodium-universal/-/sodium-universal-0.0.0.tgz","tarball":"http://registry.cnpm.dingdandao.com/sodium-universal/download/sodium-universal-0.0.0.tgz"},"maintainers":[{"name":"emilbayes","email":"github@tixz.dk"}],"_npmOperationalInternal":{"host":"packages-18-east.internal.npmjs.com","tmp":"tmp/sodium-universal-0.0.0.tgz_1491481502889_0.905596302356571"},"directories":{},"publish_time":1491481503444,"_hasShrinkwrap":false,"_cnpm_publish_time":1491481503444}},"readme":"# sodium-universal\n\nUniversal wrapper for `sodium-javascript` and `sodium-native` working in Node.js and the Browser\n\n```sh\nnpm install sodium-universal\n```\n\n`sodium-native` ships with prebuilds for macOS, Windows, and Linux.\n\nNote that the module itself is generated on a prepublish hook.\n\n## Usage\n\n```js\nvar sodium = require('sodium-universal')\n\nvar rnd = Buffer.allocUnsafe(12) // Cryptographically random data\nsodium.randombytes_buf(rnd)\n\nconsole.log(rnd.toString('hex'))\n\n```\n\nWorks seamlessly with Node.js:\n\n```sh\n$ node example.js\nc7dbd46a6cc84ff2e0d1285c\n```\n\nAnd the browser:\n\n```sh\nbrowserify example.js > bundle.js\n```\n\n## Introduction\n\n[`libsodium`](https://download.libsodium.org/doc/) is a collection of cryptographic primitives, providing a low-level foundation to build higher-level cryptographic applications and protocols. It is often put in contrast to RSA based cryptography and OpenSSL, even though they all share overlapping algorithms and target slightly different audiences. Sodium is a collection of modern collection of primitives, fulfilling the same cryptographic tasks, but based on simpler and more efficient algorithms.\n\nThis library provides seamless bindings to [`sodium-native`](https://github.com/sodium-friends/sodium-native), which is the original C implementation of `libsodium` exposed as a Node native module. For the browser we expose [`sodium-javascript`](https://github.com/sodium-friends/sodium-javascript), using the `package.json` [`browser`](https://github.com/defunctzombie/package-browser-field-spec) field, which is supported by most bundlers.\n\n## API\n\nPlease refer to [`sodium-native`](https://github.com/sodium-friends/sodium-native#api) and [`sodium-javascript`](https://github.com/sodium-friends/sodium-javascript#api). Note that the two modules do not yet have feature parity, where `sodium-native` is the more featureful of the two.\n\n## Compatibilty\n\n<!-- Generated by build-scripts/symbols.js with\n     sodium-native@3.2.0\n     sodium-javascript@0.6.0 -->\n|                     C Library Symbol                     |   `sodium-native`    | `sodium-javascript`  |\n|:--------------------------------------------------------:|:--------------------:|:--------------------:|\n| `crypto_aead_chacha20poly1305_ietf_ABYTES`               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_decrypt`              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_decrypt_detached`     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_encrypt`              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_encrypt_detached`     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_KEYBYTES`             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_keygen`               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_chacha20poly1305_ietf_MESSAGEBYTES_MAX`     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_NPUBBYTES`            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_chacha20poly1305_ietf_NSECBYTES`            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_aead_xchacha20poly1305_ietf_ABYTES`              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_decrypt`             |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_decrypt_detached`    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_encrypt`             |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_encrypt_detached`    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_KEYBYTES`            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_keygen`              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_MESSAGEBYTES_MAX`    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_NPUBBYTES`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_aead_xchacha20poly1305_ietf_NSECBYTES`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_auth`                                            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_auth_BYTES`                                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_auth_KEYBYTES`                                   |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_auth_verify`                                     |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_BEFORENMBYTES`                               | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_box_BOXZEROBYTES`                                | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_box_detached`                                    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_easy`                                        |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_keypair`                                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_MACBYTES`                                    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_NONCEBYTES`                                  |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_open_detached`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_open_easy`                                   |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_box_PUBLICKEYBYTES`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_seal`                                        |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_seal_open`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_SEALBYTES`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_SECRETKEYBYTES`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_seed_keypair`                                |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_SEEDBYTES`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_box_ZEROBYTES`                                   | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_core_ed25519_add`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_BYTES`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_from_uniform`                       |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_is_valid_point`                     |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_NONREDUCEDSCALARBYTES`              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_add`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_complement`                  |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_invert`                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_negate`                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_random`                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_reduce`                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_scalar_sub`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_SCALARBYTES`                        |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_sub`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_core_ed25519_UNIFORMBYTES`                       |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_generichash`                                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_BYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_BYTES_MAX`                           |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_BYTES_MIN`                           |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_final`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_generichash_init`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_generichash_KEYBYTES`                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_KEYBYTES_MAX`                        |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_KEYBYTES_MIN`                        |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_generichash_keygen`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_generichash_STATEBYTES`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_generichash_update`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash`                                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_BYTES`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_sha256`                                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_sha256_BYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_sha256_final`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha256_init`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha256_STATEBYTES`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha256_update`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha512`                                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_sha512_BYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_hash_sha512_final`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha512_init`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha512_STATEBYTES`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_hash_sha512_update`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_kdf_BYTES_MAX`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kdf_BYTES_MIN`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kdf_CONTEXTBYTES`                                |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kdf_derive_from_key`                             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kdf_KEYBYTES`                                    |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kdf_keygen`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_client_session_keys`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_kx_keypair`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_PUBLICKEYBYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_SECRETKEYBYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_seed_keypair`                                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_SEEDBYTES`                                    |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_kx_server_session_keys`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_kx_SESSIONKEYBYTES`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth`                                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_onetimeauth_BYTES`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_final`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_init`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_KEYBYTES`                            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_STATEBYTES`                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_update`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_onetimeauth_verify`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_pwhash`                                          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_BYTES_MAX`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_BYTES_MIN`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_SALTBYTES`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256`                     |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_BYTES_MAX`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_BYTES_MIN`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_SALTBYTES`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_str`                 |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_str_needs_rehash`    |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_str_verify`          |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_scryptsalsa208sha256_STRBYTES`            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_str`                                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_str_needs_rehash`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_str_verify`                               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_pwhash_STRBYTES`                                 |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_scalarmult_base`                                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_scalarmult_BYTES`                                |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_scalarmult_ed25519`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_ed25519_base`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_ed25519_base_noclamp`                 |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_ed25519_BYTES`                        |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_ed25519_noclamp`                      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_ed25519_SCALARBYTES`                  |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_scalarmult_SCALARBYTES`                          |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox`                                       | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_secretbox_BOXZEROBYTES`                          | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_secretbox_detached`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_easy`                                  |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_KEYBYTES`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_MACBYTES`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_NONCEBYTES`                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_open`                                  | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_secretbox_open_detached`                         |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_open_easy`                             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_secretbox_ZEROBYTES`                             | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_secretstream_xchacha20poly1305_ABYTES`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_HEADERBYTES`      |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_init_pull`        |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_init_push`        |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_KEYBYTES`         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_keygen`           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_MESSAGEBYTES_MAX` |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_pull`             |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_push`             |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_rekey`            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_secretstream_xchacha20poly1305_STATEBYTES`       |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_shorthash`                                       |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_shorthash_BYTES`                                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_shorthash_KEYBYTES`                              |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign`                                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_BYTES`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_detached`                                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_ed25519_pk_to_curve25519`                   |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_sign_ed25519_sk_to_curve25519`                   |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_sign_ed25519_sk_to_pk`                           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_sign_keypair`                                    |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_open`                                       |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_PUBLICKEYBYTES`                             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_SECRETKEYBYTES`                             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_seed_keypair`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_SEEDBYTES`                                  |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_sign_verify_detached`                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream`                                          |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20`                                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf`                            |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf_KEYBYTES`                   |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf_MESSAGEBYTES_MAX`           |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf_NONCEBYTES`                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf_xor`                        |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_ietf_xor_ic`                     |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_KEYBYTES`                        |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_MESSAGEBYTES_MAX`                |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_NONCEBYTES`                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_xor`                             |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_chacha20_xor_ic`                          |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_KEYBYTES`                                 |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_NONCEBYTES`                               |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_stream_salsa20_KEYBYTES`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_salsa20_MESSAGEBYTES_MAX`                 |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_salsa20_NONCEBYTES`                       |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_salsa20_xor`                              |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_salsa20_xor_ic`                           |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20`                                |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20_KEYBYTES`                       |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20_MESSAGEBYTES_MAX`               |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20_NONCEBYTES`                     |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20_xor`                            |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xchacha20_xor_ic`                         |  :white_check_mark:  | :small_red_triangle: |\n| `crypto_stream_xor`                                      |  :white_check_mark:  |  :white_check_mark:  |\n| `crypto_verify_16`                                       | :small_red_triangle: |  :white_check_mark:  |\n| `crypto_verify_32`                                       | :small_red_triangle: |  :white_check_mark:  |\n| `randombytes_buf`                                        |  :white_check_mark:  |  :white_check_mark:  |\n| `randombytes_buf_deterministic`                          |  :white_check_mark:  | :small_red_triangle: |\n| `randombytes_random`                                     |  :white_check_mark:  | :small_red_triangle: |\n| `randombytes_SEEDBYTES`                                  |  :white_check_mark:  | :small_red_triangle: |\n| `randombytes_uniform`                                    |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_add`                                             |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_compare`                                         |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_free`                                            |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_increment`                                       |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_is_zero`                                         |  :white_check_mark:  |  :white_check_mark:  |\n| `sodium_malloc`                                          |  :white_check_mark:  |  :white_check_mark:  |\n| `sodium_memcmp`                                          |  :white_check_mark:  |  :white_check_mark:  |\n| `sodium_memzero`                                         |  :white_check_mark:  |  :white_check_mark:  |\n| `sodium_mlock`                                           |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_mprotect_noaccess`                               |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_mprotect_readonly`                               |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_mprotect_readwrite`                              |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_munlock`                                         |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_pad`                                             |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_sub`                                             |  :white_check_mark:  | :small_red_triangle: |\n| `sodium_unpad`                                           |  :white_check_mark:  | :small_red_triangle: |\n\n### Missing altogether (Ctrl + F friendly)\n\n`crypto_aead_aes256gcm_ABYTES`, `crypto_aead_aes256gcm_beforenm`, `crypto_aead_aes256gcm_decrypt`, `crypto_aead_aes256gcm_decrypt_afternm`, `crypto_aead_aes256gcm_decrypt_detached`, `crypto_aead_aes256gcm_decrypt_detached_afternm`, `crypto_aead_aes256gcm_encrypt`, `crypto_aead_aes256gcm_encrypt_afternm`, `crypto_aead_aes256gcm_encrypt_detached`, `crypto_aead_aes256gcm_encrypt_detached_afternm`, `crypto_aead_aes256gcm_is_available`, `crypto_aead_aes256gcm_KEYBYTES`, `crypto_aead_aes256gcm_keygen`, `crypto_aead_aes256gcm_MESSAGEBYTES_MAX`, `crypto_aead_aes256gcm_NPUBBYTES`, `crypto_aead_aes256gcm_NSECBYTES`, `crypto_aead_aes256gcm_STATEBYTES`, `crypto_aead_chacha20poly1305_ABYTES`, `crypto_aead_chacha20poly1305_decrypt`, `crypto_aead_chacha20poly1305_decrypt_detached`, `crypto_aead_chacha20poly1305_encrypt`, `crypto_aead_chacha20poly1305_encrypt_detached`, `crypto_aead_chacha20poly1305_KEYBYTES`, `crypto_aead_chacha20poly1305_keygen`, `crypto_aead_chacha20poly1305_MESSAGEBYTES_MAX`, `crypto_aead_chacha20poly1305_NPUBBYTES`, `crypto_aead_chacha20poly1305_NSECBYTES`, `crypto_auth_hmacsha256`, `crypto_auth_hmacsha256_BYTES`, `crypto_auth_hmacsha256_final`, `crypto_auth_hmacsha256_init`, `crypto_auth_hmacsha256_KEYBYTES`, `crypto_auth_hmacsha256_keygen`, `crypto_auth_hmacsha256_STATEBYTES`, `crypto_auth_hmacsha256_update`, `crypto_auth_hmacsha256_verify`, `crypto_auth_hmacsha512`, `crypto_auth_hmacsha512256`, `crypto_auth_hmacsha512256_BYTES`, `crypto_auth_hmacsha512256_final`, `crypto_auth_hmacsha512256_init`, `crypto_auth_hmacsha512256_KEYBYTES`, `crypto_auth_hmacsha512256_keygen`, `crypto_auth_hmacsha512256_STATEBYTES`, `crypto_auth_hmacsha512256_update`, `crypto_auth_hmacsha512256_verify`, `crypto_auth_hmacsha512_BYTES`, `crypto_auth_hmacsha512_final`, `crypto_auth_hmacsha512_init`, `crypto_auth_hmacsha512_KEYBYTES`, `crypto_auth_hmacsha512_keygen`, `crypto_auth_hmacsha512_STATEBYTES`, `crypto_auth_hmacsha512_update`, `crypto_auth_hmacsha512_verify`, `crypto_auth_keygen`, `crypto_auth_primitive`, `crypto_box`, `crypto_box_afternm`, `crypto_box_beforenm`, `crypto_box_curve25519xchacha20poly1305_beforenm`, `crypto_box_curve25519xchacha20poly1305_BEFORENMBYTES`, `crypto_box_curve25519xchacha20poly1305_detached`, `crypto_box_curve25519xchacha20poly1305_detached_afternm`, `crypto_box_curve25519xchacha20poly1305_easy`, `crypto_box_curve25519xchacha20poly1305_easy_afternm`, `crypto_box_curve25519xchacha20poly1305_keypair`, `crypto_box_curve25519xchacha20poly1305_MACBYTES`, `crypto_box_curve25519xchacha20poly1305_MESSAGEBYTES_MAX`, `crypto_box_curve25519xchacha20poly1305_NONCEBYTES`, `crypto_box_curve25519xchacha20poly1305_open_detached`, `crypto_box_curve25519xchacha20poly1305_open_detached_afternm`, `crypto_box_curve25519xchacha20poly1305_open_easy`, `crypto_box_curve25519xchacha20poly1305_open_easy_afternm`, `crypto_box_curve25519xchacha20poly1305_PUBLICKEYBYTES`, `crypto_box_curve25519xchacha20poly1305_seal`, `crypto_box_curve25519xchacha20poly1305_seal_open`, `crypto_box_curve25519xchacha20poly1305_SEALBYTES`, `crypto_box_curve25519xchacha20poly1305_SECRETKEYBYTES`, `crypto_box_curve25519xchacha20poly1305_seed_keypair`, `crypto_box_curve25519xchacha20poly1305_SEEDBYTES`, `crypto_box_curve25519xsalsa20poly1305`, `crypto_box_curve25519xsalsa20poly1305_afternm`, `crypto_box_curve25519xsalsa20poly1305_beforenm`, `crypto_box_curve25519xsalsa20poly1305_BEFORENMBYTES`, `crypto_box_curve25519xsalsa20poly1305_BOXZEROBYTES`, `crypto_box_curve25519xsalsa20poly1305_keypair`, `crypto_box_curve25519xsalsa20poly1305_MACBYTES`, `crypto_box_curve25519xsalsa20poly1305_MESSAGEBYTES_MAX`, `crypto_box_curve25519xsalsa20poly1305_NONCEBYTES`, `crypto_box_curve25519xsalsa20poly1305_open`, `crypto_box_curve25519xsalsa20poly1305_open_afternm`, `crypto_box_curve25519xsalsa20poly1305_PUBLICKEYBYTES`, `crypto_box_curve25519xsalsa20poly1305_SECRETKEYBYTES`, `crypto_box_curve25519xsalsa20poly1305_seed_keypair`, `crypto_box_curve25519xsalsa20poly1305_SEEDBYTES`, `crypto_box_curve25519xsalsa20poly1305_ZEROBYTES`, `crypto_box_detached_afternm`, `crypto_box_easy_afternm`, `crypto_box_MESSAGEBYTES_MAX`, `crypto_box_open`, `crypto_box_open_afternm`, `crypto_box_open_detached_afternm`, `crypto_box_open_easy_afternm`, `crypto_box_primitive`, `crypto_core_ed25519_from_hash`, `crypto_core_ed25519_HASHBYTES`, `crypto_core_ed25519_random`, `crypto_core_ed25519_scalar_mul`, `crypto_core_hchacha20`, `crypto_core_hchacha20_CONSTBYTES`, `crypto_core_hchacha20_INPUTBYTES`, `crypto_core_hchacha20_KEYBYTES`, `crypto_core_hchacha20_OUTPUTBYTES`, `crypto_core_hsalsa20`, `crypto_core_hsalsa20_CONSTBYTES`, `crypto_core_hsalsa20_INPUTBYTES`, `crypto_core_hsalsa20_KEYBYTES`, `crypto_core_hsalsa20_OUTPUTBYTES`, `crypto_core_ristretto255_add`, `crypto_core_ristretto255_BYTES`, `crypto_core_ristretto255_from_hash`, `crypto_core_ristretto255_HASHBYTES`, `crypto_core_ristretto255_is_valid_point`, `crypto_core_ristretto255_NONREDUCEDSCALARBYTES`, `crypto_core_ristretto255_random`, `crypto_core_ristretto255_scalar_add`, `crypto_core_ristretto255_scalar_complement`, `crypto_core_ristretto255_scalar_invert`, `crypto_core_ristretto255_scalar_mul`, `crypto_core_ristretto255_scalar_negate`, `crypto_core_ristretto255_scalar_random`, `crypto_core_ristretto255_scalar_reduce`, `crypto_core_ristretto255_scalar_sub`, `crypto_core_ristretto255_SCALARBYTES`, `crypto_core_ristretto255_sub`, `crypto_core_salsa20`, `crypto_core_salsa2012`, `crypto_core_salsa2012_CONSTBYTES`, `crypto_core_salsa2012_INPUTBYTES`, `crypto_core_salsa2012_KEYBYTES`, `crypto_core_salsa2012_OUTPUTBYTES`, `crypto_core_salsa208`, `crypto_core_salsa208_CONSTBYTES`, `crypto_core_salsa208_INPUTBYTES`, `crypto_core_salsa208_KEYBYTES`, `crypto_core_salsa208_OUTPUTBYTES`, `crypto_core_salsa20_CONSTBYTES`, `crypto_core_salsa20_INPUTBYTES`, `crypto_core_salsa20_KEYBYTES`, `crypto_core_salsa20_OUTPUTBYTES`, `crypto_generichash_blake2b`, `crypto_generichash_blake2b_BYTES`, `crypto_generichash_blake2b_BYTES_MAX`, `crypto_generichash_blake2b_BYTES_MIN`, `crypto_generichash_blake2b_final`, `crypto_generichash_blake2b_init`, `crypto_generichash_blake2b_init_salt_personal`, `crypto_generichash_blake2b_KEYBYTES`, `crypto_generichash_blake2b_KEYBYTES_MAX`, `crypto_generichash_blake2b_KEYBYTES_MIN`, `crypto_generichash_blake2b_keygen`, `crypto_generichash_blake2b_PERSONALBYTES`, `crypto_generichash_blake2b_salt_personal`, `crypto_generichash_blake2b_SALTBYTES`, `crypto_generichash_blake2b_STATEBYTES`, `crypto_generichash_blake2b_update`, `crypto_generichash_primitive`, `crypto_hash_primitive`, `crypto_kdf_blake2b_BYTES_MAX`, `crypto_kdf_blake2b_BYTES_MIN`, `crypto_kdf_blake2b_CONTEXTBYTES`, `crypto_kdf_blake2b_derive_from_key`, `crypto_kdf_blake2b_KEYBYTES`, `crypto_kdf_primitive`, `crypto_kx_primitive`, `crypto_onetimeauth_keygen`, `crypto_onetimeauth_poly1305`, `crypto_onetimeauth_poly1305_BYTES`, `crypto_onetimeauth_poly1305_final`, `crypto_onetimeauth_poly1305_init`, `crypto_onetimeauth_poly1305_KEYBYTES`, `crypto_onetimeauth_poly1305_keygen`, `crypto_onetimeauth_poly1305_STATEBYTES`, `crypto_onetimeauth_poly1305_update`, `crypto_onetimeauth_poly1305_verify`, `crypto_onetimeauth_primitive`, `crypto_pwhash_alg_argon2i13`, `crypto_pwhash_alg_argon2id13`, `crypto_pwhash_alg_default`, `crypto_pwhash_argon2i`, `crypto_pwhash_argon2i_alg_argon2i13`, `crypto_pwhash_argon2i_BYTES_MAX`, `crypto_pwhash_argon2i_BYTES_MIN`, `crypto_pwhash_argon2i_memlimit_interactive`, `crypto_pwhash_argon2i_memlimit_max`, `crypto_pwhash_argon2i_memlimit_min`, `crypto_pwhash_argon2i_memlimit_moderate`, `crypto_pwhash_argon2i_memlimit_sensitive`, `crypto_pwhash_argon2i_opslimit_interactive`, `crypto_pwhash_argon2i_opslimit_max`, `crypto_pwhash_argon2i_opslimit_min`, `crypto_pwhash_argon2i_opslimit_moderate`, `crypto_pwhash_argon2i_opslimit_sensitive`, `crypto_pwhash_argon2i_passwd_max`, `crypto_pwhash_argon2i_passwd_min`, `crypto_pwhash_argon2i_SALTBYTES`, `crypto_pwhash_argon2i_str`, `crypto_pwhash_argon2i_str_needs_rehash`, `crypto_pwhash_argon2i_str_verify`, `crypto_pwhash_argon2i_STRBYTES`, `crypto_pwhash_argon2i_strprefix`, `crypto_pwhash_argon2id`, `crypto_pwhash_argon2id_alg_argon2id13`, `crypto_pwhash_argon2id_BYTES_MAX`, `crypto_pwhash_argon2id_BYTES_MIN`, `crypto_pwhash_argon2id_memlimit_interactive`, `crypto_pwhash_argon2id_memlimit_max`, `crypto_pwhash_argon2id_memlimit_min`, `crypto_pwhash_argon2id_memlimit_moderate`, `crypto_pwhash_argon2id_memlimit_sensitive`, `crypto_pwhash_argon2id_opslimit_interactive`, `crypto_pwhash_argon2id_opslimit_max`, `crypto_pwhash_argon2id_opslimit_min`, `crypto_pwhash_argon2id_opslimit_moderate`, `crypto_pwhash_argon2id_opslimit_sensitive`, `crypto_pwhash_argon2id_passwd_max`, `crypto_pwhash_argon2id_passwd_min`, `crypto_pwhash_argon2id_SALTBYTES`, `crypto_pwhash_argon2id_str`, `crypto_pwhash_argon2id_str_needs_rehash`, `crypto_pwhash_argon2id_str_verify`, `crypto_pwhash_argon2id_STRBYTES`, `crypto_pwhash_argon2id_strprefix`, `crypto_pwhash_memlimit_interactive`, `crypto_pwhash_memlimit_max`, `crypto_pwhash_memlimit_min`, `crypto_pwhash_memlimit_moderate`, `crypto_pwhash_memlimit_sensitive`, `crypto_pwhash_opslimit_interactive`, `crypto_pwhash_opslimit_max`, `crypto_pwhash_opslimit_min`, `crypto_pwhash_opslimit_moderate`, `crypto_pwhash_opslimit_sensitive`, `crypto_pwhash_passwd_max`, `crypto_pwhash_passwd_min`, `crypto_pwhash_primitive`, `crypto_pwhash_scryptsalsa208sha256_ll`, `crypto_pwhash_scryptsalsa208sha256_memlimit_interactive`, `crypto_pwhash_scryptsalsa208sha256_memlimit_max`, `crypto_pwhash_scryptsalsa208sha256_memlimit_min`, `crypto_pwhash_scryptsalsa208sha256_memlimit_sensitive`, `crypto_pwhash_scryptsalsa208sha256_opslimit_interactive`, `crypto_pwhash_scryptsalsa208sha256_opslimit_max`, `crypto_pwhash_scryptsalsa208sha256_opslimit_min`, `crypto_pwhash_scryptsalsa208sha256_opslimit_sensitive`, `crypto_pwhash_scryptsalsa208sha256_passwd_max`, `crypto_pwhash_scryptsalsa208sha256_passwd_min`, `crypto_pwhash_scryptsalsa208sha256_strprefix`, `crypto_pwhash_str_alg`, `crypto_pwhash_strprefix`, `crypto_scalarmult_curve25519`, `crypto_scalarmult_curve25519_base`, `crypto_scalarmult_curve25519_BYTES`, `crypto_scalarmult_curve25519_SCALARBYTES`, `crypto_scalarmult_primitive`, `crypto_scalarmult_ristretto255`, `crypto_scalarmult_ristretto255_base`, `crypto_scalarmult_ristretto255_BYTES`, `crypto_scalarmult_ristretto255_SCALARBYTES`, `crypto_secretbox_keygen`, `crypto_secretbox_MESSAGEBYTES_MAX`, `crypto_secretbox_primitive`, `crypto_secretbox_xchacha20poly1305_detached`, `crypto_secretbox_xchacha20poly1305_easy`, `crypto_secretbox_xchacha20poly1305_KEYBYTES`, `crypto_secretbox_xchacha20poly1305_MACBYTES`, `crypto_secretbox_xchacha20poly1305_MESSAGEBYTES_MAX`, `crypto_secretbox_xchacha20poly1305_NONCEBYTES`, `crypto_secretbox_xchacha20poly1305_open_detached`, `crypto_secretbox_xchacha20poly1305_open_easy`, `crypto_secretbox_xsalsa20poly1305`, `crypto_secretbox_xsalsa20poly1305_BOXZEROBYTES`, `crypto_secretbox_xsalsa20poly1305_KEYBYTES`, `crypto_secretbox_xsalsa20poly1305_keygen`, `crypto_secretbox_xsalsa20poly1305_MACBYTES`, `crypto_secretbox_xsalsa20poly1305_MESSAGEBYTES_MAX`, `crypto_secretbox_xsalsa20poly1305_NONCEBYTES`, `crypto_secretbox_xsalsa20poly1305_open`, `crypto_secretbox_xsalsa20poly1305_ZEROBYTES`, `crypto_secretstream_xchacha20poly1305_tag_final`, `crypto_secretstream_xchacha20poly1305_tag_message`, `crypto_secretstream_xchacha20poly1305_tag_push`, `crypto_secretstream_xchacha20poly1305_tag_rekey`, `crypto_shorthash_keygen`, `crypto_shorthash_primitive`, `crypto_shorthash_siphash24`, `crypto_shorthash_siphash24_BYTES`, `crypto_shorthash_siphash24_KEYBYTES`, `crypto_shorthash_siphashx24`, `crypto_shorthash_siphashx24_BYTES`, `crypto_shorthash_siphashx24_KEYBYTES`, `crypto_sign_ed25519`, `crypto_sign_ed25519_BYTES`, `crypto_sign_ed25519_detached`, `crypto_sign_ed25519_keypair`, `crypto_sign_ed25519_MESSAGEBYTES_MAX`, `crypto_sign_ed25519_open`, `crypto_sign_ed25519_PUBLICKEYBYTES`, `crypto_sign_ed25519_SECRETKEYBYTES`, `crypto_sign_ed25519_seed_keypair`, `crypto_sign_ed25519_SEEDBYTES`, `crypto_sign_ed25519_sk_to_seed`, `crypto_sign_ed25519_verify_detached`, `crypto_sign_ed25519ph_final_create`, `crypto_sign_ed25519ph_final_verify`, `crypto_sign_ed25519ph_init`, `crypto_sign_ed25519ph_STATEBYTES`, `crypto_sign_ed25519ph_update`, `crypto_sign_edwards25519sha512batch`, `crypto_sign_edwards25519sha512batch_keypair`, `crypto_sign_edwards25519sha512batch_open`, `crypto_sign_final_create`, `crypto_sign_final_verify`, `crypto_sign_init`, `crypto_sign_MESSAGEBYTES_MAX`, `crypto_sign_primitive`, `crypto_sign_STATEBYTES`, `crypto_sign_update`, `crypto_stream_chacha20_ietf_keygen`, `crypto_stream_chacha20_keygen`, `crypto_stream_keygen`, `crypto_stream_MESSAGEBYTES_MAX`, `crypto_stream_primitive`, `crypto_stream_salsa20`, `crypto_stream_salsa2012`, `crypto_stream_salsa2012_KEYBYTES`, `crypto_stream_salsa2012_keygen`, `crypto_stream_salsa2012_MESSAGEBYTES_MAX`, `crypto_stream_salsa2012_NONCEBYTES`, `crypto_stream_salsa2012_xor`, `crypto_stream_salsa208`, `crypto_stream_salsa208_KEYBYTES`, `crypto_stream_salsa208_keygen`, `crypto_stream_salsa208_MESSAGEBYTES_MAX`, `crypto_stream_salsa208_NONCEBYTES`, `crypto_stream_salsa208_xor`, `crypto_stream_salsa20_keygen`, `crypto_stream_xchacha20_keygen`, `crypto_stream_xsalsa20`, `crypto_stream_xsalsa20_KEYBYTES`, `crypto_stream_xsalsa20_keygen`, `crypto_stream_xsalsa20_MESSAGEBYTES_MAX`, `crypto_stream_xsalsa20_NONCEBYTES`, `crypto_stream_xsalsa20_xor`, `crypto_stream_xsalsa20_xor_ic`, `crypto_verify_16_BYTES`, `crypto_verify_32_BYTES`, `crypto_verify_64`, `crypto_verify_64_BYTES`, `randombytes`, `randombytes_close`, `randombytes_implementation_name`, `randombytes_internal_implementation`, `randombytes_set_implementation`, `randombytes_stir`, `randombytes_sysrandom_implementation`, `sodium_allocarray`, `sodium_base642bin`, `sodium_base64_encoded_len`, `sodium_bin2base64`, `sodium_bin2hex`, `sodium_hex2bin`, `sodium_init`, `sodium_library_minimal`, `sodium_library_version_major`, `sodium_library_version_minor`, `sodium_misuse`, `sodium_runtime_has_aesni`, `sodium_runtime_has_avx`, `sodium_runtime_has_avx2`, `sodium_runtime_has_avx512f`, `sodium_runtime_has_neon`, `sodium_runtime_has_pclmul`, `sodium_runtime_has_rdrand`, `sodium_runtime_has_sse2`, `sodium_runtime_has_sse3`, `sodium_runtime_has_sse41`, `sodium_runtime_has_ssse3`, `sodium_set_misuse_handler`, `sodium_stackzero`, `sodium_version_string`\n\n## License\n\n[MIT](LICENSE.md)\n","_attachments":{},"homepage":"https://github.com/sodium-friends/sodium-universal#readme","bugs":{"url":"https://github.com/sodium-friends/sodium-universal/issues"},"license":"MIT"}