diff --git a/src/dkr/app/cli/commands/did/keri/resolve.py b/src/dkr/app/cli/commands/did/keri/resolve.py index 818fd32..6f34541 100644 --- a/src/dkr/app/cli/commands/did/keri/resolve.py +++ b/src/dkr/app/cli/commands/did/keri/resolve.py @@ -28,25 +28,25 @@ dest="bran", default=None) # passcode => bran parser.add_argument("--did", "-d", help="DID to resolve (did:keri method)", required=True) parser.add_argument("--oobi", "-o", help="OOBI to use for resolving the DID", required=False) -parser.add_argument("--metadata", "-m", help="Whether to include metadata (True), or only return the DID document (False)", type=bool, required=False, default=None) +parser.add_argument("--meta", "-m", help="Whether to include metadata (True), or only return the DID document (False)", type=bool, required=False, default=None) def handler(args): hby = existing.setupHby(name=args.name, base=args.base, bran=args.bran) hbyDoer = habbing.HaberyDoer(habery=hby) # setup doer obl = oobiing.Oobiery(hby=hby) - res = KeriResolver(hby=hby, hbyDoer=hbyDoer, obl=obl, did=args.did, oobi=args.oobi, metadata=args.metadata) + res = KeriResolver(hby=hby, hbyDoer=hbyDoer, obl=obl, did=args.did, oobi=args.oobi, meta=args.meta) return [res] class KeriResolver(doing.DoDoer): - def __init__(self, hby, hbyDoer, obl, did, oobi, metadata): + def __init__(self, hby, hbyDoer, obl, did, oobi, meta): self.hby = hby self.did = did self.oobi = oobi - self.metadata = metadata + self.meta = meta self.toRemove = [hbyDoer] + obl.doers doers = list(self.toRemove) + [doing.doify(self.resolve)] @@ -68,9 +68,9 @@ def resolve(self, tymth, tock=0.0, **opts): while self.hby.db.roobi.get(keys=(self.oobi,)) is None: _ = yield tock - didresult = didding.generateDIDDoc(self.hby, did=self.did, aid=aid, oobi=self.oobi, metadata=True) + didresult = didding.generateDIDDoc(self.hby, did=self.did, aid=aid, oobi=self.oobi, meta=True) dd = didresult[didding.DD_FIELD] - result = didresult if self.metadata else dd + result = didresult if self.meta else dd data = json.dumps(result, indent=2) print(data) diff --git a/src/dkr/app/cli/commands/did/webs/generate.py b/src/dkr/app/cli/commands/did/webs/generate.py index 68b4b69..fc5eea5 100644 --- a/src/dkr/app/cli/commands/did/webs/generate.py +++ b/src/dkr/app/cli/commands/did/webs/generate.py @@ -108,7 +108,7 @@ def generate(self, tymth, tock=0.0, **opts): kcf.write(tmsg) #generate did doc - result = didding.generateDIDDoc(self.hby, did=self.did, aid=aid, oobi=None, reg_name=self.da_reg, metadata=self.meta) + result = didding.generateDIDDoc(self.hby, did=self.did, aid=aid, oobi=None, reg_name=self.da_reg, meta=self.meta) diddoc = result if(self.meta): diff --git a/src/dkr/app/cli/commands/did/webs/resolve.py b/src/dkr/app/cli/commands/did/webs/resolve.py index 3a07424..4f6ad5a 100644 --- a/src/dkr/app/cli/commands/did/webs/resolve.py +++ b/src/dkr/app/cli/commands/did/webs/resolve.py @@ -23,24 +23,24 @@ parser.add_argument('--passcode', help='22 character encryption passcode for keystore (is not saved)', dest="bran", default=None) # passcode => bran parser.add_argument("--did", "-d", help="DID to resolve", required=True) -parser.add_argument("--metadata", "-m", help="Whether to include metadata (True), or only return the DID document (False)", type=bool, required=False, default=None) +parser.add_argument("--meta", "-m", help="Whether to include metadata (True), or only return the DID document (False)", type=bool, required=False, default=None) def handler(args): hby = existing.setupHby(name=args.name, base=args.base, bran=args.bran) hbyDoer = habbing.HaberyDoer(habery=hby) # setup doer obl = oobiing.Oobiery(hby=hby) - res = WebsResolver(hby=hby, hbyDoer=hbyDoer, obl=obl, did=args.did, metadata=args.metadata) + res = WebsResolver(hby=hby, hbyDoer=hbyDoer, obl=obl, did=args.did, meta=args.meta) return [res] class WebsResolver(doing.DoDoer): - def __init__(self, hby, hbyDoer, obl, did, metadata): + def __init__(self, hby, hbyDoer, obl, did, meta): self.hby = hby self.did = did - self.metadata = metadata + self.meta = meta self.toRemove = [hbyDoer] + obl.doers doers = list(self.toRemove) + [doing.doify(self.resolve)] @@ -51,6 +51,6 @@ def resolve(self, tymth, tock=0.125, **opts): self.tock = tock _ = (yield self.tock) - resolving.resolve(hby=self.hby, did=self.did, metadata=self.metadata) + resolving.resolve(hby=self.hby, did=self.did, meta=self.meta) self.remove(self.toRemove) \ No newline at end of file diff --git a/src/dkr/core/didding.py b/src/dkr/core/didding.py index 831cd15..96ec8cd 100644 --- a/src/dkr/core/didding.py +++ b/src/dkr/core/didding.py @@ -60,10 +60,10 @@ def parseDIDWebs(did): return domain, port, path, aid -def generateDIDDoc(hby: habbing.Habery, did, aid, oobi=None, metadata=False, reg_name=None): +def generateDIDDoc(hby: habbing.Habery, did, aid, oobi=None, meta=False, reg_name=None): if (did and aid) and not did.endswith(aid): raise ValueError(f"{did} does not end with {aid}") - print("Generating DID document for", did, "with aid", aid, "using oobi", oobi, "and metadata", metadata, "registry name for creds", reg_name) + print("Generating DID document for", did, "with aid", aid, "using oobi", oobi, "and metadata", meta, "registry name for creds", reg_name) hab = None if aid in hby.habs: @@ -178,7 +178,7 @@ def generateDIDDoc(hby: habbing.Habery, did, aid, oobi=None, metadata=False, reg alsoKnownAs=aka_ids ) - if metadata is True: + if meta is True: resolutionResult = dict( didDocument=diddoc, didResolutionMetadata=didResolutionMetadata, diff --git a/src/dkr/core/resolving.py b/src/dkr/core/resolving.py index fe12c2d..a9a2a68 100644 --- a/src/dkr/core/resolving.py +++ b/src/dkr/core/resolving.py @@ -53,7 +53,7 @@ def saveCesr(hby: habbing.Habery, kc_res: requests.Response, aid: str = None): assert aid in hby.kevers, f"KERI CESR parsing failed, KERI AID {aid} not found in habery" def getComp(hby: habbing.Habery, did: str, aid: str, dd_res: requests.Response, kc_res: requests.Response): - dd = didding.generateDIDDoc(hby, did=did, aid=aid, oobi=None, metadata=True) + dd = didding.generateDIDDoc(hby, did=did, aid=aid, oobi=None, meta=True) dd[didding.DD_META_FIELD]['didDocUrl'] = dd_res.url dd[didding.DD_META_FIELD]['keriCesrUrl'] = kc_res.url @@ -62,7 +62,7 @@ def getComp(hby: habbing.Habery, did: str, aid: str, dd_res: requests.Response, return dd, dd_actual -def verify(dd, dd_actual, metadata: bool = False): +def verify(dd, dd_actual, meta: bool = False): dd_exp = dd if didding.DD_FIELD in dd_exp: dd_exp = dd[didding.DD_FIELD] @@ -71,7 +71,7 @@ def verify(dd, dd_actual, metadata: bool = False): result = None if verified: - result = dd if metadata else dd[didding.DD_FIELD] + result = dd if meta else dd[didding.DD_FIELD] print(f"DID verified") else: didresult = dict() @@ -145,11 +145,11 @@ def _compare_dicts(expected, actual, path=""): if expected != actual: print(f"Different values for key {path}: {expected} (expected) vs. {actual} (actual)", file=sys.stderr) -def resolve(hby, did, metadata=False, resq: queue.Queue = None): +def resolve(hby, did, meta=False, resq: queue.Queue = None): aid, dd_res, kc_res = getSrcs(did=did, resq=resq) saveCesr(hby=hby,kc_res=kc_res, aid=aid) dd, dd_actual = getComp(hby=hby, did=did, aid=aid, dd_res=dd_res, kc_res=kc_res) - vresult = verify(dd, dd_actual, metadata=metadata) + vresult = verify(dd, dd_actual, meta=meta) print("Resolution result: ", vresult) return vresult @@ -225,7 +225,7 @@ def __init__(self, hby, hbyDoer, obl): super(ResolveResource, self).__init__(doers=[]) print(f"Init resolver endpoint") - def on_get(self, req, rep, did): + def on_get(self, req, rep, did, meta=False): print(f"Request to resolve did: {did}") if did is None: @@ -239,20 +239,18 @@ def on_get(self, req, rep, did): else: oobi = None - metadata = False - if did.startswith('did:webs:'): #res = WebsResolver(hby=self.hby, hbyDoer=self.hbyDoer, obl=self.obl, did=did) #tymth = None # ??? #data = res.resolve(tymth) - cmd = f"dkr did webs resolve --name dkr --did {did} --metadata {metadata}" + cmd = f"dkr did webs resolve --name dkr --did {did} --meta {meta}" stream = os.popen(cmd) data = stream.read() elif did.startswith('did:keri'): #res = KeriResolver(hby=self.hby, hbyDoer=self.hbyDoer, obl=self.obl, did=did, oobi=oobi, metadata=False) #tymth = None # ??? #data = res.resolve(tymth) - cmd = f"dkr did keri resolve --name dkr --did {did} --oobi {oobi} --metadata {metadata}" + cmd = f"dkr did keri resolve --name dkr --did {did} --oobi {oobi} --meta {meta}" stream = os.popen(cmd) data = stream.read() else: diff --git a/tests/dkr/app/cli/commands/did/webs/test_resolve.py b/tests/dkr/app/cli/commands/did/webs/test_resolve.py index b1dc3cd..d43ca36 100644 --- a/tests/dkr/app/cli/commands/did/webs/test_resolve.py +++ b/tests/dkr/app/cli/commands/did/webs/test_resolve.py @@ -166,18 +166,18 @@ def on_get(self, req, resp): # assert dd[didding.DD_FIELD][didding.VMETH_FIELD] == dd_actual[didding.VMETH_FIELD] # # no metadata -# vresult = resolving.verify(dd, dd_actual, metadata=False) +# vresult = resolving.verify(dd, dd_actual, meta=False) # assert vresult[didding.VMETH_FIELD] == dd[didding.DD_FIELD][didding.VMETH_FIELD] # # metadata -# vresult = resolving.verify(dd, dd_actual, metadata=True) +# vresult = resolving.verify(dd, dd_actual, meta=True) # assert vresult[didding.DD_FIELD][didding.VMETH_FIELD] == dd[didding.DD_FIELD][didding.VMETH_FIELD] # # should not verify # dd_actual_bad = dd_actual # # remove the last character of the id # dd_actual_bad[didding.VMETH_FIELD][0]["id"] = dd_actual_bad[didding.VMETH_FIELD][0]["id"][:-1] -# vresult = resolving.verify(dd, dd_actual_bad, metadata=True) +# vresult = resolving.verify(dd, dd_actual_bad, meta=True) # assert vresult[didding.DID_RES_META_FIELD]['error'] == 'notVerified' # # TODO test services, alsoKnownAs, etc. diff --git a/tests/dkr/core/test_didding.py b/tests/dkr/core/test_didding.py index 1340fe0..7fc3ee1 100644 --- a/tests/dkr/core/test_didding.py +++ b/tests/dkr/core/test_didding.py @@ -156,7 +156,7 @@ def test_parse_web_did(): def test_gen_did_doc(setup_habs): hby, hab, wesHby, wesHab = setup_habs - didDoc = didding.generateDIDDoc(hby, did, hab.pre, oobi=None, metadata=False) + didDoc = didding.generateDIDDoc(hby, did, hab.pre, oobi=None, meta=False) assert ( didDoc["id"] == f"{did}" @@ -204,9 +204,9 @@ def test_gen_did_doc(setup_habs): } -def test_gen_did_doc_with_metadata(setup_habs): +def test_gen_did_doc_with_meta(setup_habs): hby, hab, wesHby, wesHab = setup_habs - didDoc = didding.generateDIDDoc(hby, did, hab.pre, oobi=None, metadata=True) + didDoc = didding.generateDIDDoc(hby, did, hab.pre, oobi=None, meta=True) assert ( didDoc[didding.DD_FIELD]["id"] == f"{did}" @@ -264,14 +264,14 @@ def test_gen_did_doc_no_hab(setup_habs): did = f"did:web:did-webs-service%3a7676:{aid}" try: - didDoc = didding.generateDIDDoc(hby, did, aid, oobi=None, metadata=False) + didDoc = didding.generateDIDDoc(hby, did, aid, oobi=None, meta=False) except KeyError as e: assert str(e) == f"'{aid}'" msgs = resolving.loadFile(f"./volume/dkr/pages/{aid}/keri.cesr") hby.psr.parse(ims=msgs) - didDoc = didding.generateDIDDoc(hby, did, aid, oobi=None, metadata=False) + didDoc = didding.generateDIDDoc(hby, did, aid, oobi=None, meta=False) expected = resolving.loadJsonFile(f"./volume/dkr/pages/{aid}/did.json") @@ -290,7 +290,7 @@ def test_gen_desig_aliases(setup_habs, seeder): ) didDoc = didding.generateDIDDoc( - hby, did, hab.pre, oobi=None, metadata=True, reg_name=crdntler.rgy.name + hby, did, hab.pre, oobi=None, meta=True, reg_name=crdntler.rgy.name ) assert ( didDoc[didding.DD_FIELD]["id"] @@ -339,7 +339,7 @@ def test_gen_desig_aliases_revoked(setup_habs, seeder): revoke_cred(hab, crdntler.rgy, crdntler.rgy.registryByName("dAliases"), creds[0]) didDoc = didding.generateDIDDoc( - hby, did, hab.pre, oobi=None, metadata=True + hby, did, hab.pre, oobi=None, meta=True ) assert ( didDoc[didding.DD_FIELD]["id"] diff --git a/volume/dkr/examples/get_started_docker.sh b/volume/dkr/examples/get_started_docker.sh index ac83195..801b297 100755 --- a/volume/dkr/examples/get_started_docker.sh +++ b/volume/dkr/examples/get_started_docker.sh @@ -20,7 +20,7 @@ echo "" echo "ATTENTION: In your did-webs-service, start the webs server first, see the GETTING_STARTED.md for those instructions" read -p "Press enter to resolve did:webs..." -dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe" +dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe" --meta True echo "" read -p "Press enter to create designated aliases..." @@ -47,4 +47,4 @@ cp -R ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe ../pages/ echo "" read -p "Press enter to resolve did:webs with designated aliases..." -dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe" \ No newline at end of file +dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe" --meta True \ No newline at end of file diff --git a/volume/dkr/examples/get_started_docker_resolve.sh b/volume/dkr/examples/get_started_docker_resolve.sh index 044d047..3630feb 100755 --- a/volume/dkr/examples/get_started_docker_resolve.sh +++ b/volume/dkr/examples/get_started_docker_resolve.sh @@ -32,6 +32,6 @@ fi DID="did:webs:did-webs-service%3a7676:$AID" echo "Resolving $AID did:webs $DID... " -source "./get_started_webs_resolve.sh" "${NAME}" "${DID}" +source "./get_started_webs_resolve.sh" "${NAME}" "${DID}" "True" diff --git a/volume/dkr/examples/get_started_docker_wits.sh b/volume/dkr/examples/get_started_docker_wits.sh index 6f4c9e8..39f05fe 100755 --- a/volume/dkr/examples/get_started_docker_wits.sh +++ b/volume/dkr/examples/get_started_docker_wits.sh @@ -25,7 +25,7 @@ echo "" echo "ATTENTION: In your did-webs-service, start the webs server first, see the GETTING_STARTED.md for those instructions" read -p "Press enter to resolve did:webs..." -dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:$AID" +dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:$AID" --meta True echo "" read -p "Press enter to create designated aliases..." @@ -52,4 +52,4 @@ cp -R $AID ../pages/ echo "" read -p "Press enter to resolve did:webs with designated aliases..." -dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:$AID" \ No newline at end of file +dkr did webs resolve --name controller --did "did:webs:did-webs-service%3a7676:$AID" --meta True \ No newline at end of file diff --git a/volume/dkr/examples/get_started_webs_resolve.sh b/volume/dkr/examples/get_started_webs_resolve.sh index 37abbf5..8267243 100755 --- a/volume/dkr/examples/get_started_webs_resolve.sh +++ b/volume/dkr/examples/get_started_webs_resolve.sh @@ -4,6 +4,8 @@ ctrlName=$1 # did did=$2 +# metadata +meta=$3 # generate controller did:webs for EKYGGh-FtAphGmSZbsuBs_t4qpsjYJ2ZqvMKluq9OxmP at labs.hyperledger.org -dkr did webs resolve --name "${ctrlName}" --did "${did}" +dkr did webs resolve --name "${ctrlName}" --did "${did}" --meta "${meta}" diff --git a/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/did.json b/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/did.json index 622f4f4..974d1c4 100644 --- a/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/did.json +++ b/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/did.json @@ -1 +1 @@ -{"id": "did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "verificationMethod": [{"id": "#DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr", "type": "JsonWebKey", "controller": "did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "publicKeyJwk": {"kid": "DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr", "kty": "OKP", "crv": "Ed25519", "x": "evT4j6Yw3uHpwsw5NEmSR8-4x3S-BA-s6Thjd51oeOs"}}], "service": [], "alsoKnownAs": []} \ No newline at end of file +{"id": "did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "verificationMethod": [{"id": "#DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr", "type": "JsonWebKey", "controller": "did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "publicKeyJwk": {"kid": "DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr", "kty": "OKP", "crv": "Ed25519", "x": "evT4j6Yw3uHpwsw5NEmSR8-4x3S-BA-s6Thjd51oeOs"}}], "service": [], "alsoKnownAs": ["did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "did:web:example.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "did:web:foo.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe", "did:webs:foo.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe"]} \ No newline at end of file diff --git a/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/keri.cesr b/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/keri.cesr index 64c2068..74988cd 100644 --- a/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/keri.cesr +++ b/volume/dkr/pages/ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe/keri.cesr @@ -1 +1 @@ -{"v":"KERI10JSON00012b_","t":"icp","d":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","i":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","s":"0","kt":"1","k":["DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr"],"nt":"1","n":["ELa775aLyane1vdiJEuexP8zrueiIoG995pZPGJiBzGX"],"bt":"0","b":[],"c":[],"a":[]}-VAn-AABAADjfOjbPu9OWce59OQIc-y3Su4kvfC2BAd_e_NLHbXcOK8-3s6do5vBfrxQ1kDyvFGCPMcSl620dLMZ4QDYlvME-EAB0AAAAAAAAAAAAAAAAAAAAAAA1AAG2024-03-06T14c48c10d241878p00c00 \ No newline at end of file +{"v":"KERI10JSON00012b_","t":"icp","d":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","i":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","s":"0","kt":"1","k":["DHr0-I-mMN7h6cLMOTRJkkfPuMd0vgQPrOk4Y3edaHjr"],"nt":"1","n":["ELa775aLyane1vdiJEuexP8zrueiIoG995pZPGJiBzGX"],"bt":"0","b":[],"c":[],"a":[]}-VAn-AABAADjfOjbPu9OWce59OQIc-y3Su4kvfC2BAd_e_NLHbXcOK8-3s6do5vBfrxQ1kDyvFGCPMcSl620dLMZ4QDYlvME-EAB0AAAAAAAAAAAAAAAAAAAAAAA1AAG2024-04-01T17c40c48d329209p00c00{"v":"KERI10JSON00013a_","t":"ixn","d":"ED-4iQIVxwMcrTOW6fVs9oPpLTIxtqh_vcvLmE999zsU","i":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","s":"1","p":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","a":[{"i":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx","s":"0","d":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx"}]}-VAn-AABAACNra5mDg7YHFtBeXiwIGqnHkyq7F55FGNYG1wH95akjSWCb1HzNI3E05ufT0HffClDxnJF_DmAUW2SBb0EJeoO-EAB0AAAAAAAAAAAAAAAAAAAAAAB1AAG2024-04-01T17c42c37d704426p00c00{"v":"KERI10JSON00013a_","t":"ixn","d":"EBjw0a_L8M0F4xYND99dvahlrkpxODi9Wc9VzUvkhD0t","i":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","s":"2","p":"ED-4iQIVxwMcrTOW6fVs9oPpLTIxtqh_vcvLmE999zsU","a":[{"i":"EIGWggWL2IHiUzj1P2YuPA0-Uh55LTIu14KTvVQGrfvT","s":"0","d":"EJQvCZQYn8oO1z3_f8qhxXjk7TcLol4G3RdHVTwfGV3L"}]}-VAn-AABAABo_okwAmWIYWI93EtUONZiEvsGuSRkKnj0mopX_RoXwWHZ_1V5hQ0BxcntsmAi21DbusyCmK-fHwTNtSxUSsoN-EAB0AAAAAAAAAAAAAAAAAAAAAAC1AAG2024-04-01T17c42c39d995867p00c00{"v":"KERI10JSON000113_","t":"vcp","d":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx","i":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx","ii":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","s":"0","c":["NB"],"bt":"0","b":[],"n":"AAfqHwMDdBoIWk_4Z6hvVJuhtvjA_gk8Y9bEUoP_rC_p"}-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAABED-4iQIVxwMcrTOW6fVs9oPpLTIxtqh_vcvLmE999zsU{"v":"KERI10JSON0000ed_","t":"iss","d":"EJQvCZQYn8oO1z3_f8qhxXjk7TcLol4G3RdHVTwfGV3L","i":"EIGWggWL2IHiUzj1P2YuPA0-Uh55LTIu14KTvVQGrfvT","s":"0","ri":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx","dt":"2023-11-13T17:41:37.710691+00:00"}-VAS-GAB0AAAAAAAAAAAAAAAAAAAAAACEBjw0a_L8M0F4xYND99dvahlrkpxODi9Wc9VzUvkhD0t{"v":"ACDC10JSON0005f2_","d":"EIGWggWL2IHiUzj1P2YuPA0-Uh55LTIu14KTvVQGrfvT","i":"ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","ri":"EAtQJEQMkkvlWxyfLbcLyv4kNeAI5Qsqe65vKIWnHKpx","s":"EN6Oh5XSD5_q2Hgu-aqpdfbVepdpYpFlgz6zvJL5b_r5","a":{"d":"EJJjtYa6D4LWe_fqtm1p78wz-8jNAzNX6aPDkrQcz27Q","dt":"2023-11-13T17:41:37.710691+00:00","ids":["did:web:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","did:webs:did-webs-service%3a7676:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","did:web:example.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","did:web:foo.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe","did:webs:foo.com:ENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe"]},"r":{"d":"EEVTx0jLLZDQq8a5bXrXgVP0JDP7j8iDym9Avfo8luLw","aliasDesignation":{"l":"The issuer of this ACDC designates the identifiers in the ids field as the only allowed namespaced aliases of the issuer's AID."},"usageDisclaimer":{"l":"This attestation only asserts designated aliases of the controller of the AID, that the AID controlled namespaced alias has been designated by the controller. It does not assert that the controller of this AID has control over the infrastructure or anything else related to the namespace other than the included AID."},"issuanceDisclaimer":{"l":"All information in a valid and non-revoked alias designation assertion is accurate as of the date specified."},"termsOfUse":{"l":"Designated aliases of the AID must only be used in a manner consistent with the expressed intent of the AID controller."}}}-VA0-FABENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe0AAAAAAAAAAAAAAAAAAAAAAAENro7uf0ePmiK3jdTo2YCdXLqW7z7xoP6qhhBou6gBLe-AABAADQOX208DAmZEPb2v0XXF0N6WgxOdOxB3AsCBJds_vbAr7v1PQBA4MWNsXc8unk5UykbB8j538XGkzLtujekvIP \ No newline at end of file