Skip to content

Commit 9e2694e

Browse files
fix checkUserState function
1 parent aad0e2d commit 9e2694e

File tree

8 files changed

+73
-19
lines changed

8 files changed

+73
-19
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@iden3/js-iden3-auth",
3-
"version": "1.3.1",
3+
"version": "1.3.2",
44
"description": "iden3-auth implementation in JavaScript",
55
"main": "dist/cjs/index.js",
66
"source": "./src/index.ts",

src/circuits/atomicMtpV2.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { Resolvers } from '@lib/state/resolver';
33
import { checkQueryV2Circuits, ClaimOutputs, Query } from '@lib/circuits/query';
44
import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry';
55
import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier';
6-
import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common';
6+
import { checkIssuerNonRevState, checkIssuerState, getResolverByID } from '@lib/circuits/common';
77
import { DocumentLoader } from '@iden3/js-jsonld-merklization';
88
import {
99
AtomicQueryMTPV2PubSignals,
@@ -75,7 +75,11 @@ export class AtomicQueryMTPV2PubSignalsVerifier
7575
throw new Error(`resolver not found for issuerID ${this.pubSignals.issuerID.string()}`);
7676
}
7777

78-
await checkUserState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerClaimIdenState);
78+
await checkIssuerState(
79+
resolver,
80+
this.pubSignals.issuerID,
81+
this.pubSignals.issuerClaimIdenState
82+
);
7983

8084
if (this.pubSignals.isRevocationChecked === 0) {
8185
return;

src/circuits/atomicSigV2.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry';
22
import { checkQueryV2Circuits, ClaimOutputs, Query } from '@lib/circuits/query';
33
import { Resolvers } from '@lib/state/resolver';
44
import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier';
5-
import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common';
5+
import { checkIssuerNonRevState, checkIssuerState, getResolverByID } from '@lib/circuits/common';
66
import { getDateFromUnixTimestamp } from '@iden3/js-iden3-core';
77
import { DocumentLoader } from '@iden3/js-jsonld-merklization';
88
import {
@@ -68,7 +68,7 @@ export class AtomicQuerySigV2PubSignalsVerifier
6868
throw new Error(`resolver not found for issuerID ${this.pubSignals.issuerID.string()}`);
6969
}
7070

71-
await checkUserState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerAuthState);
71+
await checkIssuerState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerAuthState);
7272

7373
if (this.pubSignals.isRevocationChecked === 0) {
7474
return;

src/circuits/atomicV3.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { PubSignalsVerifier, VerifyOpts } from '@lib/circuits/registry';
22
import { ClaimOutputs, Query } from '@lib/circuits/query';
33
import { Resolvers } from '@lib/state/resolver';
44
import { IDOwnershipPubSignals } from '@lib/circuits/ownershipVerifier';
5-
import { checkIssuerNonRevState, checkUserState, getResolverByID } from '@lib/circuits/common';
5+
import { checkIssuerNonRevState, checkIssuerState, getResolverByID } from '@lib/circuits/common';
66
import { DID, getDateFromUnixTimestamp } from '@iden3/js-iden3-core';
77
import { DocumentLoader, getDocumentLoader } from '@iden3/js-jsonld-merklization';
88
import {
@@ -194,7 +194,7 @@ export class AtomicQueryV3PubSignalsVerifier
194194
throw new Error(`resolver not found for issuerID ${this.pubSignals.issuerID.string()}`);
195195
}
196196

197-
await checkUserState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerState);
197+
await checkIssuerState(resolver, this.pubSignals.issuerID, this.pubSignals.issuerState);
198198

199199
if (this.pubSignals.isRevocationChecked === 0) {
200200
return;

src/circuits/common.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,19 @@ import { Id, DID } from '@iden3/js-iden3-core';
22
import { IStateResolver, ResolvedState, Resolvers } from '@lib/state/resolver';
33
import { Hash } from '@iden3/js-merkletree';
44

5-
export const userStateError = new Error(`user state is not valid`);
5+
export const issuerStateError = new Error(`issuer state is not valid`);
66
export const gistStateError = new Error(`gist state is not valid`);
77

8-
export async function checkUserState(
8+
export async function checkIssuerState(
99
resolver: IStateResolver,
1010
userId: Id,
1111
userState: Hash
12-
): Promise<ResolvedState> {
13-
const userStateResolved: ResolvedState = await resolver.resolve(
14-
userId.bigInt(),
15-
userState.bigInt()
16-
);
17-
if (!userStateResolved.latest) {
18-
throw userStateError;
12+
): Promise<void> {
13+
try {
14+
await resolver.resolve(userId.bigInt(), userState.bigInt());
15+
} catch {
16+
throw issuerStateError;
1917
}
20-
return userStateResolved;
2118
}
2219

2320
export async function checkGlobalState(

test/common.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { DID } from '@iden3/js-iden3-core';
2+
import { checkIssuerState } from '@lib/circuits/common';
3+
import { mockResolverWithNoStateInContract, mockResolverWithNotLatesState } from './mocks';
4+
import { Hash } from '@iden3/js-merkletree';
5+
6+
describe('Common', () => {
7+
const issuerDID = DID.parse('did:iden3:polygon:mumbai:x6suHR8HkEYczV9yVeAKKiXCZAd25P8WS6QvNhszk');
8+
const issuerID = DID.idFromDID(issuerDID);
9+
const hash = Hash.fromBigInt(
10+
BigInt('13483594486393726782589954979757194488582220051583949915340451442108840786819')
11+
);
12+
it('checkIssuerState fails', async () => {
13+
await expect(
14+
checkIssuerState(mockResolverWithNoStateInContract, issuerID, hash)
15+
).rejects.toThrow('issuer state is not valid');
16+
});
17+
it('checkIssuerState', async () => {
18+
await checkIssuerState(mockResolverWithNotLatesState, issuerID, hash);
19+
});
20+
});

test/mocks.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,36 @@ class MockResolver implements IStateResolver {
2525
}
2626
}
2727

28+
class MockResolverWithNoStateInContract implements IStateResolver {
29+
resolve(): Promise<ResolvedState> {
30+
throw new Error('State is not genesis and not registered in the smart contract');
31+
}
32+
rootResolve(): Promise<ResolvedState> {
33+
throw new Error('GIST root does not exist in the smart contract');
34+
}
35+
}
36+
37+
class MockResolverWithNotLatesState implements IStateResolver {
38+
resolve(): Promise<ResolvedState> {
39+
const t: ResolvedState = {
40+
latest: false,
41+
state: null,
42+
genesis: false,
43+
transitionTimestamp: 1712653265
44+
};
45+
return Promise.resolve(t);
46+
}
47+
rootResolve(): Promise<ResolvedState> {
48+
const t: ResolvedState = {
49+
latest: false,
50+
state: null,
51+
genesis: false,
52+
transitionTimestamp: 1712653265
53+
};
54+
return Promise.resolve(t);
55+
}
56+
}
57+
2858
export const exampleDidDoc = {
2959
'@context': [
3060
'https://www.w3.org/ns/did/v1',
@@ -53,6 +83,9 @@ export const testOpts: VerifyOpts = {
5383
};
5484

5585
const mockStateResolver: MockResolver = new MockResolver();
86+
export const mockResolverWithNoStateInContract: MockResolver =
87+
new MockResolverWithNoStateInContract();
88+
export const mockResolverWithNotLatesState: MockResolver = new MockResolverWithNotLatesState();
5689
export const resolvers: Resolvers = {
5790
'polygon:amoy': mockStateResolver,
5891
'polygon:mumbai': mockStateResolver

0 commit comments

Comments
 (0)