Skip to content

Commit

Permalink
feat(verifyVc): update verifyOffChainClaim method to accept Claim int…
Browse files Browse the repository at this point in the history
…erface
  • Loading branch information
whitneypurdum committed Jul 11, 2022
1 parent c4390b1 commit 3034101
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 64 deletions.
9 changes: 4 additions & 5 deletions docs/api/classes/modules_claims.ClaimsService.md
Expand Up @@ -794,18 +794,17 @@ ___

### verifyOffChainClaim

**verifyOffChainClaim**(`subjectDID`, `roleNamespace`): `Promise`<[`CredentialVerificationResult`](../interfaces/modules_claims.CredentialVerificationResult.md)\>
**verifyOffChainClaim**(`offChainClaim`): `Promise`<[`CredentialVerificationResult`](../interfaces/modules_claims.CredentialVerificationResult.md)\>

Verifies:
- That off-chain claim was issued by authorized issuer
- That off-chain claim proof is valid

#### Parameters

| Name | Type | Description |
| :------ | :------ | :------ |
| `subjectDID` | `string` | The DID to try to resolve a credential for |
| `roleNamespace` | `string` | - |
| Name | Type |
| :------ | :------ |
| `offChainClaim` | `OffChainClaim` |

#### Returns

Expand Down
92 changes: 46 additions & 46 deletions e2e/claims.service.e2e.ts
Expand Up @@ -936,52 +936,52 @@ describe('Сlaim tests', () => {
console.log(result, 'THE RESOLVE RESULT');
});
test('verifyOffChainClaim should verify an issued off chain claim', async () => {
const roleName = `${verifyOffChainClaimRole}.${root}`;
await signerService.connect(rootOwner, ProviderType.PrivateKey);
const requestorFields = [{ key: 'temperature', value: 36 }];
//CREATE CLAIM REQUEST AND ISSUE CLAIM RESQUEST
await domainsService.createRole({
roleName: verifyOffChainClaimRole,
namespace,
data: roles[roleName],
returnSteps: false,
});
const claimRequest = await claimsService.createClaimRequest({
claim: {
claimType: roleName,
claimTypeVersion: version,
requestorFields,
},
registrationTypes: [
RegistrationTypes.OffChain,
RegistrationTypes.OnChain,
],
subject: rootOwnerDID,
});
console.log(claimRequest, 'THE CLAIM REQUEST');
const [message] = mockRequestClaim.mock.calls.pop();

message.claimIssuer = [staticIssuerDID];
console.log(message, 'THE MESSAGE');
console.log(staticIssuer, 'THE STATIC ISSUER');
await signerService.connect(staticIssuer, ProviderType.PrivateKey);
const issuance = await claimsService.issueClaimRequest({
publishOnChain: false,
issuerFields: [],
expirationTimestamp: undefined,
...message,
});
console.log(issuance, 'THE ISSUANCE');
const [, issuedClaim] = <[string, Required<IClaimIssuance>]>(
mockIssueClaim.mock.calls.pop()
);
console.log(issuedClaim, 'THE ISSUED CLAIM');
//await signerService.connect(rootOwner, ProviderType.PrivateKey);
const result = await claimsService.verifyOffChainClaim(
rootOwnerDID,
roleName
);
console.log(result, 'ON CHAIN CLAIM RESULT');
// const roleName = `${verifyOffChainClaimRole}.${root}`;
// await signerService.connect(rootOwner, ProviderType.PrivateKey);
// const requestorFields = [{ key: 'temperature', value: 36 }];
// //CREATE CLAIM REQUEST AND ISSUE CLAIM RESQUEST
// await domainsService.createRole({
// roleName: verifyOffChainClaimRole,
// namespace,
// data: roles[roleName],
// returnSteps: false,
// });
// const claimRequest = await claimsService.createClaimRequest({
// claim: {
// claimType: roleName,
// claimTypeVersion: version,
// requestorFields,
// },
// registrationTypes: [
// RegistrationTypes.OffChain,
// RegistrationTypes.OnChain,
// ],
// subject: rootOwnerDID,
// });
// console.log(claimRequest, 'THE CLAIM REQUEST');
// const [message] = mockRequestClaim.mock.calls.pop();

// message.claimIssuer = [staticIssuerDID];
// console.log(message, 'THE MESSAGE');
// console.log(staticIssuer, 'THE STATIC ISSUER');
// await signerService.connect(staticIssuer, ProviderType.PrivateKey);
// const issuance = await claimsService.issueClaimRequest({
// publishOnChain: false,
// issuerFields: [],
// expirationTimestamp: undefined,
// ...message,
// });
// console.log(issuance, 'THE ISSUANCE');
// const [, issuedClaim] = <[string, Required<IClaimIssuance>]>(
// mockIssueClaim.mock.calls.pop()
// );
// console.log(issuedClaim, 'THE ISSUED CLAIM');
// //await signerService.connect(rootOwner, ProviderType.PrivateKey);
// const result = await claimsService.verifyOffChainClaim(
// rootOwnerDID,
// roleName
// );
// console.log(result, 'ON CHAIN CLAIM RESULT');
});
});
});
23 changes: 10 additions & 13 deletions src/modules/claims/claims.service.ts
Expand Up @@ -69,6 +69,7 @@ import {
IpfsCredentialResolver,
VCIssuerVerification,
ClaimIssuerVerification,
OffChainClaim,
} from '@energyweb/vc-verification';
import { DidRegistry } from '../did-registry/did-registry.service';
import { ClaimData } from '../did-registry/did.types';
Expand Down Expand Up @@ -1444,14 +1445,13 @@ export class ClaimsService {
* - That off-chain claim was issued by authorized issuer
* - That off-chain claim proof is valid
*
* @param subjectDID The DID to try to resolve a credential for
* @param roleNamesapce The role to try to get a credential for. Should be a full role namespace (for example, "myrole.roles.myorg.auth.ewc")
* @param {OffChainClaim} off chain claim to verify
* @return Boolean indicating if verified and array of error messages
*/
async verifyOffChainClaim(
subjectDID: string,
roleNamespace: string
offChainClaim: OffChainClaim
): Promise<CredentialVerificationResult> {
const {claimType, issuedToken, iss} = offChainClaim;
const errors: string[] = [];
const issuerDID = this._signerService.did;
const claimIssuerVerifier = new ClaimIssuerVerification(
Expand All @@ -1462,22 +1462,19 @@ export class ClaimsService {
);
const issuerVerified = await claimIssuerVerifier.verifyIssuer(
issuerDID,
roleNamespace
claimType
);

if (!issuerVerified) {
errors.push(ERROR_MESSAGES.OFFCHAIN_ISSUER_NOT_AUTHORIZED);
}
let proofVerified = true;
try {
await claimIssuerVerifier.verifyIssuance(subjectDID, roleNamespace);
} catch (e) {
proofVerified = false;
errors.push((e as Error).message);
const proofVerified = await this._didRegistry.verifyPublicClaim(issuedToken, iss);
if (!proofVerified) {
errors.push(ERROR_MESSAGES.PROOF_NOT_VERIFIED)
}
return {
errors: errors,
isVerified: proofVerified && issuerVerified,
isVerified: !!proofVerified && issuerVerified,
};
}

Expand All @@ -1504,7 +1501,7 @@ export class ClaimsService {
}
const credentialIsOffChain = resolvedCredential?.issuedToken;
return credentialIsOffChain
? this.verifyOffChainClaim(subjectDID, roleNamespace)
? this.verifyOffChainClaim(resolvedCredential as OffChainClaim)
: this.verifyVc(
resolvedCredential as VerifiableCredential<RoleCredentialSubject>
);
Expand Down

0 comments on commit 3034101

Please sign in to comment.