@small-tech/eff-diceware-passphrase
Version:
Single-file, no-dependency, bring-your-own-crypto ESM version of Emil Bayes’s module of the same name.
96 lines (66 loc) • 2.95 kB
Markdown
# EFF Diceware Passphrase
__Forked from Emil Bay’s excellent module of the same name.__
This is a single-file ESM version of Emil’s excellent module that also removes the sodium-native dependency. Instead, it employs a bring-your-own-crypto approach where you pass a reference to Node’s default crypto module when using the module under Node and it automatically detects and uses the Web Crypto API when running in the browser.
## Install
```
npm i @small-tech/eff-diceware-passphrase
```
## Examples
### Node.js
```js
import crypto from 'crypto'
import EFFDicewarePassphrase from '@small-tech/eff-diceware-passphrase'
const generate = new EFFDicewarePassphrase(crypto)
const passphrase1 = generate.words(8)
const passphrase2 = generate.entropy(100)
console.log('8 words:', passphrase1.join(' '))
console.log('100 bits of entropy:', passphrase2.join(' '))
```
(You can find this example in and run it from the _examples/node_ folder.)
### Browser
```html
<html lang='en'>
<head>
<meta charset='UTF-8'>
<meta name='viewport' content='width=device-width, initial-scale=1.0'>
<title>EFF Diceware Passphrase</title>
</head>
<body>
<h1>EFF Diceware Passphrase Example</h1>
<ul>
<li><strong>8 words:</strong> <span id='passphrase1'></span></li>
<li><strong>100 bits of entropy:</strong> <span id='passphrase2'></span></li>
</ul>
<script type="module">
import EFFDicewarePassphrase from './eff-diceware-passphrase.min.js'
const generate = new EFFDicewarePassphrase()
const passphrase1 = generate.words(8)
const passphrase2 = generate.entropy(100)
document.getElementById('passphrase1').innerText = passphrase1.join(' ')
document.getElementById('passphrase2').innerText = passphrase2.join(' ')
</script>
</body>
</html>
```
You can find this example (along with a copy of the minified module bundle) in the _examples/browser_ folder.
## Bundling
After you’ve installed the dev dependencies using `npm i`, you can build a single-file ESM bundle by running:
```sh
npm run build
```
Or, for the minified version:
```sh
npm run build-minified
```
Find the bundles in the _dist_ folder.
The non-minified version is 88kb in size and the minified one is 79kb. The bulk of the size comes from the EFF word list itself, which is 77kb.
## Like this? Fund us!
[Small Technology Foundation](https://small-tech.org) is a tiny, independent not-for-profit.
We exist in part thanks to patronage by people like you. If you share [our vision](https://small-tech.org/about/#small-technology) and want to support our work, please [become a patron or donate to us](https://small-tech.org/fund-us) today and help us continue to exist.
## Copyright
- ⓒ 2021 [Aral Balkan](https://ar.al), [Small Technology Foundation](https://small-tech.org)
- ⓒ 2016-2021, [Emil Bay](https://github.com/emilbayes)
- See [LICENSE](./LICENSE) for complete list of notices.
## License
ISC