keri 1.2.0.dev1__tar.gz → 1.2.0.dev2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {keri-1.2.0.dev1/src/keri.egg-info → keri-1.2.0.dev2}/PKG-INFO +1 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/setup.py +1 -1
- keri-1.2.0.dev2/src/keri/__init__.py +5 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/agree.py +2 -2
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/apply.py +2 -2
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/list.py +7 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/offer.py +2 -2
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/nonce.py +2 -2
- keri-1.2.0.dev2/src/keri/app/cli/commands/watcher/__init__.py +6 -0
- keri-1.2.0.dev2/src/keri/app/cli/commands/watcher/add.py +132 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/witness/authenticate.py +5 -2
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/habbing.py +1 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/indirecting.py +7 -5
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/oobiing.py +93 -4
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/__init__.py +0 -3
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/coring.py +25 -77
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/counting.py +37 -6
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/eventing.py +10 -17
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/indexing.py +16 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/parsing.py +4 -4
- keri-1.2.0.dev2/src/keri/core/streaming.py +391 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/structing.py +1 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/basing.py +3 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/escrowing.py +0 -2
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/end/ending.py +4 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/help/helping.py +1 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/kering.py +10 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vdr/eventing.py +2 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2/src/keri.egg-info}/PKG-INFO +1 -1
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/SOURCES.txt +3 -0
- keri-1.2.0.dev1/src/keri/__init__.py +0 -5
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/LICENSE +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/README.md +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/setup.cfg +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/agenting.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/apping.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/challenging.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/challenge/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/challenge/generate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/challenge/respond.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/challenge/verify.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/clean.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/contacts/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/contacts/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/decrypt.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/delegate/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/delegate/confirm.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/delegate/request.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/did/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/did/generate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ends/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ends/add.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ends/export.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ends/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/escrow.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/export.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/incept.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/init.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/interact.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/admit.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/grant.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/join.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ipex/spurn.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/kevers.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/local/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/local/watch.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/mailbox/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/mailbox/debug.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/mailbox/update.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/migrate/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/migrate/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/migrate/run.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/migrate/show.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/migrate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/continue.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/demo.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/incept.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/interact.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/join.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/notice.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/rotate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/shell.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/multisig/update.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/oobi/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/oobi/clean.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/oobi/generate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/oobi/resolve.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/passcode/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/passcode/generate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/passcode/remove.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/passcode/set.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/query.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/rename.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/rollback.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/rotate.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/saidify.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/salt.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/sign.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ssh/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/ssh/export.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/status.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/time.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/create.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/export.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/registry/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/registry/incept.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/registry/list.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/registry/status.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/vc/revoke.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/verify.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/version.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/witness/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/witness/demo.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/witness/start.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/commands/witness/submit.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/config.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/displaying.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/existing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/incepting.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/rotating.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/common/terming.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/cli/kli.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/configing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/connecting.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/delegating.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/directing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/forwarding.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/grouping.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/httping.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/keeping.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/notifying.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/querying.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/signaling.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/signing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/specing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/app/storing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/routing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/scheming.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/serdering.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/core/signing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/dbing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/koming.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/migrations/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/migrations/rekey_habs.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/db/subing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/demo_bob.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/demo_eve.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/demo_kev.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/demo_sam.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/demo/demoing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/end/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/end/priming.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/help/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/peer/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/peer/exchanging.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vc/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vc/protocoling.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vc/proving.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vc/walleting.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vdr/__init__.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vdr/credentialing.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vdr/verifying.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri/vdr/viring.py +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/dependency_links.txt +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/entry_points.txt +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/not-zip-safe +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/requires.txt +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/src/keri.egg-info/top_level.txt +0 -0
- {keri-1.2.0.dev1 → keri-1.2.0.dev2}/tests/test_kering.py +0 -0
|
@@ -37,7 +37,7 @@ from os.path import splitext
|
|
|
37
37
|
from setuptools import find_packages, setup
|
|
38
38
|
setup(
|
|
39
39
|
name='keri',
|
|
40
|
-
version='1.2.0-
|
|
40
|
+
version='1.2.0-dev2', # also change in src/keri/__init__.py
|
|
41
41
|
license='Apache Software License 2.0',
|
|
42
42
|
description='Key Event Receipt Infrastructure',
|
|
43
43
|
long_description="KERI Decentralized Key Management Infrastructure",
|
|
@@ -7,7 +7,7 @@ import argparse
|
|
|
7
7
|
|
|
8
8
|
from hio.base import doing
|
|
9
9
|
|
|
10
|
-
from keri.core import
|
|
10
|
+
from keri.core import signing
|
|
11
11
|
|
|
12
12
|
parser = argparse.ArgumentParser(description='Reply to IPEX offer message acknowledged willingness to accept offered '
|
|
13
13
|
'credential')
|
|
@@ -23,4 +23,4 @@ def nonce(tymth, tock=0.0):
|
|
|
23
23
|
"""
|
|
24
24
|
_ = (yield tock)
|
|
25
25
|
|
|
26
|
-
print(
|
|
26
|
+
print(signing.Salter().qb64)
|
|
@@ -7,7 +7,7 @@ import argparse
|
|
|
7
7
|
|
|
8
8
|
from hio.base import doing
|
|
9
9
|
|
|
10
|
-
from keri.core import
|
|
10
|
+
from keri.core import signing
|
|
11
11
|
|
|
12
12
|
parser = argparse.ArgumentParser(description='Request a credential from another party by initiating an IPEX exchange')
|
|
13
13
|
parser.set_defaults(handler=lambda args: handler(args))
|
|
@@ -22,4 +22,4 @@ def nonce(tymth, tock=0.0):
|
|
|
22
22
|
"""
|
|
23
23
|
_ = (yield tock)
|
|
24
24
|
|
|
25
|
-
print(
|
|
25
|
+
print(signing.Salter().qb64)
|
|
@@ -8,6 +8,7 @@ keri.kli.commands module
|
|
|
8
8
|
import argparse
|
|
9
9
|
import datetime
|
|
10
10
|
import os
|
|
11
|
+
import json
|
|
11
12
|
import sys
|
|
12
13
|
|
|
13
14
|
from hio import help
|
|
@@ -199,6 +200,12 @@ class ListDoer(doing.DoDoer):
|
|
|
199
200
|
if response is not None:
|
|
200
201
|
print(f" Response: {responseType} ({response.qb64})")
|
|
201
202
|
|
|
203
|
+
if self.verbose:
|
|
204
|
+
bsad = json.dumps(sad, indent=2)
|
|
205
|
+
print(" Full Credential:")
|
|
206
|
+
for line in bsad.splitlines():
|
|
207
|
+
print(f"\t{line}")
|
|
208
|
+
|
|
202
209
|
def apply(self, note, exn, pathed):
|
|
203
210
|
pass
|
|
204
211
|
|
|
@@ -7,7 +7,7 @@ import argparse
|
|
|
7
7
|
|
|
8
8
|
from hio.base import doing
|
|
9
9
|
|
|
10
|
-
from keri.core import
|
|
10
|
+
from keri.core import signing
|
|
11
11
|
|
|
12
12
|
parser = argparse.ArgumentParser(description='Reply to IPEX apply message or initiate an IPEX exchange with an offer'
|
|
13
13
|
' for a credential with certain characteristics')
|
|
@@ -23,4 +23,4 @@ def nonce(tymth, tock=0.0):
|
|
|
23
23
|
"""
|
|
24
24
|
_ = (yield tock)
|
|
25
25
|
|
|
26
|
-
print(
|
|
26
|
+
print(signing.Salter().qb64)
|
|
@@ -8,7 +8,7 @@ import argparse
|
|
|
8
8
|
import pysodium
|
|
9
9
|
from hio.base import doing
|
|
10
10
|
|
|
11
|
-
from keri.core import
|
|
11
|
+
from keri.core import signing
|
|
12
12
|
|
|
13
13
|
parser = argparse.ArgumentParser(description='Print a new random nonce')
|
|
14
14
|
parser.set_defaults(handler=lambda args: handler(args))
|
|
@@ -23,4 +23,4 @@ def nonce(tymth, tock=0.0):
|
|
|
23
23
|
"""
|
|
24
24
|
_ = (yield tock)
|
|
25
25
|
|
|
26
|
-
print(
|
|
26
|
+
print(signing.Salter().qb64)
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
KERI
|
|
4
|
+
keri.kli.commands module
|
|
5
|
+
|
|
6
|
+
"""
|
|
7
|
+
import argparse
|
|
8
|
+
|
|
9
|
+
from hio import help
|
|
10
|
+
from hio.base import doing
|
|
11
|
+
|
|
12
|
+
from keri.app import connecting, habbing, forwarding
|
|
13
|
+
from keri.app.cli.common import existing
|
|
14
|
+
from keri.core import eventing, serdering
|
|
15
|
+
|
|
16
|
+
logger = help.ogler.getLogger()
|
|
17
|
+
|
|
18
|
+
parser = argparse.ArgumentParser(description='Add AID or Alias to list of AIDs for a watcher to watch')
|
|
19
|
+
parser.set_defaults(handler=lambda args: add(args),
|
|
20
|
+
transferable=True)
|
|
21
|
+
parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
|
|
22
|
+
parser.add_argument('--alias', '-a', help='human readable alias for the identifier to whom the credential was issued',
|
|
23
|
+
required=True)
|
|
24
|
+
parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
|
|
25
|
+
required=False, default="")
|
|
26
|
+
parser.add_argument('--passcode', '-p', help='22 character encryption passcode for keystore (is not saved)',
|
|
27
|
+
dest="bran", default=None) # passcode => bran
|
|
28
|
+
parser.add_argument("--watcher", '-w', help="the watcher AID or alias to add to", required=True)
|
|
29
|
+
parser.add_argument("--watched", '-W', help="the watched AID or alias to add")
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def add(args):
|
|
33
|
+
""" Command line handler for adding an aid to a watcher's list of AIds to watch
|
|
34
|
+
|
|
35
|
+
Parameters:
|
|
36
|
+
args(Namespace): parsed command line arguments
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
ed = AddDoer(name=args.name,
|
|
41
|
+
alias=args.alias,
|
|
42
|
+
base=args.base,
|
|
43
|
+
bran=args.bran,
|
|
44
|
+
watcher=args.watcher,
|
|
45
|
+
watched=args.watched)
|
|
46
|
+
return [ed]
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
class AddDoer(doing.DoDoer):
|
|
50
|
+
|
|
51
|
+
def __init__(self, name, alias, base, bran, watcher, watched):
|
|
52
|
+
self.hby = existing.setupHby(name=name, base=base, bran=bran)
|
|
53
|
+
self.hab = self.hby.habByName(alias)
|
|
54
|
+
self.org = connecting.Organizer(hby=self.hby)
|
|
55
|
+
|
|
56
|
+
if watcher in self.hby.kevers:
|
|
57
|
+
wat = watcher
|
|
58
|
+
else:
|
|
59
|
+
wat = self.org.find("alias", watcher)
|
|
60
|
+
if len(wat) != 1:
|
|
61
|
+
raise ValueError(f"invalid recipient {watcher}")
|
|
62
|
+
wat = wat[0]['id']
|
|
63
|
+
|
|
64
|
+
if not wat:
|
|
65
|
+
raise ValueError(f"unknown watcher {watcher}")
|
|
66
|
+
|
|
67
|
+
if watched in self.hby.kevers:
|
|
68
|
+
watd = watched
|
|
69
|
+
else:
|
|
70
|
+
watd = self.org.find("alias", watched)
|
|
71
|
+
if len(watd) != 1:
|
|
72
|
+
raise ValueError(f"invalid recipient {watched}")
|
|
73
|
+
watd = watd[0]['id']
|
|
74
|
+
|
|
75
|
+
if not watd:
|
|
76
|
+
raise ValueError(f"unknown watched {watched}")
|
|
77
|
+
|
|
78
|
+
self.watcher = wat
|
|
79
|
+
self.watched = watd
|
|
80
|
+
|
|
81
|
+
self.oobi = None
|
|
82
|
+
for (key,), obr in self.hby.db.roobi.getItemIter():
|
|
83
|
+
if obr.cid == watd:
|
|
84
|
+
self.oobi = key
|
|
85
|
+
|
|
86
|
+
if not self.oobi:
|
|
87
|
+
raise ValueError(f"no valid oobi for watched {self.watched}")
|
|
88
|
+
|
|
89
|
+
doers = [doing.doify(self.addDo)]
|
|
90
|
+
|
|
91
|
+
super(AddDoer, self).__init__(doers=doers)
|
|
92
|
+
|
|
93
|
+
def addDo(self, tymth, tock=0.0):
|
|
94
|
+
""" Grant credential by creating /ipex/grant exn message
|
|
95
|
+
|
|
96
|
+
Parameters:
|
|
97
|
+
tymth (function): injected function wrapper closure returned by .tymen() of
|
|
98
|
+
Tymist instance. Calling tymth() returns associated Tymist .tyme.
|
|
99
|
+
tock (float): injected initial tock value
|
|
100
|
+
|
|
101
|
+
Returns: doifiable Doist compatible generator method
|
|
102
|
+
|
|
103
|
+
"""
|
|
104
|
+
# enter context
|
|
105
|
+
self.wind(tymth)
|
|
106
|
+
self.tock = tock
|
|
107
|
+
_ = (yield self.tock)
|
|
108
|
+
|
|
109
|
+
if isinstance(self.hab, habbing.GroupHab):
|
|
110
|
+
raise ValueError("watchers for multisig AIDs not currently supported")
|
|
111
|
+
|
|
112
|
+
postman = forwarding.StreamPoster(hby=self.hby, hab=self.hab, recp=self.watcher, topic="reply")
|
|
113
|
+
for msg in self.hab.db.clonePreIter(pre=self.hab.pre):
|
|
114
|
+
serder = serdering.SerderKERI(raw=msg)
|
|
115
|
+
postman.send(serder=serder, attachment=msg[serder.size:])
|
|
116
|
+
|
|
117
|
+
data = dict(cid=self.hab.pre,
|
|
118
|
+
wid=self.watched,
|
|
119
|
+
oobi=self.oobi)
|
|
120
|
+
|
|
121
|
+
route = "/watcher/aid/add"
|
|
122
|
+
msg = self.hab.reply(route=route, data=data)
|
|
123
|
+
rpy = serdering.SerderKERI(raw=msg)
|
|
124
|
+
postman.send(serder=rpy, attachment=msg[rpy.size:])
|
|
125
|
+
|
|
126
|
+
doer = doing.DoDoer(doers=postman.deliver())
|
|
127
|
+
self.extend([doer])
|
|
128
|
+
|
|
129
|
+
while not doer.done:
|
|
130
|
+
yield self.tock
|
|
131
|
+
|
|
132
|
+
print(f"Request to add {self.watched} to watcher {self.watcher} submitted.")
|
|
@@ -35,7 +35,10 @@ parser.add_argument("--witness", '-w', help="the witness AID or alias to authent
|
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def auth(args):
|
|
38
|
-
""" Command line
|
|
38
|
+
""" Command line handler for authenticating against a witness by retrieving the secret or a TOTP
|
|
39
|
+
|
|
40
|
+
Parameters:
|
|
41
|
+
args(Namespace): parsed command line arguments
|
|
39
42
|
|
|
40
43
|
"""
|
|
41
44
|
|
|
@@ -65,7 +68,7 @@ class AuthDoer(doing.DoDoer):
|
|
|
65
68
|
if not wit:
|
|
66
69
|
raise ValueError(f"unknown witness {witness}")
|
|
67
70
|
|
|
68
|
-
self.witness =
|
|
71
|
+
self.witness = wit
|
|
69
72
|
self.clienter = httping.Clienter()
|
|
70
73
|
doers = [doing.doify(self.authDo), self.clienter]
|
|
71
74
|
|
|
@@ -2077,7 +2077,7 @@ class BaseHab:
|
|
|
2077
2077
|
"""
|
|
2078
2078
|
while cues: # iteratively process each cue in cues
|
|
2079
2079
|
msgs = bytearray()
|
|
2080
|
-
cue = cues.pull()
|
|
2080
|
+
cue = cues.pull() # cues.popleft()
|
|
2081
2081
|
cueKin = cue["kin"] # type or kind of cue
|
|
2082
2082
|
|
|
2083
2083
|
if cueKin in ("receipt",): # cue to receipt a received event from other pre
|
|
@@ -40,6 +40,7 @@ def setupWitness(hby, alias="witness", mbx=None, aids=None, tcpPort=5631, httpPo
|
|
|
40
40
|
Setup witness controller and doers
|
|
41
41
|
|
|
42
42
|
"""
|
|
43
|
+
host = "0.0.0.0"
|
|
43
44
|
cues = decking.Deck()
|
|
44
45
|
doers = []
|
|
45
46
|
|
|
@@ -87,7 +88,7 @@ def setupWitness(hby, alias="witness", mbx=None, aids=None, tcpPort=5631, httpPo
|
|
|
87
88
|
receiptEnd = ReceiptEnd(hab=hab, inbound=cues, aids=aids)
|
|
88
89
|
app.add_route("/receipts", receiptEnd)
|
|
89
90
|
|
|
90
|
-
server = createHttpServer(httpPort, app, keypath, certpath, cafilepath)
|
|
91
|
+
server = createHttpServer(host, httpPort, app, keypath, certpath, cafilepath)
|
|
91
92
|
if not server.reopen():
|
|
92
93
|
raise RuntimeError(f"cannot create http server on port {httpPort}")
|
|
93
94
|
httpServerDoer = http.ServerDoer(server=server)
|
|
@@ -112,10 +113,11 @@ def setupWitness(hby, alias="witness", mbx=None, aids=None, tcpPort=5631, httpPo
|
|
|
112
113
|
return doers
|
|
113
114
|
|
|
114
115
|
|
|
115
|
-
def createHttpServer(port, app, keypath=None, certpath=None, cafilepath=None):
|
|
116
|
+
def createHttpServer(host, port, app, keypath=None, certpath=None, cafilepath=None):
|
|
116
117
|
"""
|
|
117
118
|
Create an HTTP or HTTPS server depending on whether TLS key material is present
|
|
118
119
|
Parameters:
|
|
120
|
+
host(str) : host to bind to for this server, or None for default of '0.0.0.0', all ifaces
|
|
119
121
|
port (int) : port to listen on for all HTTP(s) server instances
|
|
120
122
|
app (falcon.App) : application instance to pass to the http.Server instance
|
|
121
123
|
keypath (string) : the file path to the TLS private key
|
|
@@ -130,9 +132,9 @@ def createHttpServer(port, app, keypath=None, certpath=None, cafilepath=None):
|
|
|
130
132
|
certpath=certpath,
|
|
131
133
|
cafilepath=cafilepath,
|
|
132
134
|
port=port)
|
|
133
|
-
server = http.Server(port=port, app=app, servant=servant)
|
|
135
|
+
server = http.Server(host=host, port=port, app=app, servant=servant)
|
|
134
136
|
else:
|
|
135
|
-
server = http.Server(port=port, app=app)
|
|
137
|
+
server = http.Server(host=host, port=port, app=app)
|
|
136
138
|
return server
|
|
137
139
|
|
|
138
140
|
|
|
@@ -246,7 +248,7 @@ class WitnessStart(doing.DoDoer):
|
|
|
246
248
|
|
|
247
249
|
while True:
|
|
248
250
|
while self.cues:
|
|
249
|
-
cue = self.cues.pull()
|
|
251
|
+
cue = self.cues.pull() # self.cues.popleft()
|
|
250
252
|
cueKin = cue["kin"]
|
|
251
253
|
if cueKin == "stream":
|
|
252
254
|
self.queries.append(cue)
|
|
@@ -13,18 +13,18 @@ from urllib.parse import urlparse
|
|
|
13
13
|
import falcon
|
|
14
14
|
from hio.base import doing
|
|
15
15
|
from hio.help import decking
|
|
16
|
-
from keri.core import coring
|
|
17
16
|
|
|
17
|
+
from keri.core import coring
|
|
18
18
|
from . import httping
|
|
19
|
-
from .habbing import GroupHab
|
|
20
19
|
from .. import help
|
|
21
20
|
from .. import kering
|
|
22
|
-
from ..app import
|
|
21
|
+
from ..app import connecting
|
|
23
22
|
from ..core import routing, eventing, parsing, scheming, serdering
|
|
24
23
|
from ..db import basing
|
|
25
24
|
from ..end import ending
|
|
26
25
|
from ..end.ending import OOBI_RE, DOOBI_RE
|
|
27
26
|
from ..help import helping
|
|
27
|
+
from ..kering import Ilks, ValidationError, UnverifiedReplyError, ConfigurationError
|
|
28
28
|
from ..peer import exchanging
|
|
29
29
|
|
|
30
30
|
logger = help.ogler.getLogger()
|
|
@@ -276,7 +276,7 @@ class Oobiery:
|
|
|
276
276
|
|
|
277
277
|
RetryDelay = 30
|
|
278
278
|
|
|
279
|
-
def __init__(self, hby, clienter=None, cues=None):
|
|
279
|
+
def __init__(self, hby, rvy=None, clienter=None, cues=None):
|
|
280
280
|
""" DoDoer to handle the request and parsing of OOBIs
|
|
281
281
|
|
|
282
282
|
Parameters:
|
|
@@ -286,8 +286,14 @@ class Oobiery:
|
|
|
286
286
|
"""
|
|
287
287
|
|
|
288
288
|
self.hby = hby
|
|
289
|
+
self.rvy = rvy
|
|
290
|
+
if self.rvy is not None:
|
|
291
|
+
self.registerReplyRoutes(self.rvy.rtr)
|
|
292
|
+
|
|
289
293
|
self.clienter = clienter or httping.Clienter()
|
|
290
294
|
self.org = connecting.Organizer(hby=self.hby)
|
|
295
|
+
|
|
296
|
+
# Set up a local parser for returned events from OOBI queries.
|
|
291
297
|
rtr = routing.Router()
|
|
292
298
|
rvy = routing.Revery(db=self.hby.db, rtr=rtr)
|
|
293
299
|
kvy = eventing.Kevery(db=self.hby.db, lax=True, local=False, rvy=rvy)
|
|
@@ -298,6 +304,89 @@ class Oobiery:
|
|
|
298
304
|
self.clients = dict()
|
|
299
305
|
self.doers = [self.clienter, doing.doify(self.scoobiDo)]
|
|
300
306
|
|
|
307
|
+
def registerReplyRoutes(self, router):
|
|
308
|
+
""" Register the routes for processing messages embedded in `rpy` event messages
|
|
309
|
+
|
|
310
|
+
The Oobiery handles rpy messages with the /introduce route by processing the contained oobi
|
|
311
|
+
|
|
312
|
+
Parameters:
|
|
313
|
+
router(Router): reply message router
|
|
314
|
+
|
|
315
|
+
"""
|
|
316
|
+
router.addRoute("/introduce", self)
|
|
317
|
+
|
|
318
|
+
def processReply(self, *, serder, saider, route, cigars=None, tsgs=None, **kwargs):
|
|
319
|
+
"""
|
|
320
|
+
Process one reply message for route = /introduce
|
|
321
|
+
with either attached nontrans receipt couples in cigars or attached trans
|
|
322
|
+
indexed sig groups in tsgs.
|
|
323
|
+
Assumes already validated saider, dater, and route from serder.ked
|
|
324
|
+
|
|
325
|
+
Parameters:
|
|
326
|
+
serder (SerderKERI): instance of reply msg (SAD)
|
|
327
|
+
saider (Saider): instance from said in serder (SAD)
|
|
328
|
+
route (str): reply route
|
|
329
|
+
cigars (list): of Cigar instances that contain nontrans signing couple
|
|
330
|
+
signature in .raw and public key in .verfer
|
|
331
|
+
tsgs (list): tuples (quadruples) of form
|
|
332
|
+
(prefixer, seqner, diger, [sigers]) where:
|
|
333
|
+
prefixer is pre of trans endorser
|
|
334
|
+
seqner is sequence number of trans endorser's est evt for keys for sigs
|
|
335
|
+
diger is digest of trans endorser's est evt for keys for sigs
|
|
336
|
+
[sigers] is list of indexed sigs from trans endorser's keys from est evt
|
|
337
|
+
|
|
338
|
+
OobiRecord:
|
|
339
|
+
date: str = date time of reply message of the introduction
|
|
340
|
+
|
|
341
|
+
Reply Message:
|
|
342
|
+
{
|
|
343
|
+
"v" : "KERI10JSON00011c_",
|
|
344
|
+
"t" : "rpy",
|
|
345
|
+
"d": "EZ-i0d8JZAoTNZH3ULaU6JR2nmwyvYAfSVPzhzS6b5CM",
|
|
346
|
+
"dt": "2020-08-22T17:50:12.988921+00:00",
|
|
347
|
+
"r" : "/introduce",
|
|
348
|
+
"a" :
|
|
349
|
+
{
|
|
350
|
+
"cid": "ENcOes8_t2C7tck4X4j61fSm0sWkLbZrEZffq7mSn8On",
|
|
351
|
+
"oobi": "http://localhost:5632/oobi/ENcOes8_t2C7tck4X4j61fSm0sWkLbZrEZffq7mSn8On/witness",
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
"""
|
|
356
|
+
if route != "/introduce":
|
|
357
|
+
raise ValidationError(f"Usupported route={route} in {Ilks.rpy} "
|
|
358
|
+
f"msg={serder.ked}.")
|
|
359
|
+
|
|
360
|
+
data = serder.ked['a']
|
|
361
|
+
dt = serder.ked["dt"]
|
|
362
|
+
|
|
363
|
+
for k in ("cid", "oobi"):
|
|
364
|
+
if k not in data:
|
|
365
|
+
raise ValidationError(f"Missing element={k} from attributes in"
|
|
366
|
+
f" {Ilks.rpy} msg={serder.ked}.")
|
|
367
|
+
|
|
368
|
+
cider = coring.Prefixer(qb64=data["cid"]) # raises error if unsupported code
|
|
369
|
+
cid = cider.qb64 # controller authorizing eid at role
|
|
370
|
+
aid = cid # authorizing attribution id
|
|
371
|
+
|
|
372
|
+
oobi = data["oobi"]
|
|
373
|
+
url = urlparse(oobi)
|
|
374
|
+
if url.scheme not in ("http", "https"):
|
|
375
|
+
raise ValidationError(f"Invalid url scheme for introduced OOBI scheme={url.scheme}")
|
|
376
|
+
|
|
377
|
+
if self.rvy is None:
|
|
378
|
+
raise ConfigurationError("this oobiery is not configured to handle rpy introductions")
|
|
379
|
+
|
|
380
|
+
# Process BADA RUN but with no previous reply message, always process introductions
|
|
381
|
+
accepted = self.rvy.acceptReply(serder=serder, saider=saider, route=route,
|
|
382
|
+
aid=aid, osaider=None, cigars=cigars,
|
|
383
|
+
tsgs=tsgs)
|
|
384
|
+
if not accepted:
|
|
385
|
+
raise UnverifiedReplyError(f"Unverified introduciton reply. {serder.ked}")
|
|
386
|
+
|
|
387
|
+
obr = basing.OobiRecord(cid=cid, date=dt)
|
|
388
|
+
self.hby.db.oobis.put(keys=(oobi,), val=obr)
|
|
389
|
+
|
|
301
390
|
def scoobiDo(self, tymth=None, tock=0.0):
|
|
302
391
|
"""
|
|
303
392
|
Returns doifiable Doist compatibile generator method (doer dog) to process
|
|
@@ -8,7 +8,7 @@ import json
|
|
|
8
8
|
from typing import Union
|
|
9
9
|
from collections import namedtuple, deque
|
|
10
10
|
from collections.abc import Sequence, Mapping
|
|
11
|
-
from dataclasses import dataclass, astuple
|
|
11
|
+
from dataclasses import dataclass, astuple, asdict
|
|
12
12
|
from base64 import urlsafe_b64encode as encodeB64
|
|
13
13
|
from base64 import urlsafe_b64decode as decodeB64
|
|
14
14
|
from fractions import Fraction
|
|
@@ -184,24 +184,21 @@ def loads(raw, size=None, kind=Serials.json):
|
|
|
184
184
|
return ked
|
|
185
185
|
|
|
186
186
|
|
|
187
|
-
# ToDo: nonces only need 128 bits of entropy. a Salt is enough
|
|
188
|
-
# Just use Salter().qb64.
|
|
189
187
|
# Deprecated
|
|
188
|
+
# randomNonce() refactored to match Salter().qb64 and only used in coring to avoid circular dependencies
|
|
189
|
+
# use Salter().qb64 in other places
|
|
190
190
|
|
|
191
191
|
def randomNonce():
|
|
192
|
-
""" Generate a random
|
|
192
|
+
""" Generate a random 128 bits salt and encode as qb64
|
|
193
193
|
|
|
194
194
|
Returns:
|
|
195
|
-
str: qb64 encoded
|
|
195
|
+
str: qb64 encoded 128 bits random salt
|
|
196
196
|
"""
|
|
197
|
-
preseed = pysodium.randombytes(pysodium.
|
|
198
|
-
seedqb64 = Matter(raw=preseed, code=MtrDex.
|
|
197
|
+
preseed = pysodium.randombytes(pysodium.crypto_pwhash_SALTBYTES)
|
|
198
|
+
seedqb64 = Matter(raw=preseed, code=MtrDex.Salt_128).qb64
|
|
199
199
|
return seedqb64
|
|
200
200
|
|
|
201
201
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
202
|
# secret derivation security tier
|
|
206
203
|
Tierage = namedtuple("Tierage", 'low med high')
|
|
207
204
|
|
|
@@ -906,6 +903,9 @@ class Matter:
|
|
|
906
903
|
'9AAE': Sizage(hs=4, ss=4, fs=None, ls=2),
|
|
907
904
|
}
|
|
908
905
|
|
|
906
|
+
Codes = asdict(MtrDex) # map code name to code
|
|
907
|
+
Names = {val : key for key, val in Codes.items()} # invert map code to code name
|
|
908
|
+
|
|
909
909
|
|
|
910
910
|
|
|
911
911
|
def __init__(self, raw=None, code=MtrDex.Ed25519N, soft='', rize=None,
|
|
@@ -1116,6 +1116,17 @@ class Matter:
|
|
|
1116
1116
|
return self._code
|
|
1117
1117
|
|
|
1118
1118
|
|
|
1119
|
+
@property
|
|
1120
|
+
def name(self):
|
|
1121
|
+
"""
|
|
1122
|
+
Returns:
|
|
1123
|
+
name (str): code name for self.code. Used for annotation for
|
|
1124
|
+
primitives like Matter
|
|
1125
|
+
|
|
1126
|
+
"""
|
|
1127
|
+
return self.Names[self.code]
|
|
1128
|
+
|
|
1129
|
+
|
|
1119
1130
|
@property
|
|
1120
1131
|
def hard(self):
|
|
1121
1132
|
"""
|
|
@@ -1700,6 +1711,10 @@ class Number(Matter):
|
|
|
1700
1711
|
|
|
1701
1712
|
Methods:
|
|
1702
1713
|
"""
|
|
1714
|
+
Codes = asdict(NumDex) # map code name to code
|
|
1715
|
+
Names = {val : key for key, val in Codes.items()} # invert map code to code name
|
|
1716
|
+
|
|
1717
|
+
|
|
1703
1718
|
|
|
1704
1719
|
def __init__(self, raw=None, qb64b=None, qb64=None, qb2=None,
|
|
1705
1720
|
code=None, num=None, numh=None, **kwa):
|
|
@@ -4797,73 +4812,6 @@ class Tholder:
|
|
|
4797
4812
|
|
|
4798
4813
|
|
|
4799
4814
|
|
|
4800
|
-
class Streamer:
|
|
4801
|
-
"""
|
|
4802
|
-
Streamer is CESR sniffable stream class
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
Has the following public properties:
|
|
4806
|
-
|
|
4807
|
-
Properties:
|
|
4808
|
-
|
|
4809
|
-
|
|
4810
|
-
Methods:
|
|
4811
|
-
|
|
4812
|
-
|
|
4813
|
-
Hidden:
|
|
4814
|
-
|
|
4815
|
-
|
|
4816
|
-
|
|
4817
|
-
"""
|
|
4818
|
-
|
|
4819
|
-
def __init__(self, stream):
|
|
4820
|
-
"""Initialize instance
|
|
4821
|
-
|
|
4822
|
-
|
|
4823
|
-
Parameters:
|
|
4824
|
-
stream (bytes | bytearray): sniffable CESR stream
|
|
4825
|
-
|
|
4826
|
-
|
|
4827
|
-
"""
|
|
4828
|
-
self._stream = bytes(stream)
|
|
4829
|
-
|
|
4830
|
-
|
|
4831
|
-
@property
|
|
4832
|
-
def stream(self):
|
|
4833
|
-
"""stream property getter
|
|
4834
|
-
"""
|
|
4835
|
-
return self._stream
|
|
4836
|
-
|
|
4837
|
-
@property
|
|
4838
|
-
def text(self):
|
|
4839
|
-
"""expanded stream as qb64 text
|
|
4840
|
-
Returns:
|
|
4841
|
-
stream (bytes): expanded text qb64 version of stream
|
|
4842
|
-
|
|
4843
|
-
"""
|
|
4844
|
-
return self._stream
|
|
4845
|
-
|
|
4846
|
-
@property
|
|
4847
|
-
def binary(self):
|
|
4848
|
-
"""compacted stream as qb2 binary
|
|
4849
|
-
Returns:
|
|
4850
|
-
stream (bytes): compacted binary qb2 version of stream
|
|
4851
|
-
|
|
4852
|
-
"""
|
|
4853
|
-
return self._stream
|
|
4854
|
-
|
|
4855
|
-
@property
|
|
4856
|
-
def texter(self):
|
|
4857
|
-
"""expanded stream as Texter instance
|
|
4858
|
-
Returns:
|
|
4859
|
-
texter (Texter): Texter primitive of stream suitable wrapping
|
|
4860
|
-
|
|
4861
|
-
"""
|
|
4862
|
-
return self._stream
|
|
4863
|
-
|
|
4864
|
-
|
|
4865
|
-
|
|
4866
|
-
|
|
4867
4815
|
class Sadder:
|
|
4868
4816
|
"""
|
|
4869
4817
|
Sadder is self addressed data (SAD) serializer-deserializer class
|