
Research
Security News
Lazarus Strikes npm Again with New Wave of Malicious Packages
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
@silencelaboratories/walletprovider-sdk
Advanced tools
The client library for Silent Network Wallet Provider Service.
npm i @silencelaboratories/walletprovider-sdk
Check the demo for a quick start guide.
For description of classes, interfaces, types, please refer to documentation.
The library provides API to authenticate, generate keys, and sign messages against the Silent Network. Before sending request for a distributed key or signature, users need to be authenticated to the Silent Network.
Once authenticated, users register an ephemeral signing key pair and associate it with their identity. The ephemeral signing keys can later be used to authorize signing requests for duration of the session without the need for repeated user interaction, providing a seamless and secure authentication mechanism.
Users authenticate to Silent Network using 2 methods Wallet-based or Passkey.
Wallet-based authenticate users using their digital wallet, it runs at the same time users start doing keygen.
Passkey has 2 steps: register and login. The user registers a passkey with the network, then logs in with the passkey while starting the keygen process.
The ephemeral public claim will be associated with both EOAAuth and PasskeyAuth objects.
secp256k1, ed25519
The full working example is in the demo. The core object to use is the NetworkSigner. It allows to generate keys and do signatures.
In order to create your keys, you need two other components. The WalletProviderServiceClient that connects to the Backend part of the SDK, and the authenticator module.
We provide EOA authentication via EOAAuth module. Let's create the NetworkSigner
with associated EOAAuth
object.
const algSign = 'secp256k1'; // Signing algorithms of ephemeral key
// Generate ephemeral secret key esk
const sk = generateEphPrivateKey(algSign);
// Derive public part epk from esk
const ephPK = getEphPublicKey(sk, algSign);
// Arbitrary ID to identify the ephemeral key
const ephId = uuidv4();
// Create ephemeral key claim instance based on the ephemeral key
const ephClaim = new EphKeyClaim(
ephId,
ephPK,
algSign,
// Lifetime of one hour
60 * 60,
);
// Create EOA authenticator, signature will include epk
const eoaAuth = new EOAAuth(
accountsFromBrowserWallet[0],
new BrowserWallet(),
ephClaim
);
// Create a client that connects to the backend service
const wpClient = await createWalletProviderService(clusterConfig);
// Create a new signer instance
const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, eoaAuth);
Now you can generate a key, using the generateKey method. The method accepts optional permissions. No permissions means allow all operations.
const permissions = {
permissions: [
{
type: 'erc20',
method: 'approve',
to: '0x1234567890123456789012345678901234567890',
args: {
spender: '0x1234567890123456789012345678901234567890',
value: 10000,
eq: '<',
},
},
],
};
// Generate a new key
let resp: KeygenResponse = await sdk.generateKey(JSON.stringify(permissions));
Calling this method will cause to the Digital Wallet window to pop up, requesting the User to sign the request.
The returned KeygenResponse contains keyId
and publicKey
. The publicKey
is the public part of the key generated by Silent Network. Use the keyId
in subsequent calls to sign.
The ephemeral sk
key can be later used in subsequent signgen requests for authenticating.
First, we need to register user passkey to the network. We provide Passkey register via PasskeyRegister module.
const wpClient = await createWalletProviderService(clusterConfig);
const rpConfig: RelyingPartyConfig = {
rpId: 'localhost',
rpName: 'http://localhost:5173',
};
const userId = uuidv4();
const passkeyUser = {
id: userId,
displayName: 'Alice',
name: 'alice@gmail.com ' + userId, // For development purposes
};
const passkeyAuth = new PasskeyRegister(rpConfig, passkeyUser);
// Create a new signer instance
const sdk = new NetworkSigner(wpClient, +threshold, +partiesNumber, passkeyAuth);
// Register a new passkey
let resp: RegisterPasskeyResponse = await sdk.registerPasskey();
We provide Passkey login authentication via PasskeyAuth module. Let's create the NetworkSigner
with associated PasskeyAuth
object.
const algSign = 'secp256k1'; // Signing algorithms of ephemeral key
// Generate ephemeral secret key esk
const sk = generateEphPrivateKey(algSign);
// Derive public part epk from esk
const ephPK = getEphPublicKey(sk, algSign);
// Arbitrary ID to identify the ephemeral key
const ephId = uuidv4();
// Create ephemeral key claim instance based on the ephemeral key
const ephClaim = new EphKeyClaim(
ephId,
ephPK,
// Lifetime of one hour
60 * 60,
);
// Create a client that connects to the backend service
const wpClient = await createWalletProviderService(clusterConfig);
// Here we configure the relying party for local development
const rpConfig: RelyingPartyConfig = {
rpId: 'localhost',
rpName: 'http://localhost:5173',
};
// Get passkey credential id from your storage
const credentialId = getPasskeyCredentialId();
// Create Passkey authenticator, signature will include epk
const passkeyAuth = new PasskeyAuth(
rpConfig,
// We will do passkey auth/login with the provided credentialId
credentialId,
ephClaim,
);
// Create a new signer instance
const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, passkeyAuth);
Now you can generate a key like in the EOA example by calling the generateKey method.
Calling this method will prompt the device to request Passkey User Verification. Once user verification is done, the KeygenResponse is returned.
The sk
key can be later used in subsequent signgen requests.
The full signing example is here.
The workflow is similar to the keygen process. The core objects to use are the NetworkSigner, WalletProviderServiceClient, and the ephemeral authenticator module.
const authModule = new EphAuth(selectedEphId, ephSK, selectedEphSignAlg);
// Create a new signer instance
const sdk = new NetworkSigner(wpClient, threshold, partiesNumber, authModule);
Use the NetworkSigner.signMessage method in order to generate a signature.
const signMessage = new SignRequestBuilder()
.setRequest(
uuidv4(),
JSON.stringify({
userOperation: {
sender: '0x8d4cb2540d993fe34c646299f1ab4af3012ff34c',
nonce: '0x7',
initCode: '0x',
callData: '0000...',
callGasLimit: '0x18473',
verificationGasLimit: '0x18473',
preVerificationGas: '66768',
maxFeePerGas: '',
maxPriorityFeePerGas: '',
paymasterAndData: '0x',
},
entryPointVersion: 'v0.6.0',
entryPointAddress: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',
chainId: 80002,
}),
'accountAbstractionTx',
)
.setRequest(
uuidv4(),
'4549502d313931206d657373616765',
'rawBytes',
)
.build();
let resp = await sdk.signMessage(selectedKeyId, signMessage);
The SignResponse contains the signature sign
and the recovery ID recid
.
npm i
npm run build
The output will be in the dist
folder.
Please refer to README.md for instructions how to execute them.
npm run docs
./local_ci.sh
FAQs
Frontend SDK for Wallet Providers
The npm package @silencelaboratories/walletprovider-sdk receives a total of 807 weekly downloads. As such, @silencelaboratories/walletprovider-sdk popularity was classified as not popular.
We found that @silencelaboratories/walletprovider-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 11 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
The Socket Research Team has discovered six new malicious npm packages linked to North Korea’s Lazarus Group, designed to steal credentials and deploy backdoors.
Security News
Socket CEO Feross Aboukhadijeh discusses the open web, open source security, and how Socket tackles software supply chain attacks on The Pair Program podcast.
Security News
Opengrep continues building momentum with the alpha release of its Playground tool, demonstrating the project's rapid evolution just two months after its initial launch.