@@ -247,6 +247,72 @@ describe('generateQrDataAsync', function () {
247247 const decryptedData = await decryptAsync ( passcodeEncryptionCode , qrData . passcode . data ) ;
248248 decryptedData . should . equal ( passphrase ) ;
249249 } ) ;
250+
251+ it ( 'produces a v1 Box D when encryptionVersion is not set' , async function ( ) {
252+ const passphrase = 'testingIsFun' ;
253+ const passcodeEncryptionCode = '123456' ;
254+ const qrData = await generateQrDataAsync ( {
255+ backupKeychain : createKeychain ( { encryptedPrv : 'backupPrv' } ) ,
256+ bitgoKeychain : createKeychain ( { pub : 'bitgoPub' } ) ,
257+ coin : coins . get ( 'btc' ) ,
258+ passcodeEncryptionCode,
259+ passphrase,
260+ userKeychain : createKeychain ( { encryptedPrv : 'userPrv' } ) ,
261+ } ) ;
262+
263+ assert . ok ( qrData . passcode ) ;
264+ const envelope = JSON . parse ( qrData . passcode . data ) ;
265+ assert . notStrictEqual ( envelope . v , 2 , 'should default to v1 envelope' ) ;
266+ } ) ;
267+
268+ it ( 'produces a v2 Box D when encryptionVersion: 2' , async function ( ) {
269+ const passphrase = 'testingIsFun' ;
270+ const passcodeEncryptionCode = '123456' ;
271+ const qrData = await generateQrDataAsync ( {
272+ backupKeychain : createKeychain ( { encryptedPrv : 'backupPrv' } ) ,
273+ bitgoKeychain : createKeychain ( { pub : 'bitgoPub' } ) ,
274+ coin : coins . get ( 'btc' ) ,
275+ passcodeEncryptionCode,
276+ passphrase,
277+ userKeychain : createKeychain ( { encryptedPrv : 'userPrv' } ) ,
278+ encryptionVersion : 2 ,
279+ } ) ;
280+
281+ assert . ok ( qrData . passcode ) ;
282+ const envelope = JSON . parse ( qrData . passcode . data ) ;
283+ assert . strictEqual ( envelope . v , 2 , 'should produce v2 envelope' ) ;
284+ const decryptedData = await decryptAsync ( passcodeEncryptionCode , qrData . passcode . data ) ;
285+ decryptedData . should . equal ( passphrase ) ;
286+ } ) ;
287+
288+ it ( 'produces a v1 Box D when encryptionVersion: 1 is explicit' , async function ( ) {
289+ const passphrase = 'testingIsFun' ;
290+ const passcodeEncryptionCode = '123456' ;
291+ const qrData = await generateQrDataAsync ( {
292+ backupKeychain : createKeychain ( { encryptedPrv : 'backupPrv' } ) ,
293+ bitgoKeychain : createKeychain ( { pub : 'bitgoPub' } ) ,
294+ coin : coins . get ( 'btc' ) ,
295+ passcodeEncryptionCode,
296+ passphrase,
297+ userKeychain : createKeychain ( { encryptedPrv : 'userPrv' } ) ,
298+ encryptionVersion : 1 ,
299+ } ) ;
300+
301+ assert . ok ( qrData . passcode ) ;
302+ const envelope = JSON . parse ( qrData . passcode . data ) ;
303+ assert . notStrictEqual ( envelope . v , 2 , 'should produce v1 envelope' ) ;
304+ } ) ;
305+
306+ it ( 'omits Box D when passphrase or passcodeEncryptionCode is missing' , async function ( ) {
307+ const qrData = await generateQrDataAsync ( {
308+ backupKeychain : createKeychain ( { encryptedPrv : 'backupPrv' } ) ,
309+ bitgoKeychain : createKeychain ( { pub : 'bitgoPub' } ) ,
310+ coin : coins . get ( 'btc' ) ,
311+ userKeychain : createKeychain ( { encryptedPrv : 'userPrv' } ) ,
312+ encryptionVersion : 2 ,
313+ } ) ;
314+ assert . strictEqual ( qrData . passcode , undefined ) ;
315+ } ) ;
250316} ) ;
251317
252318describe ( 'generateLightningQrDataAsync' , function ( ) {
@@ -264,4 +330,22 @@ describe('generateLightningQrDataAsync', function () {
264330 const decryptedData = await decryptAsync ( passcodeEncryptionCode , qrData . passcode . data ) ;
265331 decryptedData . should . equal ( passphrase ) ;
266332 } ) ;
333+
334+ it ( 'produces a v2 Box D when encryptionVersion: 2' , async function ( ) {
335+ const passphrase = 'testingIsFun' ;
336+ const passcodeEncryptionCode = '123456' ;
337+ const qrData = await generateLightningQrDataAsync ( {
338+ userAuthKeychain : createKeychain ( { encryptedPrv : 'userAuthPrv' } ) ,
339+ coin : coins . get ( 'lnbtc' ) ,
340+ passcodeEncryptionCode,
341+ passphrase,
342+ encryptionVersion : 2 ,
343+ } ) ;
344+
345+ assert . ok ( qrData . passcode ) ;
346+ const envelope = JSON . parse ( qrData . passcode . data ) ;
347+ assert . strictEqual ( envelope . v , 2 ) ;
348+ const decryptedData = await decryptAsync ( passcodeEncryptionCode , qrData . passcode . data ) ;
349+ decryptedData . should . equal ( passphrase ) ;
350+ } ) ;
267351} ) ;
0 commit comments