From 26d221d73ba49e6782f4ef09606dd47346500119 Mon Sep 17 00:00:00 2001 From: ethella Date: Mon, 22 May 2023 11:42:12 -0700 Subject: [PATCH 1/4] Add symmetric encryption api --- packages/@magic-sdk/provider/src/modules/user.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/packages/@magic-sdk/provider/src/modules/user.ts b/packages/@magic-sdk/provider/src/modules/user.ts index 161199f17..6ec57d932 100644 --- a/packages/@magic-sdk/provider/src/modules/user.ts +++ b/packages/@magic-sdk/provider/src/modules/user.ts @@ -125,6 +125,16 @@ export class UserModule extends BaseModule { return this.request(requestPayload); } + public encryptWithPrivateKey(message: string, opts = {}) { + const requestPayload = createJsonRpcRequestPayload('magic_auth_encrypt_v1', [{ message }]); + return this.request(requestPayload); + } + + public decryptWithPrivateKey(cipherText: string, opts = {}) { + const requestPayload = createJsonRpcRequestPayload('magic_auth_decrypt_v1', [{ cipherText }]); + return this.request(requestPayload); + } + // Private members private localForageKey = 'mc_active_wallet'; } From 3c6e2ab6188124b5b4baedd10453a9773fc85516 Mon Sep 17 00:00:00 2001 From: ethella Date: Mon, 22 May 2023 13:39:10 -0700 Subject: [PATCH 2/4] update yarn.lock --- yarn.lock | 88 +++++++++++++++++++++++++++---------------------------- 1 file changed, 44 insertions(+), 44 deletions(-) diff --git a/yarn.lock b/yarn.lock index 64b4c3598..32bd537cc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2731,7 +2731,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/algorand@workspace:packages/@magic-ext/algorand" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2739,7 +2739,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/aptos@workspace:packages/@magic-ext/aptos" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 aptos: ^1.8.5 peerDependencies: aptos: ^1.8.5 @@ -2750,7 +2750,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/auth@workspace:packages/@magic-ext/auth" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2758,7 +2758,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/avalanche@workspace:packages/@magic-ext/avalanche" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2766,7 +2766,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/bitcoin@workspace:packages/@magic-ext/bitcoin" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2774,7 +2774,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/conflux@workspace:packages/@magic-ext/conflux" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2782,7 +2782,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/cosmos@workspace:packages/@magic-ext/cosmos" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2790,7 +2790,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/ed25519@workspace:packages/@magic-ext/ed25519" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2798,7 +2798,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/flow@workspace:packages/@magic-ext/flow" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 "@onflow/fcl": 0.0.41 "@onflow/types": 0.0.3 peerDependencies: @@ -2811,7 +2811,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/harmony@workspace:packages/@magic-ext/harmony" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2819,7 +2819,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/icon@workspace:packages/@magic-ext/icon" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2827,18 +2827,18 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/near@workspace:packages/@magic-ext/near" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft -"@magic-ext/oauth@^11.1.5, @magic-ext/oauth@workspace:packages/@magic-ext/oauth": +"@magic-ext/oauth@^11.1.6, @magic-ext/oauth@workspace:packages/@magic-ext/oauth": version: 0.0.0-use.local resolution: "@magic-ext/oauth@workspace:packages/@magic-ext/oauth" dependencies: - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/types": ^15.1.4 "@types/crypto-js": ~3.1.47 crypto-js: ^3.3.0 - magic-sdk: ^17.1.5 + magic-sdk: ^17.1.6 languageName: unknown linkType: soft @@ -2854,7 +2854,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/polkadot@workspace:packages/@magic-ext/polkadot" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2862,7 +2862,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/react-native-bare-oauth@workspace:packages/@magic-ext/react-native-bare-oauth" dependencies: - "@magic-sdk/react-native-bare": ^18.2.2 + "@magic-sdk/react-native-bare": ^18.2.3 "@magic-sdk/types": ^10.0.1 "@types/crypto-js": ~3.1.47 crypto-js: ^3.3.0 @@ -2878,7 +2878,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/react-native-expo-oauth@workspace:packages/@magic-ext/react-native-expo-oauth" dependencies: - "@magic-sdk/react-native-expo": ^18.2.2 + "@magic-sdk/react-native-expo": ^18.2.3 "@magic-sdk/types": ^10.0.0 "@types/crypto-js": ~3.1.47 crypto-js: ^3.3.0 @@ -2893,7 +2893,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/solana@workspace:packages/@magic-ext/solana" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2901,7 +2901,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/taquito@workspace:packages/@magic-ext/taquito" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2909,7 +2909,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/terra@workspace:packages/@magic-ext/terra" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2917,7 +2917,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/tezos@workspace:packages/@magic-ext/tezos" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2925,7 +2925,7 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/webauthn@workspace:packages/@magic-ext/webauthn" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft @@ -2933,16 +2933,16 @@ __metadata: version: 0.0.0-use.local resolution: "@magic-ext/zilliqa@workspace:packages/@magic-ext/zilliqa" dependencies: - "@magic-sdk/commons": ^13.1.4 + "@magic-sdk/commons": ^13.1.5 languageName: unknown linkType: soft -"@magic-sdk/commons@^13.1.4, @magic-sdk/commons@workspace:packages/@magic-sdk/commons": +"@magic-sdk/commons@^13.1.5, @magic-sdk/commons@workspace:packages/@magic-sdk/commons": version: 0.0.0-use.local resolution: "@magic-sdk/commons@workspace:packages/@magic-sdk/commons" dependencies: - "@magic-sdk/provider": ^17.1.4 - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/provider": ^17.1.5 + "@magic-sdk/types": ^15.1.4 peerDependencies: "@magic-sdk/provider": ">=4.3.0" "@magic-sdk/types": ">=3.1.1" @@ -2966,17 +2966,17 @@ __metadata: "@babel/core": ^7.9.6 "@babel/plugin-proposal-optional-chaining": ^7.9.0 "@babel/runtime": ^7.9.6 - "@magic-ext/oauth": ^11.1.5 - magic-sdk: ^17.1.5 + "@magic-ext/oauth": ^11.1.6 + magic-sdk: ^17.1.6 languageName: unknown linkType: soft -"@magic-sdk/provider@^17.1.4, @magic-sdk/provider@workspace:packages/@magic-sdk/provider": +"@magic-sdk/provider@^17.1.5, @magic-sdk/provider@workspace:packages/@magic-sdk/provider": version: 0.0.0-use.local resolution: "@magic-sdk/provider@workspace:packages/@magic-sdk/provider" dependencies: "@babel/plugin-transform-modules-commonjs": ^7.9.6 - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/types": ^15.1.4 "@peculiar/webcrypto": ^1.1.7 eventemitter3: ^4.0.4 localforage: ^1.7.4 @@ -3001,7 +3001,7 @@ __metadata: languageName: node linkType: hard -"@magic-sdk/react-native-bare@^18.2.2, @magic-sdk/react-native-bare@workspace:packages/@magic-sdk/react-native-bare": +"@magic-sdk/react-native-bare@^18.2.3, @magic-sdk/react-native-bare@workspace:packages/@magic-sdk/react-native-bare": version: 0.0.0-use.local resolution: "@magic-sdk/react-native-bare@workspace:packages/@magic-sdk/react-native-bare" dependencies: @@ -3009,9 +3009,9 @@ __metadata: "@babel/core": ^7.15.0 "@babel/plugin-transform-flow-strip-types": ^7.14.5 "@babel/runtime": ~7.10.4 - "@magic-sdk/commons": ^13.1.4 - "@magic-sdk/provider": ^17.1.4 - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/commons": ^13.1.5 + "@magic-sdk/provider": ^17.1.5 + "@magic-sdk/types": ^15.1.4 "@react-native-async-storage/async-storage": ^1.15.5 "@types/lodash": ^4.14.158 buffer: ~5.6.0 @@ -3037,7 +3037,7 @@ __metadata: languageName: unknown linkType: soft -"@magic-sdk/react-native-expo@^18.2.2, @magic-sdk/react-native-expo@workspace:packages/@magic-sdk/react-native-expo": +"@magic-sdk/react-native-expo@^18.2.3, @magic-sdk/react-native-expo@workspace:packages/@magic-sdk/react-native-expo": version: 0.0.0-use.local resolution: "@magic-sdk/react-native-expo@workspace:packages/@magic-sdk/react-native-expo" dependencies: @@ -3045,9 +3045,9 @@ __metadata: "@babel/core": ^7.15.0 "@babel/plugin-transform-flow-strip-types": ^7.14.5 "@babel/runtime": ~7.10.4 - "@magic-sdk/commons": ^13.1.4 - "@magic-sdk/provider": ^17.1.4 - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/commons": ^13.1.5 + "@magic-sdk/provider": ^17.1.5 + "@magic-sdk/types": ^15.1.4 "@react-native-async-storage/async-storage": ^1.15.5 "@types/lodash": ^4.14.158 buffer: ~5.6.0 @@ -3073,7 +3073,7 @@ __metadata: languageName: unknown linkType: soft -"@magic-sdk/types@^15.1.3, @magic-sdk/types@workspace:packages/@magic-sdk/types": +"@magic-sdk/types@^15.1.4, @magic-sdk/types@workspace:packages/@magic-sdk/types": version: 0.0.0-use.local resolution: "@magic-sdk/types@workspace:packages/@magic-sdk/types" languageName: unknown @@ -12402,16 +12402,16 @@ fsevents@^2.3.2: languageName: unknown linkType: soft -"magic-sdk@^17.1.5, magic-sdk@workspace:packages/magic-sdk": +"magic-sdk@^17.1.6, magic-sdk@workspace:packages/magic-sdk": version: 0.0.0-use.local resolution: "magic-sdk@workspace:packages/magic-sdk" dependencies: "@babel/core": ^7.9.6 "@babel/plugin-proposal-optional-chaining": ^7.9.0 "@babel/runtime": ^7.9.6 - "@magic-sdk/commons": ^13.1.4 - "@magic-sdk/provider": ^17.1.4 - "@magic-sdk/types": ^15.1.3 + "@magic-sdk/commons": ^13.1.5 + "@magic-sdk/provider": ^17.1.5 + "@magic-sdk/types": ^15.1.4 localforage: ^1.7.4 localforage-driver-memory: ^1.0.5 languageName: unknown From bb836d30aa85bd1adf7b3869286fa028eb3654ce Mon Sep 17 00:00:00 2001 From: ethella Date: Mon, 22 May 2023 14:02:35 -0700 Subject: [PATCH 3/4] Add unit tests --- .../test/spec/modules/user/gdkms.spec.ts | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts diff --git a/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts b/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts new file mode 100644 index 000000000..e33f6f5da --- /dev/null +++ b/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts @@ -0,0 +1,32 @@ +import browserEnv from '@ikscodes/browser-env'; +import { createMagicSDK } from '../../../factories'; + +beforeEach(() => { + browserEnv.restore(); +}); + +test('Encrypt `magic_auth_encrypt_v1`', async () => { + const magic = createMagicSDK(); + magic.user.request = jest.fn(); + + const message = 'hello world'; + + magic.user.encryptWithPrivateKey(message); + + const requestPayload = magic.user.request.mock.calls[0][0]; + expect(requestPayload.method).toBe('magic_auth_encrypt_v1'); + expect(requestPayload.params).toEqual([{ message }]); +}); + +test('Decrypt `magic_auth_decrypt_v1`', async () => { + const magic = createMagicSDK(); + magic.user.request = jest.fn(); + + const cipherText = 'XJD/1238t'; + + magic.user.decryptWithPrivateKey(cipherText); + + const requestPayload = magic.user.request.mock.calls[0][0]; + expect(requestPayload.method).toBe('magic_auth_decrypt_v1'); + expect(requestPayload.params).toEqual([{ cipherText }]); +}); From 563342bfdef3ac66eba7584577fa888455a2eeda Mon Sep 17 00:00:00 2001 From: ethella Date: Mon, 22 May 2023 14:27:51 -0700 Subject: [PATCH 4/4] Use Enum --- packages/@magic-sdk/provider/src/modules/user.ts | 4 ++-- .../provider/test/spec/modules/user/gdkms.spec.ts | 9 +++++---- packages/@magic-sdk/types/src/core/json-rpc-types.ts | 2 ++ 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/@magic-sdk/provider/src/modules/user.ts b/packages/@magic-sdk/provider/src/modules/user.ts index 6ec57d932..818059e6f 100644 --- a/packages/@magic-sdk/provider/src/modules/user.ts +++ b/packages/@magic-sdk/provider/src/modules/user.ts @@ -126,12 +126,12 @@ export class UserModule extends BaseModule { } public encryptWithPrivateKey(message: string, opts = {}) { - const requestPayload = createJsonRpcRequestPayload('magic_auth_encrypt_v1', [{ message }]); + const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.EncryptV1, [{ message }]); return this.request(requestPayload); } public decryptWithPrivateKey(cipherText: string, opts = {}) { - const requestPayload = createJsonRpcRequestPayload('magic_auth_decrypt_v1', [{ cipherText }]); + const requestPayload = createJsonRpcRequestPayload(MagicPayloadMethod.DecryptV1, [{ cipherText }]); return this.request(requestPayload); } diff --git a/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts b/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts index e33f6f5da..f537bc659 100644 --- a/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts +++ b/packages/@magic-sdk/provider/test/spec/modules/user/gdkms.spec.ts @@ -1,11 +1,12 @@ import browserEnv from '@ikscodes/browser-env'; +import { MagicPayloadMethod } from '@magic-sdk/types'; import { createMagicSDK } from '../../../factories'; beforeEach(() => { browserEnv.restore(); }); -test('Encrypt `magic_auth_encrypt_v1`', async () => { +test('Construct Encrypt Request with `magic_auth_encrypt_v1`', async () => { const magic = createMagicSDK(); magic.user.request = jest.fn(); @@ -14,11 +15,11 @@ test('Encrypt `magic_auth_encrypt_v1`', async () => { magic.user.encryptWithPrivateKey(message); const requestPayload = magic.user.request.mock.calls[0][0]; - expect(requestPayload.method).toBe('magic_auth_encrypt_v1'); + expect(requestPayload.method).toBe(MagicPayloadMethod.EncryptV1); expect(requestPayload.params).toEqual([{ message }]); }); -test('Decrypt `magic_auth_decrypt_v1`', async () => { +test('Construct Decrypt Request with `magic_auth_decrypt_v1`', async () => { const magic = createMagicSDK(); magic.user.request = jest.fn(); @@ -27,6 +28,6 @@ test('Decrypt `magic_auth_decrypt_v1`', async () => { magic.user.decryptWithPrivateKey(cipherText); const requestPayload = magic.user.request.mock.calls[0][0]; - expect(requestPayload.method).toBe('magic_auth_decrypt_v1'); + expect(requestPayload.method).toBe(MagicPayloadMethod.DecryptV1); expect(requestPayload.params).toEqual([{ cipherText }]); }); diff --git a/packages/@magic-sdk/types/src/core/json-rpc-types.ts b/packages/@magic-sdk/types/src/core/json-rpc-types.ts index d9645baeb..9de3c289e 100644 --- a/packages/@magic-sdk/types/src/core/json-rpc-types.ts +++ b/packages/@magic-sdk/types/src/core/json-rpc-types.ts @@ -143,4 +143,6 @@ export enum MagicPayloadMethod { MagicBoxHeartBeat = 'magic_box_heart_beat', AutoConnect = 'mc_auto_connect', Login = 'mc_login', + EncryptV1 = 'magic_auth_encrypt_V1', + DecryptV1 = 'magic_auth_decrypt_V1', }