@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.0.0-ledger-button-20250806141658 → 0.0.0-ledger-button-20250808005842
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/api/LedgerKeyringProtocol.js +1 -1
- package/lib/cjs/api/LedgerKeyringProtocol.js.map +1 -1
- package/lib/cjs/api/app-binder/AddToTrustchainDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js +1 -1
- package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/Errors.js +1 -1
- package/lib/cjs/api/app-binder/Errors.js.map +3 -3
- package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js +1 -1
- package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js.map +1 -1
- package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js +1 -1
- package/lib/cjs/internal/DefaultLedgerKeyringProtocol.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 +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js.map +3 -3
- 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/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/AuthenticateDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignBlockTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignBlockTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +2 -2
- package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js +1 -1
- package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js.map +3 -3
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +3 -3
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +2 -2
- package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js +1 -1
- package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js.map +1 -1
- package/lib/cjs/internal/models/LKRPBlockTypes.js +2 -0
- package/lib/cjs/internal/models/LKRPBlockTypes.js.map +7 -0
- package/lib/cjs/internal/models/LKRPCommandTypes.js +2 -0
- package/lib/cjs/internal/models/LKRPCommandTypes.js.map +7 -0
- package/lib/cjs/internal/{utils/TLVTags.js → models/Tags.js} +1 -1
- package/lib/cjs/internal/{utils/TLVTags.js.map → models/Tags.js.map} +2 -2
- package/lib/cjs/internal/models/Types.js +2 -0
- package/lib/cjs/internal/models/Types.js.map +7 -0
- package/lib/cjs/internal/utils/LKRPBlock.js.map +2 -2
- package/lib/cjs/internal/utils/LKRPBlock.test.js +1 -1
- package/lib/cjs/internal/utils/LKRPBlock.test.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlockStream.js +2 -2
- package/lib/cjs/internal/utils/LKRPBlockStream.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlockStream.test.js +3 -3
- package/lib/cjs/internal/utils/LKRPBlockStream.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 +1 -1
- package/lib/cjs/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/cjs/internal/utils/TLVBuilder.js +1 -1
- package/lib/cjs/internal/utils/TLVBuilder.js.map +3 -3
- package/lib/cjs/internal/utils/TLVParser.js +1 -1
- package/lib/cjs/internal/utils/TLVParser.js.map +3 -3
- package/lib/cjs/internal/utils/TLVParser.test.js +1 -1
- package/lib/cjs/internal/utils/TLVParser.test.js.map +3 -3
- package/lib/cjs/package.json +1 -0
- package/lib/esm/api/app-binder/Errors.js +1 -1
- package/lib/esm/api/app-binder/Errors.js.map +3 -3
- package/lib/esm/internal/DefaultLedgerKeyringProtocol.js +1 -1
- package/lib/esm/internal/DefaultLedgerKeyringProtocol.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/SignBlockHeader.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockHeader.js.map +3 -3
- 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/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/AuthenticateDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignBlockTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignBlockTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js +1 -1
- package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js.map +3 -3
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +3 -3
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +3 -3
- package/lib/esm/internal/models/LKRPBlockTypes.js +1 -0
- package/lib/esm/internal/models/LKRPCommandTypes.js +1 -0
- package/lib/esm/internal/models/LKRPCommandTypes.js.map +7 -0
- package/lib/esm/internal/{utils/TLVTags.js → models/Tags.js} +1 -1
- package/lib/esm/internal/{utils/TLVTags.js.map → models/Tags.js.map} +1 -1
- package/lib/esm/internal/models/Types.js +1 -0
- package/lib/esm/internal/models/Types.js.map +7 -0
- package/lib/esm/internal/utils/LKRPBlock.js.map +2 -2
- package/lib/esm/internal/utils/LKRPBlock.test.js +1 -1
- package/lib/esm/internal/utils/LKRPBlock.test.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlockStream.js +2 -2
- package/lib/esm/internal/utils/LKRPBlockStream.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlockStream.test.js +3 -3
- package/lib/esm/internal/utils/LKRPBlockStream.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 +1 -1
- package/lib/esm/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/esm/internal/utils/TLVBuilder.js +1 -1
- package/lib/esm/internal/utils/TLVBuilder.js.map +2 -2
- package/lib/esm/internal/utils/TLVParser.js +1 -1
- package/lib/esm/internal/utils/TLVParser.js.map +3 -3
- package/lib/esm/internal/utils/TLVParser.test.js +1 -1
- package/lib/esm/internal/utils/TLVParser.test.js.map +3 -3
- package/lib/esm/package.json +1 -0
- package/lib/types/api/LedgerKeyringProtocol.d.ts +1 -2
- package/lib/types/api/LedgerKeyringProtocol.d.ts.map +1 -1
- package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts +4 -4
- package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts +5 -4
- package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/Errors.d.ts +38 -12
- package/lib/types/api/app-binder/Errors.d.ts.map +1 -1
- package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts +2 -1
- package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts.map +1 -1
- package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts +1 -2
- package/lib/types/internal/DefaultLedgerKeyringProtocol.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/device-action/AddToTrustchainDeviceAction.d.ts +2 -2
- package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateDeviceAction.d.ts +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts +3 -3
- package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignBlockTask.d.ts +6 -7
- package/lib/types/internal/app-binder/task/SignBlockTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts +2 -3
- package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts +1 -1
- package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts.map +1 -1
- package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts +6 -6
- package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts.map +1 -1
- package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts +7 -7
- package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts.map +1 -1
- package/lib/types/internal/models/LKRPBlockTypes.d.ts +11 -0
- package/lib/types/internal/models/LKRPBlockTypes.d.ts.map +1 -0
- package/lib/types/internal/{utils/types.d.ts → models/LKRPCommandTypes.d.ts} +6 -29
- package/lib/types/internal/models/LKRPCommandTypes.d.ts.map +1 -0
- package/lib/types/internal/{utils/TLVTags.d.ts → models/Tags.d.ts} +1 -1
- package/lib/types/internal/models/Tags.d.ts.map +1 -0
- package/lib/types/internal/models/Types.d.ts +14 -0
- package/lib/types/internal/models/Types.d.ts.map +1 -0
- package/lib/types/internal/utils/LKRPBlock.d.ts +1 -1
- package/lib/types/internal/utils/LKRPBlock.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPBlockStream.d.ts +3 -3
- package/lib/types/internal/utils/LKRPBlockStream.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPCommand.d.ts +3 -2
- package/lib/types/internal/utils/LKRPCommand.d.ts.map +1 -1
- package/lib/types/internal/utils/TLVParser.d.ts +3 -2
- package/lib/types/internal/utils/TLVParser.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/lib/cjs/internal/utils/types.js +0 -2
- package/lib/cjs/internal/utils/types.js.map +0 -7
- package/lib/esm/internal/utils/types.js +0 -1
- package/lib/types/internal/utils/TLVTags.d.ts.map +0 -1
- package/lib/types/internal/utils/types.d.ts.map +0 -1
- /package/lib/esm/internal/{utils/types.js.map → models/LKRPBlockTypes.js.map} +0 -0
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var r=require("purify-ts"),o=require("../../api/app-binder/Errors"),
|
|
1
|
+
"use strict";var r=require("purify-ts"),o=require("../../api/app-binder/Errors"),e=require("../models/Tags"),i=require("./LKRPCommand");describe("LKRPCommand",()=>{describe("toString",()=>{it("should return the hex of the bytes of the command",()=>{const t="0102030405060708",n=i.LKRPCommand.fromHex(t);expect(n.toString()).toBe(t)})}),describe("toU8A",()=>{it("should return the bytes of the command",()=>{const t=new Uint8Array([1,2,3,4,5,6,7,8]),n=new i.LKRPCommand(t);expect(n.toU8A()).toBe(t)})}),describe("parse",()=>{it("should parse the command data correctly",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Int,2,1,2,e.GeneralTags.PublicKey,3,2,4,6,e.GeneralTags.Bytes,3,3,5,7,e.GeneralTags.Bytes,3,4,8,16,e.GeneralTags.PublicKey,3,10,11,12]),n=new i.LKRPCommand(new Uint8Array([e.CommandTags.Seed,t.length,...t]));expect(n.parse()).toStrictEqual((0,r.Right)({type:e.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 t=new i.LKRPCommand(new Uint8Array([e.CommandTags.Seed,1,1]));expect(t.parse()).toStrictEqual((0,r.Left)(new o.LKRPParsingError("Invalid end of TLV, expected length")))})}),describe("getPublicKey",()=>{it("should return the public key for AddMember command",()=>{const t=new Uint8Array([e.GeneralTags.String,3,65,66,67,e.GeneralTags.PublicKey,3,4,5,6,e.GeneralTags.Int,1,1]),n=new i.LKRPCommand(new Uint8Array([e.CommandTags.AddMember,t.length,...t]));expect(n.getPublicKey()).toStrictEqual((0,r.Just)("040506"))}),it("should return the public key for PublishKey commands",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Bytes,3,4,5,6,e.GeneralTags.PublicKey,3,7,8,9,e.GeneralTags.PublicKey,3,10,11,12]),n=new i.LKRPCommand(new Uint8Array([e.CommandTags.PublishKey,t.length,...t]));expect(n.getPublicKey()).toEqual((0,r.Just)("070809"))}),it("should return undefined for other command types",()=>{const t=new i.LKRPCommand(new Uint8Array([e.CommandTags.Seed]));expect(t.getPublicKey()).toEqual(r.Nothing)})}),describe("toHuman",()=>{it("should return a string representation of the command",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Bytes,3,4,5,6,e.GeneralTags.PublicKey,3,7,8,9,e.GeneralTags.PublicKey,3,10,11,12]),n=new i.LKRPCommand(new Uint8Array([e.CommandTags.PublishKey,t.length,...t]));expect(n.toHuman()).toStrictEqual((0,r.Right)(["PublishKey(0x12):"," initializationVector: 010203"," encryptedXpriv: 040506"," recipient: 070809"," ephemeralPublicKey: 0a0b0c"].join(`
|
|
2
2
|
`)))}),it("should fail for invalid command bytes format",()=>{const t=new i.LKRPCommand(new Uint8Array([e.CommandTags.Seed,1,1]));expect(t.toHuman()).toStrictEqual((0,r.Left)(new o.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/app-binder/Errors\";\
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAA2C,qBAE3CC,EAAiC,
|
|
6
|
-
"names": ["import_purify_ts", "import_Errors", "
|
|
4
|
+
"sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/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"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var d=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var y=(e,r)=>{for(var t in r)d(e,t,{get:r[t],enumerable:!0})},U=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of u(r))!h.call(e,a)&&a!==t&&d(e,a,{get:()=>r[a],enumerable:!(n=s(r,a))||n.enumerable});return e};var b=e=>U(d({},"__esModule",{value:!0}),e);var l={};y(l,{TLVBuilder:()=>A});module.exports=b(l);var i=require("../
|
|
1
|
+
"use strict";var d=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var h=Object.prototype.hasOwnProperty;var y=(e,r)=>{for(var t in r)d(e,t,{get:r[t],enumerable:!0})},U=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of u(r))!h.call(e,a)&&a!==t&&d(e,a,{get:()=>r[a],enumerable:!(n=s(r,a))||n.enumerable});return e};var b=e=>U(d({},"__esModule",{value:!0}),e);var l={};y(l,{TLVBuilder:()=>A});module.exports=b(l);var i=require("../models/Tags");class A{items=[];addNull(){return this.add(i.GeneralTags.Null,[])}addInt(r,t){const n=new DataView(new ArrayBuffer(t));switch(t){case 1:n.setUint8(0,r);break;case 2:n.setUint16(0,r);break;case 4:n.setUint32(0,r);break}return this.add(i.GeneralTags.Int,new Uint8Array(n.buffer))}addHash(r){return this.add(i.GeneralTags.Hash,r)}addSignature(r){return this.add(i.GeneralTags.Signature,r)}addString(r){return this.add(i.GeneralTags.String,new TextEncoder().encode(r))}addBytes(r){return this.add(i.GeneralTags.Bytes,r)}addPublicKey(r){return this.add(i.GeneralTags.PublicKey,r)}build(){return new Uint8Array(this.items.flatMap(r=>[...r]))}with(r){return r(this),this}push(r){return this.items.push(r),this}add(r,t){return this.items.push(new Uint8Array([r,t.length,...t])),this}}0&&(module.exports={TLVBuilder});
|
|
2
2
|
//# sourceMappingURL=TLVBuilder.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/TLVBuilder.ts"],
|
|
4
|
-
"sourcesContent": ["import { GeneralTags } from \"@internal/
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA4B,
|
|
6
|
-
"names": ["TLVBuilder_exports", "__export", "TLVBuilder", "__toCommonJS", "
|
|
4
|
+
"sourcesContent": ["import { GeneralTags } from \"@internal/models/Tags\";\n\nexport class TLVBuilder {\n private items: Uint8Array[] = [];\n\n addNull() {\n return this.add(GeneralTags.Null, []);\n }\n\n addInt(value: number, length: 1 | 2 | 4) {\n const view = new DataView(new ArrayBuffer(length));\n switch (length) {\n case 1:\n view.setUint8(0, value);\n break;\n case 2:\n view.setUint16(0, value);\n break;\n case 4:\n view.setUint32(0, value);\n break;\n }\n return this.add(GeneralTags.Int, new Uint8Array(view.buffer));\n }\n\n addHash(value: Uint8Array) {\n return this.add(GeneralTags.Hash, value);\n }\n\n addSignature(value: Uint8Array) {\n return this.add(GeneralTags.Signature, value);\n }\n\n addString(value: string) {\n return this.add(GeneralTags.String, new TextEncoder().encode(value));\n }\n\n addBytes(value: Uint8Array | number[]) {\n return this.add(GeneralTags.Bytes, value);\n }\n\n addPublicKey(value: Uint8Array) {\n return this.add(GeneralTags.PublicKey, value);\n }\n\n build(): Uint8Array {\n return new Uint8Array(this.items.flatMap((item) => [...item]));\n }\n\n with(fn: (builder: TLVBuilder) => void): TLVBuilder {\n fn(this);\n return this;\n }\n\n push(item: Uint8Array) {\n this.items.push(item);\n return this;\n }\n\n private add(type: number, value: Uint8Array | number[]) {\n this.items.push(new Uint8Array([type, value.length, ...value]));\n return this;\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,gBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAA4B,iCAErB,MAAMF,CAAW,CACd,MAAsB,CAAC,EAE/B,SAAU,CACR,OAAO,KAAK,IAAI,cAAY,KAAM,CAAC,CAAC,CACtC,CAEA,OAAOG,EAAeC,EAAmB,CACvC,MAAMC,EAAO,IAAI,SAAS,IAAI,YAAYD,CAAM,CAAC,EACjD,OAAQA,EAAQ,CACd,IAAK,GACHC,EAAK,SAAS,EAAGF,CAAK,EACtB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,MACF,IAAK,GACHE,EAAK,UAAU,EAAGF,CAAK,EACvB,KACJ,CACA,OAAO,KAAK,IAAI,cAAY,IAAK,IAAI,WAAWE,EAAK,MAAM,CAAC,CAC9D,CAEA,QAAQF,EAAmB,CACzB,OAAO,KAAK,IAAI,cAAY,KAAMA,CAAK,CACzC,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAI,cAAY,UAAWA,CAAK,CAC9C,CAEA,UAAUA,EAAe,CACvB,OAAO,KAAK,IAAI,cAAY,OAAQ,IAAI,YAAY,EAAE,OAAOA,CAAK,CAAC,CACrE,CAEA,SAASA,EAA8B,CACrC,OAAO,KAAK,IAAI,cAAY,MAAOA,CAAK,CAC1C,CAEA,aAAaA,EAAmB,CAC9B,OAAO,KAAK,IAAI,cAAY,UAAWA,CAAK,CAC9C,CAEA,OAAoB,CAClB,OAAO,IAAI,WAAW,KAAK,MAAM,QAASG,GAAS,CAAC,GAAGA,CAAI,CAAC,CAAC,CAC/D,CAEA,KAAKC,EAA+C,CAClD,OAAAA,EAAG,IAAI,EACA,IACT,CAEA,KAAKD,EAAkB,CACrB,YAAK,MAAM,KAAKA,CAAI,EACb,IACT,CAEQ,IAAIE,EAAcL,EAA8B,CACtD,YAAK,MAAM,KAAK,IAAI,WAAW,CAACK,EAAML,EAAM,OAAQ,GAAGA,CAAK,CAAC,CAAC,EACvD,IACT,CACF",
|
|
6
|
+
"names": ["TLVBuilder_exports", "__export", "TLVBuilder", "__toCommonJS", "import_Tags", "value", "length", "view", "item", "fn", "type"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var P=(o,e)=>{for(var t in e)u(o,t,{get:e[t],enumerable:!0})},E=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of m(e))!f.call(o,s)&&s!==t&&u(o,s,{get:()=>e[s],enumerable:!(n=y(e,s))||n.enumerable});return o};var v=o=>E(u({},"__esModule",{value:!0}),o);var L={};P(L,{TLVParser:()=>b});module.exports=v(L);var r=require("purify-ts"),i=require("../../api/app-binder/Errors"),c=require("./derivationPath"),h=require("./eitherSeqRecord"),d=require("./hex"),g=require("./LKRPCommand")
|
|
1
|
+
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var P=(o,e)=>{for(var t in e)u(o,t,{get:e[t],enumerable:!0})},E=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of m(e))!f.call(o,s)&&s!==t&&u(o,s,{get:()=>e[s],enumerable:!(n=y(e,s))||n.enumerable});return o};var v=o=>E(u({},"__esModule",{value:!0}),o);var L={};P(L,{TLVParser:()=>b});module.exports=v(L);var r=require("purify-ts"),i=require("../../api/app-binder/Errors"),a=require("../models/Tags"),c=require("./derivationPath"),h=require("./eitherSeqRecord"),d=require("./hex"),g=require("./LKRPCommand");const K=3;class b{bytes;parser;offset=0;constructor(e){this.bytes=e,this.parser=this.parseTLV(e)}get state(){return{offset:this.offset,isDone:this.offset>=this.bytes.length}}parse(){return this.parser.next().value}tlvEncoded(e){const t=this.offset;return e().map(()=>this.bytes.slice(t,this.offset))}parseNull(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Null?(0,r.Left)(new i.LKRPParsingError("Expected null")):(0,r.Right)(e.value))}parseInt(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Int?(0,r.Left)(new i.LKRPParsingError("Expected a number")):(0,r.Right)(e.value))}parseHash(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Hash?(0,r.Left)(new i.LKRPParsingError("Expected a hash")):(0,r.Right)(e.value))}parseSignature(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Signature?(0,r.Left)(new i.LKRPParsingError("Expected a signature")):(0,r.Right)(e.value))}parseString(){return this.parse().chain(e=>e.tag!==a.GeneralTags.String?(0,r.Left)(new i.LKRPParsingError("Expected a string")):(0,r.Right)(e.value))}parseBytes(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Bytes?(0,r.Left)(new i.LKRPParsingError("Expected bytes")):(0,r.Right)(e.value))}parsePublicKey(){return this.parse().chain(e=>e.tag!==a.GeneralTags.PublicKey?(0,r.Left)(new i.LKRPParsingError("Expected a public key")):(0,r.Right)(e.value))}parseCommandBytes(){return this.parse().chain(({tag:e,value:t})=>e<16||e>63||!(t instanceof Uint8Array)?(0,r.Left)(new i.LKRPParsingError(`Invalid command type: 0x${e.toString(16).padStart(2,"0")}`)):(0,r.Right)(t))}parseCommandData(){const e=this.parseCommandBytes(),t=this.offset;return e.chain(n=>{const s=n[0];switch(this.offset-=n.length-2,s){case a.CommandTags.Seed:return(0,h.eitherSeqRecord)({type:s,topic:()=>this.parseBytes(),protocolVersion:()=>this.parseInt(),groupKey:()=>this.parsePublicKey(),initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),ephemeralPublicKey:()=>this.parsePublicKey()});case a.CommandTags.AddMember:return(0,h.eitherSeqRecord)({type:s,name:()=>this.parseString(),publicKey:()=>this.parsePublicKey(),permissions:()=>this.parseInt()});case a.CommandTags.PublishKey:return(0,h.eitherSeqRecord)({type:s,initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),recipient:()=>this.parsePublicKey(),ephemeralPublicKey:()=>this.parsePublicKey()});case a.CommandTags.Derive:return(0,h.eitherSeqRecord)({type:s,path:()=>this.parseBytes().map(c.derivationPathAsString),groupKey:()=>this.parsePublicKey(),initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),ephemeralPublicKey:()=>this.parsePublicKey()});default:return(0,r.Left)(new i.LKRPParsingError(`Unsupported command type: 0x${s?.toString(16).padStart(2,"0")}`))}}).chain(n=>this.offset===t?(0,r.Right)(n):(0,r.Left)(new i.LKRPParsingError("Command was parsed incorrectly")))}parseCommands(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Int?(0,r.Left)(new i.LKRPParsingError("Expected a command count")):(0,r.Right)(e.value)).chain(e=>{const t=[];for(let n=0;n<e;n++){const s=this.parseCommandBytes();if(s.isLeft())return s;s.ifRight(l=>t.push(new g.LKRPCommand(l)))}return(0,r.Right)(t)})}parseBlockData(){const e=this.offset;return this.parseInt().chain(t=>(0,h.eitherSeqRecord)({parent:()=>this.parseHash().map(d.bytesToHex),issuer:()=>this.parsePublicKey(),header:()=>(0,r.Right)(this.bytes.slice(e,this.offset+K)),commands:()=>this.parseCommands(),signature:()=>this.tlvEncoded(()=>this.parseSignature())}))}*parseTLV(e){for(;;){const t=e[this.offset];if(typeof t>"u")return(0,r.Left)(new i.LKRPParsingError("Unexpected end of TLV"));this.offset++;const n=e[this.offset];if(typeof n>"u")return(0,r.Left)(new i.LKRPParsingError("Invalid end of TLV, expected length"));this.offset++;const s=this.offset+n,l=e.slice(this.offset,s);if(s>e.length)return(0,r.Left)(new i.LKRPParsingError("Invalid end of TLV value"));switch(this.offset=s,t){case a.GeneralTags.Null:yield n>0?(0,r.Left)(new i.LKRPParsingError("Invalid null length")):(0,r.Right)({tag:t,value:null});break;case a.GeneralTags.Int:{const p=new DataView(l.buffer);switch(l.length){case 1:yield(0,r.Right)({tag:t,value:p.getUint8(0)});break;case 2:yield(0,r.Right)({tag:t,value:p.getUint16(0,!1)});break;case 4:yield(0,r.Right)({tag:t,value:p.getUint32(0,!1)});break;default:yield(0,r.Left)(new i.LKRPParsingError("Unsupported integer length"))}}break;case a.GeneralTags.String:yield l.length===0?(0,r.Left)(new i.LKRPParsingError("Empty string value")):(0,r.Right)({tag:t,value:new TextDecoder().decode(l)});break;case a.GeneralTags.Hash:case a.GeneralTags.Signature:case a.GeneralTags.Bytes:case a.GeneralTags.PublicKey:yield(0,r.Right)({tag:t,value:l});break;default:yield(0,r.Right)({tag:t,value:new Uint8Array([t,n,...l])});break}}}}0&&(module.exports={TLVParser});
|
|
2
2
|
//# sourceMappingURL=TLVParser.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/TLVParser.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Either, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { derivationPathAsString } from \"./derivationPath\";\nimport { eitherSeqRecord } from \"./eitherSeqRecord\";\nimport { bytesToHex } from \"./hex\";\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { CommandTags, GeneralTags } from \"./TLVTags\";\nimport { type LKRPBlockParsedData, type LKRPCommandData } from \"./types\";\n\ntype ParserValue = Either<\n LKRPParsingError,\n | { tag: GeneralTags.Null; value: null }\n | { tag: GeneralTags.Int; value: number }\n | { tag: GeneralTags.Hash; value: Uint8Array }\n | { tag: GeneralTags.Signature; value: Uint8Array }\n | { tag: GeneralTags.String; value: string }\n | { tag: GeneralTags.Bytes; value: Uint8Array }\n | { tag: GeneralTags.PublicKey; value: Uint8Array }\n | { tag: CommandTags; value: Uint8Array }\n | {\n tag: Exclude<number, GeneralTags | CommandTags>;\n value: null | number | Uint8Array;\n }\n>;\n\ntype Parser = Generator<ParserValue, ParserValue, void>;\n\nconst COMMAND_COUNT_LENGTH = 3;\n\nexport class TLVParser {\n private readonly bytes: Uint8Array;\n private readonly parser: Parser;\n private offset = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.parser = this.parseTLV(bytes);\n }\n\n get state() {\n return {\n offset: this.offset,\n isDone: this.offset >= this.bytes.length,\n };\n }\n\n parse(): ParserValue {\n return this.parser.next().value;\n }\n\n tlvEncoded(\n fn: () => Either<LKRPParsingError, unknown>,\n ): Either<LKRPParsingError, Uint8Array> {\n const start = this.offset;\n return fn().map(() => this.bytes.slice(start, this.offset));\n }\n\n parseNull(): Either<LKRPParsingError, null> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Null\n ? Left(new LKRPParsingError(\"Expected null\"))\n : Right(next.value),\n );\n }\n\n parseInt(): Either<LKRPParsingError, number> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a number\"))\n : Right(next.value),\n );\n }\n\n parseHash(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Hash\n ? Left(new LKRPParsingError(\"Expected a hash\"))\n : Right(next.value),\n );\n }\n\n parseSignature(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Signature\n ? Left(new LKRPParsingError(\"Expected a signature\"))\n : Right(next.value),\n );\n }\n\n parseString(): Either<LKRPParsingError, string> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.String\n ? Left(new LKRPParsingError(\"Expected a string\"))\n : Right(next.value),\n );\n }\n\n parseBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Bytes\n ? Left(new LKRPParsingError(\"Expected bytes\"))\n : Right(next.value),\n );\n }\n\n parsePublicKey(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.PublicKey\n ? Left(new LKRPParsingError(\"Expected a public key\"))\n : Right(next.value),\n );\n }\n\n parseCommandBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain(({ tag, value }) =>\n tag < 0x10 || tag > 0x3f || !(value instanceof Uint8Array)\n ? Left(\n new LKRPParsingError(\n `Invalid command type: 0x${tag.toString(16).padStart(2, \"0\")}`,\n ),\n )\n : Right(value),\n );\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Commands\n parseCommandData(): Either<LKRPParsingError, LKRPCommandData> {\n const bytes = this.parseCommandBytes();\n const end = this.offset;\n\n return bytes\n .chain<LKRPParsingError, LKRPCommandData>((value) => {\n const type = value[0];\n this.offset -= value.length - 2; // Adjust offset to the start of the command\n switch (type) {\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Seed-(0x10)\n case CommandTags.Seed:\n return eitherSeqRecord({\n type,\n topic: () => this.parseBytes(),\n protocolVersion: () => this.parseInt(),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#AddMember-(0x11)\n case CommandTags.AddMember:\n return eitherSeqRecord({\n type,\n name: () => this.parseString(),\n publicKey: () => this.parsePublicKey(),\n permissions: () => this.parseInt(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#PublishKey-(0x12)\n case CommandTags.PublishKey:\n return eitherSeqRecord({\n type,\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n recipient: () => this.parsePublicKey(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Derive-(0x15)\n case CommandTags.Derive:\n return eitherSeqRecord({\n type,\n path: () => this.parseBytes().map(derivationPathAsString),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n default:\n return Left(\n new LKRPParsingError(\n `Unsupported command type: 0x${type?.toString(16).padStart(2, \"0\")}`,\n ),\n );\n }\n })\n .chain((data) =>\n this.offset === end\n ? Right(data)\n : Left(new LKRPParsingError(\"Command was parsed incorrectly\")),\n );\n }\n\n parseCommands(): Either<LKRPParsingError, LKRPCommand[]> {\n return this.parse()\n .chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a command count\"))\n : Right(next.value),\n )\n .chain((count) => {\n const commands: LKRPCommand[] = [];\n for (let i = 0; i < count; i++) {\n const command = this.parseCommandBytes();\n if (command.isLeft()) return command;\n command.ifRight((value) => commands.push(new LKRPCommand(value)));\n }\n return Right(commands);\n });\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Block\n parseBlockData(): Either<LKRPParsingError, LKRPBlockParsedData> {\n const startOffset = this.offset;\n return this.parseInt().chain((_version) =>\n eitherSeqRecord({\n parent: () => this.parseHash().map(bytesToHex),\n issuer: () => this.parsePublicKey(),\n header: () =>\n Right(\n this.bytes.slice(startOffset, this.offset + COMMAND_COUNT_LENGTH),\n ),\n commands: () => this.parseCommands(),\n signature: () => this.tlvEncoded(() => this.parseSignature()),\n }),\n );\n }\n\n private *parseTLV(bytes: Uint8Array): Parser {\n while (true) {\n const tag = bytes[this.offset];\n if (typeof tag === \"undefined\") {\n return Left(new LKRPParsingError(\"Unexpected end of TLV\"));\n }\n this.offset++;\n const length = bytes[this.offset];\n if (typeof length === \"undefined\") {\n return Left(\n new LKRPParsingError(\"Invalid end of TLV, expected length\"),\n );\n }\n this.offset++;\n const valueEnd = this.offset + length;\n const value = bytes.slice(this.offset, valueEnd);\n if (valueEnd > bytes.length) {\n return Left(new LKRPParsingError(\"Invalid end of TLV value\"));\n }\n this.offset = valueEnd;\n\n switch (tag) {\n case GeneralTags.Null:\n yield length > 0\n ? Left(new LKRPParsingError(\"Invalid null length\"))\n : Right({ tag, value: null });\n break;\n\n case GeneralTags.Int:\n {\n const dataView = new DataView(value.buffer);\n switch (value.length) {\n case 1:\n yield Right({ tag, value: dataView.getUint8(0) });\n break;\n case 2:\n yield Right({ tag, value: dataView.getUint16(0, false) }); // Big-endian\n break;\n case 4:\n yield Right({ tag, value: dataView.getUint32(0, false) }); // Big-endian\n break;\n default:\n yield Left(new LKRPParsingError(\"Unsupported integer length\"));\n }\n }\n break;\n\n case GeneralTags.String:\n yield value.length === 0\n ? Left(new LKRPParsingError(\"Empty string value\"))\n : Right({ tag, value: new TextDecoder().decode(value) });\n break;\n\n case GeneralTags.Hash:\n case GeneralTags.Signature:\n case GeneralTags.Bytes:\n case GeneralTags.PublicKey:\n yield Right({ tag, value });\n break;\n\n default:\n yield Right({ tag, value: new Uint8Array([tag, length, ...value]) });\n break;\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,qBAEzCC,EAAiC,
|
|
6
|
-
"names": ["TLVParser_exports", "__export", "TLVParser", "__toCommonJS", "import_purify_ts", "import_Errors", "import_derivationPath", "import_eitherSeqRecord", "import_hex", "import_LKRPCommand", "
|
|
4
|
+
"sourcesContent": ["import { type Either, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { type LKRPBlockParsedData } from \"@internal/models/LKRPBlockTypes\";\nimport { type LKRPCommandData } from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { derivationPathAsString } from \"./derivationPath\";\nimport { eitherSeqRecord } from \"./eitherSeqRecord\";\nimport { bytesToHex } from \"./hex\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ntype ParserValue = Either<\n LKRPParsingError,\n | { tag: GeneralTags.Null; value: null }\n | { tag: GeneralTags.Int; value: number }\n | { tag: GeneralTags.Hash; value: Uint8Array }\n | { tag: GeneralTags.Signature; value: Uint8Array }\n | { tag: GeneralTags.String; value: string }\n | { tag: GeneralTags.Bytes; value: Uint8Array }\n | { tag: GeneralTags.PublicKey; value: Uint8Array }\n | { tag: CommandTags; value: Uint8Array }\n | {\n tag: Exclude<number, GeneralTags | CommandTags>;\n value: null | number | Uint8Array;\n }\n>;\n\ntype Parser = Generator<ParserValue, ParserValue, void>;\n\nconst COMMAND_COUNT_LENGTH = 3;\n\nexport class TLVParser {\n private readonly bytes: Uint8Array;\n private readonly parser: Parser;\n private offset = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.parser = this.parseTLV(bytes);\n }\n\n get state() {\n return {\n offset: this.offset,\n isDone: this.offset >= this.bytes.length,\n };\n }\n\n parse(): ParserValue {\n return this.parser.next().value;\n }\n\n tlvEncoded(\n fn: () => Either<LKRPParsingError, unknown>,\n ): Either<LKRPParsingError, Uint8Array> {\n const start = this.offset;\n return fn().map(() => this.bytes.slice(start, this.offset));\n }\n\n parseNull(): Either<LKRPParsingError, null> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Null\n ? Left(new LKRPParsingError(\"Expected null\"))\n : Right(next.value),\n );\n }\n\n parseInt(): Either<LKRPParsingError, number> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a number\"))\n : Right(next.value),\n );\n }\n\n parseHash(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Hash\n ? Left(new LKRPParsingError(\"Expected a hash\"))\n : Right(next.value),\n );\n }\n\n parseSignature(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Signature\n ? Left(new LKRPParsingError(\"Expected a signature\"))\n : Right(next.value),\n );\n }\n\n parseString(): Either<LKRPParsingError, string> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.String\n ? Left(new LKRPParsingError(\"Expected a string\"))\n : Right(next.value),\n );\n }\n\n parseBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Bytes\n ? Left(new LKRPParsingError(\"Expected bytes\"))\n : Right(next.value),\n );\n }\n\n parsePublicKey(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.PublicKey\n ? Left(new LKRPParsingError(\"Expected a public key\"))\n : Right(next.value),\n );\n }\n\n parseCommandBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain(({ tag, value }) =>\n tag < 0x10 || tag > 0x3f || !(value instanceof Uint8Array)\n ? Left(\n new LKRPParsingError(\n `Invalid command type: 0x${tag.toString(16).padStart(2, \"0\")}`,\n ),\n )\n : Right(value),\n );\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Commands\n parseCommandData(): Either<LKRPParsingError, LKRPCommandData> {\n const bytes = this.parseCommandBytes();\n const end = this.offset;\n\n return bytes\n .chain<LKRPParsingError, LKRPCommandData>((value) => {\n const type = value[0];\n this.offset -= value.length - 2; // Adjust offset to the start of the command\n switch (type) {\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Seed-(0x10)\n case CommandTags.Seed:\n return eitherSeqRecord({\n type,\n topic: () => this.parseBytes(),\n protocolVersion: () => this.parseInt(),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#AddMember-(0x11)\n case CommandTags.AddMember:\n return eitherSeqRecord({\n type,\n name: () => this.parseString(),\n publicKey: () => this.parsePublicKey(),\n permissions: () => this.parseInt(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#PublishKey-(0x12)\n case CommandTags.PublishKey:\n return eitherSeqRecord({\n type,\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n recipient: () => this.parsePublicKey(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Derive-(0x15)\n case CommandTags.Derive:\n return eitherSeqRecord({\n type,\n path: () => this.parseBytes().map(derivationPathAsString),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n default:\n return Left(\n new LKRPParsingError(\n `Unsupported command type: 0x${type?.toString(16).padStart(2, \"0\")}`,\n ),\n );\n }\n })\n .chain((data) =>\n this.offset === end\n ? Right(data)\n : Left(new LKRPParsingError(\"Command was parsed incorrectly\")),\n );\n }\n\n parseCommands(): Either<LKRPParsingError, LKRPCommand[]> {\n return this.parse()\n .chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a command count\"))\n : Right(next.value),\n )\n .chain((count) => {\n const commands: LKRPCommand[] = [];\n for (let i = 0; i < count; i++) {\n const command = this.parseCommandBytes();\n if (command.isLeft()) return command;\n command.ifRight((value) => commands.push(new LKRPCommand(value)));\n }\n return Right(commands);\n });\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Block\n parseBlockData(): Either<LKRPParsingError, LKRPBlockParsedData> {\n const startOffset = this.offset;\n return this.parseInt().chain((_version) =>\n eitherSeqRecord({\n parent: () => this.parseHash().map(bytesToHex),\n issuer: () => this.parsePublicKey(),\n header: () =>\n Right(\n this.bytes.slice(startOffset, this.offset + COMMAND_COUNT_LENGTH),\n ),\n commands: () => this.parseCommands(),\n signature: () => this.tlvEncoded(() => this.parseSignature()),\n }),\n );\n }\n\n private *parseTLV(bytes: Uint8Array): Parser {\n while (true) {\n const tag = bytes[this.offset];\n if (typeof tag === \"undefined\") {\n return Left(new LKRPParsingError(\"Unexpected end of TLV\"));\n }\n this.offset++;\n const length = bytes[this.offset];\n if (typeof length === \"undefined\") {\n return Left(\n new LKRPParsingError(\"Invalid end of TLV, expected length\"),\n );\n }\n this.offset++;\n const valueEnd = this.offset + length;\n const value = bytes.slice(this.offset, valueEnd);\n if (valueEnd > bytes.length) {\n return Left(new LKRPParsingError(\"Invalid end of TLV value\"));\n }\n this.offset = valueEnd;\n\n switch (tag) {\n case GeneralTags.Null:\n yield length > 0\n ? Left(new LKRPParsingError(\"Invalid null length\"))\n : Right({ tag, value: null });\n break;\n\n case GeneralTags.Int:\n {\n const dataView = new DataView(value.buffer);\n switch (value.length) {\n case 1:\n yield Right({ tag, value: dataView.getUint8(0) });\n break;\n case 2:\n yield Right({ tag, value: dataView.getUint16(0, false) }); // Big-endian\n break;\n case 4:\n yield Right({ tag, value: dataView.getUint32(0, false) }); // Big-endian\n break;\n default:\n yield Left(new LKRPParsingError(\"Unsupported integer length\"));\n }\n }\n break;\n\n case GeneralTags.String:\n yield value.length === 0\n ? Left(new LKRPParsingError(\"Empty string value\"))\n : Right({ tag, value: new TextDecoder().decode(value) });\n break;\n\n case GeneralTags.Hash:\n case GeneralTags.Signature:\n case GeneralTags.Bytes:\n case GeneralTags.PublicKey:\n yield Right({ tag, value });\n break;\n\n default:\n yield Right({ tag, value: new Uint8Array([tag, length, ...value]) });\n break;\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,qBAEzCC,EAAiC,kCAGjCC,EAAyC,iCAEzCC,EAAuC,4BACvCC,EAAgC,6BAChCC,EAA2B,iBAC3BC,EAA4B,yBAoB5B,MAAMC,EAAuB,EAEtB,MAAMT,CAAU,CACJ,MACA,OACT,OAAS,EAEjB,YAAYU,EAAmB,CAC7B,KAAK,MAAQA,EACb,KAAK,OAAS,KAAK,SAASA,CAAK,CACnC,CAEA,IAAI,OAAQ,CACV,MAAO,CACL,OAAQ,KAAK,OACb,OAAQ,KAAK,QAAU,KAAK,MAAM,MACpC,CACF,CAEA,OAAqB,CACnB,OAAO,KAAK,OAAO,KAAK,EAAE,KAC5B,CAEA,WACEC,EACsC,CACtC,MAAMC,EAAQ,KAAK,OACnB,OAAOD,EAAG,EAAE,IAAI,IAAM,KAAK,MAAM,MAAMC,EAAO,KAAK,MAAM,CAAC,CAC5D,CAEA,WAA4C,CAC1C,OAAO,KAAK,MAAM,EAAE,MAAOC,GACzBA,EAAK,MAAQ,cAAY,QACrB,QAAK,IAAI,mBAAiB,eAAe,CAAC,KAC1C,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,UAA6C,CAC3C,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,OACrB,QAAK,IAAI,mBAAiB,mBAAmB,CAAC,KAC9C,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,WAAkD,CAChD,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,QACrB,QAAK,IAAI,mBAAiB,iBAAiB,CAAC,KAC5C,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,gBAAuD,CACrD,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,aACrB,QAAK,IAAI,mBAAiB,sBAAsB,CAAC,KACjD,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,aAAgD,CAC9C,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,UACrB,QAAK,IAAI,mBAAiB,mBAAmB,CAAC,KAC9C,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,YAAmD,CACjD,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,SACrB,QAAK,IAAI,mBAAiB,gBAAgB,CAAC,KAC3C,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,gBAAuD,CACrD,OAAO,KAAK,MAAM,EAAE,MAAOA,GACzBA,EAAK,MAAQ,cAAY,aACrB,QAAK,IAAI,mBAAiB,uBAAuB,CAAC,KAClD,SAAMA,EAAK,KAAK,CACtB,CACF,CAEA,mBAA0D,CACxD,OAAO,KAAK,MAAM,EAAE,MAAM,CAAC,CAAE,IAAAC,EAAK,MAAAC,CAAM,IACtCD,EAAM,IAAQA,EAAM,IAAQ,EAAEC,aAAiB,eAC3C,QACE,IAAI,mBACF,2BAA2BD,EAAI,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC9D,CACF,KACA,SAAMC,CAAK,CACjB,CACF,CAGA,kBAA8D,CAC5D,MAAML,EAAQ,KAAK,kBAAkB,EAC/BM,EAAM,KAAK,OAEjB,OAAON,EACJ,MAA0CK,GAAU,CACnD,MAAME,EAAOF,EAAM,CAAC,EAEpB,OADA,KAAK,QAAUA,EAAM,OAAS,EACtBE,EAAM,CAEZ,KAAK,cAAY,KACf,SAAO,mBAAgB,CACrB,KAAAA,EACA,MAAO,IAAM,KAAK,WAAW,EAC7B,gBAAiB,IAAM,KAAK,SAAS,EACrC,SAAU,IAAM,KAAK,eAAe,EACpC,qBAAsB,IAAM,KAAK,WAAW,EAC5C,eAAgB,IAAM,KAAK,WAAW,EACtC,mBAAoB,IAAM,KAAK,eAAe,CAChD,CAAC,EAGH,KAAK,cAAY,UACf,SAAO,mBAAgB,CACrB,KAAAA,EACA,KAAM,IAAM,KAAK,YAAY,EAC7B,UAAW,IAAM,KAAK,eAAe,EACrC,YAAa,IAAM,KAAK,SAAS,CACnC,CAAC,EAGH,KAAK,cAAY,WACf,SAAO,mBAAgB,CACrB,KAAAA,EACA,qBAAsB,IAAM,KAAK,WAAW,EAC5C,eAAgB,IAAM,KAAK,WAAW,EACtC,UAAW,IAAM,KAAK,eAAe,EACrC,mBAAoB,IAAM,KAAK,eAAe,CAChD,CAAC,EAGH,KAAK,cAAY,OACf,SAAO,mBAAgB,CACrB,KAAAA,EACA,KAAM,IAAM,KAAK,WAAW,EAAE,IAAI,wBAAsB,EACxD,SAAU,IAAM,KAAK,eAAe,EACpC,qBAAsB,IAAM,KAAK,WAAW,EAC5C,eAAgB,IAAM,KAAK,WAAW,EACtC,mBAAoB,IAAM,KAAK,eAAe,CAChD,CAAC,EAEH,QACE,SAAO,QACL,IAAI,mBACF,+BAA+BA,GAAM,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EACpE,CACF,CACJ,CACF,CAAC,EACA,MAAOC,GACN,KAAK,SAAWF,KACZ,SAAME,CAAI,KACV,QAAK,IAAI,mBAAiB,gCAAgC,CAAC,CACjE,CACJ,CAEA,eAAyD,CACvD,OAAO,KAAK,MAAM,EACf,MAAOL,GACNA,EAAK,MAAQ,cAAY,OACrB,QAAK,IAAI,mBAAiB,0BAA0B,CAAC,KACrD,SAAMA,EAAK,KAAK,CACtB,EACC,MAAOM,GAAU,CAChB,MAAMC,EAA0B,CAAC,EACjC,QAASC,EAAI,EAAGA,EAAIF,EAAOE,IAAK,CAC9B,MAAMC,EAAU,KAAK,kBAAkB,EACvC,GAAIA,EAAQ,OAAO,EAAG,OAAOA,EAC7BA,EAAQ,QAASP,GAAUK,EAAS,KAAK,IAAI,cAAYL,CAAK,CAAC,CAAC,CAClE,CACA,SAAO,SAAMK,CAAQ,CACvB,CAAC,CACL,CAGA,gBAAgE,CAC9D,MAAMG,EAAc,KAAK,OACzB,OAAO,KAAK,SAAS,EAAE,MAAOC,MAC5B,mBAAgB,CACd,OAAQ,IAAM,KAAK,UAAU,EAAE,IAAI,YAAU,EAC7C,OAAQ,IAAM,KAAK,eAAe,EAClC,OAAQ,OACN,SACE,KAAK,MAAM,MAAMD,EAAa,KAAK,OAASd,CAAoB,CAClE,EACF,SAAU,IAAM,KAAK,cAAc,EACnC,UAAW,IAAM,KAAK,WAAW,IAAM,KAAK,eAAe,CAAC,CAC9D,CAAC,CACH,CACF,CAEA,CAAS,SAASC,EAA2B,CAC3C,OAAa,CACX,MAAMI,EAAMJ,EAAM,KAAK,MAAM,EAC7B,GAAI,OAAOI,EAAQ,IACjB,SAAO,QAAK,IAAI,mBAAiB,uBAAuB,CAAC,EAE3D,KAAK,SACL,MAAMW,EAASf,EAAM,KAAK,MAAM,EAChC,GAAI,OAAOe,EAAW,IACpB,SAAO,QACL,IAAI,mBAAiB,qCAAqC,CAC5D,EAEF,KAAK,SACL,MAAMC,EAAW,KAAK,OAASD,EACzBV,EAAQL,EAAM,MAAM,KAAK,OAAQgB,CAAQ,EAC/C,GAAIA,EAAWhB,EAAM,OACnB,SAAO,QAAK,IAAI,mBAAiB,0BAA0B,CAAC,EAI9D,OAFA,KAAK,OAASgB,EAENZ,EAAK,CACX,KAAK,cAAY,KACf,MAAMW,EAAS,KACX,QAAK,IAAI,mBAAiB,qBAAqB,CAAC,KAChD,SAAM,CAAE,IAAAX,EAAK,MAAO,IAAK,CAAC,EAC9B,MAEF,KAAK,cAAY,IACf,CACE,MAAMa,EAAW,IAAI,SAASZ,EAAM,MAAM,EAC1C,OAAQA,EAAM,OAAQ,CACpB,IAAK,GACH,QAAM,SAAM,CAAE,IAAAD,EAAK,MAAOa,EAAS,SAAS,CAAC,CAAE,CAAC,EAChD,MACF,IAAK,GACH,QAAM,SAAM,CAAE,IAAAb,EAAK,MAAOa,EAAS,UAAU,EAAG,EAAK,CAAE,CAAC,EACxD,MACF,IAAK,GACH,QAAM,SAAM,CAAE,IAAAb,EAAK,MAAOa,EAAS,UAAU,EAAG,EAAK,CAAE,CAAC,EACxD,MACF,QACE,QAAM,QAAK,IAAI,mBAAiB,4BAA4B,CAAC,CACjE,CACF,CACA,MAEF,KAAK,cAAY,OACf,MAAMZ,EAAM,SAAW,KACnB,QAAK,IAAI,mBAAiB,oBAAoB,CAAC,KAC/C,SAAM,CAAE,IAAAD,EAAK,MAAO,IAAI,YAAY,EAAE,OAAOC,CAAK,CAAE,CAAC,EACzD,MAEF,KAAK,cAAY,KACjB,KAAK,cAAY,UACjB,KAAK,cAAY,MACjB,KAAK,cAAY,UACf,QAAM,SAAM,CAAE,IAAAD,EAAK,MAAAC,CAAM,CAAC,EAC1B,MAEF,QACE,QAAM,SAAM,CAAE,IAAAD,EAAK,MAAO,IAAI,WAAW,CAACA,EAAKW,EAAQ,GAAGV,CAAK,CAAC,CAAE,CAAC,EACnE,KACJ,CACF,CACF,CACF",
|
|
6
|
+
"names": ["TLVParser_exports", "__export", "TLVParser", "__toCommonJS", "import_purify_ts", "import_Errors", "import_Tags", "import_derivationPath", "import_eitherSeqRecord", "import_hex", "import_LKRPCommand", "COMMAND_COUNT_LENGTH", "bytes", "fn", "start", "next", "tag", "value", "end", "type", "data", "count", "commands", "i", "command", "startOffset", "_version", "length", "valueEnd", "dataView"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var n=require("purify-ts"),s=require("../../api/app-binder/Errors"),c=require("./LKRPCommand"),r=require("./TLVParser"),e=require("./TLVTags");describe("TLVParser",()=>{describe("Block Data Parsing",()=>{describe("parseCommands",()=>{it("should parse has many commands has specified by the command count value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,2,e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1,e.CommandTags.Seed,3,e.GeneralTags.Int,1,2])).parseCommands();expect(a).toStrictEqual((0,n.Right)([new c.LKRPCommand(new Uint8Array([e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1])),new c.LKRPCommand(new Uint8Array([e.CommandTags.Seed,3,e.GeneralTags.Int,1,2]))]))})}),describe("parseBlockData",()=>{it("should parse a valid block data",()=>{const a=new r.TLVParser(Uint8Array.from([[e.GeneralTags.Int,1,1],[e.GeneralTags.Hash,3,1,2,3],[e.GeneralTags.PublicKey,3,4,5,6],[e.GeneralTags.Int,1,2],[e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1],[e.CommandTags.Seed,3,e.GeneralTags.Int,1,2],[e.GeneralTags.Signature,3,7,8,9]].flat())).parseBlockData();expect(a).toStrictEqual((0,n.Right)({parent:"010203",issuer:new Uint8Array([4,5,6]),header:Uint8Array.from([[e.GeneralTags.Int,1,1],[e.GeneralTags.Hash,3,1,2,3],[e.GeneralTags.PublicKey,3,4,5,6],[e.GeneralTags.Int,1,2]].flat()),commands:[new c.LKRPCommand(new Uint8Array([e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1])),new c.LKRPCommand(new Uint8Array([e.CommandTags.Seed,3,e.GeneralTags.Int,1,2]))],signature:Uint8Array.from([e.GeneralTags.Signature,3,7,8,9])}))}),it("should fail if the block data is invalid",()=>{const a=new r.TLVParser(new Uint8Array([])).parseBlockData();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})})}),describe("Command Data Parsing",()=>{describe("parseCommandBytes",()=>{it("should parse a valid command bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,3,1,2,3])).parseCommandBytes();expect(a).toEqual((0,n.Right)(new Uint8Array([e.CommandTags.AddMember,3,1,2,3])))}),it("should fail if the tag is not a command",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseCommandBytes();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid command type: 0x01")))})}),describe("Parse Seed Command Data",()=>{it("should parse a valid seed command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Int,2,1,2,e.GeneralTags.PublicKey,3,2,4,6,e.GeneralTags.Bytes,3,3,5,7,e.GeneralTags.Bytes,3,4,8,16,e.GeneralTags.PublicKey,3,10,11,12]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.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 if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Signature,3,1,2,3]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse AddMember Command Data",()=>{it("should parse a valid add member command data",()=>{const t=new Uint8Array([e.GeneralTags.String,5,65,108,105,99,101,e.GeneralTags.PublicKey,3,1,2,3,e.GeneralTags.Int,1,1]),i=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.AddMember,name:"Alice",publicKey:new Uint8Array([1,2,3]),permissions:1}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),a=new Uint8Array([e.GeneralTags.String,5,65,108,105,99,101]),i=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a string"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse PublishKey Command Data",()=>{it("should parse a valid publish key command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Bytes,3,4,5,6,e.GeneralTags.PublicKey,3,3,5,7,e.GeneralTags.PublicKey,3,8,9,10]),i=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.PublishKey,initializationVector:new Uint8Array([1,2,3]),encryptedXpriv:new Uint8Array([4,5,6]),recipient:new Uint8Array([3,5,7]),ephemeralPublicKey:new Uint8Array([8,9,10])}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Int,2,1,2]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse Derive Command Data",()=>{it("should parse a valid derive command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,4,0,0,0,1,e.GeneralTags.PublicKey,3,4,5,6,e.GeneralTags.Bytes,3,3,5,7,e.GeneralTags.Bytes,3,8,9,10,e.GeneralTags.PublicKey,3,10,11,12]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.Derive,path:"m/1",groupKey:new Uint8Array([4,5,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([8,9,10]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Int,2,1,2]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),it("should fail on unsupported command type",()=>{const a=new r.TLVParser(new Uint8Array([63,1,1])).parseCommandData();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unsupported command type: 0x3f")))})}),describe("General Types Parsing",()=>{describe("parse",()=>{it("should parse a valid TLV structure",()=>{const t=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1,e.GeneralTags.Bytes,0])),a=t.parse(),i=t.parse();expect(a).toEqual((0,n.Right)({tag:e.GeneralTags.Int,value:1})),expect(i).toEqual((0,n.Right)({tag:e.GeneralTags.Bytes,value:new Uint8Array([])}))}),it("should fail on invalid TLV structure",()=>{const t=new r.TLVParser(new Uint8Array([])),a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int])),i=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,2])),x=t.parse(),o=a.parse(),p=i.parse();expect(x).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV"))),expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid end of TLV, expected length"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid end of TLV value")))})}),describe("parseNull",()=>{it("should parse a null value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Null,0])).parseNull();expect(a).toEqual((0,n.Right)(null))}),it("should fail if the tag is not null",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseNull();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected null")))}),it("should fail if the format is invalid",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Null,1,2])).parseNull();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid null length")))})}),describe("parseInt",()=>{it("should parse big endian integer values",()=>{const t=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1,e.GeneralTags.Int,2,1,0,e.GeneralTags.Int,4,1,0,0,0])),a=t.parseInt(),i=t.parseInt(),x=t.parseInt();expect(a).toEqual((0,n.Right)(1)),expect(i).toEqual((0,n.Right)(256)),expect(x).toEqual((0,n.Right)(16777216))}),it("should fail if the tag is not an integer",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Bytes,1,1])).parseInt();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a number")))}),it("should fail if the integer is not 1, 2, or 4 bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,3,1,2,3])).parseInt();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unsupported integer length")))})}),describe("parseHash",()=>{it("should parse a hash value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Hash,3,1,2,3])).parseHash();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a hash",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseHash();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a hash")))})}),describe("parseSignature",()=>{it("should parse a signature value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Signature,3,1,2,3])).parseSignature();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a signature",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseSignature();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a signature")))})}),describe("parseString",()=>{it("should parse a string value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.String,5,72,101,108,108,111])).parseString();expect(a).toEqual((0,n.Right)("Hello"))}),it("should fail if the tag is not a string",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseString();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a string")))})}),describe("parseBytes",()=>{it("should parse a bytes value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Bytes,3,1,2,3])).parseBytes();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseBytes();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes")))})}),describe("parsePublicKey",()=>{it("should parse a public key value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.PublicKey,3,1,2,3])).parsePublicKey();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a public key",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parsePublicKey();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a public key")))})})})});
|
|
1
|
+
"use strict";var n=require("purify-ts"),s=require("../../api/app-binder/Errors"),e=require("../models/Tags"),c=require("./LKRPCommand"),r=require("./TLVParser");describe("TLVParser",()=>{describe("Block Data Parsing",()=>{describe("parseCommands",()=>{it("should parse has many commands has specified by the command count value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,2,e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1,e.CommandTags.Seed,3,e.GeneralTags.Int,1,2])).parseCommands();expect(a).toStrictEqual((0,n.Right)([new c.LKRPCommand(new Uint8Array([e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1])),new c.LKRPCommand(new Uint8Array([e.CommandTags.Seed,3,e.GeneralTags.Int,1,2]))]))})}),describe("parseBlockData",()=>{it("should parse a valid block data",()=>{const a=new r.TLVParser(Uint8Array.from([[e.GeneralTags.Int,1,1],[e.GeneralTags.Hash,3,1,2,3],[e.GeneralTags.PublicKey,3,4,5,6],[e.GeneralTags.Int,1,2],[e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1],[e.CommandTags.Seed,3,e.GeneralTags.Int,1,2],[e.GeneralTags.Signature,3,7,8,9]].flat())).parseBlockData();expect(a).toStrictEqual((0,n.Right)({parent:"010203",issuer:new Uint8Array([4,5,6]),header:Uint8Array.from([[e.GeneralTags.Int,1,1],[e.GeneralTags.Hash,3,1,2,3],[e.GeneralTags.PublicKey,3,4,5,6],[e.GeneralTags.Int,1,2]].flat()),commands:[new c.LKRPCommand(new Uint8Array([e.CommandTags.AddMember,3,e.GeneralTags.Int,1,1])),new c.LKRPCommand(new Uint8Array([e.CommandTags.Seed,3,e.GeneralTags.Int,1,2]))],signature:Uint8Array.from([e.GeneralTags.Signature,3,7,8,9])}))}),it("should fail if the block data is invalid",()=>{const a=new r.TLVParser(new Uint8Array([])).parseBlockData();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})})}),describe("Command Data Parsing",()=>{describe("parseCommandBytes",()=>{it("should parse a valid command bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,3,1,2,3])).parseCommandBytes();expect(a).toEqual((0,n.Right)(new Uint8Array([e.CommandTags.AddMember,3,1,2,3])))}),it("should fail if the tag is not a command",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseCommandBytes();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid command type: 0x01")))})}),describe("Parse Seed Command Data",()=>{it("should parse a valid seed command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Int,2,1,2,e.GeneralTags.PublicKey,3,2,4,6,e.GeneralTags.Bytes,3,3,5,7,e.GeneralTags.Bytes,3,4,8,16,e.GeneralTags.PublicKey,3,10,11,12]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.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 if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Signature,3,1,2,3]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.Seed,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse AddMember Command Data",()=>{it("should parse a valid add member command data",()=>{const t=new Uint8Array([e.GeneralTags.String,5,65,108,105,99,101,e.GeneralTags.PublicKey,3,1,2,3,e.GeneralTags.Int,1,1]),i=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.AddMember,name:"Alice",publicKey:new Uint8Array([1,2,3]),permissions:1}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),a=new Uint8Array([e.GeneralTags.String,5,65,108,105,99,101]),i=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.AddMember,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a string"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse PublishKey Command Data",()=>{it("should parse a valid publish key command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3,e.GeneralTags.Bytes,3,4,5,6,e.GeneralTags.PublicKey,3,3,5,7,e.GeneralTags.PublicKey,3,8,9,10]),i=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.PublishKey,initializationVector:new Uint8Array([1,2,3]),encryptedXpriv:new Uint8Array([4,5,6]),recipient:new Uint8Array([3,5,7]),ephemeralPublicKey:new Uint8Array([8,9,10])}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Int,2,1,2]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.PublishKey,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),describe("Parse Derive Command Data",()=>{it("should parse a valid derive command data",()=>{const t=new Uint8Array([e.GeneralTags.Bytes,4,0,0,0,1,e.GeneralTags.PublicKey,3,4,5,6,e.GeneralTags.Bytes,3,3,5,7,e.GeneralTags.Bytes,3,8,9,10,e.GeneralTags.PublicKey,3,10,11,12]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,t.length,...t])).parseCommandData();expect(i).toStrictEqual((0,n.Right)({type:e.CommandTags.Derive,path:"m/1",groupKey:new Uint8Array([4,5,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([8,9,10]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail if the command data is invalid",()=>{const t=new Uint8Array([e.GeneralTags.Int,2,1,2]),a=new Uint8Array([e.GeneralTags.Bytes,3,1,2,3]),i=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,t.length,...t])),x=new r.TLVParser(new Uint8Array([e.CommandTags.Derive,a.length,...a])),o=i.parseCommandData(),p=x.parseCommandData();expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV")))})}),it("should fail on unsupported command type",()=>{const a=new r.TLVParser(new Uint8Array([63,1,1])).parseCommandData();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unsupported command type: 0x3f")))})}),describe("General Types Parsing",()=>{describe("parse",()=>{it("should parse a valid TLV structure",()=>{const t=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1,e.GeneralTags.Bytes,0])),a=t.parse(),i=t.parse();expect(a).toEqual((0,n.Right)({tag:e.GeneralTags.Int,value:1})),expect(i).toEqual((0,n.Right)({tag:e.GeneralTags.Bytes,value:new Uint8Array([])}))}),it("should fail on invalid TLV structure",()=>{const t=new r.TLVParser(new Uint8Array([])),a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int])),i=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,2])),x=t.parse(),o=a.parse(),p=i.parse();expect(x).toEqual((0,n.Left)(new s.LKRPParsingError("Unexpected end of TLV"))),expect(o).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid end of TLV, expected length"))),expect(p).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid end of TLV value")))})}),describe("parseNull",()=>{it("should parse a null value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Null,0])).parseNull();expect(a).toEqual((0,n.Right)(null))}),it("should fail if the tag is not null",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseNull();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected null")))}),it("should fail if the format is invalid",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Null,1,2])).parseNull();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Invalid null length")))})}),describe("parseInt",()=>{it("should parse big endian integer values",()=>{const t=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1,e.GeneralTags.Int,2,1,0,e.GeneralTags.Int,4,1,0,0,0])),a=t.parseInt(),i=t.parseInt(),x=t.parseInt();expect(a).toEqual((0,n.Right)(1)),expect(i).toEqual((0,n.Right)(256)),expect(x).toEqual((0,n.Right)(16777216))}),it("should fail if the tag is not an integer",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Bytes,1,1])).parseInt();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a number")))}),it("should fail if the integer is not 1, 2, or 4 bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,3,1,2,3])).parseInt();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Unsupported integer length")))})}),describe("parseHash",()=>{it("should parse a hash value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Hash,3,1,2,3])).parseHash();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a hash",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseHash();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a hash")))})}),describe("parseSignature",()=>{it("should parse a signature value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Signature,3,1,2,3])).parseSignature();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a signature",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseSignature();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a signature")))})}),describe("parseString",()=>{it("should parse a string value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.String,5,72,101,108,108,111])).parseString();expect(a).toEqual((0,n.Right)("Hello"))}),it("should fail if the tag is not a string",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseString();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a string")))})}),describe("parseBytes",()=>{it("should parse a bytes value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Bytes,3,1,2,3])).parseBytes();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not bytes",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parseBytes();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected bytes")))})}),describe("parsePublicKey",()=>{it("should parse a public key value",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.PublicKey,3,1,2,3])).parsePublicKey();expect(a).toEqual((0,n.Right)(new Uint8Array([1,2,3])))}),it("should fail if the tag is not a public key",()=>{const a=new r.TLVParser(new Uint8Array([e.GeneralTags.Int,1,1])).parsePublicKey();expect(a).toEqual((0,n.Left)(new s.LKRPParsingError("Expected a public key")))})})})});
|
|
2
2
|
//# sourceMappingURL=TLVParser.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/TLVParser.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { TLVParser } from \"./TLVParser\";\nimport { CommandTags, GeneralTags } from \"./TLVTags\";\n\ndescribe(\"TLVParser\", () => {\n describe(\"Block Data Parsing\", () => {\n describe(\"parseCommands\", () => {\n it(\"should parse has many commands has specified by the command count value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([\n ...[GeneralTags.Int, 1, 0x02], // Command count: 2\n ...[CommandTags.AddMember, 3, ...[GeneralTags.Int, 1, 0x01]], // First command\n ...[CommandTags.Seed, 3, ...[GeneralTags.Int, 1, 0x02]], // Second command\n ]),\n );\n // WHEN\n const commands = parser.parseCommands();\n\n // THEN\n expect(commands).toStrictEqual(\n Right([\n new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n 3,\n ...[GeneralTags.Int, 1, 0x01],\n ]),\n ),\n new LKRPCommand(\n new Uint8Array([\n CommandTags.Seed,\n 3,\n ...[GeneralTags.Int, 1, 0x02],\n ]),\n ),\n ]),\n );\n });\n });\n\n describe(\"parseBlockData\", () => {\n it(\"should parse a valid block data\", () => {\n // GIVEN\n const parser = new TLVParser(\n Uint8Array.from(\n [\n [GeneralTags.Int, 1, 0x01], // Version\n [GeneralTags.Hash, 3, 0x01, 0x02, 0x03], // Parent\n [GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Issuer\n [GeneralTags.Int, 1, 0x02], // Command count: 2\n [CommandTags.AddMember, 3, ...[GeneralTags.Int, 1, 0x01]], // First command\n [CommandTags.Seed, 3, ...[GeneralTags.Int, 1, 0x02]], // Second command\n [GeneralTags.Signature, 3, 0x07, 0x08, 0x09], // Signature\n ].flat(),\n ),\n );\n // WHEN\n const blockData = parser.parseBlockData();\n\n // THEN\n expect(blockData).toStrictEqual(\n Right({\n parent: \"010203\",\n issuer: new Uint8Array([0x04, 0x05, 0x06]),\n header: Uint8Array.from(\n [\n [GeneralTags.Int, 1, 0x01], // Version\n [GeneralTags.Hash, 3, 0x01, 0x02, 0x03], // Parent\n [GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Issuer\n [GeneralTags.Int, 1, 0x02], // Command count: 2\n ].flat(),\n ),\n\n commands: [\n new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n 3,\n ...[GeneralTags.Int, 1, 0x01],\n ]),\n ),\n new LKRPCommand(\n new Uint8Array([\n CommandTags.Seed,\n 3,\n ...[GeneralTags.Int, 1, 0x02],\n ]),\n ),\n ],\n signature: Uint8Array.from([\n GeneralTags.Signature,\n 3,\n 0x07,\n 0x08,\n 0x09,\n ]),\n }),\n );\n });\n\n it(\"should fail if the block data is invalid\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([]));\n // WHEN\n const blockData = parser.parseBlockData();\n // THEN\n expect(blockData).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n });\n\n describe(\"Command Data Parsing\", () => {\n describe(\"parseCommandBytes\", () => {\n it(\"should parse a valid command bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([CommandTags.AddMember, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseCommandBytes();\n // THEN\n expect(value).toEqual(\n Right(new Uint8Array([CommandTags.AddMember, 3, 0x01, 0x02, 0x03])),\n );\n });\n\n it(\"should fail if the tag is not a command\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseCommandBytes();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(`Invalid command type: 0x01`)),\n );\n });\n });\n\n describe(\"Parse Seed Command Data\", () => {\n it(\"should parse a valid seed command data\", () => {\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 const parser = new TLVParser(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258, // 0x0102 in big-endian\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 if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Signature, 3, 0x01, 0x02, 0x03], // Wrong type for Topic\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.Seed, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.Seed, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse AddMember Command Data\", () => {\n it(\"should parse a valid add member command data\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.String, 5, 0x41, 0x6c, 0x69, 0x63, 0x65], // Name \"Alice\"\n ...[GeneralTags.PublicKey, 3, 0x01, 0x02, 0x03], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.AddMember,\n name: \"Alice\",\n publicKey: new Uint8Array([0x01, 0x02, 0x03]),\n permissions: 1,\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Wrong type for Name\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.String, 5, 0x41, 0x6c, 0x69, 0x63, 0x65], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(\n Left(new LKRPParsingError(\"Expected a string\")),\n );\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse PublishKey Command Data\", () => {\n it(\"should parse a valid publish key command data\", () => {\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, 0x03, 0x05, 0x07], // Recipient Public Key\n ...[GeneralTags.PublicKey, 3, 0x08, 0x09, 0x0a], // Ephemeral Public Key\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.PublishKey,\n initializationVector: new Uint8Array([0x01, 0x02, 0x03]),\n encryptedXpriv: new Uint8Array([0x04, 0x05, 0x06]),\n recipient: new Uint8Array([0x03, 0x05, 0x07]),\n ephemeralPublicKey: new Uint8Array([0x08, 0x09, 0x0a]),\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Wrong type for Initialization Vector\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse Derive Command Data\", () => {\n it(\"should parse a valid derive command data\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 4, 0x00, 0x00, 0x00, 0x01], // Path\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x08, 0x09, 0x0a], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.Derive, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.Derive,\n path: \"m/1\",\n groupKey: new Uint8Array([0x04, 0x05, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x08, 0x09, 0x0a]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Wrong type for Path\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.Derive, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.Derive, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n it(\"should fail on unsupported command type\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([0x3f, 1, 0x01]));\n // WHEN\n const parsed = parser.parseCommandData();\n // THEN\n expect(parsed).toEqual(\n Left(new LKRPParsingError(\"Unsupported command type: 0x3f\")),\n );\n });\n });\n\n describe(\"General Types Parsing\", () => {\n describe(\"parse\", () => {\n it(\"should parse a valid TLV structure\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01, GeneralTags.Bytes, 0]),\n );\n // WHEN\n const value1 = parser.parse();\n const value2 = parser.parse();\n // THEN\n expect(value1).toEqual(Right({ tag: GeneralTags.Int, value: 1 }));\n expect(value2).toEqual(\n Right({ tag: GeneralTags.Bytes, value: new Uint8Array([]) }),\n );\n });\n\n it(\"should fail on invalid TLV structure\", () => {\n // GIVEN\n const parser1 = new TLVParser(new Uint8Array([]));\n const parser2 = new TLVParser(new Uint8Array([GeneralTags.Int]));\n const parser3 = new TLVParser(new Uint8Array([GeneralTags.Int, 2]));\n // WHEN\n const value1 = parser1.parse();\n const value2 = parser2.parse();\n const value3 = parser3.parse();\n // THEN\n expect(value1).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n expect(value2).toEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n expect(value3).toEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV value\")),\n );\n });\n });\n\n describe(\"parseNull\", () => {\n it(\"should parse a null value\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([GeneralTags.Null, 0]));\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(Right(null));\n });\n\n it(\"should fail if the tag is not null\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected null\")));\n });\n\n it(\"should fail if the format is invalid\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Null, 1, 0x02]),\n );\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Invalid null length\")),\n );\n });\n });\n\n describe(\"parseInt\", () => {\n it(\"should parse big endian integer values\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([\n ...[GeneralTags.Int, 1, 0x01], // 1\n ...[GeneralTags.Int, 2, 0x01, 0x00], // 256\n ...[GeneralTags.Int, 4, 0x01, 0x00, 0x00, 0x00], // 16777216\n ]),\n );\n // WHEN\n const value1 = parser.parseInt();\n const value2 = parser.parseInt();\n const value4 = parser.parseInt();\n // THEN\n expect(value1).toEqual(Right(1));\n expect(value2).toEqual(Right(256));\n expect(value4).toEqual(Right(16777216));\n });\n\n it(\"should fail if the tag is not an integer\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Bytes, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseInt();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a number\")));\n });\n\n it(\"should fail if the integer is not 1, 2, or 4 bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseInt();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Unsupported integer length\")),\n );\n });\n });\n\n describe(\"parseHash\", () => {\n it(\"should parse a hash value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Hash, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseHash();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a hash\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseHash();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a hash\")));\n });\n });\n\n describe(\"parseSignature\", () => {\n it(\"should parse a signature value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Signature, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseSignature();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a signature\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseSignature();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Expected a signature\")),\n );\n });\n });\n\n describe(\"parseString\", () => {\n it(\"should parse a string value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.String, 5, 0x48, 0x65, 0x6c, 0x6c, 0x6f]),\n );\n // WHEN\n const value = parser.parseString();\n // THEN\n expect(value).toEqual(Right(\"Hello\"));\n });\n\n it(\"should fail if the tag is not a string\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseString();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a string\")));\n });\n });\n\n describe(\"parseBytes\", () => {\n it(\"should parse a bytes value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Bytes, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseBytes();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseBytes();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n });\n });\n\n describe(\"parsePublicKey\", () => {\n it(\"should parse a public key value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.PublicKey, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parsePublicKey();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a public key\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parsePublicKey();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Expected a public key\")),\n );\n });\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["import_purify_ts", "import_Errors", "
|
|
4
|
+
"sourcesContent": ["import { Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\nimport { TLVParser } from \"./TLVParser\";\n\ndescribe(\"TLVParser\", () => {\n describe(\"Block Data Parsing\", () => {\n describe(\"parseCommands\", () => {\n it(\"should parse has many commands has specified by the command count value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([\n ...[GeneralTags.Int, 1, 0x02], // Command count: 2\n ...[CommandTags.AddMember, 3, ...[GeneralTags.Int, 1, 0x01]], // First command\n ...[CommandTags.Seed, 3, ...[GeneralTags.Int, 1, 0x02]], // Second command\n ]),\n );\n // WHEN\n const commands = parser.parseCommands();\n\n // THEN\n expect(commands).toStrictEqual(\n Right([\n new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n 3,\n ...[GeneralTags.Int, 1, 0x01],\n ]),\n ),\n new LKRPCommand(\n new Uint8Array([\n CommandTags.Seed,\n 3,\n ...[GeneralTags.Int, 1, 0x02],\n ]),\n ),\n ]),\n );\n });\n });\n\n describe(\"parseBlockData\", () => {\n it(\"should parse a valid block data\", () => {\n // GIVEN\n const parser = new TLVParser(\n Uint8Array.from(\n [\n [GeneralTags.Int, 1, 0x01], // Version\n [GeneralTags.Hash, 3, 0x01, 0x02, 0x03], // Parent\n [GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Issuer\n [GeneralTags.Int, 1, 0x02], // Command count: 2\n [CommandTags.AddMember, 3, ...[GeneralTags.Int, 1, 0x01]], // First command\n [CommandTags.Seed, 3, ...[GeneralTags.Int, 1, 0x02]], // Second command\n [GeneralTags.Signature, 3, 0x07, 0x08, 0x09], // Signature\n ].flat(),\n ),\n );\n // WHEN\n const blockData = parser.parseBlockData();\n\n // THEN\n expect(blockData).toStrictEqual(\n Right({\n parent: \"010203\",\n issuer: new Uint8Array([0x04, 0x05, 0x06]),\n header: Uint8Array.from(\n [\n [GeneralTags.Int, 1, 0x01], // Version\n [GeneralTags.Hash, 3, 0x01, 0x02, 0x03], // Parent\n [GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Issuer\n [GeneralTags.Int, 1, 0x02], // Command count: 2\n ].flat(),\n ),\n\n commands: [\n new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n 3,\n ...[GeneralTags.Int, 1, 0x01],\n ]),\n ),\n new LKRPCommand(\n new Uint8Array([\n CommandTags.Seed,\n 3,\n ...[GeneralTags.Int, 1, 0x02],\n ]),\n ),\n ],\n signature: Uint8Array.from([\n GeneralTags.Signature,\n 3,\n 0x07,\n 0x08,\n 0x09,\n ]),\n }),\n );\n });\n\n it(\"should fail if the block data is invalid\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([]));\n // WHEN\n const blockData = parser.parseBlockData();\n // THEN\n expect(blockData).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n });\n\n describe(\"Command Data Parsing\", () => {\n describe(\"parseCommandBytes\", () => {\n it(\"should parse a valid command bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([CommandTags.AddMember, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseCommandBytes();\n // THEN\n expect(value).toEqual(\n Right(new Uint8Array([CommandTags.AddMember, 3, 0x01, 0x02, 0x03])),\n );\n });\n\n it(\"should fail if the tag is not a command\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseCommandBytes();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(`Invalid command type: 0x01`)),\n );\n });\n });\n\n describe(\"Parse Seed Command Data\", () => {\n it(\"should parse a valid seed command data\", () => {\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 const parser = new TLVParser(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258, // 0x0102 in big-endian\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 if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Signature, 3, 0x01, 0x02, 0x03], // Wrong type for Topic\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.Seed, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.Seed, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse AddMember Command Data\", () => {\n it(\"should parse a valid add member command data\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.String, 5, 0x41, 0x6c, 0x69, 0x63, 0x65], // Name \"Alice\"\n ...[GeneralTags.PublicKey, 3, 0x01, 0x02, 0x03], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.AddMember,\n name: \"Alice\",\n publicKey: new Uint8Array([0x01, 0x02, 0x03]),\n permissions: 1,\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Wrong type for Name\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.String, 5, 0x41, 0x6c, 0x69, 0x63, 0x65], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.AddMember, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(\n Left(new LKRPParsingError(\"Expected a string\")),\n );\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse PublishKey Command Data\", () => {\n it(\"should parse a valid publish key command data\", () => {\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, 0x03, 0x05, 0x07], // Recipient Public Key\n ...[GeneralTags.PublicKey, 3, 0x08, 0x09, 0x0a], // Ephemeral Public Key\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.PublishKey,\n initializationVector: new Uint8Array([0x01, 0x02, 0x03]),\n encryptedXpriv: new Uint8Array([0x04, 0x05, 0x06]),\n recipient: new Uint8Array([0x03, 0x05, 0x07]),\n ephemeralPublicKey: new Uint8Array([0x08, 0x09, 0x0a]),\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Wrong type for Initialization Vector\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.PublishKey, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n describe(\"Parse Derive Command Data\", () => {\n it(\"should parse a valid derive command data\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 4, 0x00, 0x00, 0x00, 0x01], // Path\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x08, 0x09, 0x0a], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n const parser = new TLVParser(\n new Uint8Array([CommandTags.Derive, value.length, ...value]),\n );\n\n // WHEN\n const parsed = parser.parseCommandData();\n\n // THEN\n expect(parsed).toStrictEqual(\n Right({\n type: CommandTags.Derive,\n path: \"m/1\",\n groupKey: new Uint8Array([0x04, 0x05, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x08, 0x09, 0x0a]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail if the command data is invalid\", () => {\n // GIVEN\n const value1 = new Uint8Array([\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Wrong type for Path\n ]);\n const value2 = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Correct type but the other fields are missing\n ]);\n const parser1 = new TLVParser(\n new Uint8Array([CommandTags.Derive, value1.length, ...value1]),\n );\n const parser2 = new TLVParser(\n new Uint8Array([CommandTags.Derive, value2.length, ...value2]),\n );\n\n // WHEN\n const parsed1 = parser1.parseCommandData();\n const parsed2 = parser2.parseCommandData();\n\n // THEN\n expect(parsed1).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n expect(parsed2).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n });\n });\n\n it(\"should fail on unsupported command type\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([0x3f, 1, 0x01]));\n // WHEN\n const parsed = parser.parseCommandData();\n // THEN\n expect(parsed).toEqual(\n Left(new LKRPParsingError(\"Unsupported command type: 0x3f\")),\n );\n });\n });\n\n describe(\"General Types Parsing\", () => {\n describe(\"parse\", () => {\n it(\"should parse a valid TLV structure\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01, GeneralTags.Bytes, 0]),\n );\n // WHEN\n const value1 = parser.parse();\n const value2 = parser.parse();\n // THEN\n expect(value1).toEqual(Right({ tag: GeneralTags.Int, value: 1 }));\n expect(value2).toEqual(\n Right({ tag: GeneralTags.Bytes, value: new Uint8Array([]) }),\n );\n });\n\n it(\"should fail on invalid TLV structure\", () => {\n // GIVEN\n const parser1 = new TLVParser(new Uint8Array([]));\n const parser2 = new TLVParser(new Uint8Array([GeneralTags.Int]));\n const parser3 = new TLVParser(new Uint8Array([GeneralTags.Int, 2]));\n // WHEN\n const value1 = parser1.parse();\n const value2 = parser2.parse();\n const value3 = parser3.parse();\n // THEN\n expect(value1).toEqual(\n Left(new LKRPParsingError(\"Unexpected end of TLV\")),\n );\n expect(value2).toEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n expect(value3).toEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV value\")),\n );\n });\n });\n\n describe(\"parseNull\", () => {\n it(\"should parse a null value\", () => {\n // GIVEN\n const parser = new TLVParser(new Uint8Array([GeneralTags.Null, 0]));\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(Right(null));\n });\n\n it(\"should fail if the tag is not null\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected null\")));\n });\n\n it(\"should fail if the format is invalid\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Null, 1, 0x02]),\n );\n // WHEN\n const value = parser.parseNull();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Invalid null length\")),\n );\n });\n });\n\n describe(\"parseInt\", () => {\n it(\"should parse big endian integer values\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([\n ...[GeneralTags.Int, 1, 0x01], // 1\n ...[GeneralTags.Int, 2, 0x01, 0x00], // 256\n ...[GeneralTags.Int, 4, 0x01, 0x00, 0x00, 0x00], // 16777216\n ]),\n );\n // WHEN\n const value1 = parser.parseInt();\n const value2 = parser.parseInt();\n const value4 = parser.parseInt();\n // THEN\n expect(value1).toEqual(Right(1));\n expect(value2).toEqual(Right(256));\n expect(value4).toEqual(Right(16777216));\n });\n\n it(\"should fail if the tag is not an integer\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Bytes, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseInt();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a number\")));\n });\n\n it(\"should fail if the integer is not 1, 2, or 4 bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseInt();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Unsupported integer length\")),\n );\n });\n });\n\n describe(\"parseHash\", () => {\n it(\"should parse a hash value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Hash, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseHash();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a hash\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseHash();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a hash\")));\n });\n });\n\n describe(\"parseSignature\", () => {\n it(\"should parse a signature value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Signature, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseSignature();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a signature\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseSignature();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Expected a signature\")),\n );\n });\n });\n\n describe(\"parseString\", () => {\n it(\"should parse a string value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.String, 5, 0x48, 0x65, 0x6c, 0x6c, 0x6f]),\n );\n // WHEN\n const value = parser.parseString();\n // THEN\n expect(value).toEqual(Right(\"Hello\"));\n });\n\n it(\"should fail if the tag is not a string\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseString();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected a string\")));\n });\n });\n\n describe(\"parseBytes\", () => {\n it(\"should parse a bytes value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Bytes, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parseBytes();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not bytes\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parseBytes();\n // THEN\n expect(value).toEqual(Left(new LKRPParsingError(\"Expected bytes\")));\n });\n });\n\n describe(\"parsePublicKey\", () => {\n it(\"should parse a public key value\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.PublicKey, 3, 0x01, 0x02, 0x03]),\n );\n // WHEN\n const value = parser.parsePublicKey();\n // THEN\n expect(value).toEqual(Right(new Uint8Array([0x01, 0x02, 0x03])));\n });\n\n it(\"should fail if the tag is not a public key\", () => {\n // GIVEN\n const parser = new TLVParser(\n new Uint8Array([GeneralTags.Int, 1, 0x01]),\n );\n // WHEN\n const value = parser.parsePublicKey();\n // THEN\n expect(value).toEqual(\n Left(new LKRPParsingError(\"Expected a public key\")),\n );\n });\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_purify_ts", "import_Errors", "import_Tags", "import_LKRPCommand", "import_TLVParser", "commands", "blockData", "value", "parsed", "value1", "value2", "parser1", "parser2", "parsed1", "parsed2", "parser", "parser3", "value3", "value4"]
|
|
7
7
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{GeneralDmkError as
|
|
1
|
+
import{GeneralDmkError as e}from"@ledgerhq/device-management-kit";class d extends e{constructor(r){super(r.message);this.err=r;this.status=r.status,this.message=r.message}_tag="LedgerKeyringProtocolError";message;status}class i extends e{constructor(r=null,s=`Current keypair is not a member of the trustchain${r?` ${r}`:""}.`){super(s);this.trustchainId=r;this.message=s}_tag="LedgerKeyringProtocolError"}class u extends e{constructor(r="The trustchain is outdated."){super(r);this.message=r}_tag="LedgerKeyringProtocolError"}class c extends e{constructor(r="Ledger Sync must be initialized from Ledger Live with this device."){super(r);this.message=r}_tag="LedgerKeyringProtocolError"}class g extends e{constructor(r){super(r);this.err=r}_tag="LedgerKeyringProtocolError"}class l extends e{constructor(r){super(r);this.err=r}_tag="LedgerKeyringProtocolError"}class y extends e{constructor(r){const s=r&&typeof r=="object"&&"type"in r&&typeof r.type=="number"&&`0x${r.type.toString(16).padStart(2,"0")}`;let n="Unsupported command";s&&(n+=`: ${s}`);super(n);this.command=r;this.message=n}_tag="LedgerKeyringProtocolError";message}class p extends e{constructor(r){super(r);this.message=r}_tag="LedgerKeyringProtocolError"}export{d as LKRPDataSourceError,l as LKRPMissingDataError,u as LKRPOutdatedTrustchainError,g as LKRPParsingError,c as LKRPTrustchainNotReady,i as LKRPUnauthorizedError,p as LKRPUnknownError,y as LKRPUnsupportedCommandError};
|
|
2
2
|
//# sourceMappingURL=Errors.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/Errors.ts"],
|
|
4
|
-
"sourcesContent": ["import { GeneralDmkError } from \"@ledgerhq/device-management-kit\";\n\nexport class
|
|
5
|
-
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,
|
|
6
|
-
"names": ["GeneralDmkError", "
|
|
4
|
+
"sourcesContent": ["import { GeneralDmkError } from \"@ledgerhq/device-management-kit\";\n\nexport type LKRPDataSourceErrorStatus =\n | \"UNAUTHORIZED\"\n | \"BAD_REQUEST\"\n | \"UNKNOWN\";\n\nexport class LKRPDataSourceError extends GeneralDmkError {\n override _tag = \"LedgerKeyringProtocolError\";\n public readonly message: string;\n public readonly status: LKRPDataSourceErrorStatus;\n\n constructor(\n readonly err: {\n status: LKRPDataSourceErrorStatus;\n message: string;\n },\n ) {\n super(err.message);\n this.status = err.status;\n this.message = err.message;\n }\n}\n\nexport class LKRPUnauthorizedError extends GeneralDmkError {\n override _tag = \"LedgerKeyringProtocolError\";\n constructor(\n readonly trustchainId: string | null = null,\n readonly message: string = `Current keypair is not a member of the trustchain${trustchainId ? ` ${trustchainId}` : \"\"}.`,\n ) {\n super(message);\n }\n}\n\nexport class LKRPOutdatedTrustchainError extends GeneralDmkError {\n override _tag = \"LedgerKeyringProtocolError\";\n constructor(readonly message = \"The trustchain is outdated.\") {\n super(message);\n }\n}\n\nexport class LKRPTrustchainNotReady extends GeneralDmkError {\n override readonly _tag = \"LedgerKeyringProtocolError\";\n constructor(\n readonly message = \"Ledger Sync must be initialized from Ledger Live with this device.\",\n ) {\n super(message);\n }\n}\n\nexport class LKRPParsingError extends GeneralDmkError {\n override readonly _tag = \"LedgerKeyringProtocolError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class LKRPMissingDataError extends GeneralDmkError {\n override readonly _tag = \"LedgerKeyringProtocolError\";\n constructor(readonly err?: unknown) {\n super(err);\n }\n}\n\nexport class LKRPUnsupportedCommandError extends GeneralDmkError {\n override readonly _tag = \"LedgerKeyringProtocolError\";\n readonly message: string;\n constructor(readonly command: unknown) {\n const commandType =\n command &&\n typeof command === \"object\" &&\n \"type\" in command &&\n typeof command.type === \"number\" &&\n `0x${command.type.toString(16).padStart(2, \"0\")}`;\n let message = `Unsupported command`;\n if (commandType) message += `: ${commandType}`;\n\n super(message);\n\n this.message = message;\n }\n}\n\nexport class LKRPUnknownError extends GeneralDmkError {\n override readonly _tag = \"LedgerKeyringProtocolError\";\n constructor(readonly message: string) {\n super(message);\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAAS,mBAAAA,MAAuB,kCAOzB,MAAMC,UAA4BD,CAAgB,CAKvD,YACWE,EAIT,CACA,MAAMA,EAAI,OAAO,EALR,SAAAA,EAMT,KAAK,OAASA,EAAI,OAClB,KAAK,QAAUA,EAAI,OACrB,CAbS,KAAO,6BACA,QACA,MAYlB,CAEO,MAAMC,UAA8BH,CAAgB,CAEzD,YACWI,EAA8B,KAC9BC,EAAkB,oDAAoDD,EAAe,IAAIA,CAAY,GAAK,EAAE,IACrH,CACA,MAAMC,CAAO,EAHJ,kBAAAD,EACA,aAAAC,CAGX,CANS,KAAO,4BAOlB,CAEO,MAAMC,UAAoCN,CAAgB,CAE/D,YAAqBK,EAAU,8BAA+B,CAC5D,MAAMA,CAAO,EADM,aAAAA,CAErB,CAHS,KAAO,4BAIlB,CAEO,MAAME,UAA+BP,CAAgB,CAE1D,YACWK,EAAU,qEACnB,CACA,MAAMA,CAAO,EAFJ,aAAAA,CAGX,CALkB,KAAO,4BAM3B,CAEO,MAAMG,UAAyBR,CAAgB,CAEpD,YAAqBE,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CAEO,MAAMO,UAA6BT,CAAgB,CAExD,YAAqBE,EAAe,CAClC,MAAMA,CAAG,EADU,SAAAA,CAErB,CAHkB,KAAO,4BAI3B,CAEO,MAAMQ,UAAoCV,CAAgB,CAG/D,YAAqBW,EAAkB,CACrC,MAAMC,EACJD,GACA,OAAOA,GAAY,UACnB,SAAUA,GACV,OAAOA,EAAQ,MAAS,UACxB,KAAKA,EAAQ,KAAK,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,GACjD,IAAIN,EAAU,sBACVO,IAAaP,GAAW,KAAKO,CAAW,IAE5C,MAAMP,CAAO,EAVM,aAAAM,EAYnB,KAAK,QAAUN,CACjB,CAfkB,KAAO,6BAChB,OAeX,CAEO,MAAMQ,UAAyBb,CAAgB,CAEpD,YAAqBK,EAAiB,CACpC,MAAMA,CAAO,EADM,aAAAA,CAErB,CAHkB,KAAO,4BAI3B",
|
|
6
|
+
"names": ["GeneralDmkError", "LKRPDataSourceError", "err", "LKRPUnauthorizedError", "trustchainId", "message", "LKRPOutdatedTrustchainError", "LKRPTrustchainNotReady", "LKRPParsingError", "LKRPMissingDataError", "LKRPUnsupportedCommandError", "command", "commandType", "LKRPUnknownError"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ByteArrayBuilder as f,ByteArrayParser as h}from"@ledgerhq/device-management-kit";import{Maybe as
|
|
1
|
+
import{ByteArrayBuilder as f,ByteArrayParser as h}from"@ledgerhq/device-management-kit";import{Maybe as A}from"purify-ts";import{LKRPParsingError as m}from"../api/app-binder/Errors";import{KeypairFromBytes as d}from"../api/app-binder/KeypairFromBytes";import{makeContainer as K}from"./di";import{AES_BLOCK_SIZE as u,CryptoUtils as o}from"./utils/crypto";import{useCasesTypes as U}from"./use-cases/di/useCasesTypes";import{eitherSeqRecord as D}from"./utils/eitherSeqRecord";class S{name;_container;constructor({dmk:a,sessionId:n,baseUrl:e}){this.name="Ledger Keyring Protocol",this._container=K({dmk:a,sessionId:n,baseUrl:e})}authenticate(a,n,e,r,t,i){return this._container.get(U.AuthenticateUseCase).execute(a,n,e,r,t,i)}encryptData(a,n){const e=new d(a),r=o.randomKeypair(),t=e.ecdh(r.pubKeyToU8a()).slice(1),i=o.hmac(new Uint8Array,t),s=o.randomBytes(16),c=o.encrypt(i,s,n),p=c.subarray(0,-u),y=c.subarray(-u);return new f().add8BitUIntToData(0).addBufferToData(r.pubKeyToU8a()).addBufferToData(s).addBufferToData(y).addBufferToData(p).build()}decryptData(a,n){const e=new h(n);if(e.extract8BitUInt()!==0)throw new m("Unsupported serialization version");const r=(t,i)=>A.fromNullable(t).toEither(new m(`Missing ${i} field`));return D({ephemeralPublicKey:()=>r(e.extractFieldByLength(33),"ephemeral public key"),iv:()=>r(e.extractFieldByLength(16),"IV"),tag:()=>r(e.extractFieldByLength(16),"tag"),encryptedData:()=>r(e.extractFieldByLength(e.getUnparsedRemainingLength()),"encrypted data")}).map(({ephemeralPublicKey:t,iv:i,tag:s,encryptedData:c})=>{const y=new d(a).ecdh(t).slice(1),g=o.hmac(new Uint8Array,y),l=new Uint8Array([...c,...s]);return o.decrypt(g,i,l)}).caseOf({Left:t=>{throw t},Right:t=>t})}}export{S as DefaultLedgerKeyringProtocol};
|
|
2
2
|
//# sourceMappingURL=DefaultLedgerKeyringProtocol.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/internal/DefaultLedgerKeyringProtocol.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\nimport { Maybe
|
|
5
|
-
"mappings": "AAIA,OACE,oBAAAA,EACA,mBAAAC,MACK,kCAEP,OAAS,SAAAC,
|
|
6
|
-
"names": ["ByteArrayBuilder", "ByteArrayParser", "Maybe", "
|
|
4
|
+
"sourcesContent": ["import {\n type DeviceManagementKit,\n type DeviceSessionId,\n} from \"@ledgerhq/device-management-kit\";\nimport {\n ByteArrayBuilder,\n ByteArrayParser,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Container } from \"inversify\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type AuthenticateDAReturnType } from \"@api/app-binder/AuthenticateDeviceActionTypes\";\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { KeypairFromBytes } from \"@api/app-binder/KeypairFromBytes\";\nimport {\n type JWT,\n type Keypair,\n type Permissions,\n} from \"@api/app-binder/LKRPTypes\";\nimport { type LedgerKeyringProtocol } from \"@api/LedgerKeyringProtocol\";\nimport { makeContainer } from \"@internal/di\";\nimport { AES_BLOCK_SIZE, CryptoUtils } from \"@internal/utils/crypto\";\n\nimport { type AuthenticateUseCase } from \"./use-cases/authentication/AuthenticateUseCase\";\nimport { useCasesTypes } from \"./use-cases/di/useCasesTypes\";\nimport { eitherSeqRecord } from \"./utils/eitherSeqRecord\";\n\ntype DefaultLedgerKeyringProtocolConstructorArgs = {\n dmk: DeviceManagementKit;\n sessionId: DeviceSessionId;\n baseUrl: string;\n};\n\nexport class DefaultLedgerKeyringProtocol implements LedgerKeyringProtocol {\n name: string;\n private _container: Container;\n\n constructor({\n dmk,\n sessionId,\n baseUrl,\n }: DefaultLedgerKeyringProtocolConstructorArgs) {\n this.name = \"Ledger Keyring Protocol\";\n this._container = makeContainer({ dmk, sessionId, baseUrl });\n }\n\n authenticate(\n keypair: Keypair,\n applicationId: number,\n clientName: string,\n permissions: Permissions,\n trustchainId?: string,\n jwt?: JWT,\n ): AuthenticateDAReturnType {\n return this._container\n .get<AuthenticateUseCase>(useCasesTypes.AuthenticateUseCase)\n .execute(\n keypair,\n applicationId,\n clientName,\n permissions,\n trustchainId,\n jwt,\n );\n }\n\n // TODO Better return type for error management instead of exceptions\n encryptData(encryptionKey: Uint8Array, data: Uint8Array): Uint8Array {\n // TODO move implem in a use case\n\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = new KeypairFromBytes(encryptionKey);\n const ephemeralKeypair = CryptoUtils.randomKeypair();\n const sharedSecret = privateKey\n .ecdh(ephemeralKeypair.pubKeyToU8a())\n .slice(1);\n\n // Key derivation using HMAC-SHA256\n const key = CryptoUtils.hmac(new Uint8Array(), sharedSecret);\n\n // Generate a random IV (nonce)\n const iv = CryptoUtils.randomBytes(16);\n\n // Encrypt data\n const ciphertext = CryptoUtils.encrypt(key, iv, data);\n const encryptedData = ciphertext.subarray(0, -AES_BLOCK_SIZE);\n const tag = ciphertext.subarray(-AES_BLOCK_SIZE);\n\n // Serialize the result\n return new ByteArrayBuilder()\n .add8BitUIntToData(0) // Version of the format\n .addBufferToData(ephemeralKeypair.pubKeyToU8a())\n .addBufferToData(iv)\n .addBufferToData(tag)\n .addBufferToData(encryptedData)\n .build();\n }\n\n decryptData(encryptionKey: Uint8Array, data: Uint8Array): Uint8Array {\n // TODO move implem in a use case\n\n const parser = new ByteArrayParser(data);\n if (parser.extract8BitUInt() !== 0) {\n throw new LKRPParsingError(\"Unsupported serialization version\");\n }\n const required = (value: Uint8Array | undefined, field: string) =>\n Maybe.fromNullable(value).toEither(\n new LKRPParsingError(`Missing ${field} field`),\n );\n\n return eitherSeqRecord({\n ephemeralPublicKey: () =>\n required(parser.extractFieldByLength(33), \"ephemeral public key\"),\n iv: () => required(parser.extractFieldByLength(16), \"IV\"),\n tag: () => required(parser.extractFieldByLength(16), \"tag\"),\n encryptedData: () =>\n required(\n parser.extractFieldByLength(parser.getUnparsedRemainingLength()),\n \"encrypted data\",\n ),\n })\n .map(({ ephemeralPublicKey, iv, tag, encryptedData }) => {\n // Derive the shared secret using ECDH with an ephemeral keypair\n const privateKey = new KeypairFromBytes(encryptionKey);\n const sharedSecret = privateKey.ecdh(ephemeralPublicKey).slice(1);\n\n // Key derivation using HMAC-SHA256\n const key = CryptoUtils.hmac(new Uint8Array(), sharedSecret);\n\n // Decrypt the data\n const ciphertext = new Uint8Array([...encryptedData, ...tag]);\n const cleartext = CryptoUtils.decrypt(key, iv, ciphertext);\n return cleartext;\n })\n .caseOf({\n Left: (error) => {\n throw error;\n },\n Right: (cleartext) => cleartext,\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAIA,OACE,oBAAAA,EACA,mBAAAC,MACK,kCAEP,OAAS,SAAAC,MAAa,YAGtB,OAAS,oBAAAC,MAAwB,yBACjC,OAAS,oBAAAC,MAAwB,mCAOjC,OAAS,iBAAAC,MAAqB,eAC9B,OAAS,kBAAAC,EAAgB,eAAAC,MAAmB,yBAG5C,OAAS,iBAAAC,MAAqB,+BAC9B,OAAS,mBAAAC,MAAuB,0BAQzB,MAAMC,CAA8D,CACzE,KACQ,WAER,YAAY,CACV,IAAAC,EACA,UAAAC,EACA,QAAAC,CACF,EAAgD,CAC9C,KAAK,KAAO,0BACZ,KAAK,WAAaR,EAAc,CAAE,IAAAM,EAAK,UAAAC,EAAW,QAAAC,CAAQ,CAAC,CAC7D,CAEA,aACEC,EACAC,EACAC,EACAC,EACAC,EACAC,EAC0B,CAC1B,OAAO,KAAK,WACT,IAAyBX,EAAc,mBAAmB,EAC1D,QACCM,EACAC,EACAC,EACAC,EACAC,EACAC,CACF,CACJ,CAGA,YAAYC,EAA2BC,EAA8B,CAInE,MAAMC,EAAa,IAAIlB,EAAiBgB,CAAa,EAC/CG,EAAmBhB,EAAY,cAAc,EAC7CiB,EAAeF,EAClB,KAAKC,EAAiB,YAAY,CAAC,EACnC,MAAM,CAAC,EAGJE,EAAMlB,EAAY,KAAK,IAAI,WAAciB,CAAY,EAGrDE,EAAKnB,EAAY,YAAY,EAAE,EAG/BoB,EAAapB,EAAY,QAAQkB,EAAKC,EAAIL,CAAI,EAC9CO,EAAgBD,EAAW,SAAS,EAAG,CAACrB,CAAc,EACtDuB,EAAMF,EAAW,SAAS,CAACrB,CAAc,EAG/C,OAAO,IAAIN,EAAiB,EACzB,kBAAkB,CAAC,EACnB,gBAAgBuB,EAAiB,YAAY,CAAC,EAC9C,gBAAgBG,CAAE,EAClB,gBAAgBG,CAAG,EACnB,gBAAgBD,CAAa,EAC7B,MAAM,CACX,CAEA,YAAYR,EAA2BC,EAA8B,CAGnE,MAAMS,EAAS,IAAI7B,EAAgBoB,CAAI,EACvC,GAAIS,EAAO,gBAAgB,IAAM,EAC/B,MAAM,IAAI3B,EAAiB,mCAAmC,EAEhE,MAAM4B,EAAW,CAACC,EAA+BC,IAC/C/B,EAAM,aAAa8B,CAAK,EAAE,SACxB,IAAI7B,EAAiB,WAAW8B,CAAK,QAAQ,CAC/C,EAEF,OAAOxB,EAAgB,CACrB,mBAAoB,IAClBsB,EAASD,EAAO,qBAAqB,EAAE,EAAG,sBAAsB,EAClE,GAAI,IAAMC,EAASD,EAAO,qBAAqB,EAAE,EAAG,IAAI,EACxD,IAAK,IAAMC,EAASD,EAAO,qBAAqB,EAAE,EAAG,KAAK,EAC1D,cAAe,IACbC,EACED,EAAO,qBAAqBA,EAAO,2BAA2B,CAAC,EAC/D,gBACF,CACJ,CAAC,EACE,IAAI,CAAC,CAAE,mBAAAI,EAAoB,GAAAR,EAAI,IAAAG,EAAK,cAAAD,CAAc,IAAM,CAGvD,MAAMJ,EADa,IAAIpB,EAAiBgB,CAAa,EACrB,KAAKc,CAAkB,EAAE,MAAM,CAAC,EAG1DT,EAAMlB,EAAY,KAAK,IAAI,WAAciB,CAAY,EAGrDG,EAAa,IAAI,WAAW,CAAC,GAAGC,EAAe,GAAGC,CAAG,CAAC,EAE5D,OADkBtB,EAAY,QAAQkB,EAAKC,EAAIC,CAAU,CAE3D,CAAC,EACA,OAAO,CACN,KAAOQ,GAAU,CACf,MAAMA,CACR,EACA,MAAQC,GAAcA,CACxB,CAAC,CACL,CACF",
|
|
6
|
+
"names": ["ByteArrayBuilder", "ByteArrayParser", "Maybe", "LKRPParsingError", "KeypairFromBytes", "makeContainer", "AES_BLOCK_SIZE", "CryptoUtils", "useCasesTypes", "eitherSeqRecord", "DefaultLedgerKeyringProtocol", "dmk", "sessionId", "baseUrl", "keypair", "applicationId", "clientName", "permissions", "trustchainId", "jwt", "encryptionKey", "data", "privateKey", "ephemeralKeypair", "sharedSecret", "key", "iv", "ciphertext", "encryptedData", "tag", "parser", "required", "value", "field", "ephemeralPublicKey", "error", "cleartext"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as t,ApduParser as d,CommandResultFactory as o,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{Maybe as n}from"purify-ts";import{TPTags as s}from"../../
|
|
1
|
+
import{ApduBuilder as t,ApduParser as d,CommandResultFactory as o,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{Maybe as n}from"purify-ts";import{TPTags as s}from"../../models/Tags";import{LEDGER_SYNC_ERRORS as p,LedgerKeyringProtocolErrorFactory as u}from"./utils/ledgerKeyringProtocolErrors";class f{constructor(e){this.args=e}errorHelper=new a(p,u);getApdu(){const{iv:e,memberTlv:r}=this.args;return new t({cla:224,ins:9,p1:0,p2:0}).add8BitUIntToData(s.IV).add8BitUIntToData(e.length).addBufferToData(e).addBufferToData(r).build()}parseResponse(e){return n.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>new d(e).getUnparsedRemainingLength()!==0?o({error:new m("Unexpected response data for SetTrustedMemberCommand")}):o({data:void 0}))}}export{f as SetTrustedMemberCommand};
|
|
2
2
|
//# sourceMappingURL=SetTrustedMemberCommand.js.map
|