From 0607c2063f69bf3395df5bc39ecc3c7442c8bb88 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Tue, 14 Jan 2025 12:46:03 -0300 Subject: [PATCH 1/2] fix: epk encryption variable name typo --- packages/transaction-manager/src/transactions-factory.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/transaction-manager/src/transactions-factory.ts b/packages/transaction-manager/src/transactions-factory.ts index 62ccb74c08..aeb32d992b 100644 --- a/packages/transaction-manager/src/transactions-factory.ts +++ b/packages/transaction-manager/src/transactions-factory.ts @@ -85,7 +85,7 @@ export default class TransactionsFactory { ) { const encryptedKey: EncryptionTypes.IEncryptedData = await cipherProvider.encrypt( symmetricKey, - { encryptionParams }, + { encryptionParams: encryptionParam }, ); return { encryptedKey, multiFormattedIdentity }; } else { @@ -219,7 +219,7 @@ export default class TransactionsFactory { ) { const encryptedKey: EncryptionTypes.IEncryptedData = await cipherProvider.encrypt( channelKey.key, - { encryptionParams }, + { encryptionParams: encryptionParam }, ); return { encryptedKey, multiFormattedIdentity }; } else { From 959aa97a4965fb8e4b6663f20f07960cbd4afb78 Mon Sep 17 00:00:00 2001 From: rodrigopavezi Date: Wed, 15 Jan 2025 07:09:43 -0300 Subject: [PATCH 2/2] feat: add testing --- .../test/unit/transactions-factory.test.ts | 51 +++++++++++++++++++ .../test/unit/utils/test-data.ts | 8 ++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/packages/transaction-manager/test/unit/transactions-factory.test.ts b/packages/transaction-manager/test/unit/transactions-factory.test.ts index 1ced9a5727..d059d2c1aa 100644 --- a/packages/transaction-manager/test/unit/transactions-factory.test.ts +++ b/packages/transaction-manager/test/unit/transactions-factory.test.ts @@ -70,6 +70,57 @@ describe('transaction-factory', () => { ).toBe(true); }, 10000); + it('can create encrypted transaction with EthereumPrivateKeyCipherProvider', async () => { + const encryptedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( + data, + [ + TestData.idRaw1.encryptionParams, + TestData.idRaw2.encryptionParams, + TestData.idRaw3.encryptionParams, + ], + TestData.fakeEpkCipherProvider, + ); + // eslint-disable-next-line no-magic-numbers + + if (encryptedTx.encryptedData) { + // eslint-disable-next-line no-magic-numbers + // 'encryptedData not right' + expect(encryptedTx.encryptedData.length).toBe(126); + // 'encryptedData not right' + expect(encryptedTx.encryptedData.slice(0, 2)).toEqual( + MultiFormatTypes.prefix.AES256_GCM_ENCRYPTED, + ); + } else { + fail('encryptedData should not be undefined'); + } + + // 'encryptionMethod not right' + expect(encryptedTx.encryptionMethod).toEqual( + `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + ); + + // 'keys not right' + expect(Object.keys(encryptedTx.keys || {}).length).toEqual(3); + // 'keys not right' + expect(Object.keys(encryptedTx.keys || {})).toEqual([ + MultiFormat.serialize(TestData.idRaw1.identity), + MultiFormat.serialize(TestData.idRaw2.identity), + MultiFormat.serialize(TestData.idRaw3.identity), + ]); + + // 'encrypted keys looks wrong' + expect( + // eslint-disable-next-line no-magic-numbers + Object.values(encryptedTx.keys || {}).every((ek) => ek.length === 260), + ).toBe(true); + // 'encrypted keys looks wrong' + expect( + Object.values(encryptedTx.keys || {}).every( + (ek) => ek.slice(0, 2) === MultiFormatTypes.prefix.ECIES_ENCRYPTED, + ), + ).toBe(true); + }, 10000); + it('can create encrypted transaction with Lit Protocol', async () => { const encryptedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( data, diff --git a/packages/transaction-manager/test/unit/utils/test-data.ts b/packages/transaction-manager/test/unit/utils/test-data.ts index 453d126aa6..af170139af 100644 --- a/packages/transaction-manager/test/unit/utils/test-data.ts +++ b/packages/transaction-manager/test/unit/utils/test-data.ts @@ -140,11 +140,15 @@ export class FakeEpkCipherProvider implements CipherProviderTypes.ICipherProvide public async encrypt( data: string, options: { encryptionParams: EncryptionTypes.IEncryptionParameters }, - ): Promise { + ): Promise { const encryptionParams = options.encryptionParams; if (encryptionParams.method === EncryptionTypes.METHOD.ECIES) { - return ecEncrypt(encryptionParams.key, data); + const encryptedValue = await ecEncrypt(encryptionParams.key, data); + return { + type: EncryptionTypes.METHOD.ECIES, + value: encryptedValue, + }; } throw new Error('encryptionParams.method not supported');