Skip to content

Commit

Permalink
refactor: sigAndKeyType validation and getTssPath
Browse files Browse the repository at this point in the history
  • Loading branch information
lwin-kyaw committed Feb 25, 2025
1 parent d81f816 commit a29b786
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 42 deletions.
19 changes: 4 additions & 15 deletions packages/fnd-base/src/endpoints.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
import {
KEY_TYPE,
LEGACY_NETWORKS_ROUTE_MAP,
SIG_TYPE,
TORUS_LEGACY_NETWORK_TYPE,
TORUS_SAPPHIRE_NETWORK,
TORUS_SAPPHIRE_NETWORK_TYPE,
WEB3AUTH_KEY_TYPE,
WEB3AUTH_SIG_TYPE,
} from "@toruslabs/constants";

import { validateKeyTypeAndSigTypeForTSS } from "./utils";
import { validateSigTypeAndGetTSSPath } from "./utils";

export const SAPPHIRE_NETWORK_URLS: Record<TORUS_SAPPHIRE_NETWORK_TYPE, string[]> = {
[TORUS_SAPPHIRE_NETWORK.SAPPHIRE_DEVNET]: [
Expand Down Expand Up @@ -61,25 +60,15 @@ export const getTSSEndpoints = (
sapphireNetwork: TORUS_SAPPHIRE_NETWORK_TYPE,
legacyNetwork?: TORUS_LEGACY_NETWORK_TYPE,
keyType = KEY_TYPE.SECP256K1 as WEB3AUTH_KEY_TYPE,
sigType = SIG_TYPE.ECDSA_SECP256K1 as WEB3AUTH_SIG_TYPE
sigType?: WEB3AUTH_SIG_TYPE
) => {
const endpoints = SAPPHIRE_NETWORK_URLS[sapphireNetwork];
if (!endpoints || endpoints.length === 0) {
throw new Error(`Unsupported network: ${sapphireNetwork}`);
}

validateKeyTypeAndSigTypeForTSS(keyType, sigType);

let tssPath: "tss" | "tss-frost";
if (sigType === SIG_TYPE.ECDSA_SECP256K1) {
// we will use dkls for ECDSA Sigs
tssPath = "tss";
} else if (sigType === SIG_TYPE.ED25519 || sigType === SIG_TYPE.BIP340) {
// we will use frost for Ed25519 and BIP340 Sigs
tssPath = "tss-frost";
} else {
throw new Error(`Unsupported signature type: ${sigType}`);
}
// validate the keyType and sigType and get the relevant tssPath
const tssPath = validateSigTypeAndGetTSSPath(keyType, sigType);

const routeIdentifier = LEGACY_NETWORKS_ROUTE_MAP[legacyNetwork as TORUS_LEGACY_NETWORK_TYPE];
return endpoints.map((e) => {
Expand Down
27 changes: 27 additions & 0 deletions packages/fnd-base/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
import {
INodeDetails,
LEGACY_NETWORKS_ROUTE_MAP,
TORUS_LEGACY_NETWORK,
TORUS_LEGACY_NETWORK_TYPE,
TORUS_NETWORK_TYPE,
TORUS_SAPPHIRE_NETWORK,
TORUS_SAPPHIRE_NETWORK_TYPE,
WEB3AUTH_KEY_TYPE,
WEB3AUTH_SIG_TYPE,
} from "@toruslabs/constants";

import { getSapphireNodeDetails } from "./sapphireNetworkConfig";

export * from "./endpoints";
export * from "./sapphireNetworkConfig";
export * from "./utils";

export function fetchLocalConfig(network: TORUS_NETWORK_TYPE, keyType: WEB3AUTH_KEY_TYPE, sigType?: WEB3AUTH_SIG_TYPE): INodeDetails | undefined {
if (Object.values(TORUS_SAPPHIRE_NETWORK).includes(network as TORUS_SAPPHIRE_NETWORK_TYPE)) {
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE, undefined, keyType, sigType);
}

if (Object.values(TORUS_LEGACY_NETWORK).includes(network as TORUS_LEGACY_NETWORK_TYPE)) {
const legacyMap = LEGACY_NETWORKS_ROUTE_MAP[network as TORUS_LEGACY_NETWORK_TYPE];
if (legacyMap.migrationCompleted) return getSapphireNodeDetails(legacyMap.networkMigratedTo, network as TORUS_LEGACY_NETWORK_TYPE, keyType);
}

return undefined;
}
48 changes: 21 additions & 27 deletions packages/fnd-base/src/utils.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,6 @@
import {
INodeDetails,
KEY_TYPE,
LEGACY_NETWORKS_ROUTE_MAP,
SIG_TYPE,
TORUS_LEGACY_NETWORK,
TORUS_LEGACY_NETWORK_TYPE,
TORUS_NETWORK_TYPE,
TORUS_SAPPHIRE_NETWORK,
TORUS_SAPPHIRE_NETWORK_TYPE,
WEB3AUTH_KEY_TYPE,
WEB3AUTH_SIG_TYPE,
} from "@toruslabs/constants";
import { KEY_TYPE, SIG_TYPE, WEB3AUTH_KEY_TYPE, WEB3AUTH_SIG_TYPE } from "@toruslabs/constants";

import { getSapphireNodeDetails } from "./sapphireNetworkConfig";

export function validateKeyTypeAndSigTypeForTSS(keyType: WEB3AUTH_KEY_TYPE, sigType: WEB3AUTH_SIG_TYPE) {
export function validateKeyTypeAndSigTypeForTSS(keyType: WEB3AUTH_KEY_TYPE, sigType?: WEB3AUTH_SIG_TYPE) {
if (sigType === SIG_TYPE.ECDSA_SECP256K1) {
if (keyType !== KEY_TYPE.SECP256K1) {
throw new Error("Invalid key type for ecdsa-secp256k1");
Expand All @@ -27,20 +13,28 @@ export function validateKeyTypeAndSigTypeForTSS(keyType: WEB3AUTH_KEY_TYPE, sigT
if (keyType !== KEY_TYPE.ED25519) {
throw new Error("Invalid key type for ed25519");
}
} else {
throw new Error(`Invalid signature type, ${sigType}`);
}
}

export function fetchLocalConfig(network: TORUS_NETWORK_TYPE, keyType: WEB3AUTH_KEY_TYPE, sigType?: WEB3AUTH_SIG_TYPE): INodeDetails | undefined {
if (Object.values(TORUS_SAPPHIRE_NETWORK).includes(network as TORUS_SAPPHIRE_NETWORK_TYPE)) {
return getSapphireNodeDetails(network as TORUS_SAPPHIRE_NETWORK_TYPE, undefined, keyType, sigType);
}
export function validateSigTypeAndGetTSSPath(keyType: WEB3AUTH_KEY_TYPE, sigType?: WEB3AUTH_SIG_TYPE): "tss" | "tss-frost" {
validateKeyTypeAndSigTypeForTSS(keyType, sigType);

if (Object.values(TORUS_LEGACY_NETWORK).includes(network as TORUS_LEGACY_NETWORK_TYPE)) {
const legacyMap = LEGACY_NETWORKS_ROUTE_MAP[network as TORUS_LEGACY_NETWORK_TYPE];
if (legacyMap.migrationCompleted) return getSapphireNodeDetails(legacyMap.networkMigratedTo, network as TORUS_LEGACY_NETWORK_TYPE, keyType);
let tssPath: "tss" | "tss-frost";
if (!sigType) {
// if sigType is not provided, we will determine the tssPath based on the keyType
if (keyType === KEY_TYPE.SECP256K1) {
tssPath = "tss";
} else if (keyType === KEY_TYPE.ED25519) {
tssPath = "tss-frost";
}
} else if (sigType === SIG_TYPE.ECDSA_SECP256K1) {
// we will use dkls for ECDSA Sigs
tssPath = "tss";
} else if (sigType === SIG_TYPE.ED25519 || sigType === SIG_TYPE.BIP340) {
// we will use frost for Ed25519 and BIP340 Sigs
tssPath = "tss-frost";
} else {
throw new Error(`Unsupported signature type: ${sigType} for key: ${keyType}`);
}

return undefined;
return tssPath;
}

0 comments on commit a29b786

Please sign in to comment.