Example #1
0
    def testIssuesCredentials(self):
        credential = didkit.issueCredential(
            tests.credential.__str__().replace("'", '"'),
            tests.verificationMethod.__str__().replace("'", '"'), tests.key)

        verifyResult = json.loads(
            didkit.verifyCredential(credential.__str__().replace("'", '"'),
                                    "{\"proofPurpose\":\"assertionMethod\"}"))

        self.assertEqual(len(verifyResult["errors"]), 0)
def verify(credential):
    """
    credential  str
    return list
    """
    try:
        result = didkit.verifyCredential(credential, '{}')
    except:
        return "Failed : JSON-LD malformed"

    if not json.loads(result)['errors']:
        return "Signature verified : "
    else:
        return "Signature rejected : " + result
Example #3
0
def sign(credential, pvk, did, rsa=None):
    """ sign credential for did:ethr, did:tz, did:web

    @method is str
        ethr (default method) -> curve secp256k1 and "alg" :"ES256K-R"
        tz (tz2) -> curve  secp256k1 with "alg" :"ES256K-R"
        web  -> curve secp256k1 with "alg" :"ES256K" or RSA

    @credential is dict
    return is str

    """
    method = did.split(':')[1]

    if method == 'web' and not rsa:
        key = ethereum_to_jwk256k(pvk)
        vm = did + "#key-1"

    elif method == 'web' and rsa:
        key = jwk.JWK.from_pem(rsa.encode())
        key = key.export_private()
        vm = did + "#key-2"

    elif method == 'ethr':
        key = ethereum_to_jwk256kr(pvk)
        vm = did + "#controller"

    elif method == 'tz':
        key = ethereum_to_jwk256kr(pvk)
        vm = did + "#blockchainAccountId"

    else:
        logging.error('method not supported')
        return None

    didkit_options = {
        "proofPurpose": "assertionMethod",
        "verificationMethod": vm
    }

    signed_credential = didkit.issueCredential(
        json.dumps(credential, ensure_ascii=False),
        didkit_options.__str__().replace("'", '"'), key)

    # verify credential before leaving
    if json.loads(didkit.verifyCredential(signed_credential, '{}'))["errors"]:
        logging.error('signature failed')
        return None

    return signed_credential
        "type":
        "EcdsaSecp256k1Signature2019",
        "proofPurpose":
        "assertionMethod",
        "verificationMethod":
        "did:web:talao.co#key-1",
        "created":
        "2021-05-12T12:10:56.655Z",
        "jws":
        "eyJiNjQiOmZhbHNlLCJjcml0IjpbImI2NCJdLCJhbGciOiJFUzI1NksifQ..m6HGetBv0-1SLqHrg21SZfqu0JzyNDoROXu3v-IGkNtUpPWRWr_7ejQRzud6wy2De3qGNzydTEKbDp_bmpqAfg"
    }
}
"""
didkit_options = {
        "proofPurpose": "assertionMethod",
        "verificationMethod": "did:web:talao.co#key-1",
        }


didkit_credential = didkit.issueCredential(
        credential.__str__().replace("'", '"'),
        didkit_options.__str__().replace("'", '"'),
        json.dumps(key)
        )
"""

result = didkit.verifyCredential(json.dumps(signed_credential), '{}')
print(result)

#print(json.dumps(json.loads(didkit_credential), indent=4))
    method = "tz"

    pvk = "0x7f1116bdb705f3e51a299a1fe04b619e0e2516258ef187946076b04151ece8a5"
    key = ethereum_to_jwk256kr(pvk)
    did = didkit.keyToDID(method, key)

    credential = json.load(
        open('/home/thierry/Talao/verifiable_credentials/experience.jsonld',
             'r'))

    credential['credentialSubject']["id"] = "2020-08-19T21:41:50Z"
    credential['id'] = "123123123131321:lkjh:mh"
    credential["issuer"] = did
    credential["issuanceDate"] = "2020-08-19T21:41:50Z"

    credential = sign(credential, pvk, method=method)
    print(json.dumps(json.loads(credential), indent=4))

    key = ethereum_to_jwk256kr(pvk)
    verifmethod = didkit.keyToVerificationMethod(method, key)

    didkit_options = {
        "proofPurpose": "assertionMethod",
        "verificationMethod": verifmethod
    }

    print(
        didkit.verifyCredential(credential,
                                didkit_options.__str__().replace("'", '"')))