All files / src/inspectors verifyIssuerProfile.ts

50% Statements 9/18
50% Branches 1/2
100% Functions 0/0
50% Lines 9/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57                        27x 27x                                       27x         27x   27x         81x       27x   27x   1x      
import { cryptoSuiteToType } from '../helpers/cryptoSuite';
import { SupportedVerificationSuites } from '../verifier';
import { type Suite } from '../models/Suite';
import { type Issuer } from '../models/Issuer';
 
async function loadRequiredVerificationSuite (proofType: string): Promise<Suite> {
  if (proofType === SupportedVerificationSuites.MerkleProof2019) {
    const { default: MerkleProof2019VerificationSuite } = await import('../suites/MerkleProof2019');
    return MerkleProof2019VerificationSuite as unknown as Suite;
  }
 
  if (proofType === SupportedVerificationSuites.Ed25519Signature2020) {
    const { default: Ed25519Signature2020VerificationSuite } = await import('../suites/Ed25519Signature2020');
    return Ed25519Signature2020VerificationSuite as unknown as Suite;
  }
 
  if (proofType === SupportedVerificationSuites.EcdsaSecp256k1Signature2019) {
    const { default: EcdsaSecp256k1Signature2019VerificationSuite } = await import('../suites/EcdsaSecp256k1Signature2019');
    return EcdsaSecp256k1Signature2019VerificationSuite as unknown as Suite;
  }
 
  if (proofType === SupportedVerificationSuites.EcdsaSd2023) {
    const { default: EcdsaSd2023VerificationSuite } = await import('../suites/EcdsaSd2023');
    return EcdsaSd2023VerificationSuite as unknown as Suite;
  }
}
 
export default async function verifyIssuerProfile (issuerProfile: Issuer): Promise<any> {
  if (!issuerProfile.proof) {
    console.warn('No proof found in the issuer profile.');
    return;
  }
 
  let proofType = issuerProfile.proof.type;
  if (proofType === 'DataIntegrityProof') {
    proofType = cryptoSuiteToType(issuerProfile.proof.cryptosuite);
  }
 
  const VerificationSuite: any = await loadRequiredVerificationSuite(proofType);
 
  const suite: Suite = new VerificationSuite({
    document: issuerProfile,
    proof: issuerProfile.proof,
    issuer: issuerProfile.issuer ? issuerProfile.issuer : issuerProfile,
    executeStep: async (step: string, action: () => any, verificationSuite?: string) => {
      return action();
    }
  });
 
  await suite.init();
  try {
    await suite.verifyProof();
  } catch (e) {
    throw new Error(`Issuer profile verification failed: ${e.message}`); // TODO: i18n
  }
}