Skip to content

Commit 4e8d654

Browse files
committed
feat: test cases
1 parent c4f5464 commit 4e8d654

File tree

3 files changed

+57
-8
lines changed

3 files changed

+57
-8
lines changed

src/helpers/nodeUtils.ts

+6-7
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ export async function retrieveOrImportShare(params: {
151151
idToken,
152152
importedShares,
153153
extraParams,
154+
serverTimeOffset,
154155
} = params;
155156
await get<void>(
156157
allowHost,
@@ -397,11 +398,11 @@ export async function retrieveOrImportShare(params: {
397398
session_token_sig_metadata: sessionTokenSigMetadata,
398399
keys,
399400
is_new_key: isNewKey,
400-
server_time_offset: serverTimeOffset,
401+
server_time_offset: serverTimeOffsetResponse,
401402
} = currentShareResponse.result;
402403

403404
isNewKeyResponses.push(isNewKey);
404-
serverTimeOffsetResponses.push(serverTimeOffset);
405+
serverTimeOffsetResponses.push(serverTimeOffsetResponse);
405406

406407
if (sessionTokenSigs?.length > 0) {
407408
// decrypt sessionSig if enc metadata is sent
@@ -526,15 +527,14 @@ export async function retrieveOrImportShare(params: {
526527
const thresholdIsNewKey = thresholdSame(isNewKeyResponses, ~~(endpoints.length / 2) + 1);
527528

528529
// Convert each string timestamp to a number
529-
const serverOffsetTime = serverTimeOffsetResponses.map((timestamp) => parseInt(timestamp, 10));
530-
530+
const serverOffsetTimes = serverTimeOffsetResponses.map((timestamp) => parseInt(timestamp, 10));
531531
return {
532532
privateKey,
533533
sessionTokenData,
534534
thresholdNonceData,
535535
nodeIndexes,
536536
isNewKey: thresholdIsNewKey === "true",
537-
serverTimeOffsetResponse: Math.max(...serverOffsetTime),
537+
serverTimeOffsetResponse: serverTimeOffset || Math.max(...serverOffsetTimes),
538538
};
539539
}
540540
throw new Error("Invalid");
@@ -560,8 +560,7 @@ export async function retrieveOrImportShare(params: {
560560
finalPubKey = ecCurve.keyFromPublic({ x: oAuthPubkeyX, y: oAuthPubkeyY }).getPublic();
561561
} else if (LEGACY_NETWORKS_ROUTE_MAP[network as TORUS_LEGACY_NETWORK_TYPE]) {
562562
if (enableOneKey) {
563-
const serverTimeOffsetValue = this.serverTimeOffset || serverTimeOffsetResponse;
564-
nonceResult = await getOrSetNonce(legacyMetadataHost, ecCurve, serverTimeOffsetValue, oAuthPubkeyX, oAuthPubkeyY, oAuthKey, !isNewKey);
563+
nonceResult = await getOrSetNonce(legacyMetadataHost, ecCurve, serverTimeOffsetResponse, oAuthPubkeyX, oAuthPubkeyY, oAuthKey, !isNewKey);
565564
metadataNonce = new BN(nonceResult.nonce || "0", 16);
566565
typeOfUser = nonceResult.typeOfUser;
567566
if (typeOfUser === "v2") {

src/torus.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -587,7 +587,7 @@ class Torus {
587587
finalKeyResult,
588588
isNewKey,
589589
enableOneKey,
590-
serverTimeOffset: keyResult.server_time_offset,
590+
serverTimeOffset: keyResult?.server_time_offset,
591591
});
592592
}
593593
throw new Error(`node results do not match at final lookup ${JSON.stringify(keyResult || {})}, ${JSON.stringify(errorResult || {})}`);

test/sapphire_devnet.test.ts

+50
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { TORUS_LEGACY_NETWORK, TORUS_SAPPHIRE_NETWORK } from "@toruslabs/constants";
22
import { generatePrivate } from "@toruslabs/eccrypto";
33
import NodeManager from "@toruslabs/fetch-node-details";
4+
import { fail } from "assert";
45
import BN from "bn.js";
56
import { expect } from "chai";
67
import faker from "faker";
@@ -374,6 +375,55 @@ describe("torus utils sapphire devnet", function () {
374375
});
375376
});
376377

378+
it("should fail at get or set nonce when server time offset is expired", async function () {
379+
const email = "[email protected]";
380+
const verifier = "google-lrc";
381+
const token = generateIdToken(email, "ES256");
382+
383+
const LEGACY_TORUS_NODE_MANAGER = new NodeManager({
384+
network: TORUS_LEGACY_NETWORK.TESTNET,
385+
});
386+
387+
const verifierDetails = { verifier, verifierId: email };
388+
const legacyTorus = new TorusUtils({
389+
network: TORUS_LEGACY_NETWORK.TESTNET,
390+
clientId: "YOUR_CLIENT_ID",
391+
enableOneKey: true,
392+
serverTimeOffset: -100,
393+
});
394+
const { torusNodeSSSEndpoints: torusNodeEndpoints, torusIndexes } = await LEGACY_TORUS_NODE_MANAGER.getNodeDetails(verifierDetails);
395+
try {
396+
await legacyTorus.retrieveShares(torusNodeEndpoints, torusIndexes, TORUS_TEST_VERIFIER, { verifier_id: email }, token);
397+
fail("should not reach here");
398+
} catch (err) {
399+
expect(err.status).to.equal(403);
400+
}
401+
});
402+
403+
it("should pass at get or set nonce when server time offset is not passed with default time offset", async function () {
404+
const email = "[email protected]";
405+
const verifier = "google-lrc";
406+
const token = generateIdToken(email, "ES256");
407+
408+
const LEGACY_TORUS_NODE_MANAGER = new NodeManager({
409+
network: TORUS_LEGACY_NETWORK.TESTNET,
410+
});
411+
412+
const verifierDetails = { verifier, verifierId: email };
413+
const legacyTorus = new TorusUtils({
414+
network: TORUS_LEGACY_NETWORK.TESTNET,
415+
clientId: "YOUR_CLIENT_ID",
416+
enableOneKey: true,
417+
});
418+
const { torusNodeSSSEndpoints: torusNodeEndpoints, torusIndexes } = await LEGACY_TORUS_NODE_MANAGER.getNodeDetails(verifierDetails);
419+
try {
420+
const response = await legacyTorus.retrieveShares(torusNodeEndpoints, torusIndexes, TORUS_TEST_VERIFIER, { verifier_id: email }, token);
421+
expect(response.metadata.typeOfUser).to.equal("v2");
422+
} catch (err) {
423+
fail("should not reach here");
424+
}
425+
});
426+
377427
it("should be able to update the `sessionTime` of the token signature data", async function () {
378428
const token = generateIdToken(TORUS_TEST_EMAIL, "ES256");
379429

0 commit comments

Comments
 (0)