示例#1
0
def claimsUsedForProof():

    claim1Attr = OrderedDict()
    claim1Attr['first_name'] = 'Alice'
    claim1Attr['last_name'] = 'Garcia'
    claim1Attr['account_address_1'] = '321'
    claim1Attr['date_of_birth'] = 'May 15, 1990'

    claim2Attr = OrderedDict()
    claim2Attr['first_name'] = 'Alice'
    claim2Attr['last_name'] = 'Garcia'
    claim2Attr['account_status'] = 'active'

    return [
        (
            Link(name='Issuer 1'),
            ('TestClaim-1', '0.1', 'Other data'),
            claim1Attr
        ),
        (
            Link(name='Issuer 2'),
            ('TestClaim-2', '0.1', 'Other claim 2 data'),
            claim2Attr
        )
    ]
示例#2
0
    def _updateLinkWithLatestInfo(self, link: Link, reply):

        if DATA in reply and reply[DATA]:
            data = json.loads(reply[DATA])
            ip, port = data.get(ENDPOINT).split(":")
            link.remoteEndPoint = (ip, int(port))

        link.linkLastSynced = datetime.now()
        self.notifyMsgListener("    Link {} synced".format(link.name))
示例#3
0
 def loadInvitationDict(self, invitation_dict):
     linkInvitation = invitation_dict.get("link-invitation")
     if not linkInvitation:
         raise LinkNotFound
     linkName = linkInvitation["name"]
     existingLinkInvites = self.wallet. \
         getMatchingLinks(linkName)
     if len(existingLinkInvites) >= 1:
         return self._mergeInvitation(invitation_dict)
     Link.validate(invitation_dict)
     link = self.loadInvitation(invitation_dict)
     return link
示例#4
0
 def loadInvitationDict(self, invitation_dict):
     linkInvitation = invitation_dict.get("link-invitation")
     if not linkInvitation:
         raise LinkNotFound
     linkName = linkInvitation["name"]
     existingLinkInvites = self.wallet. \
         getMatchingLinks(linkName)
     if len(existingLinkInvites) >= 1:
         return self._mergeInvitation(invitation_dict)
     Link.validate(invitation_dict)
     link = self.loadInvitation(invitation_dict)
     return link
示例#5
0
 def loadInvitationFile(self, filePath):
     with open(filePath) as data_file:
         invitationData = json.load(
             data_file, object_pairs_hook=collections.OrderedDict)
         linkInvitation = invitationData.get("link-invitation")
         if not linkInvitation:
             raise LinkNotFound
         linkName = linkInvitation["name"]
         existingLinkInvites = self.wallet. \
             getMatchingLinks(linkName)
         if len(existingLinkInvites) >= 1:
             return self._mergeInvitaion(invitationData)
         Link.validate(invitationData)
         link = self.loadInvitation(invitationData)
         return link
示例#6
0
 def loadInvitationFile(self, filePath):
     with open(filePath) as data_file:
         invitationData = json.load(
             data_file, object_pairs_hook=collections.OrderedDict)
         linkInvitation = invitationData.get("link-invitation")
         if not linkInvitation:
             raise LinkNotFound
         linkName = linkInvitation["name"]
         existingLinkInvites = self.wallet. \
             getMatchingLinks(linkName)
         if len(existingLinkInvites) >= 1:
             return self._mergeInvitaion(invitationData)
         Link.validate(invitationData)
         link = self.loadInvitation(invitationData)
         return link
示例#7
0
    def loadInvitation(self, invitationData):
        linkInvitation = invitationData["link-invitation"]
        remoteIdentifier = linkInvitation[f.IDENTIFIER.nm]
        # TODO signature should be validated!
        signature = invitationData["sig"]
        linkInvitationName = linkInvitation[NAME]
        remoteEndPoint = linkInvitation.get("endpoint", None)
        remote_verkey = linkInvitation.get("verkey", None)
        linkNonce = linkInvitation[NONCE]
        proofRequestsJson = invitationData.get("proof-requests", None)

        proofRequests = []
        if proofRequestsJson:
            for cr in proofRequestsJson:
                proofRequests.append(
                    ProofRequest(cr[NAME], cr[VERSION], cr[ATTRIBUTES],
                                 cr[VERIFIABLE_ATTRIBUTES]))

        self.notifyMsgListener("1 link invitation found for {}.".
                               format(linkInvitationName))

        self.notifyMsgListener("Creating Link for {}.".
                               format(linkInvitationName))
        # TODO: Would we always have a trust anchor corresponding to a link?

        li = Link(name=linkInvitationName,
                  trustAnchor=linkInvitationName,
                  remoteIdentifier=remoteIdentifier,
                  remoteEndPoint=remoteEndPoint,
                  invitationNonce=linkNonce,
                  proofRequests=proofRequests,
                  remote_verkey=remote_verkey)

        self.wallet.addLink(li)
        return li
示例#8
0
    def loadInvitation(self, invitationData):
        linkInvitation = invitationData["link-invitation"]
        remoteIdentifier = linkInvitation[f.IDENTIFIER.nm]
        signature = invitationData["sig"]
        linkInvitationName = linkInvitation[NAME]
        remoteEndPoint = linkInvitation.get("endpoint", None)
        linkNonce = linkInvitation[NONCE]
        claimProofRequestsJson = invitationData.get("claim-requests", None)

        claimProofRequests = []
        if claimProofRequestsJson:
            for cr in claimProofRequestsJson:
                claimProofRequests.append(
                    ClaimProofRequest(cr[NAME], cr[VERSION], cr[ATTRIBUTES],
                                      cr[VERIFIABLE_ATTRIBUTES]))

        self.notifyMsgListener(
            "1 link invitation found for {}.".format(linkInvitationName))

        self.notifyMsgListener(
            "Creating Link for {}.".format(linkInvitationName))
        # TODO: Would we always have a trust anchor corresponding ot a link?

        li = Link(name=linkInvitationName,
                  trustAnchor=linkInvitationName,
                  remoteIdentifier=remoteIdentifier,
                  remoteEndPoint=remoteEndPoint,
                  invitationNonce=linkNonce,
                  claimProofRequests=claimProofRequests)

        self.wallet.addLink(li)
        return li
示例#9
0
 def linkFromNonce(self, nonce, remoteIdr, remoteHa):
     internalId = self.getInternalIdByInvitedNonce(nonce)
     link = self.wallet.getLinkByInternalId(internalId)
     if not link:
         # QUESTION: We use wallet.defaultId as the local identifier,
         # this looks ok for test code, but not production code
         link = Link(str(internalId),
                     self.wallet.defaultId,
                     invitationNonce=nonce,
                     remoteIdentifier=remoteIdr,
                     remoteEndPoint=remoteHa,
                     internalId=internalId)
         self.wallet.addLink(link)
     else:
         link.remoteIdentifier = remoteIdr
         link.remoteEndPoint = remoteHa
     return link
示例#10
0
 def linkFromNonce(self, nonce, remoteIdr, remoteHa=None, remotePubkey=None):
     internalId = self.get_internal_id_by_nonce(nonce)
     linkName = self.get_link_name_by_internal_id(internalId)
     link = self.wallet.getLinkBy(internalId=internalId)
     if not link:
         # QUESTION: We use wallet.defaultId as the local identifier,
         # this looks ok for test code, but not production code
         link = Link(linkName,
                     self.wallet.defaultId,
                     self.wallet.getVerkey(),
                     invitationNonce=nonce,
                     remoteIdentifier=remoteIdr,
                     remoteEndPoint=remoteHa,
                     internalId=internalId,
                     remotePubkey=remotePubkey)
         self.wallet.addLink(link)
     else:
         link.remoteIdentifier = remoteIdr
         link.remoteEndPoint = remoteHa
     return link
示例#11
0
    def _updateLinkWithLatestInfo(self, link: Link, reply):
        link.remoteVerkey = DidVerifier(
            reply[VERKEY], identifier=link.remoteIdentifier).verkey
        if DATA in reply and reply[DATA]:
            data = json.loads(reply[DATA])
            ep = data.get(ENDPOINT)
            if ep:
                # TODO: Validate its an IP port pair or a malicious entity
                # can crash the code
                if 'ha' in ep:
                    ip, port = ep['ha'].split(":")
                    link.remoteEndPoint = (ip, int(port))
                if PUBKEY in ep:
                    link.remotePubkey = ep[PUBKEY]
                else:
                    link.remotePubkey = friendlyVerkeyToPubkey(
                        link.remoteVerkey) if link.remoteVerkey else None

        link.linkLastSynced = datetime.now()
        self.notifyMsgListener("    Link {} synced".format(link.name))
示例#12
0
 def linkFromNonce(self, nonce, remoteIdr, remoteHa=None, remotePubkey=None):
     internalId = self.get_internal_id_by_nonce(nonce)
     linkName = self.get_link_name_by_internal_id(internalId)
     link = self.wallet.getLinkBy(internalId=internalId)
     if not link:
         # QUESTION: We use wallet.defaultId as the local identifier,
         # this looks ok for test code, but not production code
         link = Link(linkName,
                     self.wallet.defaultId,
                     self.wallet.getVerkey(),
                     invitationNonce=nonce,
                     remoteIdentifier=remoteIdr,
                     remoteEndPoint=remoteHa,
                     internalId=internalId,
                     remotePubkey=remotePubkey)
         self.wallet.addLink(link)
     else:
         link.remoteIdentifier = remoteIdr
         link.remoteEndPoint = remoteHa
     return link
示例#13
0
    def _updateLinkWithLatestInfo(self, link: Link, reply):
        if DATA in reply and reply[DATA]:
            data = json.loads(reply[DATA])

            verkey = data.get(VERKEY)
            if verkey is not None:
                link.remoteVerkey = data[VERKEY]

            ep = data.get(ENDPOINT)
            if isinstance(ep, dict):
                # TODO: Validate its an IP port pair or a malicious entity
                # can crash the code
                if 'ha' in ep:
                    ip, port = ep['ha'].split(":")
                    link.remoteEndPoint = (ip, int(port))
                if PUBKEY in ep:
                    link.remotePubkey = ep[PUBKEY]
                else:
                    link.remotePubkey = friendlyVerkeyToPubkey(
                        link.full_remote_verkey) if link.full_remote_verkey else None

            link.linkLastSynced = datetime.now()
            self.notifyMsgListener("    Link {} synced".format(link.name))
示例#14
0
def testLoadLinkInviteWithoutSig():
    li = getSampleLinkInvitation()
    del li["sig"]
    with pytest.raises(InvalidLinkException) as excinfo:
        Link.validate(li)
    assert "Field not found in given input: sig" in str(excinfo.value)
示例#15
0
def testLoadLinkInviteWithoutSig():
    li = getSampleLinkInvitation()
    del li["sig"]
    with pytest.raises(InvalidLinkException) as excinfo:
        Link.validate(li)
    assert "Field not found in given input: sig" in str(excinfo.value)
示例#16
0
def test_link_has_requested_proofs():
    testLink = Link("Test")

    # testLink.requestedProofs