Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/tabcat/encrypted-docstore
create and mount encrypted orbit docstores in the browser
https://github.com/tabcat/encrypted-docstore
Last synced: 4 months ago
JSON representation
create and mount encrypted orbit docstores in the browser
- Host: GitHub
- URL: https://github.com/tabcat/encrypted-docstore
- Owner: tabcat
- License: mit
- Archived: true
- Created: 2019-07-13T00:51:59.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2022-01-22T09:32:00.000Z (almost 3 years ago)
- Last Synced: 2024-04-25T17:43:58.579Z (8 months ago)
- Language: JavaScript
- Homepage:
- Size: 1.19 MB
- Stars: 6
- Watchers: 1
- Forks: 0
- Open Issues: 13
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# encrypted-docstore
create and mount encrypted [orbit-db](https://github.com/orbitdb/orbit-db/) docstores**DISCLAIMER: cryptography in this repo has been implemented by an amateur and has not been auditted.
Please :fire:roast:fire: me in Issues if u find a vulnerability.**NOTE: version 3.0.0 changes how EncryptedDocstore determines the orbitdb address, this is a breaking change. Some changes have been made to the api as well, mostly naming.
## Usage
install with npm:
```
npm install @tabcat/encrypted-docstore
```
create orbitdb instance: https://github.com/orbitdb/orbit-db/blob/master/README.md#usagecreate encrypted docstore:
```javascript
const EncryptedDocstore = require('@tabcat/encrypted-docstore')// create the encryption key
const aesKey = EncryptedDocstore.generateKey()// create the docstore with orbitdb:
const dbConfig = { name:'asdf', options: {} } // type will always be 'docstore'
const encAddr = await EncryptedDocstore.determineAddress(orbitdb, dbConfig, aesKey)
const docstore = await orbitdb.docs(encAddr, dbConfig.options)const encDocstore = await EncryptedDocstore.mount(docstore, aesKey)
// get,put, del, query all exposed on encDocstore and returned results should be identical to docstore methods```
## API
>EncDoc = EncryptedDocstore### Static Methods:
#### EncDoc.mount(docstore, aesKey)
>mount an encrypted docstore*docstore:* orbit docstore made with name from EncDoc.determineEncDbName or address from EncDoc.determineEncDbAddress
*aesKey:* instance of AesKey from generateKey, deriveKey, or importKey static methods.returns a promise that resolves to an instance of EncDoc
#### EncDoc.determineAddress(orbitdb, dbConfig, aesKey)
>determine the docstore address for the encryptedDocstore, this is adding a way to check the aesKey against the db name*orbitdb:* an instance of OrbitDB
*dbConfig:* an object containing name and options for an orbit store settings
*aesKey:* instance of AesKey from generateKey, deriveKey, or importKey static methods.returns a promise that resolves to an instance of orbit address
#### EncDoc.keyCheck(encAddr, aesKey)
>check if an orbitdb address and aesKey are a match*encAddr:* instance of orbit address from EncDoc.determineAddress
*aesKey:* instance of AesKey from generateKey, deriveKey, or importKey static methods.returns a promise that resolves to a boolean
#### EncDoc.generateKey([length])
>generates a new aesKey*length:* number, aesKey length, defaults to 128. can be 128, 192, or 256
returns an instance of AesKey
#### EncDoc.deriveKey(bytes, salt[, length])
>derive an instance of AesKey from bytes and salt, uses PBKDF2 with 10k iterations*bytes:* Uint8Array made from randomness or a strong password
*salt:* Uint8Array to be used as salt for deriving the key, optimally a 128bit random value
*length:* number, aesKey length, defaults to 128. can be 128, 192, or 256returns an instance of AesKey
#### EncDoc.importKey(rawKey)
>import an exported aesKey*rawKey:* Uint8Array from EncDoc.exportKey
returns an instance of AesKey
#### EncDoc.exportKey(aesKey)
>export an aesKey*aesKey:* instance of AesKey
returns a Uint8Array rawKey
### Instance Methods:
- get, put, del, query all work by encapsulating the whole doc and pass docstore tests for the orbitdb repo: https://github.com/orbitdb/orbit-db/blob/master/test/docstore.test.js
#### encDoc.get(key)
see: https://github.com/orbitdb/orbit-db/blob/master/API.md#getkey-1differences:
- is an async function
#### encDoc.put(doc)
>see: https://github.com/orbitdb/orbit-db/blob/master/API.md#putdocno visible differences
#### encDoc.del(key)
>see: https://github.com/orbitdb/orbit-db/blob/master/API.md#delkey-1no visible differences
#### encDoc.query(mapper)
>see: https://github.com/orbitdb/orbit-db/blob/master/API.md#querymapperdifferences:
- is an async function
- when calling with option fullOp:
+ the payload.value is the decrypted/decapsulated doc.
+ anything in the fullOp entry relating to hashing the real payload.value will not match the payload.value
- when not calling with option fullOp:
+ no visible differences