diff --git a/.changeset/wet-moons-sing.md b/.changeset/wet-moons-sing.md new file mode 100644 index 000000000..c49af072a --- /dev/null +++ b/.changeset/wet-moons-sing.md @@ -0,0 +1,5 @@ +--- +'@cypherock/sdk-app-manager': patch +--- + +Fixes device auth issue in multivariant firmware diff --git a/packages/app-manager/src/operations/authDevice/index.ts b/packages/app-manager/src/operations/authDevice/index.ts index a1a4f734d..bdd6653a5 100644 --- a/packages/app-manager/src/operations/authDevice/index.ts +++ b/packages/app-manager/src/operations/authDevice/index.ts @@ -61,6 +61,7 @@ const verifyChallengeSignature = async (params: { challenge: Uint8Array; serial: Uint8Array; firmwareVersion: string; + firmwareVariant: string; email?: string; cysyncVersion?: string; }) => { @@ -70,6 +71,7 @@ const verifyChallengeSignature = async (params: { challenge, serial, firmwareVersion, + firmwareVariant, email, cysyncVersion, } = params; @@ -87,6 +89,7 @@ const verifyChallengeSignature = async (params: { serial, isTestApp: (await helper.sdk.getDeviceState()) === DeviceState.INITIAL, firmwareVersion, + firmwareVariant, email, cysyncVersion, }, @@ -112,8 +115,10 @@ export const authDevice = async ( const info = await getDeviceInfo(sdk); assertOrThrowInvalidResult(info.firmwareVersion); + assertOrThrowInvalidResult(info.firmwareVariantInfo.variantStr); const firmwareVersion = `${info.firmwareVersion.major}.${info.firmwareVersion.minor}.${info.firmwareVersion.patch}`; + const firmwareVariant = info.firmwareVariantInfo.variantStr; const { onStatus, forceStatusUpdate } = createStatusListener({ enums: AuthDeviceStatus, @@ -134,6 +139,7 @@ export const authDevice = async ( serial, challenge, firmwareVersion, + firmwareVariant, email, cysyncVersion, }); diff --git a/packages/app-manager/src/services/__fixtures__/authVerification.ts b/packages/app-manager/src/services/__fixtures__/authVerification.ts index 7088a4850..375cc203e 100644 --- a/packages/app-manager/src/services/__fixtures__/authVerification.ts +++ b/packages/app-manager/src/services/__fixtures__/authVerification.ts @@ -155,6 +155,7 @@ const fixtures = { 151, 114, 241, 236, 231, 201, 150, 28, 204, ]), firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', isTestApp: false, }, result: true, @@ -171,6 +172,7 @@ const fixtures = { postfix1: undefined, postfix2: undefined, firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', isTestApp: false, }, ], @@ -206,6 +208,7 @@ const fixtures = { ]), postfix2: new Uint8Array([12, 28, 106, 169, 138, 41]), firmwareVersion: '2.4.0', + firmwareVariant: 'MULTI_COIN', isTestApp: true, }, result: true, @@ -222,6 +225,7 @@ const fixtures = { postfix1: '80de0982b3a21ae2128c7491', postfix2: '0c1c6aa98a29', firmwareVersion: '2.4.0', + firmwareVariant: 'MULTI_COIN', isTestApp: true, }, ], @@ -257,6 +261,7 @@ const fixtures = { ]), postfix2: new Uint8Array([12, 28, 106, 169, 138, 41]), firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', isTestApp: false, }, result: false, @@ -273,6 +278,7 @@ const fixtures = { postfix1: '80de0982b3a21ae2128c7491', postfix2: '0c1c6aa98a29', firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', isTestApp: false, }, ], diff --git a/packages/app-manager/src/services/authVerification.ts b/packages/app-manager/src/services/authVerification.ts index 2acbead73..802bf8967 100644 --- a/packages/app-manager/src/services/authVerification.ts +++ b/packages/app-manager/src/services/authVerification.ts @@ -39,6 +39,7 @@ export const verifyChallengeSignature = async (params: { challenge: Uint8Array; firmwareVersion: string; + firmwareVariant: string; isTestApp?: boolean; email?: string; cysyncVersion?: string; @@ -53,6 +54,7 @@ export const verifyChallengeSignature = async (params: { challenge: uint8ArrayToHex(params.challenge), firmwareVersion: params.firmwareVersion, + firmwareVariant: params.firmwareVariant, isTestApp: params.isTestApp, email: params.email, cysyncVersion: params.cysyncVersion, diff --git a/packages/app-manager/src/services/cardAuth.ts b/packages/app-manager/src/services/cardAuth.ts index 51fac3682..98f537d93 100644 --- a/packages/app-manager/src/services/cardAuth.ts +++ b/packages/app-manager/src/services/cardAuth.ts @@ -22,4 +22,9 @@ export const verifyCardChallengeSignature = async (params: { cysyncVersion?: string; onlyFailure?: boolean; sessionId?: string; -}) => verifyChallengeSignature({ ...params, firmwareVersion: '0.0.0' }); +}) => + verifyChallengeSignature({ + ...params, + firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', + }); diff --git a/packages/app-manager/src/services/deviceAuth.ts b/packages/app-manager/src/services/deviceAuth.ts index 75d0c18ad..a172a0ce2 100644 --- a/packages/app-manager/src/services/deviceAuth.ts +++ b/packages/app-manager/src/services/deviceAuth.ts @@ -18,6 +18,7 @@ export const verifyDeviceChallengeSignature = async (params: { challenge: Uint8Array; firmwareVersion: string; + firmwareVariant: string; isTestApp: boolean; email?: string; cysyncVersion?: string; diff --git a/packages/app-manager/tests/04.authDevice/__fixtures__/error.ts b/packages/app-manager/tests/04.authDevice/__fixtures__/error.ts index d26db153a..284b11871 100644 --- a/packages/app-manager/tests/04.authDevice/__fixtures__/error.ts +++ b/packages/app-manager/tests/04.authDevice/__fixtures__/error.ts @@ -4,6 +4,10 @@ import { deviceAppErrorTypeDetails, } from '@cypherock/sdk-interfaces'; import { IAuthDeviceTestCase } from './types'; +import { + FirmwareVariant, + firmwareVariantToJSON, +} from '../../../src/proto/generated/common'; const withUserRejection: IAuthDeviceTestCase = { name: 'When user rejects the device auth', @@ -29,6 +33,10 @@ const withUserRejection: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, }, }; @@ -75,6 +83,10 @@ const withSerialSignatureFailure: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, verifySerialSignatureCalls: [ [ @@ -158,6 +170,10 @@ const withChallengeSignatureFailure: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 63, 205, 246, 233, 246, 124, 84, 56, 185, 168, 7, 161, 59, 122, 91, 176, @@ -200,6 +216,7 @@ const withChallengeSignatureFailure: IAuthDeviceTestCase = { ]), isTestApp: false, firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], diff --git a/packages/app-manager/tests/04.authDevice/__fixtures__/invalidData.ts b/packages/app-manager/tests/04.authDevice/__fixtures__/invalidData.ts index 148a27306..9f353f348 100644 --- a/packages/app-manager/tests/04.authDevice/__fixtures__/invalidData.ts +++ b/packages/app-manager/tests/04.authDevice/__fixtures__/invalidData.ts @@ -1,5 +1,9 @@ import { DeviceAppError } from '@cypherock/sdk-interfaces'; import { IAuthDeviceTestCase } from './types'; +import { + FirmwareVariant, + firmwareVariantToJSON, +} from '../../../src/proto/generated/common'; const withInvaidSerialSigData: IAuthDeviceTestCase = { name: 'Invalid data in serialSig step', @@ -48,6 +52,10 @@ const withInvaidSerialSigData: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 250, 253, 111, 43, 36, 92, 54, 97, 161, 102, 155, 13, 159, 32, 200, 231, @@ -102,6 +110,10 @@ const withInvaidSerialSigData2: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 250, 253, 111, 43, 36, 92, 54, 97, 161, 102, 155, 13, 159, 32, 200, 231, @@ -160,6 +172,10 @@ const withInvalidChallengeSigData: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 250, 253, 111, 43, 36, 92, 54, 97, 161, 102, 155, 13, 159, 32, 200, 231, @@ -215,6 +231,10 @@ const withInvalidChallengeSigData2: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 250, 253, 111, 43, 36, 92, 54, 97, 161, 102, 155, 13, 159, 32, 200, 231, diff --git a/packages/app-manager/tests/04.authDevice/__fixtures__/types.ts b/packages/app-manager/tests/04.authDevice/__fixtures__/types.ts index dad251dbb..675e2b881 100644 --- a/packages/app-manager/tests/04.authDevice/__fixtures__/types.ts +++ b/packages/app-manager/tests/04.authDevice/__fixtures__/types.ts @@ -1,4 +1,4 @@ -import { IGetDeviceInfoResultResponse } from '../../../src'; +import { GetDeviceInfoResult } from '../../../src'; export interface IAuthDeviceTestCase { queries: { @@ -16,7 +16,7 @@ export interface IAuthDeviceTestCase { eventCalls?: number[][]; verifySerialSignatureCalls?: any[][]; verifyChallengeSignatureCalls?: any[][]; - deviceInfo: Partial; + deviceInfo: Partial; }; errorInstance?: any; errorMessage?: any; diff --git a/packages/app-manager/tests/04.authDevice/__fixtures__/valid.ts b/packages/app-manager/tests/04.authDevice/__fixtures__/valid.ts index d38ae31af..d1717ff37 100644 --- a/packages/app-manager/tests/04.authDevice/__fixtures__/valid.ts +++ b/packages/app-manager/tests/04.authDevice/__fixtures__/valid.ts @@ -1,3 +1,7 @@ +import { + FirmwareVariant, + firmwareVariantToJSON, +} from '../../../src/proto/generated/common'; import { IAuthDeviceTestCase } from './types'; const withValidData: IAuthDeviceTestCase = { @@ -100,6 +104,7 @@ const withValidData: IAuthDeviceTestCase = { ]), isTestApp: false, firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -110,6 +115,10 @@ const withValidData: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, }, }; @@ -171,6 +180,10 @@ const withPartiallySkippedStatus: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 143, 38, 255, 171, 87, 190, 161, 60, 70, 86, 74, 222, 253, 255, 156, 88, @@ -213,6 +226,7 @@ const withPartiallySkippedStatus: IAuthDeviceTestCase = { ]), isTestApp: false, firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -274,6 +288,10 @@ const withSkippedStatuses: IAuthDeviceTestCase = { minor: 0, patch: 0, }, + firmwareVariantInfo: { + variantId: FirmwareVariant.MULTI_COIN, + variantStr: firmwareVariantToJSON(FirmwareVariant.MULTI_COIN), + }, }, challenge: new Uint8Array([ 63, 205, 246, 233, 246, 124, 84, 56, 185, 168, 7, 161, 59, 122, 91, 176, @@ -316,6 +334,7 @@ const withSkippedStatuses: IAuthDeviceTestCase = { ]), isTestApp: false, firmwareVersion: '1.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], diff --git a/packages/app-manager/tests/05.authCard/__fixtures__/error.ts b/packages/app-manager/tests/05.authCard/__fixtures__/error.ts index a5a0f58a5..0c1d7ec35 100644 --- a/packages/app-manager/tests/05.authCard/__fixtures__/error.ts +++ b/packages/app-manager/tests/05.authCard/__fixtures__/error.ts @@ -198,6 +198,7 @@ const withChallengeSignatureFailure: IAuthCardTestCase = { 141, 85, 215, 54, 106, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], diff --git a/packages/app-manager/tests/05.authCard/__fixtures__/valid.ts b/packages/app-manager/tests/05.authCard/__fixtures__/valid.ts index 1a0ed408b..31886948b 100644 --- a/packages/app-manager/tests/05.authCard/__fixtures__/valid.ts +++ b/packages/app-manager/tests/05.authCard/__fixtures__/valid.ts @@ -101,6 +101,7 @@ const withValidData: IAuthCardTestCase = { 107, 113, 214, 188, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -202,6 +203,7 @@ const withPartiallySkippedStatus: IAuthCardTestCase = { 102, 156, 189, 63, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -298,6 +300,7 @@ const withSkippedStatuses: IAuthCardTestCase = { 141, 85, 215, 54, 106, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -405,6 +408,7 @@ const withCardIndex1: IAuthCardTestCase = { 107, 113, 214, 188, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -512,6 +516,7 @@ const withCardIndex2: IAuthCardTestCase = { 107, 113, 214, 188, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ], @@ -619,6 +624,7 @@ const withCardIndex4: IAuthCardTestCase = { 107, 113, 214, 188, ]), firmwareVersion: '0.0.0', + firmwareVariant: 'MULTI_COIN', }, ], ],