@iden3/js-iden3-auth
Version:
iden3-auth implementation in JavaScript
66 lines (65 loc) • 3.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AtomicQueryMTPV2PubSignalsVerifier = void 0;
const js_iden3_core_1 = require("@iden3/js-iden3-core");
const query_1 = require("../circuits/query");
const ownershipVerifier_1 = require("../circuits/ownershipVerifier");
const common_1 = require("../circuits/common");
const js_sdk_1 = require("@0xpolygonid/js-sdk");
const valuesSize = 64;
const defaultProofVerifyOpts = 1 * 60 * 60 * 1000; // 1 hour
class AtomicQueryMTPV2PubSignalsVerifier extends ownershipVerifier_1.IDOwnershipPubSignals {
constructor(pubSignals) {
super();
this.pubSignals = new js_sdk_1.AtomicQueryMTPV2PubSignals();
this.pubSignals = this.pubSignals.pubSignalsUnmarshal(js_sdk_1.byteEncoder.encode(JSON.stringify(pubSignals)));
if (!this.pubSignals.userID) {
throw new Error('user id is not presented in proof public signals');
}
if (!this.pubSignals.requestID) {
throw new Error('requestId is not presented in proof public signals');
}
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 (0, query_1.checkQueryV2Circuits)(js_sdk_1.CircuitId.AtomicQueryMTPV2, query, outs, schemaLoader, opts, verifiablePresentation);
return this.pubSignals;
}
async verifyStates(resolvers, opts) {
const resolver = (0, common_1.getResolverByID)(resolvers, this.pubSignals.issuerID);
if (!resolver) {
throw new Error(`resolver not found for issuerID ${this.pubSignals.issuerID.string()}`);
}
await (0, common_1.checkUserState)(resolver, this.pubSignals.issuerID, this.pubSignals.issuerClaimIdenState);
if (this.pubSignals.isRevocationChecked === 0) {
return;
}
const issuerNonRevStateResolved = await (0, common_1.checkIssuerNonRevState)(resolver, this.pubSignals.issuerID, this.pubSignals.issuerClaimNonRevState);
let acceptedStateTransitionDelay = defaultProofVerifyOpts;
if (opts?.acceptedStateTransitionDelay) {
acceptedStateTransitionDelay = opts.acceptedStateTransitionDelay;
}
if (!issuerNonRevStateResolved.latest) {
const timeDiff = Date.now() -
(0, js_iden3_core_1.getDateFromUnixTimestamp)(Number(issuerNonRevStateResolved.transitionTimestamp)).getTime();
if (timeDiff > acceptedStateTransitionDelay) {
throw new Error('issuer state is outdated');
}
}
}
}
exports.AtomicQueryMTPV2PubSignalsVerifier = AtomicQueryMTPV2PubSignalsVerifier;