UNPKG

@iden3/js-iden3-auth

Version:

iden3-auth implementation in JavaScript

56 lines (55 loc) 2.86 kB
import { checkQueryV2Circuits } from '../circuits/query.js'; import { IDOwnershipPubSignals } from '../circuits/ownershipVerifier.js'; import { checkIssuerNonRevState, checkUserState, getResolverByID } from '../circuits/common.js'; import { getDateFromUnixTimestamp } from '@iden3/js-iden3-core'; import { AtomicQuerySigV2PubSignals, byteEncoder, CircuitId } from '@0xpolygonid/js-sdk'; const valuesSize = 64; const defaultProofVerifyOpts = 1 * 60 * 60 * 1000; // 1 hour export class AtomicQuerySigV2PubSignalsVerifier extends IDOwnershipPubSignals { constructor(pubSignals) { super(); this.pubSignals = new AtomicQuerySigV2PubSignals(); this.pubSignals = this.pubSignals.pubSignalsUnmarshal(byteEncoder.encode(JSON.stringify(pubSignals))); this.userId = this.pubSignals.userID; this.challenge = this.pubSignals.requestID; } async verifyQuery(query, schemaLoader, verifiablePresentation, opts) { const outs = { issuerId: this.pubSignals.issuerID, schemaHash: this.pubSignals.claimSchema, slotIndex: this.pubSignals.slotIndex, operator: this.pubSignals.operator, value: this.pubSignals.value, timestamp: this.pubSignals.timestamp, merklized: this.pubSignals.merklized, claimPathKey: this.pubSignals.claimPathKey, claimPathNotExists: this.pubSignals.claimPathNotExists, valueArraySize: valuesSize, isRevocationChecked: this.pubSignals.isRevocationChecked }; await checkQueryV2Circuits(CircuitId.AtomicQuerySigV2, query, outs, schemaLoader, opts, verifiablePresentation); return this.pubSignals; } async verifyStates(resolvers, opts) { const resolver = getResolverByID(resolvers, this.pubSignals.issuerID); if (!resolver) { throw new Error(`resolver not found for issuerID ${this.pubSignals.issuerID.string()}`); } await checkUserState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerAuthState); if (this.pubSignals.isRevocationChecked === 0) { return; } const issuerNonRevStateResolved = await checkIssuerNonRevState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerClaimNonRevState); let acceptedStateTransitionDelay = defaultProofVerifyOpts; if (opts?.acceptedStateTransitionDelay) { acceptedStateTransitionDelay = opts.acceptedStateTransitionDelay; } if (!issuerNonRevStateResolved.latest) { const timeDiff = Date.now() - getDateFromUnixTimestamp(Number(issuerNonRevStateResolved.transitionTimestamp)).getTime(); if (timeDiff > acceptedStateTransitionDelay) { throw new Error('issuer state is outdated'); } } } }