@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.2.0 → 0.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js +3 -3
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/GetVersionCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetVersionCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/InitCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/InitCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/InitCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/InitCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPCommand.js +2 -2
- package/lib/cjs/internal/utils/LKRPCommand.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPCommand.test.js +2 -2
- package/lib/cjs/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/cjs/package.json +2 -2
- package/lib/esm/internal/app-binder/command/GetAppNameCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js +3 -3
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/GetVersionCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetVersionCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/InitCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/InitCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/InitCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/InitCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockHeader.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockHeader.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js.map +3 -3
- package/lib/esm/internal/utils/LKRPCommand.js +2 -2
- package/lib/esm/internal/utils/LKRPCommand.js.map +3 -3
- package/lib/esm/internal/utils/LKRPCommand.test.js +2 -2
- package/lib/esm/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/esm/package.json +2 -2
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/InitCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/InitCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPCommand.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +7 -7
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var t=require("@ledgerhq/device-management-kit"),e=require("vitest"),n=require("./SetTrustedMemberCommand");const d=Uint8Array.from([240,202,204,26]);(0,e.describe)("SetTrustedMemberCommand",()=>{const a=()=>({iv:d,memberTlv:d});(0,e.describe)("getApdu()",()=>{(0,e.it)("builds correct APDU",()=>{const o=new n.SetTrustedMemberCommand(a()).getApdu(),r=Uint8Array.from([[224,9,0,0,10],[0,4,240,202,204,26],[240,202,204,26]].flat());(0,e.expect)(o.getRawApdu()).toEqual(r)})}),(0,e.describe)("parseResponse()",()=>{(0,e.it)("returns success when no data and SW=0x9000",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}),r=s.parseResponse(o);(0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!0),(0,t.isSuccessCommandResult)(r)&&(0,e.expect)(r.data).toEqual(void 0)}),(0,e.it)("returns error on unexpected trailing data",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1,2])}),r=s.parseResponse(o);(0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!1),(0,t.isSuccessCommandResult)(r)||((0,e.expect)(r.error).toBeInstanceOf(t.InvalidStatusWordError),(0,e.expect)(r.error.originalError?.message).toMatch("Unexpected response data"))}),(0,e.it)("maps SW errors to CommandResult error",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array([])}),r=s.parseResponse(o);if((0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!1),!(0,t.isSuccessCommandResult)(r))if("errorCode"in r.error)(0,e.expect)(r.error.errorCode).toEqual("6a86");else throw new Error("Unexpected error type: errorCode property is missing")})})});
|
|
1
|
+
"use strict";var t=require("@ledgerhq/device-management-kit"),e=require("vitest"),n=require("./SetTrustedMemberCommand");const d=Uint8Array.from([240,202,204,26]);(0,e.describe)("SetTrustedMemberCommand",()=>{const a=()=>({iv:d,memberTlv:d});(0,e.describe)("name",()=>{(0,e.it)("should be 'setTrustedMember'",()=>{const s=new n.SetTrustedMemberCommand(a());(0,e.expect)(s.name).toBe("setTrustedMember")})}),(0,e.describe)("getApdu()",()=>{(0,e.it)("builds correct APDU",()=>{const o=new n.SetTrustedMemberCommand(a()).getApdu(),r=Uint8Array.from([[224,9,0,0,10],[0,4,240,202,204,26],[240,202,204,26]].flat());(0,e.expect)(o.getRawApdu()).toEqual(r)})}),(0,e.describe)("parseResponse()",()=>{(0,e.it)("returns success when no data and SW=0x9000",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}),r=s.parseResponse(o);(0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!0),(0,t.isSuccessCommandResult)(r)&&(0,e.expect)(r.data).toEqual(void 0)}),(0,e.it)("returns error on unexpected trailing data",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([144,0]),data:Uint8Array.from([1,2])}),r=s.parseResponse(o);(0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!1),(0,t.isSuccessCommandResult)(r)||((0,e.expect)(r.error).toBeInstanceOf(t.InvalidStatusWordError),(0,e.expect)(r.error.originalError?.message).toMatch("Unexpected response data"))}),(0,e.it)("maps SW errors to CommandResult error",()=>{const s=new n.SetTrustedMemberCommand(a()),o=new t.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array([])}),r=s.parseResponse(o);if((0,e.expect)((0,t.isSuccessCommandResult)(r)).toBe(!1),!(0,t.isSuccessCommandResult)(r))if("errorCode"in r.error)(0,e.expect)(r.error.errorCode).toEqual("6a86");else throw new Error("Unexpected error type: errorCode property is missing")})})});
|
|
2
2
|
//# sourceMappingURL=SetTrustedMemberCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SetTrustedMemberCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n ApduResponse,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SetTrustedMemberCommand,\n type SetTrustedMemberCommandArgs,\n} from \"./SetTrustedMemberCommand\";\n\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SetTrustedMemberCommand\", () => {\n const makeArgs = (): SetTrustedMemberCommandArgs => ({\n iv: PLACEHOLDER_BYTES,\n memberTlv: PLACEHOLDER_BYTES,\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from(\n [\n [0xe0, 0x09, 0x00, 0x00, 0x0a], // CLA, INS, P1, P2, Lc\n [0x00, 0x04, 0xf0, 0xca, 0xcc, 0x1a], // IV\n [0xf0, 0xca, 0xcc, 0x1a], // Member\n ].flat(),\n );\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns success when no data and SW=0x9000\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(undefined);\n }\n });\n\n it(\"returns error on unexpected trailing data\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01, 0x02]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n expect((result.error.originalError as Error)?.message).toMatch(\n \"Unexpected response data\",\n );\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n if (\"errorCode\" in result.error) {\n expect(result.error.errorCode).toEqual(\"6a86\");\n } else {\n throw new Error(\n \"Unexpected error type: errorCode property is missing\",\n );\n }\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAIO,2CACPC,EAAqC,kBAErCC,EAGO,qCAEP,MAAMC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAElE,YAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAW,KAAoC,CACnD,GAAID,EACJ,UAAWA,CACb,MAEA,YAAS,YAAa,IAAM,IAC1B,MAAG,sBAAuB,IAAM,CAK9B,
|
|
6
|
-
"names": ["import_device_management_kit", "import_vitest", "import_SetTrustedMemberCommand", "PLACEHOLDER_BYTES", "makeArgs", "
|
|
4
|
+
"sourcesContent": ["import {\n ApduResponse,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SetTrustedMemberCommand,\n type SetTrustedMemberCommandArgs,\n} from \"./SetTrustedMemberCommand\";\n\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SetTrustedMemberCommand\", () => {\n const makeArgs = (): SetTrustedMemberCommandArgs => ({\n iv: PLACEHOLDER_BYTES,\n memberTlv: PLACEHOLDER_BYTES,\n });\n\n describe(\"name\", () => {\n it(\"should be 'setTrustedMember'\", () => {\n const cmd = new SetTrustedMemberCommand(makeArgs());\n expect(cmd.name).toBe(\"setTrustedMember\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from(\n [\n [0xe0, 0x09, 0x00, 0x00, 0x0a], // CLA, INS, P1, P2, Lc\n [0x00, 0x04, 0xf0, 0xca, 0xcc, 0x1a], // IV\n [0xf0, 0xca, 0xcc, 0x1a], // Member\n ].flat(),\n );\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns success when no data and SW=0x9000\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(undefined);\n }\n });\n\n it(\"returns error on unexpected trailing data\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: Uint8Array.from([0x01, 0x02]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n expect((result.error.originalError as Error)?.message).toMatch(\n \"Unexpected response data\",\n );\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new SetTrustedMemberCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n if (\"errorCode\" in result.error) {\n expect(result.error.errorCode).toEqual(\"6a86\");\n } else {\n throw new Error(\n \"Unexpected error type: errorCode property is missing\",\n );\n }\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAAA,IAAAA,EAIO,2CACPC,EAAqC,kBAErCC,EAGO,qCAEP,MAAMC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAElE,YAAS,0BAA2B,IAAM,CACxC,MAAMC,EAAW,KAAoC,CACnD,GAAID,EACJ,UAAWA,CACb,MAEA,YAAS,OAAQ,IAAM,IACrB,MAAG,+BAAgC,IAAM,CACvC,MAAME,EAAM,IAAI,0BAAwBD,EAAS,CAAC,KAClD,UAAOC,EAAI,IAAI,EAAE,KAAK,kBAAkB,CAC1C,CAAC,CACH,CAAC,KAED,YAAS,YAAa,IAAM,IAC1B,MAAG,sBAAuB,IAAM,CAK9B,MAAMC,EAHM,IAAI,0BAAwBF,EAAS,CAAC,EAGjC,QAAQ,EACnBG,EAAW,WAAW,KAC1B,CACE,CAAC,IAAM,EAAM,EAAM,EAAM,EAAI,EAC7B,CAAC,EAAM,EAAM,IAAM,IAAM,IAAM,EAAI,EACnC,CAAC,IAAM,IAAM,IAAM,EAAI,CACzB,EAAE,KAAK,CACT,KAGA,UAAOD,EAAK,WAAW,CAAC,EAAE,QAAQC,CAAQ,CAC5C,CAAC,CACH,CAAC,KAED,YAAS,kBAAmB,IAAM,IAChC,MAAG,6CAA8C,IAAM,CAErD,MAAMF,EAAM,IAAI,0BAAwBD,EAAS,CAAC,EAC5CI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,MAC/B,UAAOA,EAAO,IAAI,EAAE,QAAQ,MAAS,CAEzC,CAAC,KAED,MAAG,4CAA6C,IAAM,CAEpD,MAAMJ,EAAM,IAAI,0BAAwBD,EAAS,CAAC,EAC5CI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,WAAW,KAAK,CAAC,EAAM,CAAI,CAAC,CACpC,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,OAChC,UAAOA,EAAO,KAAK,EAAE,eAAe,wBAAsB,KAC1D,UAAQA,EAAO,MAAM,eAAyB,OAAO,EAAE,QACrD,0BACF,EAEJ,CAAC,KAED,MAAG,wCAAyC,IAAM,CAEhD,MAAMJ,EAAM,IAAI,0BAAwBD,EAAS,CAAC,EAC5CI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,EAIzC,MADA,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,IAAC,0BAAuBA,CAAM,EAChC,GAAI,cAAeA,EAAO,SACxB,UAAOA,EAAO,MAAM,SAAS,EAAE,QAAQ,MAAM,MAE7C,OAAM,IAAI,MACR,sDACF,CAGN,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_vitest", "import_SetTrustedMemberCommand", "PLACEHOLDER_BYTES", "makeArgs", "cmd", "apdu", "expected", "response", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var
|
|
1
|
+
"use strict";var s=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var u=Object.prototype.hasOwnProperty;var C=(n,r)=>{for(var e in r)s(n,e,{get:r[e],enumerable:!0})},f=(n,r,e,t)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of y(r))!u.call(n,a)&&a!==e&&s(n,a,{get:()=>r[a],enumerable:!(t=c(r,a))||t.enumerable});return n};var A=n=>f(s({},"__esModule",{value:!0}),n);var E={};C(E,{ISSUER_PLACEHOLDER_TLV:()=>g,SignBlockHeaderCommand:()=>R});module.exports=A(E);var o=require("@ledgerhq/device-management-kit"),p=require("@ledgerhq/signer-utils"),l=require("purify-ts"),d=require("../../models/Tags"),m=require("./utils/ledgerKeyringProtocolErrors");const i=[3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],g=Uint8Array.from([d.GeneralTags.PublicKey,i.length,...i]);class R{constructor(r){this.args=r}name="signBlockHeader";errorHelper=new p.CommandErrorHelper(m.LEDGER_SYNC_ERRORS,m.LedgerKeyringProtocolErrorFactory);getApdu(){const{parent:r,commandCount:e}=this.args,t=Uint8Array.from([d.GeneralTags.Hash,r.length,...r]);return new o.ApduBuilder({cla:224,ins:7,p1:0,p2:0}).addBufferToData(Uint8Array.from([d.GeneralTags.Int,1,1])).addBufferToData(Uint8Array.from(t)).addBufferToData(g).addBufferToData(Uint8Array.from([d.GeneralTags.Int,1,e])).build()}parseResponse(r){return l.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new o.ApduParser(r),t=e.getUnparsedRemainingLength(),a=e.extractFieldByLength(t);return a?(0,o.CommandResultFactory)({data:a}):(0,o.CommandResultFactory)({error:new o.InvalidStatusWordError("No data returned by SignBlockHeaderCommand")})})}}0&&(module.exports={ISSUER_PLACEHOLDER_TLV,SignBlockHeaderCommand});
|
|
2
2
|
//# sourceMappingURL=SignBlockHeader.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockHeader.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { GeneralTags } from \"@internal/models/Tags\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport interface SignBlockHeaderCommandArgs {\n parent: Uint8Array;\n commandCount: number;\n}\n\nexport type SignBlockHeaderCommandResponse = Uint8Array;\n\nconst ISSUER_PLACEHOLDER = [\n 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0,\n];\nexport const ISSUER_PLACEHOLDER_TLV = Uint8Array.from([\n GeneralTags.PublicKey,\n ISSUER_PLACEHOLDER.length,\n ...ISSUER_PLACEHOLDER,\n]);\n\nexport class SignBlockHeaderCommand\n implements\n Command<\n SignBlockHeaderCommandResponse,\n SignBlockHeaderCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockHeaderCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: SignBlockHeaderCommandArgs) {}\n\n getApdu(): Apdu {\n const { parent, commandCount } = this.args;\n const parentTlv = Uint8Array.from([\n GeneralTags.Hash,\n parent.length,\n ...parent,\n ]);\n\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x00,\n p2: 0x00,\n })\n .addBufferToData(Uint8Array.from([GeneralTags.Int, 1, 1])) // Version 1\n .addBufferToData(Uint8Array.from(parentTlv)) // Parent block hash\n .addBufferToData(ISSUER_PLACEHOLDER_TLV) // Placeholder for issuer public key (will be replaced by the device)\n .addBufferToData(Uint8Array.from([GeneralTags.Int, 1, commandCount])) // Command count\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockHeaderCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockHeaderCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,2BAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAA4B,iCAE5BC,EAIO,+CASP,MAAMC,EAAqB,CACzB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3E,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CACpB,EACaR,EAAyB,WAAW,KAAK,CACpD,cAAY,UACZQ,EAAmB,OACnB,GAAGA,CACL,CAAC,EAEM,MAAMP,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { GeneralTags } from \"@internal/models/Tags\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport interface SignBlockHeaderCommandArgs {\n parent: Uint8Array;\n commandCount: number;\n}\n\nexport type SignBlockHeaderCommandResponse = Uint8Array;\n\nconst ISSUER_PLACEHOLDER = [\n 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0,\n];\nexport const ISSUER_PLACEHOLDER_TLV = Uint8Array.from([\n GeneralTags.PublicKey,\n ISSUER_PLACEHOLDER.length,\n ...ISSUER_PLACEHOLDER,\n]);\n\nexport class SignBlockHeaderCommand\n implements\n Command<\n SignBlockHeaderCommandResponse,\n SignBlockHeaderCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"signBlockHeader\";\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockHeaderCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: SignBlockHeaderCommandArgs) {}\n\n getApdu(): Apdu {\n const { parent, commandCount } = this.args;\n const parentTlv = Uint8Array.from([\n GeneralTags.Hash,\n parent.length,\n ...parent,\n ]);\n\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x00,\n p2: 0x00,\n })\n .addBufferToData(Uint8Array.from([GeneralTags.Int, 1, 1])) // Version 1\n .addBufferToData(Uint8Array.from(parentTlv)) // Parent block hash\n .addBufferToData(ISSUER_PLACEHOLDER_TLV) // Placeholder for issuer public key (will be replaced by the device)\n .addBufferToData(Uint8Array.from([GeneralTags.Int, 1, commandCount])) // Command count\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockHeaderCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockHeaderCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,EAAA,2BAAAC,IAAA,eAAAC,EAAAJ,GAAA,IAAAK,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAA4B,iCAE5BC,EAIO,+CASP,MAAMC,EAAqB,CACzB,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC3E,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,CACpB,EACaR,EAAyB,WAAW,KAAK,CACpD,cAAY,UACZQ,EAAmB,OACnB,GAAGA,CACL,CAAC,EAEM,MAAMP,CAOb,CAOE,YAA6BQ,EAAkC,CAAlC,UAAAA,CAAmC,CANvD,KAAO,kBACC,YAAc,IAAI,qBAGjC,qBAAoB,mCAAiC,EAIvD,SAAgB,CACd,KAAM,CAAE,OAAAC,EAAQ,aAAAC,CAAa,EAAI,KAAK,KAChCC,EAAY,WAAW,KAAK,CAChC,cAAY,KACZF,EAAO,OACP,GAAGA,CACL,CAAC,EAED,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EACE,gBAAgB,WAAW,KAAK,CAAC,cAAY,IAAK,EAAG,CAAC,CAAC,CAAC,EACxD,gBAAgB,WAAW,KAAKE,CAAS,CAAC,EAC1C,gBAAgBZ,CAAsB,EACtC,gBAAgB,WAAW,KAAK,CAAC,cAAY,IAAK,EAAGW,CAAY,CAAC,CAAC,EACnE,MAAM,CACX,CAEA,cACEE,EAIA,CACA,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAY,EACpCE,EAAYD,EAAO,2BAA2B,EAC9CE,EAAUF,EAAO,qBAAqBC,CAAS,EACrD,OAAKC,KAOE,wBAAqB,CAAE,KAAMA,CAAQ,CAAC,KANpC,wBAAqB,CAC1B,MAAO,IAAI,yBACT,4CACF,CACF,CAAC,CAGL,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["SignBlockHeader_exports", "__export", "ISSUER_PLACEHOLDER_TLV", "SignBlockHeaderCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_Tags", "import_ledgerKeyringProtocolErrors", "ISSUER_PLACEHOLDER", "args", "parent", "commandCount", "parentTlv", "apduResponse", "parser", "remaining", "payload"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var o=require("@ledgerhq/device-management-kit"),e=require("vitest"),m=require("../../models/Tags"),t=require("./SignBlockHeader");const c=3,d=Uint8Array.from([240,202,204,26]),p=Uint8Array.from([m.GeneralTags.Int,1,1,m.GeneralTags.Hash,4,...d,...t.ISSUER_PLACEHOLDER_TLV,m.GeneralTags.Int,1,c]),i=Uint8Array.from([240,202,204,26]),A=Uint8Array.from([0,i.length,...i]),g=Uint8Array.from([129,i.length,...i]),u=new Uint8Array([...A,...g]);(0,e.describe)("SignBlockHeaderCommand",()=>{(0,e.describe)("name",()=>{(0,e.it)("should be 'signBlockHeader'",()=>{const r={parent:d,commandCount:c},a=new t.SignBlockHeaderCommand(r);(0,e.expect)(a.name).toBe("signBlockHeader")})}),(0,e.describe)("getApdu()",()=>{(0,e.it)("should build the correct APDU for a parent hash and a commands count",()=>{const r={parent:d,commandCount:c},s=new t.SignBlockHeaderCommand(r).getApdu(),n=Uint8Array.from([224,7,0,0,p.length,...p]);(0,e.expect)(s.getRawApdu()).toEqual(n)})}),(0,e.describe)("parseResponse()",()=>{(0,e.it)("should return raw payload on success",()=>{const r={parent:d,commandCount:c},a=new t.SignBlockHeaderCommand(r),s=new o.ApduResponse({statusCode:Uint8Array.from([144,0]),data:u}),n=a.parseResponse(s);if((0,e.expect)((0,o.isSuccessCommandResult)(n)).toBe(!0),(0,o.isSuccessCommandResult)(n)){const l=n.data;(0,e.expect)(l).toEqual(u)}}),(0,e.it)("should map SW errors to CommandResult errors",()=>{const r={parent:d,commandCount:c},a=new t.SignBlockHeaderCommand(r),s=new o.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),n=a.parseResponse(s);(0,e.expect)((0,o.isSuccessCommandResult)(n)).toBe(!1),(0,o.isSuccessCommandResult)(n)||(0,e.expect)(n.error.errorCode).toBe("6a86")}),(0,e.it)("should error if no data is returned",()=>{const r={parent:d,commandCount:c},a=new t.SignBlockHeaderCommand(r),s=new o.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),n=a.parseResponse(s);(0,e.expect)((0,o.isSuccessCommandResult)(n)).toBe(!0),(0,o.isSuccessCommandResult)(n)&&(0,e.expect)(n.data).toEqual(new Uint8Array([]))})})});
|
|
2
2
|
//# sourceMappingURL=SignBlockHeader.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockHeader.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { GeneralTags } from \"@internal/models/Tags\";\n\nimport {\n ISSUER_PLACEHOLDER_TLV,\n SignBlockHeaderCommand,\n type SignBlockHeaderCommandArgs,\n type SignBlockHeaderCommandResponse,\n} from \"./SignBlockHeader\";\n\nconst COMMAND_COUNT = 3;\nconst PARENT_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst HEADER_BYTES = Uint8Array.from([\n ...[GeneralTags.Int, 1, 1], // version 1\n ...[GeneralTags.Hash, 4, ...PARENT_BYTES], // Parent hash\n ...ISSUER_PLACEHOLDER_TLV,\n ...[GeneralTags.Int, 1, COMMAND_COUNT], // command count\n]);\nconst TLV_VALUE = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst IV_TLV = Uint8Array.from([0x00, TLV_VALUE.length, ...TLV_VALUE]);\nconst ISSUER_TLV = Uint8Array.from([0x81, TLV_VALUE.length, ...TLV_VALUE]);\nconst FULL_TLV_PAYLOAD = new Uint8Array([...IV_TLV, ...ISSUER_TLV]);\n\ndescribe(\"SignBlockHeaderCommand\", () => {\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for a parent hash and a commands count\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x07,\n 0x00,\n 0x00,\n HEADER_BYTES.length,\n ...HEADER_BYTES,\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return raw payload on success\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: FULL_TLV_PAYLOAD,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const res: SignBlockHeaderCommandResponse = result.data;\n expect(res).toEqual(FULL_TLV_PAYLOAD);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should error if no data is returned\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array([]));\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAEA,IAAAA,EAGO,2CACPC,EAAqC,kBAErCC,EAA4B,iCAE5BC,EAKO,6BAEP,MAAMC,EAAgB,EAChBC,EAAe,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACvDC,EAAe,WAAW,KAAK,CAC/B,cAAY,IAAK,EAAG,EACpB,cAAY,KAAM,EAAG,GAAGD,EAC5B,GAAG,yBACC,cAAY,IAAK,EAAGD,CAC1B,CAAC,EACKG,EAAY,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACpDC,EAAS,WAAW,KAAK,CAAC,EAAMD,EAAU,OAAQ,GAAGA,CAAS,CAAC,EAC/DE,EAAa,WAAW,KAAK,CAAC,IAAMF,EAAU,OAAQ,GAAGA,CAAS,CAAC,EACnEG,EAAmB,IAAI,WAAW,CAAC,GAAGF,EAAQ,GAAGC,CAAU,CAAC,KAElE,YAAS,yBAA0B,IAAM,IACvC,YAAS,YAAa,IAAM,IAC1B,MAAG,uEAAwE,IAAM,CAE/E,
|
|
6
|
-
"names": ["import_device_management_kit", "import_vitest", "import_Tags", "import_SignBlockHeader", "COMMAND_COUNT", "PARENT_BYTES", "HEADER_BYTES", "TLV_VALUE", "IV_TLV", "ISSUER_TLV", "FULL_TLV_PAYLOAD", "args", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { GeneralTags } from \"@internal/models/Tags\";\n\nimport {\n ISSUER_PLACEHOLDER_TLV,\n SignBlockHeaderCommand,\n type SignBlockHeaderCommandArgs,\n type SignBlockHeaderCommandResponse,\n} from \"./SignBlockHeader\";\n\nconst COMMAND_COUNT = 3;\nconst PARENT_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst HEADER_BYTES = Uint8Array.from([\n ...[GeneralTags.Int, 1, 1], // version 1\n ...[GeneralTags.Hash, 4, ...PARENT_BYTES], // Parent hash\n ...ISSUER_PLACEHOLDER_TLV,\n ...[GeneralTags.Int, 1, COMMAND_COUNT], // command count\n]);\nconst TLV_VALUE = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst IV_TLV = Uint8Array.from([0x00, TLV_VALUE.length, ...TLV_VALUE]);\nconst ISSUER_TLV = Uint8Array.from([0x81, TLV_VALUE.length, ...TLV_VALUE]);\nconst FULL_TLV_PAYLOAD = new Uint8Array([...IV_TLV, ...ISSUER_TLV]);\n\ndescribe(\"SignBlockHeaderCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'signBlockHeader'\", () => {\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n expect(cmd.name).toBe(\"signBlockHeader\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for a parent hash and a commands count\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x07,\n 0x00,\n 0x00,\n HEADER_BYTES.length,\n ...HEADER_BYTES,\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return raw payload on success\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: FULL_TLV_PAYLOAD,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const res: SignBlockHeaderCommandResponse = result.data;\n expect(res).toEqual(FULL_TLV_PAYLOAD);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should error if no data is returned\", () => {\n // given\n const args: SignBlockHeaderCommandArgs = {\n parent: PARENT_BYTES,\n commandCount: COMMAND_COUNT,\n };\n const cmd = new SignBlockHeaderCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array([]));\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_vitest", "import_Tags", "import_SignBlockHeader", "COMMAND_COUNT", "PARENT_BYTES", "HEADER_BYTES", "TLV_VALUE", "IV_TLV", "ISSUER_TLV", "FULL_TLV_PAYLOAD", "args", "cmd", "apdu", "expected", "response", "result", "res"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var d=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var C=(o,r)=>{for(var t in r)d(o,t,{get:r[t],enumerable:!0})},R=(o,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of y(r))!S.call(o,n)&&n!==t&&d(o,n,{get:()=>r[n],enumerable:!(i=c(r,n))||i.enumerable});return o};var f=o=>R(d({},"__esModule",{value:!0}),o);var
|
|
1
|
+
"use strict";var d=Object.defineProperty;var c=Object.getOwnPropertyDescriptor;var y=Object.getOwnPropertyNames;var S=Object.prototype.hasOwnProperty;var C=(o,r)=>{for(var t in r)d(o,t,{get:r[t],enumerable:!0})},R=(o,r,t,i)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of y(r))!S.call(o,n)&&n!==t&&d(o,n,{get:()=>r[n],enumerable:!(i=c(r,n))||i.enumerable});return o};var f=o=>R(d({},"__esModule",{value:!0}),o);var B={};C(B,{SignBlockSignatureCommand:()=>A});module.exports=f(B);var e=require("@ledgerhq/device-management-kit"),l=require("@ledgerhq/signer-utils"),m=require("purify-ts"),a=require("./utils/ledgerKeyringProtocolErrors");class A{name="signBlockSignature";errorHelper=new l.CommandErrorHelper(a.LEDGER_SYNC_ERRORS,a.LedgerKeyringProtocolErrorFactory);constructor(){}getApdu(){return new e.ApduBuilder({cla:224,ins:7,p1:2,p2:0}).build()}parseResponse(r){return m.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const t=new e.ApduParser(r),i=t.getUnparsedRemainingLength(),n=t.extractFieldByLength(i);if(!n)return(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("No data returned by SignBlockSignatureCommand")});if(n.length<2)return(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response: missing signature length or reserved byte")});const g=n[0];if(g===void 0)return(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Invalid response: unable to read signature length")});const s=g;if(n.length<2+s)return(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("Signature length out of bounds")});const u=n.slice(1,1+s),p=n.slice(1+s+1);return(0,e.CommandResultFactory)({data:{signature:u,deviceSessionKey:p}})})}}0&&(module.exports={SignBlockSignatureCommand});
|
|
2
2
|
//# sourceMappingURL=SignBlockSignatureCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockSignatureCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type SignBlockSignatureCommandArgs = Record<string, never>;\n\nexport interface SignBlockSignatureCommandResponse {\n signature: Uint8Array;\n deviceSessionKey: Uint8Array;\n}\n\nexport class SignBlockSignatureCommand\n implements\n Command<\n SignBlockSignatureCommandResponse,\n SignBlockSignatureCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor() {}\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x02,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const rem = parser.getUnparsedRemainingLength();\n const data = parser.extractFieldByLength(rem);\n if (!data) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockSignatureCommand\",\n ),\n });\n }\n\n if (data.length < 2) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response: missing signature length or reserved byte\",\n ),\n });\n }\n\n const raw = data[0];\n if (raw === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response: unable to read signature length\",\n ),\n });\n }\n\n const sigLen = raw;\n if (data.length < 2 + sigLen) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature length out of bounds\"),\n });\n }\n\n const signature = data.slice(1, 1 + sigLen);\n const deviceSessionKey = data.slice(1 + sigLen + 1);\n\n return CommandResultFactory({ data: { signature, deviceSessionKey } });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,+CASA,MAAML,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type SignBlockSignatureCommandArgs = Record<string, never>;\n\nexport interface SignBlockSignatureCommandResponse {\n signature: Uint8Array;\n deviceSessionKey: Uint8Array;\n}\n\nexport class SignBlockSignatureCommand\n implements\n Command<\n SignBlockSignatureCommandResponse,\n SignBlockSignatureCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"signBlockSignature\";\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor() {}\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x02,\n p2: 0x00,\n }).build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const rem = parser.getUnparsedRemainingLength();\n const data = parser.extractFieldByLength(rem);\n if (!data) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockSignatureCommand\",\n ),\n });\n }\n\n if (data.length < 2) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response: missing signature length or reserved byte\",\n ),\n });\n }\n\n const raw = data[0];\n if (raw === undefined) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Invalid response: unable to read signature length\",\n ),\n });\n }\n\n const sigLen = raw;\n if (data.length < 2 + sigLen) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\"Signature length out of bounds\"),\n });\n }\n\n const signature = data.slice(1, 1 + sigLen);\n const deviceSessionKey = data.slice(1 + sigLen + 1);\n\n return CommandResultFactory({ data: { signature, deviceSessionKey } });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,+BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,+CASA,MAAML,CAOb,CACW,KAAO,qBACC,YAAc,IAAI,qBAGjC,qBAAoB,mCAAiC,EAEvD,aAAc,CAAC,CAEf,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAAE,MAAM,CACX,CAEA,cACEM,EAIA,CACA,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAY,EACpCE,EAAMD,EAAO,2BAA2B,EACxCE,EAAOF,EAAO,qBAAqBC,CAAG,EAC5C,GAAI,CAACC,EACH,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,+CACF,CACF,CAAC,EAGH,GAAIA,EAAK,OAAS,EAChB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,6DACF,CACF,CAAC,EAGH,MAAMC,EAAMD,EAAK,CAAC,EAClB,GAAIC,IAAQ,OACV,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBACT,mDACF,CACF,CAAC,EAGH,MAAMC,EAASD,EACf,GAAID,EAAK,OAAS,EAAIE,EACpB,SAAO,wBAAqB,CAC1B,MAAO,IAAI,yBAAuB,gCAAgC,CACpE,CAAC,EAGH,MAAMC,EAAYH,EAAK,MAAM,EAAG,EAAIE,CAAM,EACpCE,EAAmBJ,EAAK,MAAM,EAAIE,EAAS,CAAC,EAElD,SAAO,wBAAqB,CAAE,KAAM,CAAE,UAAAC,EAAW,iBAAAC,CAAiB,CAAE,CAAC,CACvE,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["SignBlockSignatureCommand_exports", "__export", "SignBlockSignatureCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ledgerKeyringProtocolErrors", "apduResponse", "parser", "rem", "data", "raw", "sigLen", "signature", "deviceSessionKey"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var r=require("@ledgerhq/device-management-kit"),e=require("vitest"),
|
|
1
|
+
"use strict";var r=require("@ledgerhq/device-management-kit"),e=require("vitest"),a=require("./SignBlockSignatureCommand");const i=Uint8Array.from([240,202,204,26]);(0,e.describe)("SignBlockSignatureCommand",()=>{(0,e.describe)("name",()=>{(0,e.it)("should be 'signBlockSignature'",()=>{const s=new a.SignBlockSignatureCommand;(0,e.expect)(s.name).toBe("signBlockSignature")})}),(0,e.describe)("getApdu()",()=>{(0,e.it)("should build the correct APDU for finalize-signature",()=>{const n=new a.SignBlockSignatureCommand().getApdu();(0,e.expect)(n.getRawApdu()).toEqual(Uint8Array.from([224,7,2,0,0]))})}),(0,e.describe)("parseResponse()",()=>{(0,e.it)("should return signature and sessionKey on success",()=>{const s=new Uint8Array([i.length,...i,i.length,...i]),n=new a.SignBlockSignatureCommand,o=new r.ApduResponse({statusCode:Uint8Array.from([144,0]),data:s}),t=n.parseResponse(o);if((0,e.expect)((0,r.isSuccessCommandResult)(t)).toBe(!0),(0,r.isSuccessCommandResult)(t)){const d=t.data;(0,e.expect)(d.signature).toEqual(i),(0,e.expect)(d.deviceSessionKey).toEqual(i)}}),(0,e.it)("should map SW errors to CommandResult errors",()=>{const s=new a.SignBlockSignatureCommand,n=new r.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),o=s.parseResponse(n);(0,e.expect)((0,r.isSuccessCommandResult)(o)).toBe(!1),(0,r.isSuccessCommandResult)(o)||(0,e.expect)(o.error.errorCode).toBe("6a86")}),(0,e.it)("should error if missing length or reserved byte",()=>{const s=new a.SignBlockSignatureCommand,n=new r.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),o=s.parseResponse(n);(0,e.expect)((0,r.isSuccessCommandResult)(o)).toBe(!1),(0,r.isSuccessCommandResult)(o)||((0,e.expect)(o.error._tag).toBe("InvalidStatusWordError"),(0,e.expect)(o.error.originalError.message).toBe("Invalid response: missing signature length or reserved byte"))}),(0,e.it)("should error if signature length out of bounds",()=>{const s=Uint8Array.from([5,170,187]),n=new a.SignBlockSignatureCommand,o=new r.ApduResponse({statusCode:Uint8Array.from([144,0]),data:s}),t=n.parseResponse(o);(0,e.expect)((0,r.isSuccessCommandResult)(t)).toBe(!1),(0,r.isSuccessCommandResult)(t)||((0,e.expect)(t.error._tag).toBe("InvalidStatusWordError"),(0,e.expect)(t.error.originalError.message).toBe("Signature length out of bounds"))})})});
|
|
2
2
|
//# sourceMappingURL=SignBlockSignatureCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockSignatureCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SignBlockSignatureCommand,\n type SignBlockSignatureCommandResponse,\n} from \"./SignBlockSignatureCommand\";\n\nconst SIG_AND_KEY = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SignBlockSignatureCommand\", () => {\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for finalize-signature\", () => {\n const cmd = new SignBlockSignatureCommand();\n const apdu = cmd.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n Uint8Array.from([0xe0, 0x07, 0x02, 0x00, 0x00]),\n );\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return signature and sessionKey on success\", () => {\n // given\n const payload = new Uint8Array([\n SIG_AND_KEY.length,\n ...SIG_AND_KEY,\n SIG_AND_KEY.length,\n ...SIG_AND_KEY,\n ]);\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: payload,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const res: SignBlockSignatureCommandResponse = result.data;\n expect(res.signature).toEqual(SIG_AND_KEY);\n expect(res.deviceSessionKey).toEqual(SIG_AND_KEY);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should error if missing length or reserved byte\", () => {\n // given\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any)._tag).toBe(\"InvalidStatusWordError\");\n expect((result.error as any).originalError.message).toBe(\n \"Invalid response: missing signature length or reserved byte\",\n );\n }\n });\n\n it(\"should error if signature length out of bounds\", () => {\n // given\n const bad = Uint8Array.from([5, 0xaa, 0xbb]);\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: bad,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any)._tag).toBe(\"InvalidStatusWordError\");\n expect((result.error as any).originalError.message).toBe(\n \"Signature length out of bounds\",\n );\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAGA,IAAAA,EAGO,2CACPC,EAAqC,kBAErCC,EAGO,uCAEP,MAAMC,EAAc,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAE5D,YAAS,4BAA6B,IAAM,IAC1C,YAAS,YAAa,IAAM,IAC1B,MAAG,uDAAwD,IAAM,CAE/D,MAAMC,EADM,IAAI,4BAA0B,EACzB,QAAQ,KACzB,UAAOA,EAAK,WAAW,CAAC,EAAE,QACxB,WAAW,KAAK,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAChD,CACF,CAAC,CACH,CAAC,KAED,YAAS,kBAAmB,IAAM,IAChC,MAAG,oDAAqD,IAAM,CAE5D,MAAMC,EAAU,IAAI,WAAW,
|
|
6
|
-
"names": ["import_device_management_kit", "import_vitest", "import_SignBlockSignatureCommand", "SIG_AND_KEY", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SignBlockSignatureCommand,\n type SignBlockSignatureCommandResponse,\n} from \"./SignBlockSignatureCommand\";\n\nconst SIG_AND_KEY = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SignBlockSignatureCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'signBlockSignature'\", () => {\n const cmd = new SignBlockSignatureCommand();\n expect(cmd.name).toBe(\"signBlockSignature\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for finalize-signature\", () => {\n const cmd = new SignBlockSignatureCommand();\n const apdu = cmd.getApdu();\n expect(apdu.getRawApdu()).toEqual(\n Uint8Array.from([0xe0, 0x07, 0x02, 0x00, 0x00]),\n );\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return signature and sessionKey on success\", () => {\n // given\n const payload = new Uint8Array([\n SIG_AND_KEY.length,\n ...SIG_AND_KEY,\n SIG_AND_KEY.length,\n ...SIG_AND_KEY,\n ]);\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: payload,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const res: SignBlockSignatureCommandResponse = result.data;\n expect(res.signature).toEqual(SIG_AND_KEY);\n expect(res.deviceSessionKey).toEqual(SIG_AND_KEY);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should error if missing length or reserved byte\", () => {\n // given\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any)._tag).toBe(\"InvalidStatusWordError\");\n expect((result.error as any).originalError.message).toBe(\n \"Invalid response: missing signature length or reserved byte\",\n );\n }\n });\n\n it(\"should error if signature length out of bounds\", () => {\n // given\n const bad = Uint8Array.from([5, 0xaa, 0xbb]);\n const cmd = new SignBlockSignatureCommand();\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: bad,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any)._tag).toBe(\"InvalidStatusWordError\");\n expect((result.error as any).originalError.message).toBe(\n \"Signature length out of bounds\",\n );\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAGA,IAAAA,EAGO,2CACPC,EAAqC,kBAErCC,EAGO,uCAEP,MAAMC,EAAc,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAE5D,YAAS,4BAA6B,IAAM,IAC1C,YAAS,OAAQ,IAAM,IACrB,MAAG,iCAAkC,IAAM,CACzC,MAAMC,EAAM,IAAI,+BAChB,UAAOA,EAAI,IAAI,EAAE,KAAK,oBAAoB,CAC5C,CAAC,CACH,CAAC,KAED,YAAS,YAAa,IAAM,IAC1B,MAAG,uDAAwD,IAAM,CAE/D,MAAMC,EADM,IAAI,4BAA0B,EACzB,QAAQ,KACzB,UAAOA,EAAK,WAAW,CAAC,EAAE,QACxB,WAAW,KAAK,CAAC,IAAM,EAAM,EAAM,EAAM,CAAI,CAAC,CAChD,CACF,CAAC,CACH,CAAC,KAED,YAAS,kBAAmB,IAAM,IAChC,MAAG,oDAAqD,IAAM,CAE5D,MAAMC,EAAU,IAAI,WAAW,CAC7BH,EAAY,OACZ,GAAGA,EACHA,EAAY,OACZ,GAAGA,CACL,CAAC,EACKC,EAAM,IAAI,4BACVG,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMD,CACR,CAAC,EAGKE,EAASJ,EAAI,cAAcG,CAAQ,EAIzC,MADA,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,EAAG,CAClC,MAAMC,EAAyCD,EAAO,QACtD,UAAOC,EAAI,SAAS,EAAE,QAAQN,CAAW,KACzC,UAAOM,EAAI,gBAAgB,EAAE,QAAQN,CAAW,CAClD,CACF,CAAC,KAED,MAAG,+CAAgD,IAAM,CAEvD,MAAMC,EAAM,IAAI,4BACVG,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,MAChC,UAAQA,EAAO,MAAc,SAAS,EAAE,KAAK,MAAM,CAEvD,CAAC,KAED,MAAG,kDAAmD,IAAM,CAE1D,MAAMJ,EAAM,IAAI,4BACVG,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,OAChC,UAAQA,EAAO,MAAc,IAAI,EAAE,KAAK,wBAAwB,KAChE,UAAQA,EAAO,MAAc,cAAc,OAAO,EAAE,KAClD,6DACF,EAEJ,CAAC,KAED,MAAG,iDAAkD,IAAM,CAEzD,MAAME,EAAM,WAAW,KAAK,CAAC,EAAG,IAAM,GAAI,CAAC,EACrCN,EAAM,IAAI,4BACVG,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMG,CACR,CAAC,EAGKF,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,OAChC,UAAQA,EAAO,MAAc,IAAI,EAAE,KAAK,wBAAwB,KAChE,UAAQA,EAAO,MAAc,cAAc,OAAO,EAAE,KAClD,gCACF,EAEJ,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_vitest", "import_SignBlockSignatureCommand", "SIG_AND_KEY", "cmd", "apdu", "payload", "response", "result", "res", "bad"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var i=Object.defineProperty;var g=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var p=Object.prototype.hasOwnProperty;var c=(o,r)=>{for(var t in r)i(o,t,{get:r[t],enumerable:!0})},y=(o,r,t,a)=>{if(r&&typeof r=="object"||typeof r=="function")for(let n of s(r))!p.call(o,n)&&n!==t&&i(o,n,{get:()=>r[n],enumerable:!(a=g(r,n))||a.enumerable});return o};var S=o=>y(i({},"__esModule",{value:!0}),o);var C={};c(C,{SignBlockSingleCommand:()=>u});module.exports=S(C);var e=require("@ledgerhq/device-management-kit"),l=require("@ledgerhq/signer-utils"),d=require("purify-ts"),m=require("./utils/ledgerKeyringProtocolErrors");class u{constructor(r){this.args=r}name="signBlockSingle";errorHelper=new l.CommandErrorHelper(m.LEDGER_SYNC_ERRORS,m.LedgerKeyringProtocolErrorFactory);getApdu(){return new e.ApduBuilder({cla:224,ins:7,p1:1,p2:0}).addBufferToData(this.args.command).build()}parseResponse(r){return d.Maybe.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const t=new e.ApduParser(r),a=t.getUnparsedRemainingLength(),n=t.extractFieldByLength(a);return n?(0,e.CommandResultFactory)({data:n}):(0,e.CommandResultFactory)({error:new e.InvalidStatusWordError("No data returned by SignBlockSingleCommand")})})}}0&&(module.exports={SignBlockSingleCommand});
|
|
2
2
|
//# sourceMappingURL=SignBlockSingleCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockSingleCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport interface SignBlockSingleCommandArgs {\n command: Uint8Array;\n}\n\nexport type SignBlockSingleCommandResponse = Uint8Array;\n\nexport class SignBlockSingleCommand\n implements\n Command<\n SignBlockSingleCommandResponse,\n SignBlockSingleCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: SignBlockSingleCommandArgs) {}\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x01,\n p2: 0x00,\n })\n .addBufferToData(this.args.command)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const tlvBlob = parser.extractFieldByLength(remaining);\n if (!tlvBlob) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockSingleCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: tlvBlob });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,+CAQA,MAAML,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport interface SignBlockSingleCommandArgs {\n command: Uint8Array;\n}\n\nexport type SignBlockSingleCommandResponse = Uint8Array;\n\nexport class SignBlockSingleCommand\n implements\n Command<\n SignBlockSingleCommandResponse,\n SignBlockSingleCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"signBlockSingle\";\n private readonly errorHelper = new CommandErrorHelper<\n SignBlockSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: SignBlockSingleCommandArgs) {}\n\n getApdu(): Apdu {\n return new ApduBuilder({\n cla: 0xe0,\n ins: 0x07,\n p1: 0x01,\n p2: 0x00,\n })\n .addBufferToData(this.args.command)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n SignBlockSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const tlvBlob = parser.extractFieldByLength(remaining);\n if (!tlvBlob) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by SignBlockSingleCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: tlvBlob });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,4BAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EASO,2CACPC,EAAmC,kCACnCC,EAAsB,qBAEtBC,EAIO,+CAQA,MAAML,CAOb,CAOE,YAA6BM,EAAkC,CAAlC,UAAAA,CAAmC,CANvD,KAAO,kBACC,YAAc,IAAI,qBAGjC,qBAAoB,mCAAiC,EAIvD,SAAgB,CACd,OAAO,IAAI,cAAY,CACrB,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EACE,gBAAgB,KAAK,KAAK,OAAO,EACjC,MAAM,CACX,CAEA,cACEC,EAIA,CACA,OAAO,QAAM,aACX,KAAK,YAAY,SAASA,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAI,aAAWD,CAAY,EACpCE,EAAYD,EAAO,2BAA2B,EAC9CE,EAAUF,EAAO,qBAAqBC,CAAS,EACrD,OAAKC,KAOE,wBAAqB,CAAE,KAAMA,CAAQ,CAAC,KANpC,wBAAqB,CAC1B,MAAO,IAAI,yBACT,4CACF,CACF,CAAC,CAGL,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["SignBlockSingleCommand_exports", "__export", "SignBlockSingleCommand", "__toCommonJS", "import_device_management_kit", "import_signer_utils", "import_purify_ts", "import_ledgerKeyringProtocolErrors", "args", "apduResponse", "parser", "remaining", "tlvBlob"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var e=require("@ledgerhq/device-management-kit"),n=require("vitest"),c=require("./SignBlockSingleCommand");const a=Uint8Array.from([240,202,204,26]),m=Uint8Array.from([240,202,204,26]);(0,n.describe)("SignBlockSingleCommand",()=>{(0,n.describe)("getApdu()",()=>{(0,n.it)("should build the correct APDU for a given command",()=>{const s={command:a},r=new c.SignBlockSingleCommand(s).getApdu(),o=Uint8Array.from([224,7,1,0,a.length,...a]);(0,n.expect)(r.getRawApdu()).toEqual(o)})}),(0,n.describe)("parseResponse()",()=>{(0,n.it)("should return the raw TLV blob on success",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:m}),o=t.parseResponse(r);if((0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!0),(0,e.isSuccessCommandResult)(o)){const d=o.data;(0,n.expect)(d).toEqual(m)}}),(0,n.it)("should map SW errors to CommandResult errors",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),o=t.parseResponse(r);(0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!1),(0,e.isSuccessCommandResult)(o)||(0,n.expect)(o.error.errorCode).toBe("6a86")}),(0,n.it)("should return an empty Uint8Array if no data is returned",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),o=t.parseResponse(r);(0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!0),(0,e.isSuccessCommandResult)(o)&&(0,n.expect)(o.data).toEqual(new Uint8Array)})})});
|
|
1
|
+
"use strict";var e=require("@ledgerhq/device-management-kit"),n=require("vitest"),c=require("./SignBlockSingleCommand");const a=Uint8Array.from([240,202,204,26]),m=Uint8Array.from([240,202,204,26]);(0,n.describe)("SignBlockSingleCommand",()=>{(0,n.describe)("name",()=>{(0,n.it)("should be 'signBlockSingle'",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s);(0,n.expect)(t.name).toBe("signBlockSingle")})}),(0,n.describe)("getApdu()",()=>{(0,n.it)("should build the correct APDU for a given command",()=>{const s={command:a},r=new c.SignBlockSingleCommand(s).getApdu(),o=Uint8Array.from([224,7,1,0,a.length,...a]);(0,n.expect)(r.getRawApdu()).toEqual(o)})}),(0,n.describe)("parseResponse()",()=>{(0,n.it)("should return the raw TLV blob on success",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:m}),o=t.parseResponse(r);if((0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!0),(0,e.isSuccessCommandResult)(o)){const d=o.data;(0,n.expect)(d).toEqual(m)}}),(0,n.it)("should map SW errors to CommandResult errors",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),o=t.parseResponse(r);(0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!1),(0,e.isSuccessCommandResult)(o)||(0,n.expect)(o.error.errorCode).toBe("6a86")}),(0,n.it)("should return an empty Uint8Array if no data is returned",()=>{const s={command:a},t=new c.SignBlockSingleCommand(s),r=new e.ApduResponse({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),o=t.parseResponse(r);(0,n.expect)((0,e.isSuccessCommandResult)(o)).toBe(!0),(0,e.isSuccessCommandResult)(o)&&(0,n.expect)(o.data).toEqual(new Uint8Array)})})});
|
|
2
2
|
//# sourceMappingURL=SignBlockSingleCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/SignBlockSingleCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SignBlockSingleCommand,\n type SignBlockSingleCommandArgs,\n type SignBlockSingleCommandResponse,\n} from \"./SignBlockSingleCommand\";\n\nconst COMMAND_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst TLV_PAYLOAD = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SignBlockSingleCommand\", () => {\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for a given command\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x07,\n 0x01,\n 0x00,\n COMMAND_BYTES.length,\n ...COMMAND_BYTES,\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return the raw TLV blob on success\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: TLV_PAYLOAD,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const data: SignBlockSingleCommandResponse = result.data;\n expect(data).toEqual(TLV_PAYLOAD);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should return an empty Uint8Array if no data is returned\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array());\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAEA,IAAAA,EAGO,2CACPC,EAAqC,kBAErCC,EAIO,oCAEP,MAAMC,EAAgB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACxDC,EAAc,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAE5D,YAAS,yBAA0B,IAAM,IACvC,YAAS,YAAa,IAAM,IAC1B,MAAG,oDAAqD,IAAM,CAE5D,
|
|
6
|
-
"names": ["import_device_management_kit", "import_vitest", "import_SignBlockSingleCommand", "COMMAND_BYTES", "TLV_PAYLOAD", "args", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n SignBlockSingleCommand,\n type SignBlockSingleCommandArgs,\n type SignBlockSingleCommandResponse,\n} from \"./SignBlockSingleCommand\";\n\nconst COMMAND_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\nconst TLV_PAYLOAD = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"SignBlockSingleCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'signBlockSingle'\", () => {\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n expect(cmd.name).toBe(\"signBlockSingle\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"should build the correct APDU for a given command\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x07,\n 0x01,\n 0x00,\n COMMAND_BYTES.length,\n ...COMMAND_BYTES,\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"should return the raw TLV blob on success\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: TLV_PAYLOAD,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n const data: SignBlockSingleCommandResponse = result.data;\n expect(data).toEqual(TLV_PAYLOAD);\n }\n });\n\n it(\"should map SW errors to CommandResult errors\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"should return an empty Uint8Array if no data is returned\", () => {\n // given\n const args: SignBlockSingleCommandArgs = { command: COMMAND_BYTES };\n const cmd = new SignBlockSingleCommand(args);\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array());\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "aAEA,IAAAA,EAGO,2CACPC,EAAqC,kBAErCC,EAIO,oCAEP,MAAMC,EAAgB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EACxDC,EAAc,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,KAE5D,YAAS,yBAA0B,IAAM,IACvC,YAAS,OAAQ,IAAM,IACrB,MAAG,8BAA+B,IAAM,CACtC,MAAMC,EAAmC,CAAE,QAASF,CAAc,EAC5DG,EAAM,IAAI,yBAAuBD,CAAI,KAC3C,UAAOC,EAAI,IAAI,EAAE,KAAK,iBAAiB,CACzC,CAAC,CACH,CAAC,KAED,YAAS,YAAa,IAAM,IAC1B,MAAG,oDAAqD,IAAM,CAE5D,MAAMD,EAAmC,CAAE,QAASF,CAAc,EAI5DI,EAHM,IAAI,yBAAuBF,CAAI,EAG1B,QAAQ,EACnBG,EAAW,WAAW,KAAK,CAC/B,IACA,EACA,EACA,EACAL,EAAc,OACd,GAAGA,CACL,CAAC,KAGD,UAAOI,EAAK,WAAW,CAAC,EAAE,QAAQC,CAAQ,CAC5C,CAAC,CACH,CAAC,KAED,YAAS,kBAAmB,IAAM,IAChC,MAAG,4CAA6C,IAAM,CAEpD,MAAMH,EAAmC,CAAE,QAASF,CAAc,EAC5DG,EAAM,IAAI,yBAAuBD,CAAI,EACrCI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAML,CACR,CAAC,EAGKM,EAASJ,EAAI,cAAcG,CAAQ,EAIzC,MADA,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,EAAG,CAClC,MAAMC,EAAuCD,EAAO,QACpD,UAAOC,CAAI,EAAE,QAAQP,CAAW,CAClC,CACF,CAAC,KAED,MAAG,+CAAgD,IAAM,CAEvD,MAAMC,EAAmC,CAAE,QAASF,CAAc,EAC5DG,EAAM,IAAI,yBAAuBD,CAAI,EACrCI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAK,KAC5C,0BAAuBA,CAAM,MAChC,UAAQA,EAAO,MAAc,SAAS,EAAE,KAAK,MAAM,CAEvD,CAAC,KAED,MAAG,2DAA4D,IAAM,CAEnE,MAAML,EAAmC,CAAE,QAASF,CAAc,EAC5DG,EAAM,IAAI,yBAAuBD,CAAI,EACrCI,EAAW,IAAI,eAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKC,EAASJ,EAAI,cAAcG,CAAQ,KAGzC,aAAO,0BAAuBC,CAAM,CAAC,EAAE,KAAK,EAAI,KAC5C,0BAAuBA,CAAM,MAC/B,UAAOA,EAAO,IAAI,EAAE,QAAQ,IAAI,UAAY,CAEhD,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["import_device_management_kit", "import_vitest", "import_SignBlockSingleCommand", "COMMAND_BYTES", "TLV_PAYLOAD", "args", "cmd", "apdu", "expected", "response", "result", "data"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var l=(
|
|
2
|
-
`))}getPublicKey(){switch(this.bytes[0]){case r.CommandTags.AddMember:case r.CommandTags.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case r.CommandTags.AddMember:return(0,t.Just)(e.publicKey);case r.CommandTags.PublishKey:return(0,t.Just)(e.recipient);default:return t.Nothing}}).map(e=>(0,
|
|
1
|
+
"use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var l=(c,e)=>{for(var n in e)m(c,n,{get:e[n],enumerable:!0})},d=(c,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of p(e))!b.call(c,o)&&o!==n&&m(c,o,{get:()=>e[o],enumerable:!(i=f(e,o))||i.enumerable});return c};var h=c=>d(m({},"__esModule",{value:!0}),c);var B={};l(B,{LKRPCommand:()=>y});module.exports=h(B);var s=require("@ledgerhq/device-management-kit"),t=require("purify-ts"),r=require("../models/Tags"),a=require("./derivationPath"),u=require("./TLVParser");class y{constructor(e,n){this.bytes=e;this.data=n?(0,t.Just)((0,t.Right)(n)):t.Nothing}data;static fromHex(e){return new y((0,s.hexaStringToBuffer)(e)??new Uint8Array)}static fromData(e){const n=new s.ByteArrayBuilder;switch(e.type){case r.CommandTags.Seed:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.topic).encodeInTLVFromUInt16(r.GeneralTags.Int,e.protocolVersion).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.groupKey).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break;case r.CommandTags.AddMember:{const o=new ArrayBuffer(4);new DataView(o).setUint32(0,e.permissions),n.encodeInTLVFromAscii(r.GeneralTags.String,e.name).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.publicKey).encodeInTLVFromBuffer(r.GeneralTags.Int,new Uint8Array(o));break}case r.CommandTags.PublishKey:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.recipient).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break;case r.CommandTags.Derive:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,(0,a.derivationPathAsBytes)(e.path)).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.groupKey).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break}const i=n.build();return new y(new Uint8Array([e.type,i.length,...i]),e)}static bytesFromUnsignedData(e){const n=new s.ByteArrayBuilder;switch(e.type){case r.CommandTags.AddMember:{const o=new ArrayBuffer(4);new DataView(o).setUint32(0,e.permissions),n.encodeInTLVFromAscii(r.GeneralTags.String,e.name).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.publicKey).encodeInTLVFromBuffer(r.GeneralTags.Int,new Uint8Array(o));break}case r.CommandTags.PublishKey:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,new Uint8Array).encodeInTLVFromBuffer(r.GeneralTags.Bytes,new Uint8Array).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.recipient).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,new Uint8Array);break;case r.CommandTags.Derive:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,(0,a.derivationPathAsBytes)(e.path));break}const i=n.build();return new Uint8Array([e.type,i.length,...i])}toString(){return(0,s.bufferToHexaString)(this.bytes,!1)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const e=new u.TLVParser(this.bytes).parseCommandData();return this.data=(0,t.Just)(e),e})}toHuman(){return this.parse().map(e=>Object.entries(e).map(([n,i])=>n==="type"?`${r.CommandTags[i]}(0x${i?.toString(16).padStart(2,"0")}):`:` ${n}: ${i instanceof Uint8Array?(0,s.bufferToHexaString)(i,!1):i}`).join(`
|
|
2
|
+
`))}getPublicKey(){switch(this.bytes[0]){case r.CommandTags.AddMember:case r.CommandTags.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case r.CommandTags.AddMember:return(0,t.Just)(e.publicKey);case r.CommandTags.PublishKey:return(0,t.Just)(e.recipient);default:return t.Nothing}}).map(e=>(0,s.bufferToHexaString)(e,!1));default:return t.Nothing}}getEncryptedPublishedKey(){switch(this.bytes[0]){case r.CommandTags.Seed:case r.CommandTags.Derive:case r.CommandTags.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case r.CommandTags.Seed:case r.CommandTags.Derive:case r.CommandTags.PublishKey:return t.Maybe.of({...e});default:return t.Nothing}});default:return t.Nothing}}}0&&(module.exports={LKRPCommand});
|
|
3
3
|
//# sourceMappingURL=LKRPCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport {\n type LKRPCommandData,\n type UnsignedCommandData,\n} from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\nimport { type EncryptedPublishedKey } from \"@internal/models/Types\";\n\nimport { derivationPathAsBytes } from \"./derivationPath\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPCommand {\n private data: Maybe<Either<LKRPParsingError, LKRPCommandData>>;\n\n constructor(\n private bytes: Uint8Array,\n data?: LKRPCommandData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPCommand {\n return new LKRPCommand(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(data: LKRPCommandData): LKRPCommand {\n const tlv = new ByteArrayBuilder();\n switch (data.type) {\n case CommandTags.Seed:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.topic)\n .encodeInTLVFromUInt16(GeneralTags.Int, data.protocolVersion)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.groupKey)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n\n case CommandTags.AddMember
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAIO,2CACPC,EAAyD,qBAOzDC,EAAyC,iCAGzCC,EAAsC,4BACtCC,EAA0B,uBAEnB,MAAMN,CAAY,CAGvB,YACUO,EACRC,EACA,CAFQ,WAAAD,EAGR,KAAK,KAAOC,KAAO,WAAK,SAAMA,CAAI,CAAC,EAAI,SACzC,CAPQ,KASR,OAAO,QAAQC,EAA0B,CACvC,OAAO,IAAIT,KAAY,sBAAmBS,CAAG,GAAK,IAAI,UAAY,CACpE,CAEA,OAAO,SAASD,EAAoC,CAClD,MAAME,EAAM,IAAI,mBAChB,OAAQF,EAAK,KAAM,CACjB,KAAK,cAAY,KACfE,EACG,sBAAsB,cAAY,MAAOF,EAAK,KAAK,EACnD,sBAAsB,cAAY,IAAKA,EAAK,eAAe,EAC3D,sBAAsB,cAAY,UAAWA,EAAK,QAAQ,EAC1D,sBAAsB,cAAY,MAAOA,EAAK,oBAAoB,EAClE,sBAAsB,cAAY,MAAOA,EAAK,cAAc,EAC5D,sBACC,cAAY,UACZA,EAAK,kBACP,EACF,MAEF,KAAK,cAAY,
|
|
6
|
-
"names": ["LKRPCommand_exports", "__export", "LKRPCommand", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_Tags", "import_derivationPath", "import_TLVParser", "bytes", "data", "hex", "tlv", "key", "value", "str"]
|
|
4
|
+
"sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport {\n type LKRPCommandData,\n type UnsignedCommandData,\n} from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\nimport { type EncryptedPublishedKey } from \"@internal/models/Types\";\n\nimport { derivationPathAsBytes } from \"./derivationPath\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPCommand {\n private data: Maybe<Either<LKRPParsingError, LKRPCommandData>>;\n\n constructor(\n private bytes: Uint8Array,\n data?: LKRPCommandData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPCommand {\n return new LKRPCommand(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(data: LKRPCommandData): LKRPCommand {\n const tlv = new ByteArrayBuilder();\n switch (data.type) {\n case CommandTags.Seed:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.topic)\n .encodeInTLVFromUInt16(GeneralTags.Int, data.protocolVersion)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.groupKey)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n\n case CommandTags.AddMember: {\n const permissions = new ArrayBuffer(4);\n new DataView(permissions).setUint32(0, data.permissions);\n tlv\n .encodeInTLVFromAscii(GeneralTags.String, data.name)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.publicKey)\n .encodeInTLVFromBuffer(GeneralTags.Int, new Uint8Array(permissions));\n break;\n }\n\n case CommandTags.PublishKey:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.recipient)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n\n case CommandTags.Derive:\n tlv\n .encodeInTLVFromBuffer(\n GeneralTags.Bytes,\n derivationPathAsBytes(data.path),\n )\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.groupKey)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n }\n\n const bytes = tlv.build();\n return new LKRPCommand(\n new Uint8Array([data.type, bytes.length, ...bytes]),\n data,\n );\n }\n\n static bytesFromUnsignedData(data: UnsignedCommandData): Uint8Array {\n const tlv = new ByteArrayBuilder();\n switch (data.type) {\n case CommandTags.AddMember: {\n // NOTE: encode the permission bytes array with DataView because\n // ByteArrayBuilder.encodeInTLVFromUInt32 doesn't seem to work with negative numbers\n // ByteArrayBuilder.add32BitIntToData doesn't seem to work with number > 0x7fffffff\n const permissions = new ArrayBuffer(4);\n new DataView(permissions).setUint32(0, data.permissions);\n tlv\n .encodeInTLVFromAscii(GeneralTags.String, data.name)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.publicKey)\n .encodeInTLVFromBuffer(GeneralTags.Int, new Uint8Array(permissions));\n break;\n }\n\n case CommandTags.PublishKey:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, new Uint8Array()) // Empty IV\n .encodeInTLVFromBuffer(GeneralTags.Bytes, new Uint8Array()) // Empty encryptedXpriv\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.recipient)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, new Uint8Array()); // Empty ephemeralPublicKey\n break;\n\n case CommandTags.Derive:\n tlv.encodeInTLVFromBuffer(\n GeneralTags.Bytes,\n derivationPathAsBytes(data.path),\n );\n break;\n }\n\n const bytes = tlv.build();\n return new Uint8Array([data.type, bytes.length, ...bytes]);\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes, false);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPCommandData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseCommandData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse().map((data) =>\n Object.entries(data)\n .map(([key, value]) => {\n if (key === \"type\") {\n return `${CommandTags[value as CommandTags]}(0x${value?.toString(16).padStart(2, \"0\")}):`;\n }\n return ` ${key}: ${value instanceof Uint8Array ? bufferToHexaString(value, false) : value}`;\n })\n .join(\"\\n\"),\n );\n }\n\n getPublicKey(): Maybe<string> {\n switch (this.bytes[0]) {\n case CommandTags.AddMember:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.AddMember:\n return Just(data.publicKey);\n case CommandTags.PublishKey:\n return Just(data.recipient);\n default:\n return Nothing;\n }\n })\n .map((str) => bufferToHexaString(str, false));\n\n default:\n return Nothing;\n }\n }\n\n getEncryptedPublishedKey(): Maybe<EncryptedPublishedKey> {\n switch (this.bytes[0]) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return Maybe.of({ ...data });\n default:\n return Nothing;\n }\n });\n default:\n return Nothing;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["LKRPCommand_exports", "__export", "LKRPCommand", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_Tags", "import_derivationPath", "import_TLVParser", "bytes", "data", "hex", "tlv", "permissions", "key", "value", "str"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var r=require("purify-ts"),
|
|
2
|
-
`)))}),it("should fail for invalid command bytes format",()=>{const
|
|
1
|
+
"use strict";var r=require("purify-ts"),a=require("../../api/model/Errors"),c=require("../../api/model/Permissions"),x=require("../models/Tags"),t=require("./LKRPCommand");describe("LKRPCommand",()=>{describe("fromData",()=>{it("should encode add member permissions correctly",()=>{const e=Uint8Array.from([2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193]),n=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"OWNER",publicKey:e,permissions:c.Permissions.OWNER}),o=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"READER",publicKey:e,permissions:c.Permissions.CAN_ENCRYPT}),i=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"DAPP",publicKey:e,permissions:c.Permissions.OWNER&~c.Permissions.CAN_ADD_BLOCK});expect(n.toString()).toBe(["11 30","04 05 4f 57 4e 45 52","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 ff ff ff ff"].join("").replace(/ /g,"")),expect(o.toString()).toBe(["11 31","04 06 52 45 41 44 45 52","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 00 00 00 01"].join("").replace(/ /g,"")),expect(i.toString()).toBe(["11 2f","04 04 44 41 50 50","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 ff ff ff fb"].join("").replace(/ /g,""))})}),describe("bytesFromUnsignedData",()=>{it("should encode add member permissions correctly",()=>{const e=Uint8Array.from([2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193]),n=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"OWNER",publicKey:e,permissions:c.Permissions.OWNER}),o=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"READER",publicKey:e,permissions:c.Permissions.CAN_ENCRYPT}),i=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"DAPP",publicKey:e,permissions:c.Permissions.OWNER&~c.Permissions.CAN_ADD_BLOCK});expect(n).toEqual(Uint8Array.from([[17,48],[4,5,79,87,78,69,82],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,255,255,255,255]].flat())),expect(o).toEqual(Uint8Array.from([[17,49],[4,6,82,69,65,68,69,82],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,0,0,0,1]].flat())),expect(i).toEqual(Uint8Array.from([[17,47],[4,4,68,65,80,80],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,255,255,255,251]].flat()))})}),describe("toString",()=>{it("should return the hex of the bytes of the command",()=>{const e="0102030405060708",n=t.LKRPCommand.fromHex(e);expect(n.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the command",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),n=new t.LKRPCommand(e);expect(n.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the command data correctly",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Int,2,1,2,x.GeneralTags.PublicKey,3,2,4,6,x.GeneralTags.Bytes,3,3,5,7,x.GeneralTags.Bytes,3,4,8,16,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,e.length,...e]));expect(n.parse()).toStrictEqual((0,r.Right)({type:x.CommandTags.Seed,topic:new Uint8Array([1,2,3]),protocolVersion:258,groupKey:new Uint8Array([2,4,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([4,8,16]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail with invalid command bytes",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,1,1]));expect(e.parse()).toStrictEqual((0,r.Left)(new a.LKRPParsingError("Invalid end of TLV, expected length")))})}),describe("getPublicKey",()=>{it("should return the public key for AddMember command",()=>{const e=new Uint8Array([x.GeneralTags.String,3,65,66,67,x.GeneralTags.PublicKey,3,4,5,6,x.GeneralTags.Int,1,1]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.AddMember,e.length,...e]));expect(n.getPublicKey()).toStrictEqual((0,r.Just)("040506"))}),it("should return the public key for PublishKey commands",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Bytes,3,4,5,6,x.GeneralTags.PublicKey,3,7,8,9,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.PublishKey,e.length,...e]));expect(n.getPublicKey()).toEqual((0,r.Just)("070809"))}),it("should return undefined for other command types",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed]));expect(e.getPublicKey()).toEqual(r.Nothing)})}),describe("toHuman",()=>{it("should return a string representation of the command",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Bytes,3,4,5,6,x.GeneralTags.PublicKey,3,7,8,9,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.PublishKey,e.length,...e]));expect(n.toHuman()).toStrictEqual((0,r.Right)(["PublishKey(0x12):"," initializationVector: 010203"," encryptedXpriv: 040506"," recipient: 070809"," ephemeralPublicKey: 0a0b0c"].join(`
|
|
2
|
+
`)))}),it("should fail for invalid command bytes format",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,1,1]));expect(e.toHuman()).toStrictEqual((0,r.Left)(new a.LKRPParsingError("Invalid end of TLV, expected length")))})})});
|
|
3
3
|
//# sourceMappingURL=LKRPCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_purify_ts", "import_Errors", "import_Tags", "import_LKRPCommand", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
|
|
4
|
+
"sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { Permissions } from \"@api/model/Permissions\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"fromData\", () => {\n it(\"should encode add member permissions correctly\", () => {\n // GIVEN\n const publicKey = Uint8Array.from([\n 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16, 0x28, 0x5a, 0xd2,\n 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6, 0xc4, 0x8c, 0x84, 0x73,\n 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e, 0x43, 0xc1,\n ]);\n // WHEN\n const addOwner = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"OWNER\",\n publicKey,\n permissions: Permissions.OWNER,\n });\n const addReader = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"READER\",\n publicKey,\n permissions: Permissions.CAN_ENCRYPT,\n });\n const dapp = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"DAPP\",\n publicKey,\n permissions: Permissions.OWNER & ~Permissions.CAN_ADD_BLOCK,\n });\n // THEN\n expect(addOwner.toString()).toBe(\n [\n \"11 30\", // header\n \"04 05 4f 57 4e 45 52\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 ff ff ff ff\", // permissions (OWNER)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n expect(addReader.toString()).toBe(\n [\n \"11 31\", // header\n \"04 06 52 45 41 44 45 52\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 00 00 00 01\", // permissions (CAN_ENCRYPT)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n expect(dapp.toString()).toBe(\n [\n \"11 2f\", // header\n \"04 04 44 41 50 50\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 ff ff ff fb\", // permissions (OWNER & ~CAN_ADD_BLOCK)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n });\n });\n\n describe(\"bytesFromUnsignedData\", () => {\n it(\"should encode add member permissions correctly\", () => {\n // GIVEN\n const publicKey = Uint8Array.from([\n 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16, 0x28, 0x5a, 0xd2,\n 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6, 0xc4, 0x8c, 0x84, 0x73,\n 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e, 0x43, 0xc1,\n ]);\n // WHEN\n const addOwner = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"OWNER\",\n publicKey,\n permissions: Permissions.OWNER,\n });\n const addReader = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"READER\",\n publicKey,\n permissions: Permissions.CAN_ENCRYPT,\n });\n const dapp = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"DAPP\",\n publicKey,\n permissions: Permissions.OWNER & ~Permissions.CAN_ADD_BLOCK,\n });\n // THEN\n expect(addOwner).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x30], // header\n [0x04, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0xff, 0xff, 0xff, 0xff], // permissions (OWNER)\n ].flat(),\n ),\n );\n expect(addReader).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x31], // header\n [0x04, 0x06, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0x00, 0x00, 0x00, 0x01], // permissions (CAN_ENCRYPT)\n ].flat(),\n ),\n );\n expect(dapp).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x2f], // header\n [0x04, 0x04, 0x44, 0x41, 0x50, 0x50], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0xff, 0xff, 0xff, 0xfb], // permissions (OWNER & ~CAN_ADD_BLOCK)\n ].flat(),\n ),\n );\n });\n });\n\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_purify_ts", "import_Errors", "import_Permissions", "import_Tags", "import_LKRPCommand", "publicKey", "addOwner", "addReader", "dapp", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
|
|
7
7
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"private": false,
|
|
6
6
|
"exports": {
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@ledgerhq/device-management-kit": "workspace:*",
|
|
39
|
-
"@ledgerhq/signer-utils": "
|
|
39
|
+
"@ledgerhq/signer-utils": "^1.1.0",
|
|
40
40
|
"@noble/ciphers": "^1.3.0",
|
|
41
41
|
"@noble/curves": "^1.9.7",
|
|
42
42
|
"@noble/hashes": "^1.8.0",
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as t,ApduParser as m,CommandResultFactory as o,InvalidStatusWordError as n}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as
|
|
1
|
+
import{ApduBuilder as t,ApduParser as m,CommandResultFactory as o,InvalidStatusWordError as n}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{Maybe as d}from"purify-ts";import{LEDGER_SYNC_ERRORS as s,LedgerKeyringProtocolErrorFactory as l}from"./utils/ledgerKeyringProtocolErrors";class C{name="getAppName";errorHelper=new a(s,l);getApdu(){const e={cla:224,ins:3,p1:0,p2:0};return new t(e).build()}parseResponse(e){return d.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new m(e).encodeToString(e.data);return r?o({data:{name:r}}):o({error:new n("Name is missing")})})}}export{C as GetAppNameCommand};
|
|
2
2
|
//# sourceMappingURL=GetAppNameCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/GetAppNameCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetAppNameCommandResponse = {\n readonly name: string;\n};\n\nexport type GetAppNameCommandArgs = undefined;\n\nexport class GetAppNameCommand\n implements\n Command<\n GetAppNameCommandResponse,\n GetAppNameCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetAppNameCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getAppNameArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getAppNameArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAppNameCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const name = parser.encodeToString(apduResponse.data);\n\n if (!name) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Name is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { name },\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetAppNameCommandResponse = {\n readonly name: string;\n};\n\nexport type GetAppNameCommandArgs = undefined;\n\nexport class GetAppNameCommand\n implements\n Command<\n GetAppNameCommandResponse,\n GetAppNameCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"getAppName\";\n private readonly errorHelper = new CommandErrorHelper<\n GetAppNameCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getAppNameArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getAppNameArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAppNameCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const name = parser.encodeToString(apduResponse.data);\n\n if (!name) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Name is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { name },\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,CACW,KAAO,aACC,YAAc,IAAIJ,EAGjCE,EAAoBC,CAAiC,EAEvD,SAAgB,CACd,MAAME,EAAkC,CACtC,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAGA,OADgB,IAAIT,EAAYS,CAAc,EAC/B,MAAM,CACvB,CAEA,cACEC,EAC2E,CAC3E,OAAOL,EAAM,aACX,KAAK,YAAY,SAASK,CAAY,CACxC,EAAE,cAAc,IAAM,CAGpB,MAAMC,EAFS,IAAIV,EAAWS,CAAY,EAEtB,eAAeA,EAAa,IAAI,EAEpD,OAAKC,EAMET,EAAqB,CAC1B,KAAM,CAAE,KAAAS,CAAK,CACf,CAAC,EAPQT,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,iBAAiB,CACrD,CAAC,CAML,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "GetAppNameCommand", "getAppNameArgs", "apduResponse", "name"]
|
|
7
7
|
}
|