async def testNoPredicates(prover1, prover2, verifier, allClaims):
    proofRequest = ProofRequest("proof1", "1.0", verifier.generateNonce(),
                                verifiableAttributes={'attr_uuid1': AttributeInfo(name='name'),
                                                      'attr_uuid2': AttributeInfo(name='name')})

    assert await presentProofAndVerify(verifier, proofRequest, prover1)
    assert await presentProofAndVerify(verifier, proofRequest, prover2)
Exemplo n.º 2
0
async def testMultipledRevealed(prover1, allClaims, schemaGvtId, schemaXyzId,
                                attrRepo, schemaGvt):
    proofRequest = ProofRequest("proof1",
                                "1.0",
                                1,
                                verifiableAttributes={
                                    'attr_uuid1': AttributeInfo(name='status'),
                                    'attr_uuid2': AttributeInfo(name='name')
                                })

    claimsGvt = await prover1.wallet.getClaimSignature(schemaGvtId)
    claimsXyz = await prover1.wallet.getClaimSignature(schemaXyzId)
    proofClaims = {
        schemaGvt.seqId: ProofClaims(claimsGvt, ['name'], []),
        schemaGvt.seqId: ProofClaims(claimsXyz, ['status'], [])
    }

    attr1 = attrRepo.getAttributes(schemaXyzId.schemaKey,
                                   prover1.proverId)['status']
    attr2 = attrRepo.getAttributes(schemaGvtId.schemaKey,
                                   prover1.proverId)['name']
    requestedProof = RequestedProof(
        revealed_attrs={
            'attr_uuid1': [schemaGvt.seqId, attr1,
                           str(encodeAttr(attr1))],
            'attr_uuid2': [schemaGvt.seqId, attr2,
                           str(encodeAttr(attr2))]
        })

    assert proofClaims, requestedProof == await prover1._findClaims(
        proofRequest)
Exemplo n.º 3
0
async def testAttrNotFound(prover1, allClaims):
    proofRequest = ProofRequest("proof1",
                                "1.0",
                                1,
                                verifiableAttributes={
                                    'attr_uuid1': AttributeInfo(name='name'),
                                    'attr_uuid2': AttributeInfo(name='aaa')
                                })
    with pytest.raises(ValueError):
        await prover1._findClaims(proofRequest)
async def testGePredicate(prover1, prover2, verifier, allClaims):
    proofRequest = ProofRequest("proof1", "1.0", verifier.generateNonce(),
                                verifiableAttributes={'attr_uuid1': AttributeInfo(name='name')},
                                predicates={'predicate_uuid1': PredicateGE('age', 18),
                                            'predicate_uuid2': PredicateGE('period', 3)})
    assert await presentProofAndVerify(verifier, proofRequest, prover1)
    assert await presentProofAndVerify(verifier, proofRequest, prover2)
async def create_proof_request(conn):
    # 1. Init entities
    public_repo = PublicRepoInMemory()
    attr_repo = AttributeRepoInMemory()
    issuer = Issuer(IssuerWalletInMemory('issuer1', public_repo), attr_repo)

    # 2. Create a Schema
    schema = await issuer.genSchema('GVT', '1.0', GVT.attribNames())
    schema_id = ID(schema.getKey())

    # 3. Create keys for the Schema
    global global_dict
    await issuer.wallet.submitPublicKeys(schema_id, global_dict['public_key'])

    # 4. set attributes for user1
    prover_id = 'BzfFCYk'
    attributes = GVT.attribs(name='Alex', age=28, height=175, sex='male')
    attr_repo.addAttributes(schema.getKey(), prover_id, attributes)

    verifier = Verifier(WalletInMemory('verifier1', public_repo))

    proof_request = ProofRequest(
        name='Test_proof', version='1.0',
        nonce=verifier.generateNonce(),
        verifiableAttributes={
            'attr_uuid': AttributeInfo('name', schema.seqId)},
        predicates={'predicate_uuid': PredicateGE('age', 18)})

    global_dict['verifier'] = verifier
    global_dict['proof_request'] = proof_request

    conn.send(json.dumps(proof_request.to_str_dict()).encode())
Exemplo n.º 6
0
async def testOneRevealedFromSpecificSchemaAndIssuer(prover1, allClaims,
                                                     schemaGvt, schemaGvtId,
                                                     attrRepo, keysGvt):
    proofRequest = ProofRequest("proof1",
                                "1.0",
                                1,
                                verifiableAttributes={
                                    'uuid':
                                    AttributeInfo(
                                        name='name',
                                        schema_seq_no=schemaGvt.seqId,
                                        issuer_did=schemaGvt.issuerId)
                                })
    claimsGvt = await prover1.wallet.getClaimSignature(schemaGvtId)

    proofClaims = {schemaGvt.seqId: ProofClaims(claimsGvt, ['name'], [])}
    attr = attrRepo.getAttributes(schemaGvtId.schemaKey,
                                  prover1.proverId)['name']
    requestedProof = RequestedProof(revealed_attrs={
        'uuid': [str(schemaGvt.seqId), attr,
                 str(encodeAttr(attr))]
    })

    assert proofClaims, requestedProof == await prover1._findClaims(
        proofRequest)

    assert proofClaims, requestedProof == await prover1._findClaims(
        proofRequest)
Exemplo n.º 7
0
async def testRevealedAndPredicateDifferentIssuers(prover1, allClaims,
                                                   schemaGvtId, schemaXyzId,
                                                   attrRepo, schemaGvt):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        1,
        verifiableAttributes={'attr_uuid': AttributeInfo(name='status')},
        predicates={'predicate_uuid': PredicateGE('age', 18)})

    claimsGvt = await prover1.wallet.getClaimSignature(schemaGvtId)
    claimsXyz = await prover1.wallet.getClaimSignature(schemaXyzId)
    proofClaims = {
        schemaGvt.seqId: ProofClaims(claimsGvt, [], [PredicateGE('age', 18)]),
        schemaGvt.seqId: ProofClaims(claimsXyz, ['status'], [])
    }

    attr = attrRepo.getAttributes(schemaXyzId.schemaKey,
                                  prover1.proverId)['status']
    requestedProof = RequestedProof(
        revealed_attrs={
            'attr_uuid': [schemaGvt.seqId, attr,
                          str(encodeAttr(attr))]
        },
        predicates={'predicate_uuid': schemaGvt.seqId})

    assert proofClaims, requestedProof == await prover1._findClaims(
        proofRequest)
    async def doTestAnonCredsPrimaryOnly():
        # 1. Create a Schema
        schema = await issuer.genSchema('GVT', '1.0', GVT.attribNames())
        schemaId = ID(schemaKey=schema.getKey(), schemaId=schema.seqId)

        # 2. Create keys for the Schema
        await issuer.genKeys(schemaId, **primes1)

        # 3. Issue accumulator
        #TODO: Not implemented yet
        #await issuer.issueAccumulator(schemaId=schemaId, iA='110', L=5)

        # 4. set attributes for user1
        attrs = GVT.attribs(name='Alex', age=28, height=175, sex='male')
        proverId = str(prover.proverId)
        attrRepo.addAttributes(schema.getKey(), proverId, attrs)

        # 5. request Claims
        claimsReq = await prover.createClaimRequest(schemaId, proverId, False)
        (signature, claims) = await issuer.issueClaim(schemaId, claimsReq)
        await prover.processClaim(schemaId, claims, signature)

        # 6. proof Claims
        proofInput = ProofInput(
            verifier.generateNonce(),
            {'attr_uuid': AttributeInfo('name', schema.seqId)},
            {'predicate_uuid': PredicateGE('age', 18)})

        proof = await prover.presentProof(proofInput)
        assert proof.requestedProof.revealed_attrs['attr_uuid'][1] == 'Alex'
        assert await verifier.verify(proofInput, proof)
async def testGePredicateForEqual(prover1, verifier, claimsProver1Gvt):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')},
        predicates={'predicate_uuid': PredicateGE('age', 28)})
    assert await presentProofAndVerify(verifier, proofRequest, prover1)
async def testGePredicateNegativeForBoth(prover1, prover2, verifier, allClaims):
    proofRequest = ProofRequest("proof1", "1.0", verifier.generateNonce(),
                                verifiableAttributes={'attr_uuid1': AttributeInfo(name='name')},
                                predicates={'predicate_uuid1': PredicateGE('age', 38),
                                            'predicate_uuid2': PredicateGE('period', 30)})
    with pytest.raises(ValueError):
        await presentProofAndVerify(verifier, proofRequest, prover1)
    with pytest.raises(ValueError):
        await presentProofAndVerify(verifier, proofRequest, prover2)
Exemplo n.º 11
0
async def testClaimProofFromToDict(prover1, nonce, claimsProver1Gvt):
    proofRequest = ProofRequest("proof1", "1.0", 1,
                                verifiableAttributes={
                                    'attr_uuid': AttributeInfo(name='name')},
                                predicates={'predicate_uuid': PredicateGE('age', 18)})

    proof = await prover1.presentProof(proofRequest)

    assert proof == FullProof.fromStrDict(proof.toStrDict())
async def testPrimaryClaimNoPredicates(prover1, verifier, claimsProver1Gvt,
                                       nonce, schemaGvtId):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        nonce,
        verifiableAttributes={'uuid1': AttributeInfo(name='name')},
        predicates={})

    claims, requestedProof = await prover1._findClaims(proofRequest)
    claims = {
        schemaId:
        ProofClaims(Claims(primaryClaim=proofClaim.claims.primaryClaim),
                    [AttributeInfo(name='name')], [])
        for schemaId, proofClaim in claims.items()
    }
    proof = await prover1._prepareProof(claims, proofRequest.nonce,
                                        requestedProof)

    assert await verifier.verify(proofRequest, proof)
async def testMultipleGePredicate(prover1, verifier, claimsProver1Gvt):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')},
        predicates={
            'predicate_uuid1': PredicateGE('age', 18),
            'predicate_uuid2': PredicateGE('height', 170)
        })
    assert await presentProofAndVerify(verifier, proofRequest, prover1)
Exemplo n.º 14
0
async def testRevocedWithUpdateWitness(schemaGvtId, issuerGvt, prover1,
                                       verifier, claimsProver1Gvt):
    await issuerGvt.revoke(schemaGvtId, 1)

    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')})
    with pytest.raises(ValueError):
        await presentProofAndVerify(verifier, proofRequest, prover1)
Exemplo n.º 15
0
async def testSingleIssuerMultipleCredDefsSingleProver(primes1, primes2):
    # 1. Init entities
    publicRepo = PublicRepoInMemory()
    attrRepo = AttributeRepoInMemory()
    issuer = Issuer(IssuerWalletInMemory('issuer1', publicRepo), attrRepo)

    # 2. Create a Schema
    schema1 = await issuer.genSchema('GVT', '1.0', GVT.attribNames())
    schemaId1 = ID(schema1.getKey())
    schema2 = await issuer.genSchema('XYZCorp', '1.0', XYZCorp.attribNames())
    schemaId2 = ID(schema2.getKey())

    # 3. Create keys for the Schema
    await issuer.genKeys(schemaId1, **primes1)
    await issuer.genKeys(schemaId2, **primes2)

    # 4. Issue accumulator
    await issuer.issueAccumulator(schemaId=schemaId1, iA='110', L=5)
    await issuer.issueAccumulator(schemaId=schemaId2, iA=9999999, L=5)

    # 4. set attributes for user1
    userId = '111'
    attrs1 = GVT.attribs(name='Alex', age=28, height=175, sex='male')
    attrs2 = XYZCorp.attribs(status='FULL', period=8)
    attrRepo.addAttributes(schema1.getKey(), userId, attrs1)
    attrRepo.addAttributes(schema2.getKey(), userId, attrs2)

    # 5. request Claims
    prover = Prover(ProverWalletInMemory(userId, publicRepo))
    claimsReqs = await prover.createClaimRequests([schemaId1, schemaId2])
    claims = await issuer.issueClaims(claimsReqs)
    await prover.processClaims(claims)

    # 6. proof Claims
    verifier = Verifier(WalletInMemory('verifier1', publicRepo))

    proofRequest = ProofRequest("proof1",
                                "1.0",
                                verifier.generateNonce(),
                                verifiableAttributes={
                                    'attr_uuid1':
                                    AttributeInfo('name', schema1.seqId)
                                },
                                predicates={
                                    'predicate_uuid1': PredicateGE('age', 18),
                                    'predicate_uuid2':
                                    PredicateGE('period', 5)
                                })

    proof = await prover.presentProof(proofRequest)

    assert proof.requestedProof.revealed_attrs['attr_uuid1'][1] == 'Alex'
    assert await verifier.verify(proofRequest, proof)
Exemplo n.º 16
0
async def testRevocedWithoutUpdateWitness(schemaGvtId, issuerGvt, prover1,
                                          verifier, claimsProver1Gvt):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')})

    proof = await prover1.presentProof(proofRequest)

    await issuerGvt.revoke(schemaGvtId, 1)

    return await verifier.verify(proofRequest, proof)
Exemplo n.º 17
0
async def testClaimProofFromToDictPrimaryOnly(prover1, nonce, claimsProver1Gvt, schemaGvt):
    proofRequest = ProofRequest("proof1", "1.0", 1,
                                verifiableAttributes={
                                    'attr_uuid': AttributeInfo(name='name')},
                                predicates={'predicate_uuid': PredicateGE('age', 18)})

    proof = await prover1.presentProof(proofRequest)

    proofInfo = proof.proofs[str(schemaGvt.seqId)]
    proofs = {schemaGvt.seqId: ProofInfo(Proof(primaryProof=proofInfo.proof.primaryProof),
                                         issuer_did=schemaGvt.issuerId,
                                         schema_seq_no=proofInfo.schema_seq_no)}
    proof = proof._replace(proofs=proofs)
    assert proof == FullProof.fromStrDict(proof.toStrDict())
Exemplo n.º 18
0
async def test_proof_from_to_dict(prover1, nonce, claimsProver1Gvt, schemaGvt):
    n = (await prover1.wallet.getPublicKey(ID(schemaId=schemaGvt.seqId))).N
    proofRequest = ProofRequest("proof1", "1.0", nonce,
                                verifiableAttributes={
                                    'attr_uuid': AttributeInfo(name='name')},
                                predicates={'predicate_uuid': PredicateGE('age', 18)})

    proof = await prover1.presentProof(proofRequest)

    proofInfo = proof.proofs[str(schemaGvt.seqId)]
    proof = ProofInfo(Proof(primaryProof=proofInfo.proof.primaryProof),
                      issuer_did=schemaGvt.issuerId,
                      schema_seq_no=proofInfo.schema_seq_no)

    assert proof == ProofInfo.from_str_dict(proof.to_str_dict(), n)
async def testNonceShouldBeSame(prover1, verifier, claimsProver1Gvt, nonce,
                                genNonce):
    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')})

    proof = await prover1.presentProof(proofRequest)

    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        genNonce,
        verifiableAttributes=proofRequest.verifiableAttributes,
        predicates=proofRequest.predicates)
    assert not await verifier.verify(proofRequest, proof)
async def testUParamShouldBeSame(prover1, verifier, issuerGvt, schemaGvtId,
                                 attrsProver1Gvt, keysGvt,
                                 issueAccumulatorGvt):
    claimsReq = await prover1.createClaimRequest(schemaGvtId)

    claimsReq = claimsReq._replace(U=claimsReq.U**2)
    claim_signature, claim_attributes = await issuerGvt.issueClaim(
        schemaGvtId, claimsReq)
    await prover1.processClaim(schemaGvtId, claim_attributes, claim_signature)

    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={'attr_uuid': AttributeInfo(name='name')},
        predicates={})
    assert not await presentProofAndVerify(verifier, proofRequest, prover1)
Exemplo n.º 21
0
async def testSingleIssuerSingleProverPrimaryOnly(primes1):
    # 1. Init entities
    publicRepo = PublicRepoInMemory()
    attrRepo = AttributeRepoInMemory()
    issuer = Issuer(IssuerWalletInMemory('issuer1', publicRepo), attrRepo)

    # 2. Create a Schema
    schema = await issuer.genSchema('GVT', '1.0', GVT.attribNames())
    schemaId = ID(schema.getKey())

    # 3. Create keys for the Schema
    await issuer.genKeys(schemaId, **primes1)

    # 4. Issue accumulator
    await issuer.issueAccumulator(schemaId=schemaId, iA='110', L=5)

    # 4. set attributes for user1
    userId = '111'
    attrs = GVT.attribs(name='Alex', age=28, height=175, sex='male')
    attrRepo.addAttributes(schema.getKey(), userId, attrs)

    # 5. request Claims
    prover = Prover(ProverWalletInMemory(userId, publicRepo))
    claimsReq = await prover.createClaimRequest(schemaId, None, False)
    (claim_signature,
     claim_attributes) = await issuer.issueClaim(schemaId, claimsReq)
    await prover.processClaim(schemaId, claim_attributes, claim_signature)

    # 6. proof Claims
    verifier = Verifier(WalletInMemory('verifier1', publicRepo))

    proofRequest = ProofRequest(
        "proof1",
        "1.0",
        verifier.generateNonce(),
        verifiableAttributes={
            'attr_uuid1': AttributeInfo('name', schema.seqId)
        },
        predicates={'predicate_uuid1': PredicateGE('age', 18)})

    proof = await prover.presentProof(proofRequest)

    assert proof.requestedProof.revealed_attrs['attr_uuid1'][1] == 'Alex'
    assert await verifier.verify(proofRequest, proof)
Exemplo n.º 22
0
 def __init__(self,
              name,
              version,
              nonce,
              attributes,
              verifiableAttributes,
              predicates=[]):
     self.name = name
     self.version = version
     self.nonce = nonce
     self.attributes = attributes
     self.verifiableAttributes = \
         {str(uuid.uuid4()): AttributeInfo(name=a) for a in verifiableAttributes} if \
             isinstance(verifiableAttributes, list) else verifiableAttributes
     self.predicates = {
         str(uuid.uuid4()): PredicateGE(attrName=p['attrName'],
                                        value=p['value'])
         for p in predicates
     } if isinstance(predicates, list) else predicates
     self.fulfilledByClaims = []
     self.selfAttestedAttrs = {}