UNPKG

@credo-ts/core

Version:

<p align="center"> <br /> <img alt="Credo Logo" src="https://github.com/openwallet-foundation/credo-ts/blob/c7886cb8377ceb8ee4efe8d264211e561a75072d/images/credo-logo.png" height="250px" /> </p> <h1 align="center"><b>Credo - Core</b></h1

43 lines (42 loc) • 2.41 kB
import { createIssue } from "../W3cDataIntegrityError.mjs"; //#region src/modules/w3c-di/proof-processing/proofSetValidation.ts /** * Implements VC Data Integrity v1.0 §4.5 steps 3.2-3.3 chain-structure validation. */ function validateProofChainStructure(proofs) { const proofIdToIndexList = /* @__PURE__ */ new Map(); const proofIdToUniqueIndex = /* @__PURE__ */ new Map(); const issues = []; for (const [index, proof] of proofs.entries()) { const proofId = "id" in proof && typeof proof.id === "string" ? proof.id : void 0; if (!proofId) continue; const existing = proofIdToIndexList.get(proofId); if (existing) existing.push(index); else { proofIdToIndexList.set(proofId, [index]); proofIdToUniqueIndex.set(proofId, index); } } for (const [proofId, indices] of proofIdToIndexList.entries()) if (indices.length > 1) { proofIdToUniqueIndex.delete(proofId); issues.push(createIssue("https://w3id.org/security#PROOF_VERIFICATION_ERROR", "Duplicate proof id in proof set", `Duplicate proof id '${proofId}' at indices ${indices.join(", ")}`)); } for (const [index, proof] of proofs.entries()) { const previousProofReferences = proof.previousProof ? Array.isArray(proof.previousProof) ? proof.previousProof : [proof.previousProof] : []; for (const previousProofReference of previousProofReferences) { const referencedProofIndex = proofIdToUniqueIndex.get(previousProofReference); if (referencedProofIndex === void 0) { const duplicateReferenceIndices = proofIdToIndexList.get(previousProofReference); const resolutionDetail = duplicateReferenceIndices ? `Reference '${previousProofReference}' is ambiguous due to duplicate proof ids at indices ${duplicateReferenceIndices.join(", ")}` : `Reference '${previousProofReference}' is not present in this proof set`; issues.push(createIssue("https://w3id.org/security#PROOF_VERIFICATION_ERROR", "Proof previousProof reference could not be resolved", resolutionDetail)); continue; } if (referencedProofIndex >= index) issues.push(createIssue("https://w3id.org/security#PROOF_VERIFICATION_ERROR", "Proof previousProof reference must target an earlier proof", `Reference targets proof index ${referencedProofIndex}, current proof index ${index}`)); } } if (issues.length > 0) return issues; return []; } //#endregion export { validateProofChainStructure }; //# sourceMappingURL=proofSetValidation.mjs.map