Skip to content

Commit a1a9b02

Browse files
authored
fix: pass smids and rmids to SignifyGroupHab rotate (WebOfTrust#243)
* fix: pass smids and rmids to SignifyGroupHab rotate * test: group signify rotation and retention of smids, rmids in db layer
1 parent 5bdc473 commit a1a9b02

File tree

2 files changed

+68
-5
lines changed

2 files changed

+68
-5
lines changed

src/keria/app/aiding.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -568,9 +568,9 @@ def rotate(agent, name, body):
568568
serder = serdering.SerderKERI(sad=rot)
569569
sigers = [core.Siger(qb64=sig) for sig in sigs]
570570

571-
hab.rotate(serder=serder, sigers=sigers)
572-
573571
if Algos.salty in body:
572+
hab.rotate(serder=serder, sigers=sigers)
573+
574574
salt = body[Algos.salty]
575575
keeper = agent.mgr.get(Algos.salty)
576576

@@ -581,19 +581,23 @@ def rotate(agent, name, body):
581581
raise falcon.HTTPInternalServerError(description=f"{e.args[0]}")
582582

583583
elif Algos.randy in body:
584+
hab.rotate(serder=serder, sigers=sigers)
585+
584586
rand = body[Algos.randy]
585587
keeper = agent.mgr.get(Algos.randy)
586588

587589
keeper.rotate(pre=serder.pre, verfers=serder.verfers, digers=serder.ndigers, **rand)
588590

589591
elif Algos.group in body:
592+
smids = httping.getRequiredParam(body, "smids")
593+
rmids = httping.getRequiredParam(body, "rmids")
594+
595+
hab.rotate(serder=serder, sigers=sigers, smids=smids, rmids=rmids)
596+
590597
keeper = agent.mgr.get(Algos.group)
591598

592599
keeper.rotate(pre=serder.pre, verfers=serder.verfers, digers=serder.ndigers)
593600

594-
smids = httping.getRequiredParam(body, "smids")
595-
rmids = httping.getRequiredParam(body, "rmids")
596-
597601
agent.groups.append(dict(pre=hab.pre, serder=serder, sigers=sigers, smids=smids, rmids=rmids))
598602
op = agent.monitor.submit(serder.pre, longrunning.OpTypes.group, metadata=dict(sn=serder.sn))
599603

tests/app/test_aiding.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,8 @@ def test_identifier_collection_end(helpers):
355355

356356
keys = [signer.verfer.qb64 for signer in signers]
357357
ndigs = [coring.Diger(ser=nsigner.verfer.qb64b) for nsigner in nsigners]
358+
signer1 = signers[0]
359+
diger1 = ndigs[0]
358360

359361
serder = eventing.rotate(pre=res.json[0]["prefix"],
360362
keys=keys,
@@ -646,6 +648,63 @@ def test_identifier_collection_end(helpers):
646648
rotation = res.json["rotation"]
647649
assert len(rotation) == 3
648650

651+
# Test group rotation
652+
p1.rotate()
653+
p2.rotate()
654+
655+
keys = [signer1.verfer.qb64, p1.kever.verfers[0].qb64, p2.kever.verfers[0].qb64]
656+
ndigs = [diger1.qb64, p1.kever.ndigers[0].qb64, p2.kever.ndigers[0].qb64]
657+
658+
rserder = eventing.rotate(pre=serder.pre,
659+
dig=serder.said,
660+
keys=keys,
661+
ndigs=ndigs,
662+
isith="2",
663+
nsith="2")
664+
665+
sigers = [signer1.sign(ser=rserder.raw, index=0).qb64,
666+
p1.sign(ser=rserder.raw, indices=[1])[0].qb64,
667+
p2.sign(ser=rserder.raw, indices=[2])[0].qb64]
668+
smids = rmids = [agent0.get('i'), p1.pre, p2.pre]
669+
670+
body = {
671+
'rot': rserder.ked,
672+
'sigs': sigers,
673+
'smids': smids,
674+
'rmids': rmids,
675+
'group': {
676+
'mhab': mhab,
677+
'keys': keys,
678+
'ndigs': ndigs
679+
}
680+
}
681+
682+
res = client.simulate_post(path="/identifiers/multisig/events", body=json.dumps(body))
683+
assert res.status_code == 200
684+
685+
# Make sure keys got rotated
686+
res = client.simulate_get(path="/identifiers")
687+
assert res.status_code == 200
688+
assert len(res.json) == 3
689+
aid = res.json[2]
690+
assert aid["name"] == "multisig"
691+
assert aid["prefix"] == rserder.pre
692+
group = aid["group"]
693+
694+
assert group["keys"] == ['DKy7HNSig5OuFOfXKq85H_R35KA6TqjRnaLKrCl8sYih',
695+
'DNHAT44MX_0kvxXm2JParu_VXDk6_Y3csi22h85ZXklA',
696+
'DFWjujqjGJDJPDTxcCUv5uQ7rfHHVKM8FWIVMrqMM6ib']
697+
assert group["ndigs"] == ['EHTQYGOEz97iOPC_DgEEGncSa1-X-TDiHdGNKQiN_3XJ',
698+
'EGk-woPrFzGCOqPY4eOjpUFMKXXO1QcpaY53FplXqnvr',
699+
'EDubroAsnG8zcvKQcjA-H1nfDVVvoxGy96LsEq0cTFJX']
700+
701+
# Ensure smids and rmids (remain) set
702+
habord = agent.hby.db.habs.get(keys=(rserder.pre,))
703+
assert habord.smids == ['EHgwVwQT15OJvilVvW57HE4w0-GPs_Stj2OFoAHZSysY',
704+
'EBPtjiAY9ITdvScWFGeeCu3Pf6_CFFr57siQqffVt9Of',
705+
'EMYBtOuBKVdp3KdW_QM__pi-UAWfrewlDyiqGcbIbopR']
706+
assert habord.smids == habord.rmids
707+
649708
# Try unknown witness
650709
serder, signers = helpers.incept(salt, "signify:aid", pidx=3,
651710
wits=["BBilc4-L3tFUnfM_wJr4S4OJanAv_VmF_dJNN6vkunkn"],

0 commit comments

Comments
 (0)