@@ -176,6 +176,55 @@ describe('TSS Ecdsa MPCv2 Utils:', async function () {
176176 assert . equal ( bitgoKeychain . source , 'bitgo' ) ;
177177 } ) ;
178178
179+ it ( 'should generate TSS MPCv2 keys with v2 encryption envelopes' , async function ( ) {
180+ const bitgoSession = new DklsDkg . Dkg ( 3 , 2 , 2 ) ;
181+
182+ const round1Nock = await nockKeyGenRound1 ( bitgoSession , 1 ) ;
183+ const round2Nock = await nockKeyGenRound2 ( bitgoSession , 1 ) ;
184+ const round3Nock = await nockKeyGenRound3 ( bitgoSession , 1 ) ;
185+ const addKeyNock = await nockAddKeyChain ( coinName , 3 ) ;
186+ const params = {
187+ passphrase : 'test' ,
188+ enterprise : enterpriseId ,
189+ originalPasscodeEncryptionCode : '123456' ,
190+ encryptionVersion : 2 as const ,
191+ } ;
192+ const { userKeychain, backupKeychain, bitgoKeychain } = await tssUtils . createKeychains ( params ) ;
193+ assert . ok ( round1Nock . isDone ( ) ) ;
194+ assert . ok ( round2Nock . isDone ( ) ) ;
195+ assert . ok ( round3Nock . isDone ( ) ) ;
196+ assert . ok ( addKeyNock . isDone ( ) ) ;
197+
198+ assert . ok ( userKeychain ) ;
199+ assert . equal ( userKeychain . source , 'user' ) ;
200+ assert . ok ( userKeychain . commonKeychain ) ;
201+ assert . ok ( ECDSAUtils . EcdsaMPCv2Utils . validateCommonKeychainPublicKey ( userKeychain . commonKeychain ) ) ;
202+
203+ // Verify v2 envelopes for encryptedPrv
204+ assert . ok ( userKeychain . encryptedPrv ) ;
205+ const encryptedPrvParsed : { v : number } = JSON . parse ( userKeychain . encryptedPrv ) ;
206+ assert . equal ( encryptedPrvParsed . v , 2 , 'encryptedPrv should be a v2 envelope' ) ;
207+
208+ // Verify v2 envelopes for reducedEncryptedPrv
209+ assert . ok ( userKeychain . reducedEncryptedPrv ) ;
210+ const reducedEncryptedPrvParsed : { v : number } = JSON . parse ( userKeychain . reducedEncryptedPrv ) ;
211+ assert . equal ( reducedEncryptedPrvParsed . v , 2 , 'reducedEncryptedPrv should be a v2 envelope' ) ;
212+
213+ // Verify v2 envelope is decryptable via decryptAsync
214+ const decrypted = await bitgo . decryptAsync ( { input : userKeychain . encryptedPrv , password : params . passphrase } ) ;
215+ assert . ok ( decrypted , 'decryptAsync should successfully decrypt v2 envelope' ) ;
216+
217+ // Verify backup keychain also uses v2 envelopes
218+ assert . ok ( backupKeychain ) ;
219+ assert . equal ( backupKeychain . source , 'backup' ) ;
220+ assert . ok ( backupKeychain . encryptedPrv ) ;
221+ const backupEncryptedPrvParsed : { v : number } = JSON . parse ( backupKeychain . encryptedPrv ) ;
222+ assert . equal ( backupEncryptedPrvParsed . v , 2 , 'backup encryptedPrv should be a v2 envelope' ) ;
223+
224+ assert . ok ( bitgoKeychain ) ;
225+ assert . equal ( bitgoKeychain . source , 'bitgo' ) ;
226+ } ) ;
227+
179228 it ( 'should generate TSS MPCv2 keys for retrofit' , async function ( ) {
180229 const xiList = [
181230 Array . from ( bigIntToBufferBE ( BigInt ( 1 ) , 32 ) ) ,
0 commit comments