Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/socketsupply/secret-local-storage
A wrapper around 'localStorage/sessionStorage' to provide storage encryption with libsodium
https://github.com/socketsupply/secret-local-storage
browser local secure sodium storage
Last synced: 3 months ago
JSON representation
A wrapper around 'localStorage/sessionStorage' to provide storage encryption with libsodium
- Host: GitHub
- URL: https://github.com/socketsupply/secret-local-storage
- Owner: socketsupply
- License: mit
- Created: 2019-03-21T17:15:44.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2019-11-01T18:26:31.000Z (about 5 years ago)
- Last Synced: 2024-05-30T02:18:41.116Z (6 months ago)
- Topics: browser, local, secure, sodium, storage
- Language: JavaScript
- Size: 24.4 KB
- Stars: 22
- Watchers: 7
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
secret-local-storage
====================A wrapper around 'localStorage/sessionStorage' to provide storage encryption with libsodium
## Installation
```sh
$ npm install secret-local-storage
```## Usage
```js
const { keygen } = require('secret-local-storage/keygen')
const secretKey = keygen()
const secretStorage = require('secret-local-storage')(secretKey) // will generate key by defaultsecretStorage.setItem('someKey', 'some secret value')
console.log(secretStorage.getItem('someKey')) // some secret value
console.log(localStorage.getItem('someKey')) // 5J3nmcMCcABSwJN
```## Example
```js
const secretStorage = require('secret-local-storage')('3e852b5d881b22261b8e417e217a9fa9757f4532305c4e46e2a6966aa89840f6')localStorage.setItem('hello', 'world')
console.log(secretStorage.getItem('hello')); // outputs 'hello'secretStorage.setItem('hello', 'world')
console.log(localStorage.getItem('hello')); // should be encrypted
```## API
The `SecretLocalStorage` class implements the same API as the [Storage][Storage]
API.### `const secretStorage = require('secret-local-storage')(secretKey, opts)`
Create a secret storage instance with an optional secret key and options where:
* `secretKey` is a 32-byte buffer or 64 character 'hex' encoded string. The
encoding of the secret key can be specified with `opts.secretKeyEncoding`.
If you do not supply a secret key, then one will be generated for you. This
should be saved and re-used to read the encrypted values.* `opts` is an optional object to configure the storage where:
* `opts.secretKeyEncoding` is the encoding of the secret key
* `opts.valueEncoding` is an object containing `encode(value)` and
`decode(buffer)` functions.
* `opts.storage` can be [Storage][Storage] interface or a function that
returns one.
* `opts.seed` is an optionl seed value to generate the secret key that
should be 32 bytes#### `secretKey.secretKey`
A 32 byte secret key used for encryption and child key derivation.
#### `secretStorage.storage`
The [Storage][Storage] interface backing the `SecretLocalStorage` instance.
#### `secretKey.valueEncoding`
The value encoding used for encoding and ecoding value written to storage.
##### `secretKey.valueEncoding.encode(value)`
Encodes `value` into a `Buffer`
##### `secretKey.valueEncoding.decode(buffer)`
Decodes `buffer` into a value. Most likely, a string.
#### `secretStorage.key(n)`
The same API as [Storage.key()][Storage.key].
#### `secretStorage.getItem(key)`
The same API as [Storage.getItem()][Storage.getItem]. If decryption fails, this
function will return the original value found in storage.#### `secretStorage.setItem(key)`
The same API as [Storage.setItem()][Storage.setItem].
#### `secretStorage.removeItem(key)`
The same API as [Storage.removeItem()][Storage.removeItem].
#### `secretStorage.clear(key)`
The same API as [Storage.clear()][Storage.clear].
## License
MIT
[Storage]: https://developer.mozilla.org/en-US/docs/Web/API/Storage
[Storage.key]: https://developer.mozilla.org/en-US/docs/Web/API/Storage/key
[Storage.clear]: https://developer.mozilla.org/en-US/docs/Web/API/Storage/clear
[Storage.getItem]: https://developer.mozilla.org/en-US/docs/Web/API/Storage/getItem
[Storage.setItem]: https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem
[Storage.removeItem]: https://developer.mozilla.org/en-US/docs/Web/API/Storage/removeItem