Getting Started

You will need python 3.6 and libsodium installed to run You can find python 3.6 here and libsodium here. It is recommended that you also setup a python virtual environment as shown here.


To install start your virtual environment and run the command below:

$ pip install -e


To see the command line options use the command below:

$ didery --help
Usage: didery [OPTIONS] CONFIG

  -i, --incept      Send a key rotation history inception event.
  -u, --upload      Upload a new otp encrypted private key.
  -r, --rotate      Rotate public/private key pairs.
  -U, --update      Update otp encrypted private key.
  -R, --retrieve    Retrieve key rotation history.
  -d, --download    Download otp encrypted private key.
  -D, --delete      Delete rotation history.
  -m, --remove      Remove otp encrypted private key.
  -e, --events      Pull a record of all history rotation events for a
                    specified did.
  -v                Verbosity of console output. There are 5 verbosity levels
                    from '' to '-vvvv.'
  -M, --mute        Mute all console output except prompts.
  --data PATH       Path to the data file.
  --did TEXT        decentralized identifier(did).
  --save DIRECTORY  Directory to store generated key files in.
  --help            Show this message and exit.

Config File

The CLI requires a path to a json formatted config file with a list of didery endpoints as shown below.

    "servers": ["http://localhost:8080", "http://localhost:8000"]

“servers” [list] required - A list of server address strings. This must be supplied so the library knows what servers to broadcast and poll from. To determine if there is a consensus on polling a 2/3 of the servers must return matching responses.

Data File

For certain commands it is necessary to supply a data file. The file should be json formatted and will contain either the rotation history or the one time pad(otp) encrypted blob. The data file is required for the following options:



The file should follow the format below for history data:

    "history": {
        "id": "did:dad:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE=",
        "signer": 0,

“id” [string] required - Decentralized identifier (DID).

“signer” [integer] required - 0 based index into signers field. Rotation events signer field will always be 1 or greater.

“signers” [list] required - List of all public keys. Must contain at least two keys for –upload and 3 or more for –rotation.

The file should follow the format below for otp data:

    "otp": {
        "blob": "AeYbsHot0pmdWAcgTo5sD8iAuSQAfnH5U6wiIGpVNJQQoYKBYrPPxAoIc1i5SHCIDS8KFFgf8i0tDq8XGizaCgo9yjuKHHNJZFi0QD9K6Vpt6fP0XgXlj8z_4D-7s3CcYmuoWAh6NVtYaf_GWw_2sCrHBAA2mAEsml3thLmu50Dw",
        "id": "did:dad:Qt27fThWoNZsa88VrTkep6H-4HA8tr54sHON1vWl6FE="
“id” [string] required
- Decentralized identifier (DID).
“blob” [string] required
- otp encrypted private keys.