Skip to content

[rc-naga-2025-01-30] Compatibility #786

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Draft
wants to merge 22 commits into
base: feat/naga-fix-bls-wasm-cleanup
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from 2 commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
756eb2c
add combiner for all
mikelodder7 Jan 27, 2025
eb24a01
fix generic-array version
mikelodder7 Jan 27, 2025
4ab5e93
remove unneeded code
mikelodder7 Jan 28, 2025
d3a198b
add tests for combine_and_verify that also print the results
mikelodder7 Jan 30, 2025
80b49b2
Merge pull request #779 from LIT-Protocol/ml/combine_all_signatures
Ansonhkg Jan 31, 2025
5d4ab05
feat: use rust unified combiner to support frost and multiple ecdsa s…
FedericoAmura Feb 11, 2025
63ac695
Merge branch 'refs/heads/feat/naga-fix-bls-wasm-cleanup' into feat/rc…
FedericoAmura Feb 12, 2025
e0b7b66
Merge branch 'refs/heads/feat/rc-naga-2025-01-30b' into feature/lit-4…
FedericoAmura Feb 12, 2025
fcc5757
feat: building fixes and cleanup
FedericoAmura Feb 12, 2025
6e736ff
feat: restore claims inside lit actions signature aggregation
FedericoAmura Feb 12, 2025
42a380f
feat: types unification
FedericoAmura Feb 12, 2025
d617a04
feat: removed unused types and executeJs return fixes
FedericoAmura Feb 12, 2025
f6213a4
feat: update PKPWallets with new signing schemes
FedericoAmura Feb 13, 2025
3112779
feat: linting fixes
FedericoAmura Feb 13, 2025
fe4c47b
feat: a missing linting fix that should complete ci check
FedericoAmura Feb 13, 2025
b04daad
fix: failing unit tests
FedericoAmura Feb 13, 2025
0f7a88e
fix: circular reference with PRODUCT_IDS
FedericoAmura Feb 14, 2025
341ea36
feat: clean ecdsa wasm
FedericoAmura Feb 14, 2025
b2734b7
feat: update pkpSign test to use verify all signing schemes and remov…
FedericoAmura Feb 14, 2025
976e3d7
feat: comment bls usage on pkpSign as it will not be supported yet
FedericoAmura Feb 14, 2025
685f759
feat: remove types import in constants
FedericoAmura Feb 17, 2025
df88cf5
Merge pull request #799 from LIT-Protocol/feature/lit-4007-js-sdk-add…
FedericoAmura Mar 11, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions local-tests/tests/testUseEoaSessionSigsToPkpSign.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
import { log } from '@lit-protocol/misc';
import { SigningScheme } from '@lit-protocol/types';

import { getEoaSessionSigs } from 'local-tests/setup/session-sigs/get-eoa-session-sigs';
import { getEoaAuthContext } from 'local-tests/setup/session-sigs/get-eoa-session-sigs';
import { TinnyEnvironment } from 'local-tests/setup/tinny-environment';

interface SigningSchemeConfig {
Expand Down Expand Up @@ -106,11 +106,11 @@ export const testUseEoaSessionSigsToPkpSign = async (

const signingScheme = signingSchemeConfig.signingScheme;
log(`Checking testUseEoaSessionSigsToPkpSign for ${signingSchemeConfig}`);
const eoaSessionSigs = await getEoaSessionSigs(devEnv, alice);
// const eoaSessionSigs = await getEoaSessionSigs(devEnv, alice);

const pkpSignature = await devEnv.litNodeClient.pkpSign({
pubKey: alice.pkp.publicKey,
sessionSigs: eoaSessionSigs,
authContext: getEoaAuthContext(devEnv, alice),
messageToSign: alice.loveLetter,
signingScheme,
});
Expand Down
3 changes: 3 additions & 0 deletions packages/constants/src/lib/constants/curves.ts
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,9 @@ export type LIT_CURVE_TYPE = keyof typeof LIT_CURVE; // Identical to Sig
// This should replicate SigShare.sigType in types package
export type LIT_CURVE_VALUES = (typeof LIT_CURVE)[keyof typeof LIT_CURVE];

/**
* CHANGE: This is not needed when the combiner is integrated
*/
export const CURVE_GROUPS = ['BLS', 'ECDSA', 'FROST'] as const;

/**
Expand Down
8 changes: 1 addition & 7 deletions packages/core/src/lib/lit-core.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import {
InvalidNodeAttestation,
InvalidParamType,
LIT_CURVE,
LIT_CURVE_VALUES,
LIT_ENDPOINT,
LIT_ERROR_CODE,
LIT_NETWORK,
Expand All @@ -23,12 +22,7 @@ import {
STAKING_STATES,
STAKING_STATES_VALUES,
UnknownError,
InvalidArgumentException,
LitNodeClientBadConfigError,
InvalidEthBlockhash,
LitNodeClientNotReadyError,
InvalidNodeAttestation,
LogLevel,
version,
LitEcdsaVariantType,
} from '@lit-protocol/constants';
import { LitContracts } from '@lit-protocol/contracts-sdk';
Expand Down
100 changes: 22 additions & 78 deletions packages/lit-node-client-nodejs/src/lib/lit-node-client-nodejs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ import {
InvalidParamType,
InvalidSessionSigs,
InvalidSignatureError,
LIT_ACTION_IPFS_HASH,
LIT_CURVE_TYPE,
LIT_ENDPOINT,
LitNodeClientNotReadyError,
Expand Down Expand Up @@ -296,71 +295,6 @@ export class LitNodeClientNodeJs extends LitCore implements ILitNodeClient {
};

/**
* Check if a given object is of type SessionKeyPair.
*
* @param obj - The object to check.
* @returns True if the object is of type SessionKeyPair.
*/
isSessionKeyPair(obj: unknown): obj is SessionKeyPair {
return (
typeof obj === 'object' &&
obj !== null &&
'publicKey' in obj &&
'secretKey' in obj &&
typeof obj.publicKey === 'string' &&
typeof obj.secretKey === 'string'
);
}

/**
* Generates wildcard capability for each of the LIT resources
* specified.
* @param litResources is an array of LIT resources
* @param addAllCapabilities is a boolean that specifies whether to add all capabilities for each resource
*/
static async generateSessionCapabilityObjectWithWildcards(
litResources: ILitResource[],
addAllCapabilities?: boolean
): Promise<ISessionCapabilityObject> {
const sessionCapabilityObject = new RecapSessionCapabilityObject({}, []);

// disable for now
const _addAllCapabilities = addAllCapabilities ?? false;

if (_addAllCapabilities) {
for (const litResource of litResources) {
sessionCapabilityObject.addAllCapabilitiesForResource(litResource);
}
}

return sessionCapabilityObject;
}

// backward compatibility
async generateSessionCapabilityObjectWithWildcards(
litResources: ILitResource[]
): Promise<ISessionCapabilityObject> {
return await LitNodeClientNodeJs.generateSessionCapabilityObjectWithWildcards(
litResources
);
}

/**
*
* Get expiration for session default time is 1 day / 24 hours
*
*/
static getExpiration = () => {
return new Date(Date.now() + 1000 * 60 * 60 * 24).toISOString();
};

// backward compatibility
getExpiration = () => {
return LitNodeClientNodeJs.getExpiration();
};

/**
*
* Get the signature from local storage, if not, generates one
*/
private _getWalletSig = async ({
Expand Down Expand Up @@ -934,7 +868,7 @@ export class LitNodeClientNodeJs extends LitCore implements ILitNodeClient {
*/
pkpSign = async (params: JsonPkpSignSdkParams): Promise<LitNodeSignature> => {
// -- validate required params
const requiredParamKeys = ['messageToSign', 'pubKey']; // TODO migrate to zod
const requiredParamKeys = ['messageToSign', 'pubKey', 'authContext']; // TODO migrate to zod

(requiredParamKeys as (keyof JsonPkpSignSdkParams)[]).forEach((key) => {
if (!params[key]) {
Expand Down Expand Up @@ -977,6 +911,16 @@ export class LitNodeClientNodeJs extends LitCore implements ILitNodeClient {
// ========== Get Node Promises ==========
// Handle promises for commands sent to Lit nodes

const targetNodeUrls = targetNodePrices.map(({ url }) => url);
const nodePromises = this._getNodePromises(
targetNodeUrls,
(url: string) => {
// -- get the session sig from the url key
const sessionSig = this._getSessionSigByUrl({
sessionSigs,
url,
});

const toSign =
CURVE_GROUP_BY_CURVE_TYPE[params.signingScheme] !== 'ECDSA'
? params.messageToSign!
Expand All @@ -985,21 +929,17 @@ export class LitNodeClientNodeJs extends LitCore implements ILitNodeClient {
const reqBody: JsonPkpSignRequest = {
toSign: normalizeArray(toSign),
signingScheme: params.signingScheme,
pubkey: hexPrefixed(params.pubKey),
authSig: sessionSig,

const reqBody: JsonPkpSignRequest<LIT_CURVE_TYPE> = {
toSign: normalizeArray(params.toSign),
pubkey: hexPrefixed(params.pubKey),
authSig: sessionSig,

// nodeSet: thresholdNodeSet,
nodeSet: nodeSet,
};
// -- optional params - no longer allowed in >= Naga?
// ...(params.authContext.authMethods &&
// params.authContext.authMethods.length > 0 && {
// authMethods: params.authContext.authMethods,
// }),

// nodeSet: thresholdNodeSet,
nodeSet: this._getNodeSet(targetNodeUrls),
signingScheme: 'EcdsaK256Sha256',
};

logWithRequestId(requestId, 'reqBody:', reqBody);
Expand All @@ -1009,10 +949,14 @@ export class LitNodeClientNodeJs extends LitCore implements ILitNodeClient {
endpoint: LIT_ENDPOINT.PKP_SIGN,
});

const res = await this.handleNodePromises<PKPSignEndpointResponse>(
return this.generatePromise(urlWithPath, reqBody, requestId);
}
);

const res = await this._handleNodePromises(
nodePromises,
requestId,
nodeSet.length
this._getThreshold()
);

// ========== Handle Response ==========
Expand Down
5 changes: 1 addition & 4 deletions packages/pkp-base/src/lib/pkp-base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,6 @@
* The module exports the PKPBase class, as well as the PKPBaseProp type definition used for
* initializing the class instances.
*/
import depd from 'depd';

import {
InitError,
LitNodeClientNotReadyError,
Expand All @@ -20,7 +18,6 @@ import {
AuthenticationContext,
JsonExecutionSdkParams,
PKPBaseProp,
AuthSig,
LitNodeSignature,
PKPBaseDefaultParams,
RPCUrls,
Expand Down Expand Up @@ -357,7 +354,7 @@ export class PKPBase<T = PKPBaseDefaultParams> {
const sig = await this.litNodeClient.pkpSign({
messageToSign,
pubKey: this.uncompressedPubKey,
sessionSigs: controllerSessionSigs,
authContext: this.authContext,
signingScheme: 'EcdsaK256Sha256',
});

Expand Down
8 changes: 4 additions & 4 deletions packages/types/src/lib/interfaces.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { Provider } from '@ethersproject/abstract-provider';
import depd from 'depd';

import { SigType } from './EndpointResponses';
import { EcdsaSigType, SigType } from './EndpointResponses';
import { ILitNodeClient } from './ILitNodeClient';
import { ISessionCapabilityObject, LitResourceAbilityRequest } from './models';
import {
Expand All @@ -19,7 +19,6 @@ import {
SolRpcConditions,
UnifiedAccessControlConditions,
} from './types';
import { EcdsaSigType, SigType } from './EndpointResponses';
const deprecated = depd('lit-js-sdk:types:interfaces');

export interface AccsOperatorParams {
Expand Down Expand Up @@ -187,7 +186,6 @@ export interface Node {
}

export interface BaseJsonPkpSignRequest {
authMethods?: AuthMethod[];
signingScheme: SigningScheme;
}

Expand All @@ -198,7 +196,8 @@ export interface BaseJsonPkpSignRequest {
export interface JsonPkpSignSdkParams {
pubKey: string;
messageToSign: Uint8Array;
sessionSigs: SessionSigsMap;
authContext: AuthenticationContext;
userMaxPrice?: bigint;
}

/**
Expand All @@ -208,6 +207,7 @@ export interface JsonPkpSignRequest
extends BaseJsonPkpSignRequest,
NodeSetRequired {
authSig: AuthSig;
authMethods?: AuthMethod[];
toSign: ArrayLike<number>;

/**
Expand Down
Loading