Skip to content

Commit 29b13c9

Browse files
test(wrapped-keys): LIT-3920 - Add assertions for signatures to batchGeneratePrivateKeys test
- It's worth noting that these pass (and the code works) even with the 'broken' implementation that didn't use runOnce - probably coincidentally the sdk returns the first node's result, and that node matches.
1 parent 7e4e83d commit 29b13c9

File tree

1 file changed

+82
-3
lines changed

1 file changed

+82
-3
lines changed

local-tests/tests/wrapped-keys/testBatchGeneratePrivateKeys.ts

Lines changed: 82 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,75 @@ import { log } from '@lit-protocol/misc';
22
import { TinnyEnvironment } from 'local-tests/setup/tinny-environment';
33
import { api } from '@lit-protocol/wrapped-keys';
44
import { getPkpSessionSigs } from 'local-tests/setup/session-sigs/get-pkp-session-sigs';
5+
import nacl from 'tweetnacl';
6+
import bs58 from 'bs58';
7+
import { ethers } from 'ethers';
8+
import { BatchGeneratePrivateKeysActionResult } from '../../../packages/wrapped-keys/src/lib/types';
59

6-
const { batchGeneratePrivateKeys } = api;
10+
const { batchGeneratePrivateKeys, exportPrivateKey } = api;
11+
12+
async function verifySolanaSignature(
13+
solanaResult: BatchGeneratePrivateKeysActionResult,
14+
solanaMessageToSign
15+
) {
16+
const {
17+
signedMessage: { signature },
18+
generatedPrivateKey: { generatedPublicKey },
19+
} = solanaResult;
20+
const signatureIsValidForPublicKey = nacl.sign.detached.verify(
21+
Buffer.from(solanaMessageToSign),
22+
bs58.decode(signature),
23+
bs58.decode(generatedPublicKey)
24+
);
25+
26+
console.log({ signatureIsValidForPublicKey, signature });
27+
if (!signatureIsValidForPublicKey) {
28+
throw new Error(
29+
`signature: ${signature} doesn't validate for the Solana public key: ${generatedPublicKey}`
30+
);
31+
}
32+
}
33+
async function verifyEvmSignature(
34+
litNodeClient,
35+
evmResult,
36+
messageToSign,
37+
pkpSessionSigs
38+
) {
39+
function verifyMessageSignature() {
40+
try {
41+
return ethers.utils.verifyMessage(
42+
messageToSign,
43+
evmResult.signedMessage.signature
44+
);
45+
} catch (err) {
46+
throw new Error(
47+
`When validating signed Ethereum message is valid: ${err.message}`
48+
);
49+
}
50+
}
51+
52+
const { decryptedPrivateKey } = await exportPrivateKey({
53+
litNodeClient,
54+
network: 'evm',
55+
id: evmResult.generatedPrivateKey.id,
56+
pkpSessionSigs,
57+
});
58+
59+
const recoveredAddress = verifyMessageSignature();
60+
61+
const wallet = new ethers.Wallet(decryptedPrivateKey);
62+
63+
console.log({
64+
recoveredAddress,
65+
walletAddress: wallet.address,
66+
signature: evmResult.signedMessage.signature,
67+
});
68+
if (recoveredAddress !== wallet.address) {
69+
throw new Error(
70+
"Recovered address from verifyMessage doesn't match the wallet address"
71+
);
72+
}
73+
}
774

875
/**
976
* Test Commands:
@@ -24,17 +91,19 @@ export const testBatchGeneratePrivateKeys = async (
2491
new Date(Date.now() + 1000 * 60 * 10).toISOString()
2592
); // 10 mins expiry
2693

94+
const solanaMessageToSign = 'This is a test solana message';
95+
const evmMessageToSign = 'This is a test evm message';
2796
const results = await batchGeneratePrivateKeys({
2897
pkpSessionSigs: pkpSessionSigsSigning,
2998
actions: [
3099
{
31100
network: 'evm',
32-
signMessageParams: { messageToSign: 'This is a test evm message' },
101+
signMessageParams: { messageToSign: evmMessageToSign },
33102
generateKeyParams: { memo: 'Test evm key' },
34103
},
35104
{
36105
network: 'solana',
37-
signMessageParams: { messageToSign: 'This is a test solana message' },
106+
signMessageParams: { messageToSign: solanaMessageToSign },
38107
generateKeyParams: { memo: 'Test solana key' },
39108
},
40109
],
@@ -63,6 +132,16 @@ export const testBatchGeneratePrivateKeys = async (
63132
throw new Error('Missing message signature in response');
64133
}
65134

135+
console.log('solana verify sig');
136+
await verifySolanaSignature(results[1], solanaMessageToSign);
137+
138+
console.log('evm verify sig');
139+
await verifyEvmSignature(
140+
devEnv.litNodeClient,
141+
results[0],
142+
evmMessageToSign,
143+
pkpSessionSigsSigning
144+
);
66145
console.log('results', results);
67146

68147
log('✅ testBatchGenerateEncryptedKeys');

0 commit comments

Comments
 (0)