# OPAQUE-Store
This is a simple client-server system, which implements a simple online storage
of blobs, which can be recovered using only a password.
You might want to read this blogpost on this topic and on more info:
`https://www.ctrlc.hu/~stef/blog/posts/How_to_recover_static_secrets_using_OPAQUE.html`
** Installation
opaquestore depends on https://github.com/stef/libopaque/ which in turn
depends on libsodium and liboprf, and pyoprf.
When you have libopaque, a simple `pip install opaquestore` should get you started.
# TODO all of the below are out-dated and need update
## API
The client provides two simple functions for creating and querying blobs:
Store a new blob:
```python
from opaquestore import opaquestore
from opaquestore.noiseclient import NoiseWrapper
s = NoiseWrapper.connect(cfg['address'], cfg['port'], cfg['noise_key'], cfg['server_pubkey'])
opaquestore.create(s, password, blob_id, blob)
```
To query an existing blob:
```python
from opaquestore import opaquestore
from opaquestore.noiseclient import NoiseWrapper
s = NoiseWrapper.connect(cfg['address'], cfg['port'], cfg['noise_key'], cfg['server_pubkey'])
blob = opaquestore.get(s, password, blob_id)
```
The `cfg` variable should be loaded with the values from a configfile or otherwise populated.
## Configfiles
For an example and documentation on the values in the config files
see: opaque-store.cfg for the client config, and opaque-stored.cfg for
the server config.
## Example
Generate keys
```
opaquestore genkey
```
This should output a private key and a public key, these you can/should use in the configfiles.
Run the server
```
opaquestore server
```
Store a new blob:
```
echo -en "mypassword\!sMyV0ice\nmy secretty token data that i need to protect and store using opaque" | opaquestore create cfba1e747f706b542451a9d5404346f8
```
the password and the blob are expected on stdin, in this order,
seperated by a newline. The second parameter to the client is an ID
used to refer to the blob.
Recall the blob:
```
echo -en "mypassword\!sMyV0ice" | opaquestore get cfba1e747f706b542451a9d5404346f8
```
The password is again supplied on stdin, and the same ID as used for
creation is used as reference.
Raw data
{
"_id": null,
"home_page": "https://github.com/stef/opaque-store/",
"name": "opaquestore",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "Stefan Marsiske",
"author_email": "opaque@ctrlc.hu",
"download_url": "https://files.pythonhosted.org/packages/5b/b4/48094613eee355935288d4f90809a6ffa55876c731f24ed5547aa08eb7dd/opaquestore-0.1.0.tar.gz",
"platform": null,
"description": "# OPAQUE-Store\n\nThis is a simple client-server system, which implements a simple online storage\nof blobs, which can be recovered using only a password.\n\nYou might want to read this blogpost on this topic and on more info:\n`https://www.ctrlc.hu/~stef/blog/posts/How_to_recover_static_secrets_using_OPAQUE.html`\n\n** Installation\n\nopaquestore depends on https://github.com/stef/libopaque/ which in turn\ndepends on libsodium and liboprf, and pyoprf.\n\nWhen you have libopaque, a simple `pip install opaquestore` should get you started.\n\n# TODO all of the below are out-dated and need update\n\n## API\n\nThe client provides two simple functions for creating and querying blobs:\n\nStore a new blob:\n\n```python\n from opaquestore import opaquestore\n from opaquestore.noiseclient import NoiseWrapper\n s = NoiseWrapper.connect(cfg['address'], cfg['port'], cfg['noise_key'], cfg['server_pubkey'])\n opaquestore.create(s, password, blob_id, blob)\n```\n\nTo query an existing blob:\n\n```python\n from opaquestore import opaquestore\n from opaquestore.noiseclient import NoiseWrapper\n s = NoiseWrapper.connect(cfg['address'], cfg['port'], cfg['noise_key'], cfg['server_pubkey'])\n blob = opaquestore.get(s, password, blob_id)\n```\n\nThe `cfg` variable should be loaded with the values from a configfile or otherwise populated.\n\n## Configfiles\n\nFor an example and documentation on the values in the config files\nsee: opaque-store.cfg for the client config, and opaque-stored.cfg for\nthe server config.\n\n## Example\n\nGenerate keys\n\n```\nopaquestore genkey\n```\n\nThis should output a private key and a public key, these you can/should use in the configfiles.\n\nRun the server\n\n```\nopaquestore server\n```\n\nStore a new blob:\n\n```\necho -en \"mypassword\\!sMyV0ice\\nmy secretty token data that i need to protect and store using opaque\" | opaquestore create cfba1e747f706b542451a9d5404346f8\n```\n\nthe password and the blob are expected on stdin, in this order,\nseperated by a newline. The second parameter to the client is an ID\nused to refer to the blob.\n\nRecall the blob:\n\n```\necho -en \"mypassword\\!sMyV0ice\" | opaquestore get cfba1e747f706b542451a9d5404346f8\n```\n\nThe password is again supplied on stdin, and the same ID as used for\ncreation is used as reference.\n",
"bugtrack_url": null,
"license": "GPLv3",
"summary": "Simple Online secret-storage based on the OPAQUE protocol",
"version": "0.1.0",
"project_urls": {
"Homepage": "https://github.com/stef/opaque-store/"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "5bb448094613eee355935288d4f90809a6ffa55876c731f24ed5547aa08eb7dd",
"md5": "f01f1ba04bc7ae2fa53f7ec53f2a2256",
"sha256": "cf784bc0982be6674741dd43c6d7e73e5e109d21bc415733b614bac943848999"
},
"downloads": -1,
"filename": "opaquestore-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "f01f1ba04bc7ae2fa53f7ec53f2a2256",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 20411,
"upload_time": "2024-09-30T19:19:51",
"upload_time_iso_8601": "2024-09-30T19:19:51.461149Z",
"url": "https://files.pythonhosted.org/packages/5b/b4/48094613eee355935288d4f90809a6ffa55876c731f24ed5547aa08eb7dd/opaquestore-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-09-30 19:19:51",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "stef",
"github_project": "opaque-store",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "opaquestore"
}