diff --git a/plenum/server/plugin/did_plugin/request_handlers/create_security_domain_did.py b/plenum/server/plugin/did_plugin/request_handlers/create_security_domain_did.py index 630e46711..ed32ed15a 100644 --- a/plenum/server/plugin/did_plugin/request_handlers/create_security_domain_did.py +++ b/plenum/server/plugin/did_plugin/request_handlers/create_security_domain_did.py @@ -138,12 +138,45 @@ def fetch_party_key_from_auth_method(self, party_did_id, auth_method): return candidate_key_url def fetch_party_verification_method(self, party_key_url): + + print("hello3") + party_did_id = did_id_from_url(party_key_url) # Fetch party did # TODO: if did is in some other iin network # Will handle later... # If did is in the same indy iin network + ### TODO: did:iin:iin123:shippingcompany -----> DIDDocument: {....} + + json_data = { + "@context": [ + "https://www.w3.org/ns/did/v1", + "https://w3id.org/security/suites/ed25519-2020/v1" + ], + "id": party_did_id, + "verificationMethod": [ + { + "id": f"{party_did_id}#key1", + "type": "libnacl", + "controller": "did:example:123456789abcdefghi", + "publicKeyBase64": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z" + } + ], + "authentication": [ + f"{party_did_id}#key1", + { + "id": f"{party_did_id}#key1", + "type": "libnacl", + "controller": "did:shippingcompany", + "publicKeyBase64": "zH3C2AVvLMv6gmMNam3uVAjZpfkcJCwDwnZn6z" + } + ] + } + json_string = json.dumps(json_data, indent=4) + party_did = DID(json_string) + party_authentication_method = party_did.fetch_authentication(party_key_url) + serialized_party_did = self.this_indy_state.get(party_did_id) # if not serialized_party_did: # raise "Could not resolve did " + party_did_id @@ -203,8 +236,75 @@ def additional_dynamic_validation(self, request: Request, req_pp_time: Optional[ def update_state(self, txn, prev_result, request, is_committed=False): + """ + => The `BlockchainNetworkMultiSig` verification method, and `networkMembers` list must be updated to reflect the new network membership. + - `networkMembers` is updated with the list of DIDs of the new network members. + - A new `update policy` is associated with the `BlockchainNetworkMultiSig` verification method. + + => + """ data = get_payload_data(txn).get(DATA) - create_network_did_request = CreateSDDIDRequest(data, self.state) + # What the hell is `data` + # print("data.....::>", data) + + netwokMembers = [] + multisig_keys = [] + condition_or = [] + signature = {} + sd_did_json = { + "SecurityDomainDIDDocument": { + "id": "did::", + "networkMembers": netwokMembers, + "verificationMethod": [ + { + "id": "did::#multisig", + "type": "BlockchainNetworkMultiSig", + "controller": "did::", + "multisigKeys": multisig_keys, + "updatePolicy": { + "id": "did::#updatepolicy", + "controller": "did::", + "type": "VerifiableCondition2021", + "conditionAnd": [ + { + "id": "did::#updatepolicy-1", + "controller": "did::", + "type": "VerifiableCondition2021", + "conditionOr": condition_or + }, + "did::#key1" + ] + } + }, + { + "id": "did::#fabriccerts", + "type": "DataplaneCredentials", + "controller": "did::", + "FabricCredentials": { + "did::": "Certificate3_Hash", + "did::": "Certificate2_Hash", + "did::": "Certificate3_Hash" + } + } + ], + "authentication": [ + "did::#multisig" + ], + "relayEndpoints": [ + { + "hostname": "10.0.0.8", + "port": "8888" + }, + { + "hostname": "10.0.0.9", + "port": "8888" + } + ] + }, + "signatures": signature + } + sd_did_json_string = json.dumps(sd_did_json) + create_network_did_request = CreateSDDIDRequest(sd_did_json_string, self.state) self.did_dict[create_network_did_request.did.id] = create_network_did_request.did_str key = create_network_did_request.did.id diff --git a/plenum/server/plugin/did_plugin/request_handlers/update_network_did.py b/plenum/server/plugin/did_plugin/request_handlers/update_network_did.py new file mode 100644 index 000000000..4df48efb1 --- /dev/null +++ b/plenum/server/plugin/did_plugin/request_handlers/update_network_did.py @@ -0,0 +1,22 @@ +import libnacl.sign + +from typing import Optional +import json + +from plenum.common.constants import DATA +from plenum.common.request import Request +from common.serializers.serialization import domain_state_serializer +from plenum.common.exceptions import InvalidClientRequest, MissingSignature, InvalidSignature + +from plenum.server.database_manager import DatabaseManager +from plenum.server.plugin.did_plugin.constants import CREATE_NETWORK_DID +from plenum.server.plugin.did_plugin.request_handlers.abstract_did_req_handler import AbstractDIDReqHandler +from plenum.server.plugin.did_plugin.common import DID, NetworkDID, did_id_from_url, libnacl_validate + + +from plenum.common.txn_util import get_payload_data, get_from, \ + get_seq_no, get_txn_time, get_request_data + +import libnacl +import libnacl.encode + diff --git a/plenum/server/plugin/did_plugin/request_handlers/update_policy.json b/plenum/server/plugin/did_plugin/request_handlers/update_policy.json new file mode 100644 index 000000000..97b881c55 --- /dev/null +++ b/plenum/server/plugin/did_plugin/request_handlers/update_policy.json @@ -0,0 +1,67 @@ +{ + "SecurityDomainDIDDocument": { + "id": "did::", + "networkMembers": [ + "did::", + "did::", + "did::" + ], + "verificationMethod": [ + { + "id": "did::#multisig", + "type": "BlockchainNetworkMultiSig", + "controller": "did::", + "multisigKeys": [ + "did::#key1", + "did::#key3", + "did::#key1" + ], + "updatePolicy": { + "id": "did::#updatepolicy", + "controller": "did::", + "type": "VerifiableCondition2021", + "conditionAnd": [ + { + "id": "did::#updatepolicy-1", + "controller": "did::", + "type": "VerifiableCondition2021", + "conditionOr": [ + "did::#key1", + "did::#key3" + ] + }, + "did::#key1" + ] + } + }, + { + "id": "did::#fabriccerts", + "type": "DataplaneCredentials", + "controller": "did::", + "FabricCredentials": { + "did::": "Certificate3_Hash", + "did::": "Certificate2_Hash", + "did::": "Certificate3_Hash" + } + } + ], + "authentication": [ + "did::#multisig" + ], + "relayEndpoints": [ + { + "hostname": "10.0.0.8", + "port": "8888" + }, + { + "hostname": "10.0.0.9", + "port": "8888" + } + ] + }, + "signatures": { + "did::": "...", + "did::": "...", + "did::": "..." + } +} \ No newline at end of file