Esempio n. 1
0
def auth_keys():
    return {
        '#AuthKey1':
        RegisterAuthenticationPublicKey.build('#AuthKey1',
                                              'base58Key1',
                                              revoked=False),
        '#AuthKey2':
        RegisterAuthenticationPublicKey.build('#AuthKey2',
                                              'base58Key2',
                                              revoked=False),
        '#AuthKey3':
        RegisterAuthenticationPublicKey.build('#AuthKey3',
                                              'base58Key3',
                                              revoked=False)
    }
Esempio n. 2
0
    def build_from_dict(self, data: dict) -> RegisterDocument:
        """
        Build a valid immutable register document from dict.
        :param data: register document as dict
        :return: valid register document

        :raises:
            IdentityInvalidDocumentError: if invalid dict data
            IdentityInvalidDocumentError: if invalid document
            IdentityRegisterDocumentKeyConflictError: if key name is not unique
        """
        try:
            for k in data['publicKey']:
                self.add_public_key_obj(RegisterPublicKey.from_dict(k))
            for k in data.get('authentication', []):
                self.add_authentication_key_obj(RegisterAuthenticationPublicKey.from_dict(k))
            for k in data.get('delegateAuthentication', []):
                self.add_authentication_delegation_obj(RegisterDelegationProof.from_dict(k))
            for k in data.get('delegateControl', []):
                self.add_control_delegation_obj(RegisterDelegationProof.from_dict(k))
            raw_controller = data.get('controller')
            controller = Issuer.from_string(raw_controller) if raw_controller else None
            return self.build(data['id'], DIDType(data['ioticsDIDType']), data['proof'], data.get('revoked', False),
                              Metadata.from_dict(data.get('metadata', {})), data.get('creator'),
                              data['ioticsSpecVersion'], data['updateTime'], controller)
        except (TypeError, KeyError, ValueError) as err:
            raise IdentityInvalidDocumentError(f'Can not parse invalid register document: \'{err}\'') from err
Esempio n. 3
0
def get_docs_for_issuer_key_from_auth_keys(
        doc_did: str, issuer: Issuer) -> Dict[str, RegisterDocument]:
    """
    The issuer is directly in the current doc auth keys
    """
    doc = get_doc_with_keys(auth_keys=[
        RegisterAuthenticationPublicKey.build(
            issuer.name, 'base58Key1', revoked=False)
    ])
    return {doc_did: doc}
Esempio n. 4
0
def doc_keys(a_controller):
    return {
        '#pub_key1':
        RegisterPublicKey(name='#pub_key1',
                          base58=get_public_base_58_key(),
                          revoked=False),
        '#pub_key2':
        RegisterPublicKey(name='#pub_key2',
                          base58=get_public_base_58_key(),
                          revoked=True),
        '#auth_key1':
        RegisterAuthenticationPublicKey(name='#auth_key1',
                                        base58=get_public_base_58_key(),
                                        revoked=False),
        '#auth_key2':
        RegisterAuthenticationPublicKey(name='#auth_key2',
                                        base58=get_public_base_58_key(),
                                        revoked=True),
        '#deleg_control_key1':
        RegisterDelegationProof(
            name='#deleg_control_key1',
            controller=a_controller,
            proof='a_deleg_proof_validated_by_the_resolver',
            revoked=False),
        '#deleg_control_key2':
        RegisterDelegationProof(
            name='#deleg_control_key2',
            controller=a_controller,
            proof='a_deleg_proof_validated_by_the_resolver',
            revoked=True),
        '#deleg_auth_key1':
        RegisterDelegationProof(
            name='#deleg_auth_key1',
            controller=a_controller,
            proof='a_deleg_proof_validated_by_the_resolver',
            revoked=False),
        '#deleg_auth_key2':
        RegisterDelegationProof(
            name='#deleg_auth_key2',
            controller=a_controller,
            proof='a_deleg_proof_validated_by_the_resolver',
            revoked=True),
    }
Esempio n. 5
0
def test_can_build_register_auth_key(valid_key_name, valid_public_key_base58):
    key = RegisterAuthenticationPublicKey.build(valid_key_name,
                                                valid_public_key_base58,
                                                revoked=False)
    assert key.name == valid_key_name
    assert key.base58 == valid_public_key_base58
    assert not key.revoked

    assert key.to_dict() == {
        'id': valid_key_name,
        'type': DOCUMENT_AUTHENTICATION_TYPE,
        'publicKeyBase58': valid_public_key_base58,
        'revoked': False
    }
Esempio n. 6
0
    def add_authentication_key(self, name: str, public_base58: str,
                               revoked: Optional[bool] = False) -> 'RegisterDocumentBuilder':
        """
        Add authentication public key to document under build.
        :param name: key name
        :param public_base58: authentication public key base58
        :param revoked: is revoked (default=False)
        :return: self

        :raises:
            IdentityValidationError: if invalid authentication public key
            IdentityRegisterDocumentKeyConflictError: if key name is not unique
        """
        key = RegisterAuthenticationPublicKey.build(name, public_base58, revoked)
        self._check_and_update_map(name, key, self.auth_keys, 'Authentication key name')
        return self
Esempio n. 7
0
def test_build_register_auth_key_from_dict_raises_validation_error_if_invalid_dict(
):
    with pytest.raises(IdentityValidationError):
        RegisterAuthenticationPublicKey.from_dict({'invalid': 'data'})
Esempio n. 8
0
def test_build_register_auth_key_raises_validaion_error_if_invalid_name(
        valid_public_key_base58):
    with pytest.raises(IdentityValidationError):
        RegisterAuthenticationPublicKey.build('Invalid_name',
                                              valid_public_key_base58,
                                              revoked=False)
Esempio n. 9
0
def register_doc_and_deleg_doc(
        doc_did: str,
        deleg_doc_did: str) -> Tuple[RegisterDocument, RegisterDocument]:
    """
    Creates a document and a delegation document with all the key combinations (See KEY_NAMES)
    for the "get issuer from" tests with and without delegation and with and without included authentication
    """
    doc = get_doc_with_keys(
        did=doc_did,
        public_keys=[
            RegisterPublicKey.build(KEYS_NAMES.key_only_in_doc_pub_keys,
                                    'base58Key1',
                                    revoked=False)
        ],
        auth_keys=[
            RegisterAuthenticationPublicKey.build(
                KEYS_NAMES.key_only_in_doc_auth_keys,
                'base58Key2',
                revoked=False)
        ],
        deleg_control=[
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_control_deleg_and_deleg_doc_pub_keys,
                controller=Issuer('deleg_doc_did', '#plop1'),
                proof='aproof',
                revoked=False),
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_control_deleg_and_deleg_doc_auth_keys,
                controller=Issuer('deleg_doc_did', '#plop2'),
                proof='aproof',
                revoked=False),
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_control_deleg_and_not_in_deleg_doc,
                controller=Issuer('deleg_doc_did', '#plop3'),
                proof='aproof',
                revoked=False),
        ],
        deleg_auth=[
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_auth_deleg_and_deleg_doc_pub_keys,
                controller=Issuer('deleg_doc_did', '#plop4'),
                proof='aproof',
                revoked=False),
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_auth_deleg_and_deleg_doc_auth_keys,
                controller=Issuer('deleg_doc_did', '#plop5'),
                proof='aproof',
                revoked=False),
            RegisterDelegationProof.build(
                KEYS_NAMES.key_in_doc_auth_deleg_and_not_in_deleg_doc,
                controller=Issuer('deleg_doc_did', '#plop6'),
                proof='aproof',
                revoked=False),
        ],
    )

    deleg_doc = get_doc_with_keys(
        did=deleg_doc_did,
        public_keys=[
            RegisterPublicKey.build(
                KEYS_NAMES.key_in_doc_control_deleg_and_deleg_doc_pub_keys,
                'base58K11',
                revoked=False),
            RegisterPublicKey.build(
                KEYS_NAMES.key_in_doc_auth_deleg_and_deleg_doc_pub_keys,
                'base58K12',
                revoked=False)
        ],
        auth_keys=[
            RegisterAuthenticationPublicKey.build(
                KEYS_NAMES.key_in_doc_control_deleg_and_deleg_doc_auth_keys,
                'base58K13',
                revoked=False),
            RegisterAuthenticationPublicKey.build(
                KEYS_NAMES.key_in_doc_auth_deleg_and_deleg_doc_auth_keys,
                'base58K14',
                revoked=False)
        ])
    return doc, deleg_doc
Esempio n. 10
0
def test_can_build_a_register_doc_from_an_other_doc_overriding_values(
        full_doc):
    existing_doc = full_doc
    new_creator = 'did:iotics:iotEEEEKpPGWyEC4FFo4d6oyzVVk6MEEEEgY'
    new_controller = Issuer.build(
        'did:iotics:iotEEEEKpPGWyEC4FFo4d6oyzHHHHMEEEEgY', '#NewController')
    new_metadata = Metadata(label='a label')
    new_version = SUPPORTED_VERSIONS[0]
    new_pub_key = RegisterPublicKey(name='#new_pub_key1',
                                    base58=get_public_base_58_key(),
                                    revoked=False)
    new_auth_key = RegisterAuthenticationPublicKey(
        name='#new_auth_key1', base58=get_public_base_58_key(), revoked=False)
    a_controller = Issuer.from_string(
        'did:iotics:iotHjrmKpPGWyEC4FFo4d6oyzVVk6MXEEEEE#AController')
    new_control_deleg_proof = RegisterDelegationProof(
        name='#new_deleg_control_key1',
        controller=a_controller,
        proof='a_deleg_proof_validated_by_the_resolver',
        revoked=False)
    new_auth_deleg_key = RegisterDelegationProof(
        name='#new_deleg_auth_key1',
        controller=a_controller,
        proof='a_deleg_proof_validated_by_the_resolver',
        revoked=False)

    new_doc = RegisterDocumentBuilder() \
        .add_public_key_obj(new_pub_key) \
        .add_authentication_key_obj(new_auth_key) \
        .add_control_delegation_obj(new_control_deleg_proof) \
        .add_authentication_delegation_obj(new_auth_deleg_key) \
        .build_from_existing(existing_doc,
                             revoked=True,
                             metadata=new_metadata,
                             creator=new_creator,
                             spec_version=new_version,
                             controller=new_controller)
    # Can not change
    assert new_doc.did == existing_doc.did
    assert new_doc.purpose == existing_doc.purpose
    assert new_doc.proof == existing_doc.proof
    # Overridden values
    assert new_doc.revoked
    assert new_doc.metadata == new_metadata
    assert new_doc.creator == new_creator
    assert new_doc.spec_version == new_version
    assert new_doc.controller == new_controller

    assert new_doc.public_keys == {
        **existing_doc.public_keys,
        **{
            new_pub_key.name: new_pub_key
        }
    }
    assert new_doc.auth_keys == {
        **existing_doc.auth_keys,
        **{
            new_auth_key.name: new_auth_key
        }
    }
    assert new_doc.control_delegation_proof == {
        **existing_doc.control_delegation_proof,
        **{
            new_control_deleg_proof.name: new_control_deleg_proof
        }
    }
    assert new_doc.auth_delegation_proof == {
        **existing_doc.auth_delegation_proof,
        **{
            new_auth_deleg_key.name: new_auth_deleg_key
        }
    }
    assert new_doc.update_time >= existing_doc.update_time