keri 1.2.0.dev4__tar.gz → 1.2.0.dev6__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.
Files changed (182) hide show
  1. {keri-1.2.0.dev4/src/keri.egg-info → keri-1.2.0.dev6}/PKG-INFO +1 -1
  2. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/setup.py +1 -1
  3. keri-1.2.0.dev6/src/keri/__init__.py +5 -0
  4. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/agenting.py +6 -7
  5. keri-1.2.0.dev6/src/keri/app/cli/commands/aid.py +58 -0
  6. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/confirm.py +25 -3
  7. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/request.py +1 -1
  8. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/incept.py +2 -0
  9. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/grant.py +1 -1
  10. keri-1.2.0.dev6/src/keri/app/cli/commands/mailbox/add.py +135 -0
  11. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/join.py +1 -1
  12. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/notice.py +2 -2
  13. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/generate.py +13 -0
  14. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rotate.py +14 -3
  15. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/status.py +1 -1
  16. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/create.py +1 -1
  17. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/incept.py +1 -1
  18. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/authenticate.py +22 -9
  19. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/incepting.py +2 -0
  20. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/delegating.py +5 -3
  21. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/grouping.py +3 -3
  22. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/habbing.py +10 -10
  23. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/httping.py +3 -0
  24. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/indirecting.py +1 -1
  25. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/notifying.py +1 -1
  26. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/storing.py +65 -60
  27. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/coring.py +6 -2
  28. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/counting.py +3 -0
  29. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/eventing.py +1 -19
  30. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/parsing.py +27 -14
  31. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/serdering.py +2 -2
  32. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/basing.py +2 -0
  33. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/peer/exchanging.py +53 -14
  34. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/credentialing.py +4 -4
  35. {keri-1.2.0.dev4 → keri-1.2.0.dev6/src/keri.egg-info}/PKG-INFO +1 -1
  36. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/SOURCES.txt +2 -0
  37. keri-1.2.0.dev4/src/keri/__init__.py +0 -5
  38. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/LICENSE +0 -0
  39. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/README.md +0 -0
  40. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/setup.cfg +0 -0
  41. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/__init__.py +0 -0
  42. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/apping.py +0 -0
  43. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/challenging.py +0 -0
  44. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/__init__.py +0 -0
  45. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/__init__.py +0 -0
  46. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/__init__.py +0 -0
  47. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/generate.py +0 -0
  48. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/respond.py +0 -0
  49. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/challenge/verify.py +0 -0
  50. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/clean.py +0 -0
  51. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/contacts/__init__.py +0 -0
  52. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/contacts/list.py +0 -0
  53. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/decrypt.py +0 -0
  54. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/delegate/__init__.py +0 -0
  55. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/did/__init__.py +0 -0
  56. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/did/generate.py +0 -0
  57. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/__init__.py +0 -0
  58. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/add.py +0 -0
  59. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/export.py +0 -0
  60. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ends/list.py +0 -0
  61. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/escrow.py +0 -0
  62. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/export.py +0 -0
  63. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/init.py +0 -0
  64. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/interact.py +0 -0
  65. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/__init__.py +0 -0
  66. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/admit.py +0 -0
  67. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/agree.py +0 -0
  68. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/apply.py +0 -0
  69. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/join.py +0 -0
  70. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/list.py +0 -0
  71. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/offer.py +0 -0
  72. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ipex/spurn.py +0 -0
  73. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/kevers.py +0 -0
  74. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/list.py +0 -0
  75. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/local/__init__.py +0 -0
  76. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/local/watch.py +0 -0
  77. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/__init__.py +0 -0
  78. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/debug.py +0 -0
  79. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/mailbox/update.py +0 -0
  80. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/__init__.py +0 -0
  81. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/list.py +0 -0
  82. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/run.py +0 -0
  83. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate/show.py +0 -0
  84. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/migrate.py +0 -0
  85. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/__init__.py +0 -0
  86. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/continue.py +0 -0
  87. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/demo.py +0 -0
  88. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/incept.py +0 -0
  89. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/interact.py +0 -0
  90. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/rotate.py +0 -0
  91. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/shell.py +0 -0
  92. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/multisig/update.py +0 -0
  93. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/nonce.py +0 -0
  94. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/__init__.py +0 -0
  95. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/clean.py +0 -0
  96. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/oobi/resolve.py +0 -0
  97. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/__init__.py +0 -0
  98. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/generate.py +0 -0
  99. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/remove.py +0 -0
  100. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/passcode/set.py +0 -0
  101. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/query.py +0 -0
  102. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rename.py +0 -0
  103. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/rollback.py +0 -0
  104. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/saidify.py +0 -0
  105. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/salt.py +0 -0
  106. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/sign.py +0 -0
  107. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ssh/__init__.py +0 -0
  108. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/ssh/export.py +0 -0
  109. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/time.py +0 -0
  110. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/__init__.py +0 -0
  111. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/export.py +0 -0
  112. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/list.py +0 -0
  113. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/__init__.py +0 -0
  114. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/list.py +0 -0
  115. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/registry/status.py +0 -0
  116. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/vc/revoke.py +0 -0
  117. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/verify.py +0 -0
  118. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/version.py +0 -0
  119. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/watcher/__init__.py +0 -0
  120. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/watcher/add.py +0 -0
  121. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/__init__.py +0 -0
  122. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/demo.py +0 -0
  123. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/start.py +0 -0
  124. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/commands/witness/submit.py +0 -0
  125. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/__init__.py +0 -0
  126. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/config.py +0 -0
  127. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/displaying.py +0 -0
  128. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/existing.py +0 -0
  129. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/rotating.py +0 -0
  130. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/common/terming.py +0 -0
  131. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/cli/kli.py +0 -0
  132. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/configing.py +0 -0
  133. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/connecting.py +0 -0
  134. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/directing.py +0 -0
  135. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/forwarding.py +0 -0
  136. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/keeping.py +0 -0
  137. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/oobiing.py +0 -0
  138. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/querying.py +0 -0
  139. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/signaling.py +0 -0
  140. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/signing.py +0 -0
  141. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/app/specing.py +0 -0
  142. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/__init__.py +0 -0
  143. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/indexing.py +0 -0
  144. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/routing.py +0 -0
  145. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/scheming.py +0 -0
  146. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/signing.py +0 -0
  147. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/streaming.py +0 -0
  148. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/core/structing.py +0 -0
  149. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/__init__.py +0 -0
  150. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/dbing.py +0 -0
  151. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/escrowing.py +0 -0
  152. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/koming.py +0 -0
  153. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/migrations/__init__.py +0 -0
  154. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/migrations/rekey_habs.py +0 -0
  155. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/db/subing.py +0 -0
  156. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/__init__.py +0 -0
  157. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_bob.py +0 -0
  158. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_eve.py +0 -0
  159. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_kev.py +0 -0
  160. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demo_sam.py +0 -0
  161. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/demo/demoing.py +0 -0
  162. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/__init__.py +0 -0
  163. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/ending.py +0 -0
  164. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/end/priming.py +0 -0
  165. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/help/__init__.py +0 -0
  166. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/help/helping.py +0 -0
  167. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/kering.py +0 -0
  168. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/peer/__init__.py +0 -0
  169. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/__init__.py +0 -0
  170. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/protocoling.py +0 -0
  171. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/proving.py +0 -0
  172. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vc/walleting.py +0 -0
  173. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/__init__.py +0 -0
  174. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/eventing.py +0 -0
  175. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/verifying.py +0 -0
  176. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri/vdr/viring.py +0 -0
  177. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/dependency_links.txt +0 -0
  178. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/entry_points.txt +0 -0
  179. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/not-zip-safe +0 -0
  180. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/requires.txt +0 -0
  181. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/src/keri.egg-info/top_level.txt +0 -0
  182. {keri-1.2.0.dev4 → keri-1.2.0.dev6}/tests/test_kering.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: keri
3
- Version: 1.2.0.dev4
3
+ Version: 1.2.0.dev6
4
4
  Summary: Key Event Receipt Infrastructure
5
5
  Home-page: https://github.com/WebOfTrust/keripy
6
6
  Author: Samuel M. Smith
@@ -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-dev4', # also change in src/keri/__init__.py
40
+ version='1.2.0-dev6', # 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",
@@ -0,0 +1,5 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ __version__ = '1.2.0-dev6' # also change in setup.py
4
+
5
+
@@ -227,8 +227,9 @@ class Receiptor(doing.DoDoer):
227
227
  msg = self.msgs.popleft()
228
228
  pre = msg["pre"]
229
229
  sn = msg["sn"] if "sn" in msg else None
230
+ auths = msg["auths"] if "auths" in msg else None
230
231
 
231
- yield from self.receipt(pre, sn)
232
+ yield from self.receipt(pre, sn, auths)
232
233
  self.cues.push(msg)
233
234
 
234
235
  yield self.tock
@@ -616,12 +617,10 @@ class WitnessPublisher(doing.DoDoer):
616
617
 
617
618
  _ = (yield self.tock)
618
619
 
619
- total = len(witers)
620
- count = 0
621
- while count < total:
622
- for witer in witers:
623
- count += len(witer.sent)
624
- _ = (yield self.tock)
620
+ while witers:
621
+ witer = witers.pop()
622
+ while not witer.idle:
623
+ _ = (yield self.tock)
625
624
 
626
625
  self.remove(witers)
627
626
  self.cues.push(evt)
@@ -0,0 +1,58 @@
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.cli.common import existing
13
+ from keri.kering import ConfigurationError
14
+
15
+ logger = help.ogler.getLogger()
16
+
17
+ parser = argparse.ArgumentParser(description='Print the AID for a given alias')
18
+ parser.set_defaults(handler=lambda args: handler(args),
19
+ transferable=True)
20
+ parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
21
+ parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
22
+ required=False, default="")
23
+ parser.add_argument('--alias', '-a', help='human readable alias for the new identifier prefix', default=None,
24
+ required=True)
25
+ parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
26
+ dest="bran", default=None) # passcode => bran
27
+
28
+
29
+ def handler(args):
30
+ kwa = dict(args=args)
31
+ return [doing.doify(status, **kwa)]
32
+
33
+
34
+ def status(tymth, tock=0.0, **opts):
35
+ """ Command line status handler
36
+
37
+ """
38
+ _ = (yield tock)
39
+ args = opts["args"]
40
+ name = args.name
41
+ alias = args.alias
42
+ base = args.base
43
+ bran = args.bran
44
+
45
+ try:
46
+ with existing.existingHby(name=name, base=base, bran=bran) as hby:
47
+ if alias is None:
48
+ alias = existing.aliasInput(hby)
49
+
50
+ hab = hby.habByName(alias)
51
+ if hab is None:
52
+ print(f"{alias} is not a valid alias for an identifier")
53
+
54
+ print(hab.pre)
55
+
56
+ except ConfigurationError as e:
57
+ print(f"identifier prefix for {name} does not exist, incept must be run first", )
58
+ return -1
@@ -16,6 +16,7 @@ from keri.app.habbing import GroupHab
16
16
  from keri import core
17
17
  from keri.core import coring, serdering
18
18
  from keri.db import dbing
19
+ from keri.help import helping
19
20
  from keri.peer import exchanging
20
21
 
21
22
  logger = help.ogler.getLogger()
@@ -32,6 +33,10 @@ parser.add_argument('--passcode', '-p', help='21 character encryption passcode f
32
33
  parser.add_argument("--interact", "-i", help="anchor the delegation approval in an interaction event. "
33
34
  "Default is to use a rotation event.", action="store_true")
34
35
  parser.add_argument("--auto", "-Y", help="auto approve any delegation request non-interactively", action="store_true")
36
+ parser.add_argument("--authenticate", '-z', help="Prompt the controller for authentication codes for each witness",
37
+ action='store_true')
38
+ parser.add_argument('--code', help='<Witness AID>:<code> formatted witness auth codes. Can appear multiple times',
39
+ default=[], action="append", required=False)
35
40
 
36
41
 
37
42
  def confirm(args):
@@ -47,15 +52,18 @@ def confirm(args):
47
52
  alias = args.alias
48
53
  interact = args.interact
49
54
  auto = args.auto
55
+ authenticate = args.authenticate
56
+ codes = args.code
50
57
 
51
- confirmDoer = ConfirmDoer(name=name, base=base, alias=alias, bran=bran, interact=interact, auto=auto)
58
+ confirmDoer = ConfirmDoer(name=name, base=base, alias=alias, bran=bran, interact=interact, auto=auto,
59
+ authenticate=authenticate, codes=codes)
52
60
 
53
61
  doers = [confirmDoer]
54
62
  return doers
55
63
 
56
64
 
57
65
  class ConfirmDoer(doing.DoDoer):
58
- def __init__(self, name, base, alias, bran, interact=False, auto=False):
66
+ def __init__(self, name, base, alias, bran, interact=False, auto=False, authenticate=False, codes=None):
59
67
  hby = existing.setupHby(name=name, base=base, bran=bran)
60
68
  self.hbyDoer = habbing.HaberyDoer(habery=hby) # setup doer
61
69
  self.witq = agenting.WitnessInquisitor(hby=hby)
@@ -63,6 +71,8 @@ class ConfirmDoer(doing.DoDoer):
63
71
  self.counselor = grouping.Counselor(hby=hby)
64
72
  self.notifier = notifying.Notifier(hby=hby)
65
73
  self.mux = grouping.Multiplexor(hby=hby, notifier=self.notifier)
74
+ self.authenticate = authenticate
75
+ self.codes = codes if codes is not None else []
66
76
 
67
77
  exc = exchanging.Exchanger(hby=hby, handlers=[])
68
78
  delegating.loadHandlers(hby=hby, exc=exc, notifier=self.notifier)
@@ -173,7 +183,19 @@ class ConfirmDoer(doing.DoDoer):
173
183
  else:
174
184
  hab.rotate(data=[anchor])
175
185
 
176
- witDoer = agenting.WitnessReceiptor(hby=self.hby)
186
+ auths = {}
187
+ if self.authenticate:
188
+ for arg in self.codes:
189
+ (wit, code) = arg.split(":")
190
+ auths[wit] = f"{code}#{helping.nowIso8601()}"
191
+
192
+ for wit in hab.kever.wits:
193
+ if wit in auths:
194
+ continue
195
+ code = input(f"Entire code for {wit}: ")
196
+ auths[wit] = f"{code}#{helping.nowIso8601()}"
197
+
198
+ witDoer = agenting.WitnessReceiptor(hby=self.hby, auths=auths)
177
199
  self.extend(doers=[witDoer])
178
200
  self.toRemove.append(witDoer)
179
201
  yield self.tock
@@ -96,7 +96,7 @@ class RequestDoer(doing.DoDoer):
96
96
  exn, atc = delegating.delegateRequestExn(hab.mhab, delpre=delpre, evt=bytes(evt), aids=hab.smids)
97
97
 
98
98
  # delegate AID ICP and exn of delegation request EXN
99
- srdr = serdering.SerderKERI(raw=evt) # coring.Serder(raw=evt)
99
+ srdr = serdering.SerderKERI(raw=evt)
100
100
  del evt[:srdr.size]
101
101
  self.postman.send(src=phab.pre, dest=delpre, topic="delegate", serder=srdr, attachment=evt)
102
102
  self.postman.send(src=phab.pre, dest=hab.kever.delpre, topic="delegate", serder=exn, attachment=atc)
@@ -117,6 +117,8 @@ def mergeArgsWithFile(args):
117
117
  incept_opts.estOnly = args.est_only
118
118
  if args.data is not None:
119
119
  incept_opts.data = config.parseData(args.data)
120
+ if args.delpre is not None:
121
+ incept_opts.delpre = args.delpre
120
122
 
121
123
  return incept_opts
122
124
 
@@ -108,7 +108,7 @@ class GrantDoer(doing.DoDoer):
108
108
 
109
109
  iss = self.rgy.reger.cloneTvtAt(creder.said)
110
110
 
111
- iserder = serdering.SerderKERI(raw=bytes(iss)) # coring.Serder(raw=bytes(iss))
111
+ iserder = serdering.SerderKERI(raw=bytes(iss))
112
112
  seqner = coring.Seqner(sn=iserder.sn)
113
113
 
114
114
  serder = self.hby.db.findAnchoringSealEvent(creder.sad['i'],
@@ -0,0 +1,135 @@
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
+ from hio.help import Hict
12
+
13
+ from keri import kering
14
+ from keri.app import connecting, habbing, forwarding
15
+ from keri.app.agenting import httpClient, WitnessPublisher
16
+ from keri.app.cli.common import existing
17
+ from keri.core import serdering
18
+
19
+ logger = help.ogler.getLogger()
20
+
21
+ parser = argparse.ArgumentParser(description='Add mailbox role')
22
+ parser.set_defaults(handler=lambda args: add(args),
23
+ transferable=True)
24
+ parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
25
+ parser.add_argument('--alias', '-a', help='human readable alias for the identifier to whom the credential was issued',
26
+ required=True)
27
+ parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
28
+ required=False, default="")
29
+ parser.add_argument('--passcode', '-p', help='22 character encryption passcode for keystore (is not saved)',
30
+ dest="bran", default=None) # passcode => bran
31
+ parser.add_argument("--mailbox", '-w', help="the mailbox AID or alias to add", required=True)
32
+
33
+
34
+ def add(args):
35
+ """ Command line handler for adding an aid to a watcher's list of AIds to watch
36
+
37
+ Parameters:
38
+ args(Namespace): parsed command line arguments
39
+
40
+ """
41
+
42
+ ed = AddDoer(name=args.name,
43
+ alias=args.alias,
44
+ base=args.base,
45
+ bran=args.bran,
46
+ mailbox=args.mailbox)
47
+ return [ed]
48
+
49
+
50
+ class AddDoer(doing.DoDoer):
51
+
52
+ def __init__(self, name, alias, base, bran, mailbox):
53
+ self.hby = existing.setupHby(name=name, base=base, bran=bran)
54
+ self.hab = self.hby.habByName(alias)
55
+ self.org = connecting.Organizer(hby=self.hby)
56
+ self.witpub = WitnessPublisher(hby=self.hby)
57
+
58
+ if mailbox in self.hby.kevers:
59
+ mbx = mailbox
60
+ else:
61
+ mbx = self.org.find("alias", mailbox)
62
+ if len(mbx) != 1:
63
+ raise ValueError(f"invalid mailbox {mailbox}")
64
+ mbx = mbx[0]['id']
65
+
66
+ if not mbx:
67
+ raise ValueError(f"unknown mailbox {mailbox}")
68
+
69
+ self.mailbox = mbx
70
+
71
+ doers = [doing.doify(self.addDo), self.witpub]
72
+
73
+ super(AddDoer, self).__init__(doers=doers)
74
+
75
+ def addDo(self, tymth, tock=0.0):
76
+ """ Grant credential by creating /ipex/grant exn message
77
+
78
+ Parameters:
79
+ tymth (function): injected function wrapper closure returned by .tymen() of
80
+ Tymist instance. Calling tymth() returns associated Tymist .tyme.
81
+ tock (float): injected initial tock value
82
+
83
+ Returns: doifiable Doist compatible generator method
84
+
85
+ """
86
+ # enter context
87
+ self.wind(tymth)
88
+ self.tock = tock
89
+ _ = (yield self.tock)
90
+
91
+ if isinstance(self.hab, habbing.GroupHab):
92
+ raise ValueError("watchers for multisig AIDs not currently supported")
93
+
94
+ kel = self.hab.replay()
95
+ data = dict(cid=self.hab.pre,
96
+ role=kering.Roles.mailbox,
97
+ eid=self.mailbox)
98
+
99
+ route = "/end/role/add"
100
+ msg = self.hab.reply(route=route, data=data)
101
+ self.hab.psr.parseOne(ims=(bytes(msg))) # make copy to preserve
102
+
103
+ fargs = dict([("kel", kel.decode("utf-8")),
104
+ ("rpy", msg.decode("utf-8"))])
105
+
106
+ headers = (Hict([
107
+ ("Content-Type", "multipart/form-data"),
108
+ ]))
109
+
110
+ client, clientDoer = httpClient(self.hab, self.mailbox)
111
+ self.extend([clientDoer])
112
+
113
+ client.request(
114
+ method="POST",
115
+ path=f"{client.requester.path}/mailboxes",
116
+ headers=headers,
117
+ fargs=fargs
118
+ )
119
+ while not client.responses:
120
+ yield self.tock
121
+
122
+ rep = client.respond()
123
+ if rep.status == 200:
124
+ msg = self.hab.replyEndRole(cid=self.hab.pre, role=kering.Roles.mailbox)
125
+ self.witpub.msgs.append(dict(pre=self.hab.pre, msg=bytes(msg)))
126
+
127
+ while not self.witpub.cues:
128
+ yield self.tock
129
+
130
+ print(f"Mailbox {self.mailbox} added for {self.hab.name}")
131
+
132
+ else:
133
+ print(rep.status, rep.data)
134
+
135
+ self.remove([clientDoer, self.witpub])
@@ -25,7 +25,7 @@ parser.set_defaults(handler=lambda args: join(args))
25
25
  parser.add_argument('--name', '-n', help='keystore name and file location of KERI keystore', required=True)
26
26
  parser.add_argument('--base', '-b', help='additional optional prefix to file location of KERI keystore',
27
27
  required=False, default="")
28
- parser.add_argument('--group', '-a', help='human-readable name for the multisig group identifier prefix', required=False, default=None)
28
+ parser.add_argument('--group', '-g', help='human-readable name for the multisig group identifier prefix', required=False, default=None)
29
29
  parser.add_argument('--passcode', '-p', help='21 character encryption passcode for keystore (is not saved)',
30
30
  dest="bran", default=None) # passcode => bran
31
31
  parser.add_argument("--auto", "-Y", help="auto approve any delegation request non-interactively", action="store_true")
@@ -11,8 +11,8 @@ from hio.base import doing
11
11
 
12
12
  from keri.app import habbing, forwarding, grouping
13
13
  from keri.app.cli.common import existing
14
- from keri.core import coring
15
14
  from keri.core.coring import Ilks
15
+ from keri.core import serdering
16
16
 
17
17
  logger = help.ogler.getLogger()
18
18
 
@@ -86,7 +86,7 @@ class NoticeDoer(doing.DoDoer):
86
86
  (smids, rmids) = hab.members()
87
87
  serder = hab.kever.serder
88
88
  rot = hab.makeOwnEvent(sn=hab.kever.sn)
89
- eserder = coring.Serder(raw=rot)
89
+ eserder = serdering.SerderKERI(raw=rot)
90
90
  del rot[:eserder.size]
91
91
 
92
92
  ilk = serder.ked['t']
@@ -81,3 +81,16 @@ def generate(tymth, tock=0.0, **opts):
81
81
  url = urls[kering.Schemes.http] if kering.Schemes.http in urls else urls[kering.Schemes.https]
82
82
  up = urlparse(url)
83
83
  print(f"{up.scheme}://{up.hostname}:{up.port}/oobi/{hab.pre}/controller")
84
+ elif role in (kering.Roles.mailbox,):
85
+ for (_, _, eid), end in hab.db.ends.getItemIter(keys=(hab.pre, kering.Roles.mailbox, )):
86
+ if not (end.allowed and end.enabled is not False):
87
+ continue
88
+
89
+ urls = hab.fetchUrls(eid=eid, scheme=kering.Schemes.http) or hab.fetchUrls(eid=hab.pre,
90
+ scheme=kering.Schemes.https)
91
+ if not urls:
92
+ print(f"{alias} identifier {hab.pre} does not have any mailbox endpoints")
93
+ return
94
+ url = urls[kering.Schemes.http] if kering.Schemes.http in urls else urls[kering.Schemes.https]
95
+ up = urlparse(url)
96
+ print(f"{up.scheme}://{up.hostname}:{up.port}/oobi/{hab.pre}/mailbox/{eid}")
@@ -29,6 +29,9 @@ parser.add_argument("--receipt-endpoint", help="Attempt to connect to witness re
29
29
  dest="endpoint", action='store_true')
30
30
  parser.add_argument("--authenticate", '-z', help="Prompt the controller for authentication codes for each witness",
31
31
  action='store_true')
32
+ parser.add_argument('--code', help='<Witness AID>:<code> formatted witness auth codes. Can appear multiple times',
33
+ default=[], action="append", required=False)
34
+
32
35
  parser.add_argument("--proxy", help="alias for delegation communication proxy", default="")
33
36
 
34
37
  rotating.addRotationArgs(parser)
@@ -63,7 +66,7 @@ def rotate(args):
63
66
  cuts=opts.witsCut, adds=opts.witsAdd,
64
67
  isith=opts.isith, nsith=opts.nsith,
65
68
  count=opts.ncount, toad=opts.toad,
66
- data=opts.data, proxy=args.proxy, authenticate=args.authenticate)
69
+ data=opts.data, proxy=args.proxy, authenticate=args.authenticate, codes=args.code)
67
70
 
68
71
  doers = [rotDoer]
69
72
 
@@ -118,7 +121,8 @@ class RotateDoer(doing.DoDoer):
118
121
  """
119
122
 
120
123
  def __init__(self, name, base, bran, alias, endpoint=False, isith=None, nsith=None, count=None,
121
- toad=None, wits=None, cuts=None, adds=None, data: list = None, proxy=None, authenticate=False):
124
+ toad=None, wits=None, cuts=None, adds=None, data: list = None, proxy=None, authenticate=False,
125
+ codes=None):
122
126
  """
123
127
  Returns DoDoer with all registered Doers needed to perform rotation.
124
128
 
@@ -144,6 +148,7 @@ class RotateDoer(doing.DoDoer):
144
148
  self.endpoint = endpoint
145
149
  self.proxy = proxy
146
150
  self.authenticate = authenticate
151
+ self.codes = codes if codes is not None else []
147
152
 
148
153
  self.wits = wits if wits is not None else []
149
154
  self.cuts = cuts if cuts is not None else []
@@ -193,12 +198,18 @@ class RotateDoer(doing.DoDoer):
193
198
 
194
199
  auths = {}
195
200
  if self.authenticate:
201
+ for arg in self.codes:
202
+ (wit, code) = arg.split(":")
203
+ auths[wit] = f"{code}#{helping.nowIso8601()}"
204
+
196
205
  for wit in hab.kever.wits:
206
+ if wit in auths:
207
+ continue
197
208
  code = input(f"Entire code for {wit}: ")
198
209
  auths[wit] = f"{code}#{helping.nowIso8601()}"
199
210
 
200
211
  if hab.kever.delpre:
201
- self.swain.delegation(pre=hab.pre, sn=hab.kever.sn)
212
+ self.swain.delegation(pre=hab.pre, sn=hab.kever.sn, auths=auths)
202
213
  print("Waiting for delegation approval...")
203
214
  while not self.swain.complete(hab.kever.prefixer, coring.Seqner(sn=hab.kever.sn)):
204
215
  yield self.tock
@@ -10,7 +10,7 @@ from hio import help
10
10
  from hio.base import doing
11
11
 
12
12
  from keri.app.cli.common import displaying, existing
13
- from keri.core import coring, serdering
13
+ from keri.core import serdering
14
14
  from keri.kering import ConfigurationError
15
15
 
16
16
  logger = help.ogler.getLogger()
@@ -220,7 +220,7 @@ class CredentialIssuer(doing.DoDoer):
220
220
  else:
221
221
  anc = hab.interact(data=[rseal])
222
222
 
223
- aserder = serdering.SerderKERI(raw=anc) # coring.Serder(raw=anc)
223
+ aserder = serdering.SerderKERI(raw=anc)
224
224
  self.credentialer.issue(self.creder, iserder)
225
225
  self.registrar.issue(self.creder, iserder, aserder)
226
226
 
@@ -132,7 +132,7 @@ class RegistryInceptor(doing.DoDoer):
132
132
  else:
133
133
  anc = hab.interact(data=[rseal])
134
134
 
135
- aserder = serdering.SerderKERI(raw=bytes(anc)) # coring.Serder(raw=bytes(anc))
135
+ aserder = serdering.SerderKERI(raw=bytes(anc))
136
136
  self.registrar.incept(iserder=registry.vcp, anc=aserder)
137
137
 
138
138
  if isinstance(hab, GroupHab):
@@ -16,7 +16,6 @@ from hio.help import Hict
16
16
  from keri.app import httping, connecting
17
17
  from keri.app.agenting import httpClient
18
18
  from keri.app.cli.common import existing
19
- from keri.app.httping import CESR_CONTENT_TYPE
20
19
  from keri.core import coring
21
20
 
22
21
  logger = help.ogler.getLogger()
@@ -32,6 +31,8 @@ parser.add_argument('--base', '-b', help='additional optional prefix to file loc
32
31
  parser.add_argument('--passcode', '-p', help='22 character encryption passcode for keystore (is not saved)',
33
32
  dest="bran", default=None) # passcode => bran
34
33
  parser.add_argument("--witness", '-w', help="the witness AID or alias to authenticate against", required=True)
34
+ parser.add_argument("--url-only", '-u', dest="url", help="display only the URL (no QR Code).", required=False,
35
+ action="store_true")
35
36
 
36
37
 
37
38
  def auth(args):
@@ -46,16 +47,18 @@ def auth(args):
46
47
  alias=args.alias,
47
48
  base=args.base,
48
49
  bran=args.bran,
49
- witness=args.witness)
50
+ witness=args.witness,
51
+ urlOnly=args.url)
50
52
  return [ed]
51
53
 
52
54
 
53
55
  class AuthDoer(doing.DoDoer):
54
56
 
55
- def __init__(self, name, alias, base, bran, witness):
57
+ def __init__(self, name, alias, base, bran, witness, urlOnly):
56
58
  self.hby = existing.setupHby(name=name, base=base, bran=bran)
57
59
  self.hab = self.hby.habByName(alias)
58
60
  self.org = connecting.Organizer(hby=self.hby)
61
+ self.urlOnly = urlOnly
59
62
 
60
63
  if witness in self.hby.kevers:
61
64
  wit = witness
@@ -94,9 +97,17 @@ class AuthDoer(doing.DoDoer):
94
97
  for msg in self.hab.db.clonePreIter(pre=self.hab.pre):
95
98
  body.extend(msg)
96
99
 
100
+ fargs = dict([("kel", body.decode("utf-8"))])
101
+
102
+ if self.hab.kever.delegated:
103
+ delkel = bytearray()
104
+ for msg in self.hab.db.clonePreIter(self.hab.kever.delpre):
105
+ delkel.extend(msg)
106
+
107
+ fargs['delkel'] = delkel.decode("utf-8")
108
+
97
109
  headers = (Hict([
98
- ("Content-Type", "application/cesr"),
99
- ("Content-Length", len(body)),
110
+ ("Content-Type", "multipart/form-data")
100
111
  ]))
101
112
 
102
113
  client, clientDoer = httpClient(self.hab, self.witness)
@@ -106,7 +117,7 @@ class AuthDoer(doing.DoDoer):
106
117
  method="POST",
107
118
  path=f"{client.requester.path}/aids",
108
119
  headers=headers,
109
- body=bytes(body)
120
+ fargs=fargs
110
121
  )
111
122
  while not client.responses:
112
123
  yield self.tock
@@ -120,10 +131,12 @@ class AuthDoer(doing.DoDoer):
120
131
  d = coring.Matter(qb64=self.hab.decrypt(m.raw))
121
132
  otpurl = f"otpauth://totp/KERIpy:{self.witness}?secret={d.raw.decode('utf-8')}&issuer=KERIpy"
122
133
 
123
- qr = qrcode.QRCode()
124
- qr.add_data(otpurl)
134
+ if not self.urlOnly:
135
+ qr = qrcode.QRCode()
136
+ qr.add_data(otpurl)
137
+
138
+ qr.print_ascii()
125
139
 
126
- qr.print_ascii()
127
140
  print(otpurl)
128
141
 
129
142
  else:
@@ -28,4 +28,6 @@ def addInceptingArgs(parser):
28
28
  help='only allow establishment events in KEL for this prefix')
29
29
  parser.add_argument('--data', '-d', default=None, required=False, action="store",
30
30
  help='Anchor data, \'@\' allowed',)
31
+ parser.add_argument('--delpre', '-di', default=None, required=False, action="store",
32
+ help='Delegator AID for delegated identfiers',)
31
33
 
@@ -28,7 +28,7 @@ class Anchorer(doing.DoDoer):
28
28
 
29
29
  """
30
30
 
31
- def __init__(self, hby, proxy=None, **kwa):
31
+ def __init__(self, hby, proxy=None, auths=None, **kwa):
32
32
  """
33
33
  For the current event, gather the current set of witnesses, send the event,
34
34
  gather all receipts and send them to all other witnesses
@@ -45,11 +45,12 @@ class Anchorer(doing.DoDoer):
45
45
  self.witq = agenting.WitnessInquisitor(hby=hby)
46
46
  self.witDoer = agenting.Receiptor(hby=self.hby)
47
47
  self.proxy = proxy
48
+ self.auths = auths
48
49
 
49
50
  super(Anchorer, self).__init__(doers=[self.witq, self.witDoer, self.postman, doing.doify(self.escrowDo)],
50
51
  **kwa)
51
52
 
52
- def delegation(self, pre, sn=None, proxy=None):
53
+ def delegation(self, pre, sn=None, proxy=None, auths=None):
53
54
  if pre not in self.hby.habs:
54
55
  raise kering.ValidationError(f"{pre} is not a valid local AID for delegation")
55
56
 
@@ -63,13 +64,14 @@ class Anchorer(doing.DoDoer):
63
64
  raise kering.ValidationError(f"delegator {delpre} not found, unable to process delegation")
64
65
 
65
66
  sn = sn if sn is not None else hab.kever.sner.num
67
+ self.auths = auths if auths is not None else self.auths
66
68
 
67
69
  # load the event and signatures
68
70
  evt = hab.makeOwnEvent(sn=sn)
69
71
 
70
72
  # Send exn message for notification purposes
71
73
  srdr = serdering.SerderKERI(raw=evt)
72
- self.witDoer.msgs.append(dict(pre=pre, sn=srdr.sn))
74
+ self.witDoer.msgs.append(dict(pre=pre, sn=srdr.sn, auths=self.auths))
73
75
  self.hby.db.dpwe.pin(keys=(srdr.pre, srdr.said), val=srdr)
74
76
 
75
77
  def complete(self, prefixer, seqner, saider=None):
@@ -275,7 +275,7 @@ def multisigInceptExn(hab, smids, rmids, icp, delegator=None):
275
275
 
276
276
  """
277
277
  rmids = rmids if rmids is not None else smids
278
- serder = serdering.SerderKERI(raw=icp) # coring.Serder(raw=icp)
278
+ serder = serdering.SerderKERI(raw=icp)
279
279
  data = dict(
280
280
  gid=serder.pre,
281
281
  smids=smids,
@@ -585,7 +585,7 @@ class Multiplexor:
585
585
  events so that any addition signatures can be processed.
586
586
 
587
587
  Parameters:
588
- serder (coring.Serder): peer-to-peer exn "/multisig" message to coordinate from other participants
588
+ serder (serdering.SerderKERI): peer-to-peer exn "/multisig" message to coordinate from other participants
589
589
 
590
590
  Returns:
591
591
 
@@ -662,7 +662,7 @@ class Multiplexor:
662
662
  ims.extend(atc)
663
663
 
664
664
  # ... and parse
665
- self.psr.parse(ims=ims)
665
+ self.psr.parse(ims=ims, local=True)
666
666
 
667
667
  else:
668
668
  # Should we prod the user with another submission if we haven't already approved it?