UNPKG

@ew-did-registry/claims

Version:

The package exposes functionality needed to create, inspect, approve, and verify Private and Public claims

159 lines (145 loc) 4.56 kB
import chai from 'chai'; import chaiAsPromised from 'chai-as-promised'; import { Keys } from '@ew-did-registry/keys'; import { EwSigner, Operator } from '@ew-did-registry/did-ethr-resolver'; import { Methods } from '@ew-did-registry/did'; import { DidStore } from '@ew-did-registry/did-ipfs-store'; import { DIDDocumentFull, IDIDDocumentFull, } from '@ew-did-registry/did-document'; import { ChildProcess } from 'child_process'; import { ClaimsFactory, IClaimsIssuer, IClaimsUser, IClaimsVerifier, IProofData, } from '../src'; import { deployRegistry, shutdownIpfsCluster, spawnIpfsCluster, } from '../../../tests'; import { ProviderSettings, ProviderTypes, } from '@ew-did-registry/did-resolver-interface'; chai.use(chaiAsPromised); chai.should(); describe('[CLAIMS PACKAGE/FACTORY CLAIMS]', function () { this.timeout(0); const userKeys = new Keys(); const providerSettings: ProviderSettings = { type: ProviderTypes.HTTP, }; const userAddress = userKeys.getAddress(); const userDid = `did:${Methods.Erc1056}:${userAddress}`; const user = EwSigner.fromPrivateKey(userKeys.privateKey, providerSettings); const issuerKeys = new Keys(); const issuerAddress = issuerKeys.getAddress(); const issuerDid = `did:${Methods.Erc1056}:${issuerAddress}`; const issuer = EwSigner.fromPrivateKey( issuerKeys.privateKey, providerSettings ); const verifierKeys = new Keys(); const verifierAddress = verifierKeys.getAddress(); const verifierDid = `did:${Methods.Erc1056}:${verifierAddress}`; const verifier = EwSigner.fromPrivateKey( verifierKeys.privateKey, providerSettings ); let claimsUser: IClaimsUser; let claimsIssuer: IClaimsIssuer; let claimsVerifier: IClaimsVerifier; let userDoc: IDIDDocumentFull; let cluster: ChildProcess; before(async () => { const registry = await deployRegistry([ userAddress, issuerAddress, verifierAddress, ]); console.log(`registry: ${registry}`); cluster = await spawnIpfsCluster(); const store = new DidStore('http://localhost:8080'); userDoc = new DIDDocumentFull( userDid, new Operator(user, { address: registry }) ); const issuerDoc = new DIDDocumentFull( issuerDid, new Operator(issuer, { address: registry }) ); const verifierDoc = new DIDDocumentFull( verifierDid, new Operator(verifier, { address: registry }) ); await userDoc.create(); await issuerDoc.create(); await verifierDoc.create(); claimsUser = new ClaimsFactory( userKeys, userDoc, store, providerSettings ).createClaimsUser(); claimsIssuer = new ClaimsFactory( issuerKeys, issuerDoc, store, providerSettings ).createClaimsIssuer(); claimsVerifier = new ClaimsFactory( verifierKeys, verifierDoc, store, providerSettings ).createClaimsVerifier(); }); after(async () => { shutdownIpfsCluster(cluster); }); it('workflow of private claim generation, issuance and presentation should pass', async () => { // User(Subject) side const privateData = { private: '123', public: 'shhh' }; const { token: privateToken, saltedFields } = await claimsUser.createPrivateClaim(privateData, issuerDid); // Issuer side const issuedToken = await claimsIssuer.issuePrivateClaim(privateToken); // Application/User side const claimUrl = await claimsUser.publishPrivateClaim( issuedToken, saltedFields ); const encryptedSaltedFields: IProofData = { private: { value: saltedFields.private, encrypted: true }, public: { value: saltedFields.public, encrypted: false }, }; const proofToken = await claimsUser.createProofClaim( claimUrl, encryptedSaltedFields ); // Verifier side try { await claimsVerifier.verifyPrivateProof(proofToken); } catch (e) { console.error('error verifing claims:', e); } }); it('workflow of public claim generation, issuance and presentation should pass', async () => { // User(Subject) side const publicData = { public: '123' }; const token = await claimsUser.createPublicClaim(publicData); // Issuer side const issuedToken = await claimsIssuer.issuePublicClaim(token); // Application/User side const claimUrl = await claimsUser.publishPublicClaim( issuedToken, publicData ); // Verifier side return claimsVerifier.verifyPublicProof(claimUrl).should.be.fulfilled; }); });