@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.3.0 → 0.4.0
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/app-binder/AddToTrustchainDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/crypto/CryptoService.js.map +1 -1
- package/lib/cjs/api/model/Errors.js +1 -1
- package/lib/cjs/api/model/Errors.js.map +1 -1
- package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
- package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js.map +1 -1
- package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js +3 -3
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/GetVersionCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/GetVersionCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/InitCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/InitCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/InitCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/InitCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
- package/lib/cjs/internal/app-binder/command/SignBlockSingleCommand.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +2 -2
- package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.js.map +1 -1
- package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.js.map +1 -1
- package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +2 -2
- 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/SignChallengeWithKeypairTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +2 -2
- package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js.map +1 -1
- package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js.map +1 -1
- package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js.map +1 -1
- package/lib/cjs/internal/utils/LKRPBlockStream.js +1 -1
- package/lib/cjs/internal/utils/LKRPBlockStream.js.map +2 -2
- package/lib/cjs/package.json +1 -1
- package/lib/esm/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +1 -1
- package/lib/esm/api/crypto/CryptoService.js.map +1 -1
- package/lib/esm/api/model/Errors.js +1 -1
- package/lib/esm/api/model/Errors.js.map +1 -1
- package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
- package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js.map +1 -1
- package/lib/esm/internal/app-binder/command/GetAppNameCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetAppNameCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js +3 -3
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/GetVersionCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/GetVersionCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/InitCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/InitCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/InitCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/InitCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseBlockSignatureCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.js.map +2 -2
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.test.js +1 -1
- package/lib/esm/internal/app-binder/command/ParseStreamBlockHeader.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SetTrustedMemberCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockHeader.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockHeader.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockHeader.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSignatureCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.js.map +2 -2
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/SignBlockSingleCommand.test.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.js.map +2 -2
- package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +2 -2
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +2 -2
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +2 -2
- package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js.map +1 -1
- package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js.map +1 -1
- package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js.map +1 -1
- package/lib/esm/internal/utils/LKRPBlockStream.js +2 -2
- package/lib/esm/internal/utils/LKRPBlockStream.js.map +2 -2
- package/lib/esm/package.json +1 -1
- package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts +1 -1
- package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts +2 -2
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/InitCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/InitCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts +1 -0
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts +1 -0
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts +2 -2
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts +1 -1
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts +1 -1
- package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts +1 -1
- package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts +2 -2
- package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts +1 -1
- package/lib/types/internal/utils/LKRPBlockStream.d.ts +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +4 -4
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPBlockStream.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n bufferToHexaString,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Either, Just, Maybe, MaybeAsync, Nothing, Right } from \"purify-ts\";\n\nimport { type CryptoService, EncryptionAlgo } from \"@api/crypto/CryptoService\";\nimport { type KeyPair } from \"@api/crypto/KeyPair\";\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport { type LKRPBlockData } from \"@internal/models/LKRPBlockTypes\";\nimport { CommandTags } from \"@internal/models/Tags\";\nimport {\n type EncryptedPublishedKey,\n type PublishedKey,\n} from \"@internal/models/Types\";\n\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPBlockStream {\n private validation: Maybe<Promise<boolean>> = Nothing;\n private blocks: Maybe<Either<LKRPParsingError, LKRPBlock[]>> = Nothing;\n private path: Maybe<string> = Nothing;\n\n constructor(\n private readonly bytes: Uint8Array,\n blocks?: LKRPBlock[],\n ) {\n this.blocks = blocks ? Just(Right(blocks)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPBlockStream {\n return new LKRPBlockStream(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(\n blocksData: Omit<LKRPBlockData, \"parent\">[],\n parentHash?: string,\n ): LKRPBlockStream {\n const blocks: LKRPBlock[] = [];\n let hash =\n parentHash ??\n bufferToHexaString(crypto.getRandomValues(new Uint8Array(32)), false);\n\n for (const blockData of blocksData) {\n const block = LKRPBlock.fromData({\n ...blockData,\n parent: hash,\n });\n hash = block.hash();\n blocks.push(block);\n }\n const bytes = blocks.reduce(\n (acc, block) => new Uint8Array([...acc, ...block.toU8A()]),\n new Uint8Array(),\n );\n return new LKRPBlockStream(bytes, blocks);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes, false);\n }\n\n parse(): Either<LKRPParsingError, LKRPBlock[]> {\n return this.blocks.orDefaultLazy(() => {\n const parser = new TLVParser(this.bytes);\n const parsed: Either<LKRPParsingError, LKRPBlock>[] = [];\n while (!parser.state.isDone) {\n const start = parser.state.offset;\n const block = parser.parseBlockData().map((data) => {\n const end = parser.state.offset;\n return new LKRPBlock(this.bytes.slice(start, end), data);\n });\n parsed.push(block);\n if (block.isLeft()) break;\n }\n const blocks = Either.sequence(parsed);\n this.blocks = Just(blocks);\n return blocks;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .map((blocks) => blocks.map((block) => block.toHuman()))\n .chain(Either.sequence)\n .map((blocks) => blocks.join(\"\\n\\n\"));\n }\n\n async validate(streamParentHash?: string): Promise<boolean> {\n return this.validation.orDefaultLazy(async () => {\n const validation = this.parse()\n .map((blocks) =>\n blocks.map((block) =>\n block\n .parse()\n .map(({ parent }) => ({ parent, hash: () => block.hash() })),\n ),\n )\n .chain(Either.sequence)\n .toMaybe()\n .map(async (blocks) => {\n if (\n streamParentHash &&\n blocks[0] &&\n streamParentHash !== blocks[0].parent\n ) {\n return false;\n }\n\n for await (const [index, block] of blocks.entries()) {\n const nextBlock = blocks[index + 1];\n if (nextBlock && block.hash() !== nextBlock.parent) {\n return false;\n }\n }\n return true;\n })\n .orDefault(Promise.resolve(false));\n\n return validation;\n });\n }\n\n getPath(): Maybe<string> {\n this.path.ifNothing(() => {\n this.path = this.parse()\n .toMaybe()\n .chainNullable((blocks) => blocks[0])\n .chain((block) => block.parse().toMaybe())\n .chainNullable(({ commands }) => commands[0])\n .chain((command) => command.parse().toMaybe())\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Derive:\n return Just(data.path);\n case CommandTags.Seed:\n return Just(\"m/0'\");\n default:\n return Nothing;\n }\n });\n });\n return this.path;\n }\n\n getMemberBlock(member: string): Maybe<LKRPBlockData> {\n return this.parse()\n .toMaybe()\n .chain((blocks) => {\n for (const block of blocks) {\n const parsedBlock = block.parse();\n if (parsedBlock.isRight()) {\n const blockData = parsedBlock.extract();\n for (const command of blockData.commands) {\n const pubkey = command.getPublicKey();\n if (pubkey.isJust() && pubkey.extract() === member) {\n return Maybe.of(blockData);\n }\n }\n }\n }\n return Nothing;\n });\n }\n\n hasMember(member: string): boolean {\n return this.getMemberBlock(member).isJust();\n }\n\n async getPublishedKey(\n cryptoService: CryptoService,\n
|
|
4
|
+
"sourcesContent": ["import {\n bufferToHexaString,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { Either, Just, Maybe, MaybeAsync, Nothing, Right } from \"purify-ts\";\n\nimport { type CryptoService, EncryptionAlgo } from \"@api/crypto/CryptoService\";\nimport { type KeyPair } from \"@api/crypto/KeyPair\";\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport { type LKRPBlockData } from \"@internal/models/LKRPBlockTypes\";\nimport { CommandTags } from \"@internal/models/Tags\";\nimport {\n type EncryptedPublishedKey,\n type PublishedKey,\n} from \"@internal/models/Types\";\n\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPBlockStream {\n private validation: Maybe<Promise<boolean>> = Nothing;\n private blocks: Maybe<Either<LKRPParsingError, LKRPBlock[]>> = Nothing;\n private path: Maybe<string> = Nothing;\n\n constructor(\n private readonly bytes: Uint8Array,\n blocks?: LKRPBlock[],\n ) {\n this.blocks = blocks ? Just(Right(blocks)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPBlockStream {\n return new LKRPBlockStream(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(\n blocksData: Omit<LKRPBlockData, \"parent\">[],\n parentHash?: string,\n ): LKRPBlockStream {\n const blocks: LKRPBlock[] = [];\n let hash =\n parentHash ??\n bufferToHexaString(crypto.getRandomValues(new Uint8Array(32)), false);\n\n for (const blockData of blocksData) {\n const block = LKRPBlock.fromData({\n ...blockData,\n parent: hash,\n });\n hash = block.hash();\n blocks.push(block);\n }\n const bytes = blocks.reduce(\n (acc, block) => new Uint8Array([...acc, ...block.toU8A()]),\n new Uint8Array(),\n );\n return new LKRPBlockStream(bytes, blocks);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes, false);\n }\n\n parse(): Either<LKRPParsingError, LKRPBlock[]> {\n return this.blocks.orDefaultLazy(() => {\n const parser = new TLVParser(this.bytes);\n const parsed: Either<LKRPParsingError, LKRPBlock>[] = [];\n while (!parser.state.isDone) {\n const start = parser.state.offset;\n const block = parser.parseBlockData().map((data) => {\n const end = parser.state.offset;\n return new LKRPBlock(this.bytes.slice(start, end), data);\n });\n parsed.push(block);\n if (block.isLeft()) break;\n }\n const blocks = Either.sequence(parsed);\n this.blocks = Just(blocks);\n return blocks;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse()\n .map((blocks) => blocks.map((block) => block.toHuman()))\n .chain(Either.sequence)\n .map((blocks) => blocks.join(\"\\n\\n\"));\n }\n\n async validate(streamParentHash?: string): Promise<boolean> {\n return this.validation.orDefaultLazy(async () => {\n const validation = this.parse()\n .map((blocks) =>\n blocks.map((block) =>\n block\n .parse()\n .map(({ parent }) => ({ parent, hash: () => block.hash() })),\n ),\n )\n .chain(Either.sequence)\n .toMaybe()\n .map(async (blocks) => {\n if (\n streamParentHash &&\n blocks[0] &&\n streamParentHash !== blocks[0].parent\n ) {\n return false;\n }\n\n for await (const [index, block] of blocks.entries()) {\n const nextBlock = blocks[index + 1];\n if (nextBlock && block.hash() !== nextBlock.parent) {\n return false;\n }\n }\n return true;\n })\n .orDefault(Promise.resolve(false));\n\n return validation;\n });\n }\n\n getPath(): Maybe<string> {\n this.path.ifNothing(() => {\n this.path = this.parse()\n .toMaybe()\n .chainNullable((blocks) => blocks[0])\n .chain((block) => block.parse().toMaybe())\n .chainNullable(({ commands }) => commands[0])\n .chain((command) => command.parse().toMaybe())\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Derive:\n return Just(data.path);\n case CommandTags.Seed:\n return Just(\"m/0'\");\n default:\n return Nothing;\n }\n });\n });\n return this.path;\n }\n\n getMemberBlock(member: string): Maybe<LKRPBlockData> {\n return this.parse()\n .toMaybe()\n .chain((blocks) => {\n for (const block of blocks) {\n const parsedBlock = block.parse();\n if (parsedBlock.isRight()) {\n const blockData = parsedBlock.extract();\n for (const command of blockData.commands) {\n const pubkey = command.getPublicKey();\n if (pubkey.isJust() && pubkey.extract() === member) {\n return Maybe.of(blockData);\n }\n }\n }\n }\n return Nothing;\n });\n }\n\n hasMember(member: string): boolean {\n return this.getMemberBlock(member).isJust();\n }\n\n async getPublishedKey(\n cryptoService: CryptoService,\n keyPair: KeyPair,\n ): Promise<Maybe<PublishedKey>> {\n return MaybeAsync.liftMaybe(\n this.getMemberBlock(keyPair.getPublicKeyToHex()).chain(\n (block): Maybe<EncryptedPublishedKey> => {\n for (const command of block.commands) {\n const key = command.getEncryptedPublishedKey();\n if (key.isJust()) {\n return key;\n }\n }\n return Nothing;\n },\n ),\n ).map(async (published) => {\n const secret = (\n await keyPair.deriveSharedSecret(published.ephemeralPublicKey)\n ).slice(1);\n const key = cryptoService.importSymmetricKey(\n secret,\n EncryptionAlgo.AES256_GCM,\n );\n const xpriv = await key.decrypt(\n published.initializationVector,\n published.encryptedXpriv,\n );\n return { privateKey: xpriv.slice(0, 32), chainCode: xpriv.slice(32) };\n });\n }\n}\n"],
|
|
5
5
|
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAGO,2CACPC,EAAgE,qBAEhEC,EAAmD,qCAInDC,EAA4B,iCAM5BC,EAA0B,uBAC1BC,EAA0B,uBAEnB,MAAMP,CAAgB,CAK3B,YACmBQ,EACjBC,EACA,CAFiB,WAAAD,EAGjB,KAAK,OAASC,KAAS,WAAK,SAAMA,CAAM,CAAC,EAAI,SAC/C,CATQ,WAAsC,UACtC,OAAuD,UACvD,KAAsB,UAS9B,OAAO,QAAQC,EAA8B,CAC3C,OAAO,IAAIV,KAAgB,sBAAmBU,CAAG,GAAK,IAAI,UAAY,CACxE,CAEA,OAAO,SACLC,EACAC,EACiB,CACjB,MAAMH,EAAsB,CAAC,EAC7B,IAAII,EACFD,MACA,sBAAmB,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAAG,EAAK,EAEtE,UAAWE,KAAaH,EAAY,CAClC,MAAMI,EAAQ,YAAU,SAAS,CAC/B,GAAGD,EACH,OAAQD,CACV,CAAC,EACDA,EAAOE,EAAM,KAAK,EAClBN,EAAO,KAAKM,CAAK,CACnB,CACA,MAAMP,EAAQC,EAAO,OACnB,CAACO,EAAKD,IAAU,IAAI,WAAW,CAAC,GAAGC,EAAK,GAAGD,EAAM,MAAM,CAAC,CAAC,EACzD,IAAI,UACN,EACA,OAAO,IAAIf,EAAgBQ,EAAOC,CAAM,CAC1C,CAEA,OAAoB,CAClB,OAAO,KAAK,KACd,CAEA,UAAmB,CACjB,SAAO,sBAAmB,KAAK,MAAO,EAAK,CAC7C,CAEA,OAA+C,CAC7C,OAAO,KAAK,OAAO,cAAc,IAAM,CACrC,MAAMQ,EAAS,IAAI,YAAU,KAAK,KAAK,EACjCC,EAAgD,CAAC,EACvD,KAAO,CAACD,EAAO,MAAM,QAAQ,CAC3B,MAAME,EAAQF,EAAO,MAAM,OACrBF,EAAQE,EAAO,eAAe,EAAE,IAAKG,GAAS,CAClD,MAAMC,EAAMJ,EAAO,MAAM,OACzB,OAAO,IAAI,YAAU,KAAK,MAAM,MAAME,EAAOE,CAAG,EAAGD,CAAI,CACzD,CAAC,EAED,GADAF,EAAO,KAAKH,CAAK,EACbA,EAAM,OAAO,EAAG,KACtB,CACA,MAAMN,EAAS,SAAO,SAASS,CAAM,EACrC,YAAK,UAAS,QAAKT,CAAM,EAClBA,CACT,CAAC,CACH,CAEA,SAA4C,CAC1C,OAAO,KAAK,MAAM,EACf,IAAKA,GAAWA,EAAO,IAAKM,GAAUA,EAAM,QAAQ,CAAC,CAAC,EACtD,MAAM,SAAO,QAAQ,EACrB,IAAKN,GAAWA,EAAO,KAAK;AAAA;AAAA,CAAM,CAAC,CACxC,CAEA,MAAM,SAASa,EAA6C,CAC1D,OAAO,KAAK,WAAW,cAAc,SAChB,KAAK,MAAM,EAC3B,IAAKb,GACJA,EAAO,IAAKM,GACVA,EACG,MAAM,EACN,IAAI,CAAC,CAAE,OAAAQ,CAAO,KAAO,CAAE,OAAAA,EAAQ,KAAM,IAAMR,EAAM,KAAK,CAAE,EAAE,CAC/D,CACF,EACC,MAAM,SAAO,QAAQ,EACrB,QAAQ,EACR,IAAI,MAAON,GAAW,CACrB,GACEa,GACAb,EAAO,CAAC,GACRa,IAAqBb,EAAO,CAAC,EAAE,OAE/B,MAAO,GAGT,eAAiB,CAACe,EAAOT,CAAK,IAAKN,EAAO,QAAQ,EAAG,CACnD,MAAMgB,EAAYhB,EAAOe,EAAQ,CAAC,EAClC,GAAIC,GAAaV,EAAM,KAAK,IAAMU,EAAU,OAC1C,MAAO,EAEX,CACA,MAAO,EACT,CAAC,EACA,UAAU,QAAQ,QAAQ,EAAK,CAAC,CAGpC,CACH,CAEA,SAAyB,CACvB,YAAK,KAAK,UAAU,IAAM,CACxB,KAAK,KAAO,KAAK,MAAM,EACpB,QAAQ,EACR,cAAehB,GAAWA,EAAO,CAAC,CAAC,EACnC,MAAOM,GAAUA,EAAM,MAAM,EAAE,QAAQ,CAAC,EACxC,cAAc,CAAC,CAAE,SAAAW,CAAS,IAAMA,EAAS,CAAC,CAAC,EAC3C,MAAOC,GAAYA,EAAQ,MAAM,EAAE,QAAQ,CAAC,EAC5C,MAAOP,GAAS,CACf,OAAQA,EAAK,KAAM,CACjB,KAAK,cAAY,OACf,SAAO,QAAKA,EAAK,IAAI,EACvB,KAAK,cAAY,KACf,SAAO,QAAK,MAAM,EACpB,QACE,OAAO,SACX,CACF,CAAC,CACL,CAAC,EACM,KAAK,IACd,CAEA,eAAeQ,EAAsC,CACnD,OAAO,KAAK,MAAM,EACf,QAAQ,EACR,MAAOnB,GAAW,CACjB,UAAWM,KAASN,EAAQ,CAC1B,MAAMoB,EAAcd,EAAM,MAAM,EAChC,GAAIc,EAAY,QAAQ,EAAG,CACzB,MAAMf,EAAYe,EAAY,QAAQ,EACtC,UAAWF,KAAWb,EAAU,SAAU,CACxC,MAAMgB,EAASH,EAAQ,aAAa,EACpC,GAAIG,EAAO,OAAO,GAAKA,EAAO,QAAQ,IAAMF,EAC1C,OAAO,QAAM,GAAGd,CAAS,CAE7B,CACF,CACF,CACA,OAAO,SACT,CAAC,CACL,CAEA,UAAUc,EAAyB,CACjC,OAAO,KAAK,eAAeA,CAAM,EAAE,OAAO,CAC5C,CAEA,MAAM,gBACJG,EACAC,EAC8B,CAC9B,OAAO,aAAW,UAChB,KAAK,eAAeA,EAAQ,kBAAkB,CAAC,EAAE,MAC9CjB,GAAwC,CACvC,UAAWY,KAAWZ,EAAM,SAAU,CACpC,MAAMkB,EAAMN,EAAQ,yBAAyB,EAC7C,GAAIM,EAAI,OAAO,EACb,OAAOA,CAEX,CACA,OAAO,SACT,CACF,CACF,EAAE,IAAI,MAAOC,GAAc,CACzB,MAAMC,GACJ,MAAMH,EAAQ,mBAAmBE,EAAU,kBAAkB,GAC7D,MAAM,CAAC,EAKHE,EAAQ,MAJFL,EAAc,mBACxBI,EACA,iBAAe,UACjB,EACwB,QACtBD,EAAU,qBACVA,EAAU,cACZ,EACA,MAAO,CAAE,WAAYE,EAAM,MAAM,EAAG,EAAE,EAAG,UAAWA,EAAM,MAAM,EAAE,CAAE,CACtE,CAAC,CACH,CACF",
|
|
6
|
-
"names": ["LKRPBlockStream_exports", "__export", "LKRPBlockStream", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_CryptoService", "import_Tags", "import_LKRPBlock", "import_TLVParser", "bytes", "blocks", "hex", "blocksData", "parentHash", "hash", "blockData", "block", "acc", "parser", "parsed", "start", "data", "end", "streamParentHash", "parent", "index", "nextBlock", "commands", "command", "member", "parsedBlock", "pubkey", "cryptoService", "
|
|
6
|
+
"names": ["LKRPBlockStream_exports", "__export", "LKRPBlockStream", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_CryptoService", "import_Tags", "import_LKRPBlock", "import_TLVParser", "bytes", "blocks", "hex", "blocksData", "parentHash", "hash", "blockData", "block", "acc", "parser", "parsed", "start", "data", "end", "streamParentHash", "parent", "index", "nextBlock", "commands", "command", "member", "parsedBlock", "pubkey", "cryptoService", "keyPair", "key", "published", "secret", "xpriv"]
|
|
7
7
|
}
|
package/lib/cjs/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/app-binder/AddToTrustchainDeviceActionTypes.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type OpenAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either } from \"purify-ts\";\n\nimport { type CryptoService } from \"@api/crypto/CryptoService\";\nimport { type KeyPair } from \"@api/crypto/KeyPair\";\nimport {\n type LKRPDataSourceError,\n type LKRPMissingDataError,\n type LKRPOutdatedTrustchainError,\n type LKRPParsingError,\n type LKRPTrustchainNotReady,\n type LKRPUnknownError,\n} from \"@api/model/Errors\";\nimport { type JWT } from \"@api/model/JWT\";\nimport { type Permissions } from \"@api/model/Permissions\";\nimport { type LKRPDeviceCommandError } from \"@internal/app-binder/command/utils/ledgerKeyringProtocolErrors\";\nimport { type LKRPDataSource } from \"@internal/lkrp-datasource/data/LKRPDataSource\";\nimport { type Trustchain } from \"@internal/utils/Trustchain\";\n\nexport type AddToTrustchainDAOutput = undefined;\n\nexport type AddToTrustchainDAInput = Either<\n LKRPMissingDataError,\n {\n readonly lkrpDataSource: LKRPDataSource;\n readonly cryptoService: CryptoService;\n readonly
|
|
4
|
+
"sourcesContent": ["import {\n type OpenAppDAError,\n type UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either } from \"purify-ts\";\n\nimport { type CryptoService } from \"@api/crypto/CryptoService\";\nimport { type KeyPair } from \"@api/crypto/KeyPair\";\nimport {\n type LKRPDataSourceError,\n type LKRPMissingDataError,\n type LKRPOutdatedTrustchainError,\n type LKRPParsingError,\n type LKRPTrustchainNotReady,\n type LKRPUnknownError,\n} from \"@api/model/Errors\";\nimport { type JWT } from \"@api/model/JWT\";\nimport { type Permissions } from \"@api/model/Permissions\";\nimport { type LKRPDeviceCommandError } from \"@internal/app-binder/command/utils/ledgerKeyringProtocolErrors\";\nimport { type LKRPDataSource } from \"@internal/lkrp-datasource/data/LKRPDataSource\";\nimport { type Trustchain } from \"@internal/utils/Trustchain\";\n\nexport type AddToTrustchainDAOutput = undefined;\n\nexport type AddToTrustchainDAInput = Either<\n LKRPMissingDataError,\n {\n readonly lkrpDataSource: LKRPDataSource;\n readonly cryptoService: CryptoService;\n readonly keyPair: KeyPair;\n readonly jwt: JWT;\n readonly appId: number;\n readonly trustchain: Trustchain;\n readonly clientName: string;\n readonly permissions: Permissions;\n }\n>;\n\nexport type AddToTrustchainDAError =\n | LKRPDeviceCommandError\n | LKRPDataSourceError\n | LKRPParsingError\n | LKRPMissingDataError\n | LKRPOutdatedTrustchainError\n | LKRPTrustchainNotReady\n | OpenAppDAError\n | LKRPUnknownError;\n\nexport type AddToTrustchainDAIntermediateValue =\n | {\n requiredUserInteraction: UserInteractionRequired.None;\n step?:\n | AddToTrustchaineDAStep.Initialize\n | AddToTrustchaineDAStep.ParseStream;\n }\n | {\n requiredUserInteraction: AddToTrustchainDAState.AddMember;\n step: AddToTrustchaineDAStep.AddMember;\n };\n\nexport enum AddToTrustchainDAState {\n AddMember = \"lkrp-add-member\",\n}\n\nexport enum AddToTrustchaineDAStep {\n Initialize = \"lkrp-init-transaction\",\n ParseStream = \"lkrp-parse-stream\",\n AddMember = \"lkrp-add-member\",\n}\n\nexport type AddToTrustchainDAInternalState = Either<\n AddToTrustchainDAError,\n {\n readonly sessionKeypair: KeyPair | null;\n }\n>;\n"],
|
|
5
5
|
"mappings": "AA4DO,IAAKA,OACVA,EAAA,UAAY,kBADFA,OAAA,IAIAC,OACVA,EAAA,WAAa,wBACbA,EAAA,YAAc,oBACdA,EAAA,UAAY,kBAHFA,OAAA",
|
|
6
6
|
"names": ["AddToTrustchainDAState", "AddToTrustchaineDAStep"]
|
|
7
7
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/api/crypto/CryptoService.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Key } from \"./Key\";\nimport { type KeyPair } from \"./KeyPair\";\n\nexport enum Curve {\n K256, // secp256k1\n P256, // P-256\n}\n\nexport enum EncryptionAlgo {\n AES256_GCM,\n}\n\nexport enum HashAlgo {\n SHA256,\n}\n\nexport interface CryptoService {\n // Generate a random buffer\n randomBytes(len: number): Uint8Array;\n\n // Compute a hash\n hash(bytes: Uint8Array, algo: HashAlgo): Uint8Array;\n\n // Compute a HMAC\n hmac(key: Uint8Array, message: Uint8Array, algo: HashAlgo): Uint8Array;\n\n // Generate a new random
|
|
4
|
+
"sourcesContent": ["import { type Key } from \"./Key\";\nimport { type KeyPair } from \"./KeyPair\";\n\nexport enum Curve {\n K256, // secp256k1\n P256, // P-256\n}\n\nexport enum EncryptionAlgo {\n AES256_GCM,\n}\n\nexport enum HashAlgo {\n SHA256,\n}\n\nexport interface CryptoService {\n // Generate a random buffer\n randomBytes(len: number): Uint8Array;\n\n // Compute a hash\n hash(bytes: Uint8Array, algo: HashAlgo): Uint8Array;\n\n // Compute a HMAC\n hmac(key: Uint8Array, message: Uint8Array, algo: HashAlgo): Uint8Array;\n\n // Generate a new random keyPair\n createKeyPair(curve: Curve): Promise<KeyPair>;\n\n // Import a keyPair\n importKeyPair(privateKey: Uint8Array, curve: Curve): KeyPair;\n\n // Generate a new random symmetric key\n createSymmetricKey(algo: EncryptionAlgo): Promise<Key>;\n\n // Import a symmetric key\n importSymmetricKey(keyMaterial: Uint8Array, algo: EncryptionAlgo): Key;\n}\n"],
|
|
5
5
|
"mappings": "AAGO,IAAKA,OACVA,IAAA,eACAA,IAAA,eAFUA,OAAA,IAKAC,OACVA,IAAA,2BADUA,OAAA,IAIAC,OACVA,IAAA,mBADUA,OAAA",
|
|
6
6
|
"names": ["Curve", "EncryptionAlgo", "HashAlgo"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
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
|
|
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/model/Errors.ts"],
|
|
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
|
|
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
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
6
|
"names": ["GeneralDmkError", "LKRPDataSourceError", "err", "LKRPUnauthorizedError", "trustchainId", "message", "LKRPOutdatedTrustchainError", "LKRPTrustchainNotReady", "LKRPParsingError", "LKRPMissingDataError", "LKRPUnsupportedCommandError", "command", "commandType", "LKRPUnknownError"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var u=(n,e,r,i)=>{for(var t=i>1?void 0:i?y(e,r):e,c=n.length-1,s;c>=0;c--)(s=n[c])&&(t=(i?s(e,r,t):s(t))||t);return i&&t&&d(e,r,t),t},o=(n,e)=>(r,i)=>e(r,i,n);import{SendCommandInAppDeviceAction as h,UserInteractionRequired as D}from"@ledgerhq/device-management-kit";import{inject as p,injectable as k}from"inversify";import{externalTypes as m}from"../externalTypes";import{lkrpDatasourceTypes as v}from"../lkrp-datasource/di/lkrpDatasourceTypes";import{GetVersionCommand as l}from"./command/GetVersionCommand";import{AuthenticateWithDeviceDeviceAction as A}from"./device-action/AuthenticateWithDeviceDeviceAction";import{AuthenticateWithKeypairDeviceAction as S}from"./device-action/AuthenticateWithKeypairDeviceAction";let a=class{constructor(e,r,i,t){this.dmk=e;this.applicationId=r;this.cryptoService=i;this.lkrpDataSource=t}authenticateWithKeypair(e){return new S({input:{lkrpDataSource:this.lkrpDataSource,appId:this.applicationId,cryptoService:this.cryptoService,
|
|
1
|
+
var d=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var u=(n,e,r,i)=>{for(var t=i>1?void 0:i?y(e,r):e,c=n.length-1,s;c>=0;c--)(s=n[c])&&(t=(i?s(e,r,t):s(t))||t);return i&&t&&d(e,r,t),t},o=(n,e)=>(r,i)=>e(r,i,n);import{SendCommandInAppDeviceAction as h,UserInteractionRequired as D}from"@ledgerhq/device-management-kit";import{inject as p,injectable as k}from"inversify";import{externalTypes as m}from"../externalTypes";import{lkrpDatasourceTypes as v}from"../lkrp-datasource/di/lkrpDatasourceTypes";import{GetVersionCommand as l}from"./command/GetVersionCommand";import{AuthenticateWithDeviceDeviceAction as A}from"./device-action/AuthenticateWithDeviceDeviceAction";import{AuthenticateWithKeypairDeviceAction as S}from"./device-action/AuthenticateWithKeypairDeviceAction";let a=class{constructor(e,r,i,t){this.dmk=e;this.applicationId=r;this.cryptoService=i;this.lkrpDataSource=t}authenticateWithKeypair(e){return new S({input:{lkrpDataSource:this.lkrpDataSource,appId:this.applicationId,cryptoService:this.cryptoService,keyPair:e.keyPair,trustchainId:e.trustchainId}}).execute()}authenticateWithDevice(e){return this.dmk.executeDeviceAction({sessionId:e.sessionId,deviceAction:new A({input:{lkrpDataSource:this.lkrpDataSource,appId:this.applicationId,cryptoService:this.cryptoService,clientName:e.clientName,permissions:e.permissions,keyPair:e.keyPair}})})}getVersion(e){return this.dmk.executeDeviceAction({sessionId:e.sessionId,deviceAction:new h({input:{command:new l,appName:"Ledger Sync",requiredUserInteraction:D.None,skipOpenApp:e.skipOpenApp}})})}getAppName(){throw new Error("Not implemented")}getSeedId(){throw new Error("Not implemented")}init(){throw new Error("Not implemented")}parseStream(){throw new Error("Not implemented")}signBlock(){throw new Error("Not implemented")}setTrustedMember(){throw new Error("Not implemented")}};a=u([k(),o(0,p(m.Dmk)),o(1,p(m.ApplicationId)),o(2,p(m.CryptoService)),o(3,p(v.LKRPDataSource))],a);export{a as LedgerKeyringProtocolBinder};
|
|
2
2
|
//# sourceMappingURL=LedgerKeyringProtocolBinder.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/app-binder/LedgerKeyringProtocolBinder.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { AuthenticateDAReturnType } from \"@api/app-binder/AuthenticateDeviceActionTypes\";\nimport { GetVersionDAReturnType } from \"@api/app-binder/GetVersionDeviceActionTypes\";\nimport { type CryptoService } from \"@api/crypto/CryptoService\";\nimport { KeyPair } from \"@api/crypto/KeyPair\";\nimport { Permissions } from \"@api/model/Permissions\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { type LKRPDataSource } from \"@internal/lkrp-datasource/data/LKRPDataSource\";\nimport { lkrpDatasourceTypes } from \"@internal/lkrp-datasource/di/lkrpDatasourceTypes\";\n\nimport { GetVersionCommand } from \"./command/GetVersionCommand\";\nimport { AuthenticateWithDeviceDeviceAction } from \"./device-action/AuthenticateWithDeviceDeviceAction\";\nimport { AuthenticateWithKeypairDeviceAction } from \"./device-action/AuthenticateWithKeypairDeviceAction\";\n\n@injectable()\nexport class LedgerKeyringProtocolBinder {\n constructor(\n @inject(externalTypes.Dmk) private readonly dmk: DeviceManagementKit,\n\n @inject(externalTypes.ApplicationId)\n private readonly applicationId: number,\n\n @inject(externalTypes.CryptoService)\n private readonly cryptoService: CryptoService,\n\n @inject(lkrpDatasourceTypes.LKRPDataSource)\n private readonly lkrpDataSource: LKRPDataSource,\n ) {}\n\n authenticateWithKeypair(args: {\n
|
|
4
|
+
"sourcesContent": ["import {\n DeviceManagementKit,\n type DeviceSessionId,\n SendCommandInAppDeviceAction,\n UserInteractionRequired,\n} from \"@ledgerhq/device-management-kit\";\nimport { inject, injectable } from \"inversify\";\n\nimport { AuthenticateDAReturnType } from \"@api/app-binder/AuthenticateDeviceActionTypes\";\nimport { GetVersionDAReturnType } from \"@api/app-binder/GetVersionDeviceActionTypes\";\nimport { type CryptoService } from \"@api/crypto/CryptoService\";\nimport { KeyPair } from \"@api/crypto/KeyPair\";\nimport { Permissions } from \"@api/model/Permissions\";\nimport { externalTypes } from \"@internal/externalTypes\";\nimport { type LKRPDataSource } from \"@internal/lkrp-datasource/data/LKRPDataSource\";\nimport { lkrpDatasourceTypes } from \"@internal/lkrp-datasource/di/lkrpDatasourceTypes\";\n\nimport { GetVersionCommand } from \"./command/GetVersionCommand\";\nimport { AuthenticateWithDeviceDeviceAction } from \"./device-action/AuthenticateWithDeviceDeviceAction\";\nimport { AuthenticateWithKeypairDeviceAction } from \"./device-action/AuthenticateWithKeypairDeviceAction\";\n\n@injectable()\nexport class LedgerKeyringProtocolBinder {\n constructor(\n @inject(externalTypes.Dmk) private readonly dmk: DeviceManagementKit,\n\n @inject(externalTypes.ApplicationId)\n private readonly applicationId: number,\n\n @inject(externalTypes.CryptoService)\n private readonly cryptoService: CryptoService,\n\n @inject(lkrpDatasourceTypes.LKRPDataSource)\n private readonly lkrpDataSource: LKRPDataSource,\n ) {}\n\n authenticateWithKeypair(args: {\n keyPair: KeyPair;\n trustchainId: string;\n }): AuthenticateDAReturnType {\n return new AuthenticateWithKeypairDeviceAction({\n input: {\n lkrpDataSource: this.lkrpDataSource,\n appId: this.applicationId,\n cryptoService: this.cryptoService,\n keyPair: args.keyPair,\n trustchainId: args.trustchainId,\n },\n }).execute();\n }\n\n authenticateWithDevice(args: {\n keyPair: KeyPair;\n clientName: string;\n permissions: Permissions;\n sessionId: DeviceSessionId;\n }): AuthenticateDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: args.sessionId,\n deviceAction: new AuthenticateWithDeviceDeviceAction({\n input: {\n lkrpDataSource: this.lkrpDataSource,\n appId: this.applicationId,\n cryptoService: this.cryptoService,\n clientName: args.clientName,\n permissions: args.permissions,\n keyPair: args.keyPair,\n },\n }),\n });\n }\n\n getVersion(args: {\n skipOpenApp: boolean;\n sessionId: DeviceSessionId;\n }): GetVersionDAReturnType {\n return this.dmk.executeDeviceAction({\n sessionId: args.sessionId,\n deviceAction: new SendCommandInAppDeviceAction({\n input: {\n command: new GetVersionCommand(),\n appName: \"Ledger Sync\",\n requiredUserInteraction: UserInteractionRequired.None,\n skipOpenApp: args.skipOpenApp,\n },\n }),\n });\n }\n\n getAppName(): unknown {\n throw new Error(\"Not implemented\");\n }\n\n getSeedId(): unknown {\n throw new Error(\"Not implemented\");\n }\n\n init(): unknown {\n throw new Error(\"Not implemented\");\n }\n\n parseStream(): unknown {\n throw new Error(\"Not implemented\");\n }\n\n signBlock(): unknown {\n throw new Error(\"Not implemented\");\n }\n\n setTrustedMember(): unknown {\n throw new Error(\"Not implemented\");\n }\n}\n"],
|
|
5
5
|
"mappings": "iOAAA,OAGE,gCAAAA,EACA,2BAAAC,MACK,kCACP,OAAS,UAAAC,EAAQ,cAAAC,MAAkB,YAOnC,OAAS,iBAAAC,MAAqB,0BAE9B,OAAS,uBAAAC,MAA2B,mDAEpC,OAAS,qBAAAC,MAAyB,8BAClC,OAAS,sCAAAC,MAA0C,qDACnD,OAAS,uCAAAC,MAA2C,sDAG7C,IAAMC,EAAN,KAAkC,CACvC,YAC8CC,EAG3BC,EAGAC,EAGAC,EACjB,CAV4C,SAAAH,EAG3B,mBAAAC,EAGA,mBAAAC,EAGA,oBAAAC,CAChB,CAEH,wBAAwBC,EAGK,CAC3B,OAAO,IAAIC,EAAoC,CAC7C,MAAO,CACL,eAAgB,KAAK,eACrB,MAAO,KAAK,cACZ,cAAe,KAAK,cACpB,QAASD,EAAK,QACd,aAAcA,EAAK,YACrB,CACF,CAAC,EAAE,QAAQ,CACb,CAEA,uBAAuBA,EAKM,CAC3B,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAWA,EAAK,UAChB,aAAc,IAAIE,EAAmC,CACnD,MAAO,CACL,eAAgB,KAAK,eACrB,MAAO,KAAK,cACZ,cAAe,KAAK,cACpB,WAAYF,EAAK,WACjB,YAAaA,EAAK,YAClB,QAASA,EAAK,OAChB,CACF,CAAC,CACH,CAAC,CACH,CAEA,WAAWA,EAGgB,CACzB,OAAO,KAAK,IAAI,oBAAoB,CAClC,UAAWA,EAAK,UAChB,aAAc,IAAIG,EAA6B,CAC7C,MAAO,CACL,QAAS,IAAIC,EACb,QAAS,cACT,wBAAyBC,EAAwB,KACjD,YAAaL,EAAK,WACpB,CACF,CAAC,CACH,CAAC,CACH,CAEA,YAAsB,CACpB,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,WAAqB,CACnB,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,MAAgB,CACd,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,aAAuB,CACrB,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,WAAqB,CACnB,MAAM,IAAI,MAAM,iBAAiB,CACnC,CAEA,kBAA4B,CAC1B,MAAM,IAAI,MAAM,iBAAiB,CACnC,CACF,EA1FaL,EAANW,EAAA,CADNC,EAAW,EAGPC,EAAA,EAAAC,EAAOC,EAAc,GAAG,GAExBF,EAAA,EAAAC,EAAOC,EAAc,aAAa,GAGlCF,EAAA,EAAAC,EAAOC,EAAc,aAAa,GAGlCF,EAAA,EAAAC,EAAOE,EAAoB,cAAc,IAVjChB",
|
|
6
6
|
"names": ["SendCommandInAppDeviceAction", "UserInteractionRequired", "inject", "injectable", "externalTypes", "lkrpDatasourceTypes", "GetVersionCommand", "AuthenticateWithDeviceDeviceAction", "AuthenticateWithKeypairDeviceAction", "LedgerKeyringProtocolBinder", "dmk", "applicationId", "cryptoService", "lkrpDataSource", "args", "AuthenticateWithKeypairDeviceAction", "AuthenticateWithDeviceDeviceAction", "SendCommandInAppDeviceAction", "GetVersionCommand", "UserInteractionRequired", "__decorateClass", "injectable", "__decorateParam", "inject", "externalTypes", "lkrpDatasourceTypes"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as t,ApduParser as m,CommandResultFactory as o,InvalidStatusWordError as n}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as
|
|
1
|
+
import{ApduBuilder as t,ApduParser as m,CommandResultFactory as o,InvalidStatusWordError as n}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as a}from"@ledgerhq/signer-utils";import{Maybe as d}from"purify-ts";import{LEDGER_SYNC_ERRORS as s,LedgerKeyringProtocolErrorFactory as l}from"./utils/ledgerKeyringProtocolErrors";class C{name="getAppName";errorHelper=new a(s,l);getApdu(){const e={cla:224,ins:3,p1:0,p2:0};return new t(e).build()}parseResponse(e){return d.fromNullable(this.errorHelper.getError(e)).orDefaultLazy(()=>{const r=new m(e).encodeToString(e.data);return r?o({data:{name:r}}):o({error:new n("Name is missing")})})}}export{C as GetAppNameCommand};
|
|
2
2
|
//# sourceMappingURL=GetAppNameCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/GetAppNameCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetAppNameCommandResponse = {\n readonly name: string;\n};\n\nexport type GetAppNameCommandArgs = undefined;\n\nexport class GetAppNameCommand\n implements\n Command<\n GetAppNameCommandResponse,\n GetAppNameCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetAppNameCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getAppNameArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getAppNameArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAppNameCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const name = parser.encodeToString(apduResponse.data);\n\n if (!name) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Name is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { name },\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetAppNameCommandResponse = {\n readonly name: string;\n};\n\nexport type GetAppNameCommandArgs = undefined;\n\nexport class GetAppNameCommand\n implements\n Command<\n GetAppNameCommandResponse,\n GetAppNameCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"getAppName\";\n private readonly errorHelper = new CommandErrorHelper<\n GetAppNameCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getAppNameArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getAppNameArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetAppNameCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const name = parser.encodeToString(apduResponse.data);\n\n if (!name) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Name is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { name },\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,CACW,KAAO,aACC,YAAc,IAAIJ,EAGjCE,EAAoBC,CAAiC,EAEvD,SAAgB,CACd,MAAME,EAAkC,CACtC,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAGA,OADgB,IAAIT,EAAYS,CAAc,EAC/B,MAAM,CACvB,CAEA,cACEC,EAC2E,CAC3E,OAAOL,EAAM,aACX,KAAK,YAAY,SAASK,CAAY,CACxC,EAAE,cAAc,IAAM,CAGpB,MAAMC,EAFS,IAAIV,EAAWS,CAAY,EAEtB,eAAeA,EAAa,IAAI,EAEpD,OAAKC,EAMET,EAAqB,CAC1B,KAAM,CAAE,KAAAS,CAAK,CACf,CAAC,EAPQT,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,iBAAiB,CACrD,CAAC,CAML,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "GetAppNameCommand", "getAppNameArgs", "apduResponse", "name"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as g,ApduParser as m,bufferToHexaString as n,CommandResultFactory as o,InvalidStatusWordError as l}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as c}from"@ledgerhq/signer-utils";import{Maybe as a}from"purify-ts";import{eitherSeqRecord as s}from"../../utils/eitherSeqRecord";import{LEDGER_SYNC_ERRORS as u,LedgerKeyringProtocolErrorFactory as p}from"./utils/ledgerKeyringProtocolErrors";class
|
|
1
|
+
import{ApduBuilder as g,ApduParser as m,bufferToHexaString as n,CommandResultFactory as o,InvalidStatusWordError as l}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as c}from"@ledgerhq/signer-utils";import{Maybe as a}from"purify-ts";import{eitherSeqRecord as s}from"../../utils/eitherSeqRecord";import{LEDGER_SYNC_ERRORS as u,LedgerKeyringProtocolErrorFactory as p}from"./utils/ledgerKeyringProtocolErrors";class S{constructor(i){this.args=i}name="getSeedId";errorHelper=new c(u,p);getApdu(){const{challengeTLV:i}=this.args,r={cla:224,ins:5,p1:0,p2:0};return new g(r).addHexaStringToData(i).build()}parseResponse(i){return a.fromNullable(this.errorHelper.getError(i)).orDefaultLazy(()=>{const r=new m(i),t=(e,d)=>a.fromNullable(e).toEither(new l(d));return s({credential:()=>s({version:()=>t(r.extract8BitUInt(),"Version is missing"),curveId:()=>t(r.extract8BitUInt(),"Curve ID is missing"),signAlgorithm:()=>t(r.extract8BitUInt(),"Sign algorithm is missing"),publicKey:()=>t(r.extract8BitUInt(),"Public key length is missing").chain(e=>t(r.extractFieldByLength(e),"Public key is missing")).map(e=>n(e,!1))}),signature:()=>t(r.extract8BitUInt(),"Signature length is missing").chain(e=>t(r.extractFieldByLength(e),"Signature is missing")).map(e=>n(e,!1)),attestation:()=>s({id:()=>t(r.extractFieldByLength(1),"Attestation Id is missing"),version:()=>t(r.extract8BitUInt(),"Attestation version is missing"),curveId:()=>t(r.extract8BitUInt(),"Attestation curve ID is missing"),signAlgorithm:()=>t(r.extract8BitUInt(),"Attestation sign algorithm is missing"),publicKey:()=>t(r.extract8BitUInt(),"Attestation key length is missing").chain(e=>t(r.extractFieldByLength(e),"Attestation key is missing")),signature:()=>t(r.extract8BitUInt(),"Attestation signature length is missing").chain(e=>t(r.extractFieldByLength(e),"Attestation signature is missing"))}).map(e=>n(Uint8Array.from([...e.id,e.version,e.curveId,e.signAlgorithm,e.publicKey.length,...e.publicKey,e.signature.length,...e.signature]),!1))}).caseOf({Left:e=>o({error:e}),Right:e=>o({data:e})})})}}export{S as GetSeedIdCommand};
|
|
2
2
|
//# sourceMappingURL=GetSeedIdCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/GetSeedIdCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n bufferToHexaString,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { eitherSeqRecord } from \"@internal/utils/eitherSeqRecord\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetSeedIdCommandResponse = {\n readonly credential: {\n readonly version: number;\n readonly curveId: number;\n readonly signAlgorithm: number;\n readonly publicKey: string;\n };\n readonly signature: string;\n readonly attestation: string;\n};\n\nexport type GetSeedIdCommandArgs = {\n readonly challengeTLV: string;\n};\n\nexport class GetSeedIdCommand\n implements\n Command<\n GetSeedIdCommandResponse,\n GetSeedIdCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetSeedIdCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: GetSeedIdCommandArgs) {}\n getApdu(): Apdu {\n const { challengeTLV } = this.args;\n const getSeedIdArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: 0x00,\n p2: 0x00,\n };\n\n return new ApduBuilder(getSeedIdArgs)\n .addHexaStringToData(challengeTLV)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetSeedIdCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const required = <T>(value: T | undefined, errorMsg: string) =>\n Maybe.fromNullable(value).toEither(\n new InvalidStatusWordError(errorMsg),\n );\n\n return eitherSeqRecord({\n credential: () =>\n eitherSeqRecord({\n version: () =>\n required(parser.extract8BitUInt(), \"Version is missing\"),\n curveId: () =>\n required(parser.extract8BitUInt(), \"Curve ID is missing\"),\n signAlgorithm: () =>\n required(parser.extract8BitUInt(), \"Sign algorithm is missing\"),\n publicKey: () =>\n required(parser.extract8BitUInt(), \"Public key length is missing\")\n .chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Public key is missing\",\n ),\n )\n .map((str) => bufferToHexaString(str, false)),\n }),\n\n signature: () =>\n required(parser.extract8BitUInt(), \"Signature length is missing\")\n .chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Signature is missing\",\n ),\n )\n .map((str) => bufferToHexaString(str, false)),\n\n attestation: () =>\n eitherSeqRecord({\n id: () =>\n required(\n parser.extractFieldByLength(0x01),\n \"Attestation Id is missing\",\n ),\n version: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation version is missing\",\n ),\n curveId: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation curve ID is missing\",\n ),\n signAlgorithm: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation sign algorithm is missing\",\n ),\n publicKey: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation key length is missing\",\n ).chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Attestation key is missing\",\n ),\n ),\n signature: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation signature length is missing\",\n ).chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Attestation signature is missing\",\n ),\n ),\n }).map((attestation) =>\n bufferToHexaString(\n Uint8Array.from([\n ...attestation.id,\n attestation.version,\n attestation.curveId,\n attestation.signAlgorithm,\n attestation.publicKey.length,\n ...attestation.publicKey,\n attestation.signature.length,\n ...attestation.signature,\n ]),\n false,\n ),\n ),\n }).caseOf({\n Left: (error) => CommandResultFactory({ error }),\n Right: (data) => CommandResultFactory({ data }),\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAEA,sBAAAC,EAGA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OAAS,mBAAAC,MAAuB,kCAEhC,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAiBA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n bufferToHexaString,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { eitherSeqRecord } from \"@internal/utils/eitherSeqRecord\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetSeedIdCommandResponse = {\n readonly credential: {\n readonly version: number;\n readonly curveId: number;\n readonly signAlgorithm: number;\n readonly publicKey: string;\n };\n readonly signature: string;\n readonly attestation: string;\n};\n\nexport type GetSeedIdCommandArgs = {\n readonly challengeTLV: string;\n};\n\nexport class GetSeedIdCommand\n implements\n Command<\n GetSeedIdCommandResponse,\n GetSeedIdCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"getSeedId\";\n private readonly errorHelper = new CommandErrorHelper<\n GetSeedIdCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: GetSeedIdCommandArgs) {}\n getApdu(): Apdu {\n const { challengeTLV } = this.args;\n const getSeedIdArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x05,\n p1: 0x00,\n p2: 0x00,\n };\n\n return new ApduBuilder(getSeedIdArgs)\n .addHexaStringToData(challengeTLV)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetSeedIdCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const required = <T>(value: T | undefined, errorMsg: string) =>\n Maybe.fromNullable(value).toEither(\n new InvalidStatusWordError(errorMsg),\n );\n\n return eitherSeqRecord({\n credential: () =>\n eitherSeqRecord({\n version: () =>\n required(parser.extract8BitUInt(), \"Version is missing\"),\n curveId: () =>\n required(parser.extract8BitUInt(), \"Curve ID is missing\"),\n signAlgorithm: () =>\n required(parser.extract8BitUInt(), \"Sign algorithm is missing\"),\n publicKey: () =>\n required(parser.extract8BitUInt(), \"Public key length is missing\")\n .chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Public key is missing\",\n ),\n )\n .map((str) => bufferToHexaString(str, false)),\n }),\n\n signature: () =>\n required(parser.extract8BitUInt(), \"Signature length is missing\")\n .chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Signature is missing\",\n ),\n )\n .map((str) => bufferToHexaString(str, false)),\n\n attestation: () =>\n eitherSeqRecord({\n id: () =>\n required(\n parser.extractFieldByLength(0x01),\n \"Attestation Id is missing\",\n ),\n version: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation version is missing\",\n ),\n curveId: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation curve ID is missing\",\n ),\n signAlgorithm: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation sign algorithm is missing\",\n ),\n publicKey: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation key length is missing\",\n ).chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Attestation key is missing\",\n ),\n ),\n signature: () =>\n required(\n parser.extract8BitUInt(),\n \"Attestation signature length is missing\",\n ).chain((length) =>\n required(\n parser.extractFieldByLength(length),\n \"Attestation signature is missing\",\n ),\n ),\n }).map((attestation) =>\n bufferToHexaString(\n Uint8Array.from([\n ...attestation.id,\n attestation.version,\n attestation.curveId,\n attestation.signAlgorithm,\n attestation.publicKey.length,\n ...attestation.publicKey,\n attestation.signature.length,\n ...attestation.signature,\n ]),\n false,\n ),\n ),\n }).caseOf({\n Left: (error) => CommandResultFactory({ error }),\n Right: (data) => CommandResultFactory({ data }),\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAEA,sBAAAC,EAGA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OAAS,mBAAAC,MAAuB,kCAEhC,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAiBA,MAAMC,CAOb,CAOE,YAA6BC,EAA4B,CAA5B,UAAAA,CAA6B,CANjD,KAAO,YACC,YAAc,IAAIN,EAGjCG,EAAoBC,CAAiC,EAGvD,SAAgB,CACd,KAAM,CAAE,aAAAG,CAAa,EAAI,KAAK,KACxBC,EAAiC,CACrC,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAEA,OAAO,IAAIb,EAAYa,CAAa,EACjC,oBAAoBD,CAAY,EAChC,MAAM,CACX,CAEA,cACEE,EAC0E,CAC1E,OAAOR,EAAM,aACX,KAAK,YAAY,SAASQ,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAId,EAAWa,CAAY,EAEpCE,EAAW,CAAIC,EAAsBC,IACzCZ,EAAM,aAAaW,CAAK,EAAE,SACxB,IAAIb,EAAuBc,CAAQ,CACrC,EAEF,OAAOX,EAAgB,CACrB,WAAY,IACVA,EAAgB,CACd,QAAS,IACPS,EAASD,EAAO,gBAAgB,EAAG,oBAAoB,EACzD,QAAS,IACPC,EAASD,EAAO,gBAAgB,EAAG,qBAAqB,EAC1D,cAAe,IACbC,EAASD,EAAO,gBAAgB,EAAG,2BAA2B,EAChE,UAAW,IACTC,EAASD,EAAO,gBAAgB,EAAG,8BAA8B,EAC9D,MAAOI,GACNH,EACED,EAAO,qBAAqBI,CAAM,EAClC,uBACF,CACF,EACC,IAAKC,GAAQlB,EAAmBkB,EAAK,EAAK,CAAC,CAClD,CAAC,EAEH,UAAW,IACTJ,EAASD,EAAO,gBAAgB,EAAG,6BAA6B,EAC7D,MAAOI,GACNH,EACED,EAAO,qBAAqBI,CAAM,EAClC,sBACF,CACF,EACC,IAAKC,GAAQlB,EAAmBkB,EAAK,EAAK,CAAC,EAEhD,YAAa,IACXb,EAAgB,CACd,GAAI,IACFS,EACED,EAAO,qBAAqB,CAAI,EAChC,2BACF,EACF,QAAS,IACPC,EACED,EAAO,gBAAgB,EACvB,gCACF,EACF,QAAS,IACPC,EACED,EAAO,gBAAgB,EACvB,iCACF,EACF,cAAe,IACbC,EACED,EAAO,gBAAgB,EACvB,uCACF,EACF,UAAW,IACTC,EACED,EAAO,gBAAgB,EACvB,mCACF,EAAE,MAAOI,GACPH,EACED,EAAO,qBAAqBI,CAAM,EAClC,4BACF,CACF,EACF,UAAW,IACTH,EACED,EAAO,gBAAgB,EACvB,yCACF,EAAE,MAAOI,GACPH,EACED,EAAO,qBAAqBI,CAAM,EAClC,kCACF,CACF,CACJ,CAAC,EAAE,IAAKE,GACNnB,EACE,WAAW,KAAK,CACd,GAAGmB,EAAY,GACfA,EAAY,QACZA,EAAY,QACZA,EAAY,cACZA,EAAY,UAAU,OACtB,GAAGA,EAAY,UACfA,EAAY,UAAU,OACtB,GAAGA,EAAY,SACjB,CAAC,EACD,EACF,CACF,CACJ,CAAC,EAAE,OAAO,CACR,KAAOC,GAAUnB,EAAqB,CAAE,MAAAmB,CAAM,CAAC,EAC/C,MAAQC,GAASpB,EAAqB,CAAE,KAAAoB,CAAK,CAAC,CAChD,CAAC,CACH,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "bufferToHexaString", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "eitherSeqRecord", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "GetSeedIdCommand", "args", "challengeTLV", "getSeedIdArgs", "apduResponse", "parser", "required", "value", "errorMsg", "length", "str", "attestation", "error", "data"]
|
|
7
7
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{CommandResultFactory as
|
|
1
|
+
import{CommandResultFactory as s,InvalidStatusWordError as c}from"@ledgerhq/device-management-kit";import{hexaStringToBuffer as n}from"@ledgerhq/device-management-kit";import{GetSeedIdCommand as r}from"./GetSeedIdCommand";describe("GetSeedIdCommand",()=>{const o="01020304";describe("name",()=>{it("should be 'getSeedId'",()=>{const e=new r({challengeTLV:o});expect(e.name).toBe("getSeedId")})}),it("should build the correct APDU",()=>{const a=new r({challengeTLV:o}).getApdu(),t=n(o);expect(a.getRawApdu()).toEqual(Uint8Array.from([224,5,0,0,t.length,...t]))}),it("should parse the response correctly",()=>{const e=new r({challengeTLV:o}),a=n(`
|
|
2
2
|
01 02 03
|
|
3
3
|
06
|
|
4
4
|
05 06 07 08 09 0a
|
|
@@ -11,7 +11,7 @@ import{CommandResultFactory as n,InvalidStatusWordError as c}from"@ledgerhq/devi
|
|
|
11
11
|
05
|
|
12
12
|
2e 2f 30 31 32
|
|
13
13
|
12 13 14
|
|
14
|
-
`.replace(/\s+/g,"")),e
|
|
14
|
+
`.replace(/\s+/g,"")),t=e.parseResponse({statusCode:Uint8Array.from([144,0]),data:a});expect(t).toStrictEqual(s({data:{credential:{version:1,curveId:2,signAlgorithm:3,publicKey:"05060708090a"},signature:"161718191a",attestation:"1b0102030720212223242526052e2f303132"}}))}),it("should parsing error response",()=>{const e=new r({challengeTLV:o}),a=n(`
|
|
15
15
|
01 02 03
|
|
16
16
|
06
|
|
17
17
|
05
|
|
@@ -23,5 +23,5 @@ import{CommandResultFactory as n,InvalidStatusWordError as c}from"@ledgerhq/devi
|
|
|
23
23
|
20 21 22 23 24 25 26
|
|
24
24
|
05
|
|
25
25
|
2e 2f 30 31 32
|
|
26
|
-
`.replace(/\s+/g,"")),e
|
|
26
|
+
`.replace(/\s+/g,"")),t=e.parseResponse({statusCode:Uint8Array.from([144,0]),data:a});expect(t).toStrictEqual(s({error:expect.any(c)}))})});
|
|
27
27
|
//# sourceMappingURL=GetSeedIdCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/GetSeedIdCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\n\nimport { GetSeedIdCommand } from \"./GetSeedIdCommand\";\n\ndescribe(\"GetSeedIdCommand\", () => {\n const mockedChallenge = \"01020304\";\n\n it(\"should build the correct APDU\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n const challengeBytes = hexaStringToBuffer(mockedChallenge)!;\n expect(apdu.getRawApdu()).toEqual(\n Uint8Array.from([\n 0xe0, // CLA\n 0x05, // INS\n 0x00, // P1\n 0x00, // P2\n challengeBytes.length, // Lc\n ...challengeBytes, // CData\n ]),\n );\n });\n\n it(\"should parse the response correctly\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n const mockedResponse = hexaStringToBuffer(\n `\n 01 02 03\n 06\n 05 06 07 08 09 0a\n 05\n 16 17 18 19 1a\n 1b\n 01 02 03\n 07\n 20 21 22 23 24 25 26\n 05\n 2e 2f 30 31 32\n 12 13 14\n `.replace(/\\s+/g, \"\"), // (the last three bytes should be ignored)\n )!;\n\n // WHEN\n const result = command.parseResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: mockedResponse,\n });\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n credential: {\n version: 1,\n curveId: 2,\n signAlgorithm: 3,\n publicKey: \"05060708090a\",\n },\n signature: \"161718191a\",\n attestation: \"1b0102030720212223242526052e2f303132\",\n },\n }),\n );\n });\n\n it(\"should parsing error response\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n const mockedResponse = hexaStringToBuffer(\n `\n 01 02 03\n 06\n 05\n 05\n 16 17 18 19 1a\n 1b\n 01 02 03\n 07\n 20 21 22 23 24 25 26\n 05\n 2e 2f 30 31 32\n `.replace(/\\s+/g, \"\"),\n )!;\n\n // WHEN\n const result = command.parseResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: mockedResponse,\n });\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: expect.any(InvalidStatusWordError), // (That's not an assignment to `any` maybe an eslint bug)\n }),\n );\n });\n});\n"],
|
|
5
|
-
"mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,kCAEnC,OAAS,oBAAAC,MAAwB,qBAEjC,SAAS,mBAAoB,IAAM,CACjC,MAAMC,EAAkB,WAExB,GAAG,gCAAiC,IAAM,CAOxC,MAAMC,EALU,
|
|
6
|
-
"names": ["CommandResultFactory", "InvalidStatusWordError", "hexaStringToBuffer", "GetSeedIdCommand", "mockedChallenge", "
|
|
4
|
+
"sourcesContent": ["import {\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\n\nimport { GetSeedIdCommand } from \"./GetSeedIdCommand\";\n\ndescribe(\"GetSeedIdCommand\", () => {\n const mockedChallenge = \"01020304\";\n\n describe(\"name\", () => {\n it(\"should be 'getSeedId'\", () => {\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n expect(command.name).toBe(\"getSeedId\");\n });\n });\n\n it(\"should build the correct APDU\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n\n // WHEN\n const apdu = command.getApdu();\n\n // THEN\n const challengeBytes = hexaStringToBuffer(mockedChallenge)!;\n expect(apdu.getRawApdu()).toEqual(\n Uint8Array.from([\n 0xe0, // CLA\n 0x05, // INS\n 0x00, // P1\n 0x00, // P2\n challengeBytes.length, // Lc\n ...challengeBytes, // CData\n ]),\n );\n });\n\n it(\"should parse the response correctly\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n const mockedResponse = hexaStringToBuffer(\n `\n 01 02 03\n 06\n 05 06 07 08 09 0a\n 05\n 16 17 18 19 1a\n 1b\n 01 02 03\n 07\n 20 21 22 23 24 25 26\n 05\n 2e 2f 30 31 32\n 12 13 14\n `.replace(/\\s+/g, \"\"), // (the last three bytes should be ignored)\n )!;\n\n // WHEN\n const result = command.parseResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: mockedResponse,\n });\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n data: {\n credential: {\n version: 1,\n curveId: 2,\n signAlgorithm: 3,\n publicKey: \"05060708090a\",\n },\n signature: \"161718191a\",\n attestation: \"1b0102030720212223242526052e2f303132\",\n },\n }),\n );\n });\n\n it(\"should parsing error response\", () => {\n // GIVEN\n const command = new GetSeedIdCommand({\n challengeTLV: mockedChallenge,\n });\n const mockedResponse = hexaStringToBuffer(\n `\n 01 02 03\n 06\n 05\n 05\n 16 17 18 19 1a\n 1b\n 01 02 03\n 07\n 20 21 22 23 24 25 26\n 05\n 2e 2f 30 31 32\n `.replace(/\\s+/g, \"\"),\n )!;\n\n // WHEN\n const result = command.parseResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: mockedResponse,\n });\n\n // THEN\n expect(result).toStrictEqual(\n CommandResultFactory({\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n error: expect.any(InvalidStatusWordError), // (That's not an assignment to `any` maybe an eslint bug)\n }),\n );\n });\n});\n"],
|
|
5
|
+
"mappings": "AAAA,OACE,wBAAAA,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,kCAEnC,OAAS,oBAAAC,MAAwB,qBAEjC,SAAS,mBAAoB,IAAM,CACjC,MAAMC,EAAkB,WAExB,SAAS,OAAQ,IAAM,CACrB,GAAG,wBAAyB,IAAM,CAChC,MAAMC,EAAU,IAAIF,EAAiB,CACnC,aAAcC,CAChB,CAAC,EACD,OAAOC,EAAQ,IAAI,EAAE,KAAK,WAAW,CACvC,CAAC,CACH,CAAC,EAED,GAAG,gCAAiC,IAAM,CAOxC,MAAMC,EALU,IAAIH,EAAiB,CACnC,aAAcC,CAChB,CAAC,EAGoB,QAAQ,EAGvBG,EAAiBL,EAAmBE,CAAe,EACzD,OAAOE,EAAK,WAAW,CAAC,EAAE,QACxB,WAAW,KAAK,CACd,IACA,EACA,EACA,EACAC,EAAe,OACf,GAAGA,CACL,CAAC,CACH,CACF,CAAC,EAED,GAAG,sCAAuC,IAAM,CAE9C,MAAMF,EAAU,IAAIF,EAAiB,CACnC,aAAcC,CAChB,CAAC,EACKI,EAAiBN,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAaE,QAAQ,OAAQ,EAAE,CACtB,EAGMO,EAASJ,EAAQ,cAAc,CACnC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMG,CACR,CAAC,EAGD,OAAOC,CAAM,EAAE,cACbT,EAAqB,CACnB,KAAM,CACJ,WAAY,CACV,QAAS,EACT,QAAS,EACT,cAAe,EACf,UAAW,cACb,EACA,UAAW,aACX,YAAa,sCACf,CACF,CAAC,CACH,CACF,CAAC,EAED,GAAG,gCAAiC,IAAM,CAExC,MAAMK,EAAU,IAAIF,EAAiB,CACnC,aAAcC,CAChB,CAAC,EACKI,EAAiBN,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAYE,QAAQ,OAAQ,EAAE,CACtB,EAGMO,EAASJ,EAAQ,cAAc,CACnC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMG,CACR,CAAC,EAGD,OAAOC,CAAM,EAAE,cACbT,EAAqB,CAEnB,MAAO,OAAO,IAAIC,CAAsB,CAC1C,CAAC,CACH,CACF,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["CommandResultFactory", "InvalidStatusWordError", "hexaStringToBuffer", "GetSeedIdCommand", "mockedChallenge", "command", "apdu", "challengeBytes", "mockedResponse", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as t,ApduParser as s,CommandResultFactory as o,InvalidStatusWordError as d}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as m}from"@ledgerhq/signer-utils";import{Maybe as i}from"purify-ts";import{LEDGER_SYNC_ERRORS as p,LedgerKeyringProtocolErrorFactory as a}from"./utils/ledgerKeyringProtocolErrors";class c{errorHelper=new m(p,a);getApdu(){const r={cla:224,ins:3,p1:0,p2:0};return new t(r).build()}parseResponse(r){return i.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new s(r).encodeToString(r.data);return e?o({data:{version:e}}):o({error:new d("Version is missing")})})}}export{c as GetVersionCommand};
|
|
1
|
+
import{ApduBuilder as t,ApduParser as s,CommandResultFactory as o,InvalidStatusWordError as d}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as m}from"@ledgerhq/signer-utils";import{Maybe as i}from"purify-ts";import{LEDGER_SYNC_ERRORS as p,LedgerKeyringProtocolErrorFactory as a}from"./utils/ledgerKeyringProtocolErrors";class c{name="getVersion";errorHelper=new m(p,a);getApdu(){const r={cla:224,ins:3,p1:0,p2:0};return new t(r).build()}parseResponse(r){return i.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new s(r).encodeToString(r.data);return e?o({data:{version:e}}):o({error:new d("Version is missing")})})}}export{c as GetVersionCommand};
|
|
2
2
|
//# sourceMappingURL=GetVersionCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/GetVersionCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type GetVersionCommandResponse } from \"@api/app-binder/GetVersionCommandTypes\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetVersionCommandArgs = undefined;\n\nexport class GetVersionCommand\n implements\n Command<\n GetVersionCommandResponse,\n GetVersionCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n GetVersionCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getVersionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getVersionArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetVersionCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const version = parser.encodeToString(apduResponse.data);\n\n if (!version) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Version is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { version },\n });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAItB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAIA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n type ApduBuilderArgs,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport { type GetVersionCommandResponse } from \"@api/app-binder/GetVersionCommandTypes\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type GetVersionCommandArgs = undefined;\n\nexport class GetVersionCommand\n implements\n Command<\n GetVersionCommandResponse,\n GetVersionCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"getVersion\";\n private readonly errorHelper = new CommandErrorHelper<\n GetVersionCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const getVersionArgs: ApduBuilderArgs = {\n cla: 0xe0,\n ins: 0x03,\n p1: 0x00,\n p2: 0x00,\n };\n\n const builder = new ApduBuilder(getVersionArgs);\n return builder.build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<GetVersionCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n\n const version = parser.encodeToString(apduResponse.data);\n\n if (!version) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(`Version is missing`),\n });\n }\n\n return CommandResultFactory({\n data: { version },\n });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EAEA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAItB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAIA,MAAMC,CAOb,CACW,KAAO,aACC,YAAc,IAAIJ,EAGjCE,EAAoBC,CAAiC,EAEvD,SAAgB,CACd,MAAME,EAAkC,CACtC,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,EAGA,OADgB,IAAIT,EAAYS,CAAc,EAC/B,MAAM,CACvB,CAEA,cACEC,EAC2E,CAC3E,OAAOL,EAAM,aACX,KAAK,YAAY,SAASK,CAAY,CACxC,EAAE,cAAc,IAAM,CAGpB,MAAMC,EAFS,IAAIV,EAAWS,CAAY,EAEnB,eAAeA,EAAa,IAAI,EAEvD,OAAKC,EAMET,EAAqB,CAC1B,KAAM,CAAE,QAAAS,CAAQ,CAClB,CAAC,EAPQT,EAAqB,CAC1B,MAAO,IAAIC,EAAuB,oBAAoB,CACxD,CAAC,CAML,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "GetVersionCommand", "getVersionArgs", "apduResponse", "version"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as o,ApduParser as
|
|
1
|
+
import{ApduBuilder as o,ApduParser as n,CommandResultFactory as e,InvalidStatusWordError as t}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Maybe as a}from"purify-ts";import{LEDGER_SYNC_ERRORS as m,LedgerKeyringProtocolErrorFactory as p}from"./utils/ledgerKeyringProtocolErrors";class C{constructor(r){this.args=r}name="init";errorHelper=new d(m,p);getApdu(){const{publicKey:r}=this.args;return new o({cla:224,ins:6,p1:0,p2:0}).addBufferToData(r).build()}parseResponse(r){return a.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>new n(r).getUnparsedRemainingLength()!==0?e({error:new t("Unexpected response data for SetTrustedMemberCommand")}):e({data:void 0}))}}export{C as InitCommand};
|
|
2
2
|
//# sourceMappingURL=InitCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/InitCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type InitCommandResponse = void;\n\nexport type InitCommandArgs = {\n publicKey: Uint8Array;\n};\n\nexport class InitCommand\n implements\n Command<\n InitCommandResponse,\n InitCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n constructor(private readonly args: InitCommandArgs) {}\n\n private readonly errorHelper = new CommandErrorHelper<\n void,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const { publicKey } = this.args;\n\n return new ApduBuilder({ cla: 0xe0, ins: 0x06, p1: 0x00, p2: 0x00 })\n .addBufferToData(publicKey)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<InitCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n if (parser.getUnparsedRemainingLength() !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Unexpected response data for SetTrustedMemberCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: undefined });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type InitCommandResponse = void;\n\nexport type InitCommandArgs = {\n publicKey: Uint8Array;\n};\n\nexport class InitCommand\n implements\n Command<\n InitCommandResponse,\n InitCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"init\";\n constructor(private readonly args: InitCommandArgs) {}\n\n private readonly errorHelper = new CommandErrorHelper<\n void,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n getApdu(): Apdu {\n const { publicKey } = this.args;\n\n return new ApduBuilder({ cla: 0xe0, ins: 0x06, p1: 0x00, p2: 0x00 })\n .addBufferToData(publicKey)\n .build();\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<InitCommandResponse, LedgerKeyringProtocolErrorCodes> {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n if (parser.getUnparsedRemainingLength() !== 0) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"Unexpected response data for SetTrustedMemberCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: undefined });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAQA,MAAMC,CAOb,CAEE,YAA6BC,EAAuB,CAAvB,UAAAA,CAAwB,CAD5C,KAAO,OAGC,YAAc,IAAIL,EAGjCE,EAAoBC,CAAiC,EAEvD,SAAgB,CACd,KAAM,CAAE,UAAAG,CAAU,EAAI,KAAK,KAE3B,OAAO,IAAIV,EAAY,CAAE,IAAK,IAAM,IAAK,EAAM,GAAI,EAAM,GAAI,CAAK,CAAC,EAChE,gBAAgBU,CAAS,EACzB,MAAM,CACX,CAEA,cACEC,EACqE,CACrE,OAAON,EAAM,aACX,KAAK,YAAY,SAASM,CAAY,CACxC,EAAE,cAAc,IACC,IAAIV,EAAWU,CAAY,EAC/B,2BAA2B,IAAM,EACnCT,EAAqB,CAC1B,MAAO,IAAIC,EACT,sDACF,CACF,CAAC,EAEID,EAAqB,CAAE,KAAM,MAAU,CAAC,CAChD,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "InitCommand", "args", "publicKey", "apduResponse"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduResponse as
|
|
1
|
+
import{ApduResponse as i,InvalidStatusWordError as m,isSuccessCommandResult as n}from"@ledgerhq/device-management-kit";import{describe as c,expect as r,it as s}from"vitest";import{InitCommand as a}from"./InitCommand";const p=Uint8Array.from([2,...Array(32).fill(0)]),u=Uint8Array.from([240,202,204,26]),d=()=>({publicKey:p});c("InitCommand",()=>{c("name",()=>{s("should be 'init'",()=>{const o=new a(d());r(o.name).toBe("init")})}),c("getApdu()",()=>{s("builds correct APDU",()=>{const t=new a(d()).getApdu(),e=Uint8Array.from([224,6,0,0,33,2,...new Array(32).fill(0)]);r(t.getRawApdu()).toEqual(e)})}),c("parseResponse()",()=>{s("returns success when no data and SW=0x9000",()=>{const o=new a(d()),t=new i({statusCode:Uint8Array.from([144,0]),data:new Uint8Array([])}),e=o.parseResponse(t);r(n(e)).toBe(!0),n(e)&&r(e.data).toBeUndefined()}),s("errors on unexpected trailing data",()=>{const o=new a(d()),t=new i({statusCode:Uint8Array.from([144,0]),data:u}),e=o.parseResponse(t);r(n(e)).toBe(!1),n(e)||(r(e.error).toBeInstanceOf(m),r(e.error.originalError.message).toMatch("Unexpected response data"))}),s("maps SW errors to CommandResult error",()=>{const o=new a(d()),t=new i({statusCode:Uint8Array.from([106,134]),data:new Uint8Array([])}),e=o.parseResponse(t);if(r(n(e)).toBe(!1),!n(e))if("errorCode"in e.error)r(e.error.errorCode).toEqual("6a86");else throw new Error("Unexpected error type: missing errorCode")})})});
|
|
2
2
|
//# sourceMappingURL=InitCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/InitCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport {\n ApduResponse,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { InitCommand, type InitCommandArgs } from \"./InitCommand\";\n\nconst DUMMY_PUBKEY_HEX = Uint8Array.from([0x02, ...Array(32).fill(0x00)]);\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\nconst makeArgs = (): InitCommandArgs => ({ publicKey: DUMMY_PUBKEY_HEX });\n\ndescribe(\"InitCommand\", () => {\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x06,\n 0x00,\n 0x00,\n 0x21,\n 0x02,\n ...new Array(32).fill(0),\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns success when no data and SW=0x9000\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toBeUndefined();\n }\n });\n\n it(\"errors on unexpected trailing data\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: PLACEHOLDER_BYTES,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n expect((result.error.originalError as Error).message).toMatch(\n \"Unexpected response data\",\n );\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n if (\"errorCode\" in result.error) {\n expect(result.error.errorCode).toEqual(\"6a86\");\n } else {\n throw new Error(\"Unexpected error type: missing errorCode\");\n }\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AACA,OACE,gBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,MAAU,SAErC,OAAS,eAAAC,MAAyC,gBAElD,MAAMC,EAAmB,WAAW,KAAK,CAAC,EAAM,GAAG,MAAM,EAAE,EAAE,KAAK,CAAI,CAAC,CAAC,EAClEC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EAE5DC,EAAW,KAAwB,CAAE,UAAWF,CAAiB,GAEvEJ,EAAS,cAAe,IAAM,CAC5BA,EAAS,YAAa,IAAM,CAC1BE,EAAG,sBAAuB,IAAM,CAK9B,
|
|
6
|
-
"names": ["ApduResponse", "InvalidStatusWordError", "isSuccessCommandResult", "describe", "expect", "it", "InitCommand", "DUMMY_PUBKEY_HEX", "PLACEHOLDER_BYTES", "makeArgs", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-assignment */\nimport {\n ApduResponse,\n InvalidStatusWordError,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport { InitCommand, type InitCommandArgs } from \"./InitCommand\";\n\nconst DUMMY_PUBKEY_HEX = Uint8Array.from([0x02, ...Array(32).fill(0x00)]);\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\nconst makeArgs = (): InitCommandArgs => ({ publicKey: DUMMY_PUBKEY_HEX });\n\ndescribe(\"InitCommand\", () => {\n describe(\"name\", () => {\n it(\"should be 'init'\", () => {\n const cmd = new InitCommand(makeArgs());\n expect(cmd.name).toBe(\"init\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const expected = Uint8Array.from([\n 0xe0,\n 0x06,\n 0x00,\n 0x00,\n 0x21,\n 0x02,\n ...new Array(32).fill(0),\n ]);\n\n // then\n expect(apdu.getRawApdu()).toEqual(expected);\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns success when no data and SW=0x9000\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toBeUndefined();\n }\n });\n\n it(\"errors on unexpected trailing data\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: PLACEHOLDER_BYTES,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect(result.error).toBeInstanceOf(InvalidStatusWordError);\n expect((result.error.originalError as Error).message).toMatch(\n \"Unexpected response data\",\n );\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new InitCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array([]),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n if (\"errorCode\" in result.error) {\n expect(result.error.errorCode).toEqual(\"6a86\");\n } else {\n throw new Error(\"Unexpected error type: missing errorCode\");\n }\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AACA,OACE,gBAAAA,EACA,0BAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,MAAU,SAErC,OAAS,eAAAC,MAAyC,gBAElD,MAAMC,EAAmB,WAAW,KAAK,CAAC,EAAM,GAAG,MAAM,EAAE,EAAE,KAAK,CAAI,CAAC,CAAC,EAClEC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EAE5DC,EAAW,KAAwB,CAAE,UAAWF,CAAiB,GAEvEJ,EAAS,cAAe,IAAM,CAC5BA,EAAS,OAAQ,IAAM,CACrBE,EAAG,mBAAoB,IAAM,CAC3B,MAAMK,EAAM,IAAIJ,EAAYG,EAAS,CAAC,EACtCL,EAAOM,EAAI,IAAI,EAAE,KAAK,MAAM,CAC9B,CAAC,CACH,CAAC,EAEDP,EAAS,YAAa,IAAM,CAC1BE,EAAG,sBAAuB,IAAM,CAK9B,MAAMM,EAHM,IAAIL,EAAYG,EAAS,CAAC,EAGrB,QAAQ,EACnBG,EAAW,WAAW,KAAK,CAC/B,IACA,EACA,EACA,EACA,GACA,EACA,GAAG,IAAI,MAAM,EAAE,EAAE,KAAK,CAAC,CACzB,CAAC,EAGDR,EAAOO,EAAK,WAAW,CAAC,EAAE,QAAQC,CAAQ,CAC5C,CAAC,CACH,CAAC,EAEDT,EAAS,kBAAmB,IAAM,CAChCE,EAAG,6CAA8C,IAAM,CAErD,MAAMK,EAAM,IAAIJ,EAAYG,EAAS,CAAC,EAChCI,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKc,EAASJ,EAAI,cAAcG,CAAQ,EAGzCT,EAAOF,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAI,EAC5CZ,EAAuBY,CAAM,GAC/BV,EAAOU,EAAO,IAAI,EAAE,cAAc,CAEtC,CAAC,EAEDT,EAAG,qCAAsC,IAAM,CAE7C,MAAMK,EAAM,IAAIJ,EAAYG,EAAS,CAAC,EAChCI,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMQ,CACR,CAAC,EAGKM,EAASJ,EAAI,cAAcG,CAAQ,EAGzCT,EAAOF,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CZ,EAAuBY,CAAM,IAChCV,EAAOU,EAAO,KAAK,EAAE,eAAeb,CAAsB,EAC1DG,EAAQU,EAAO,MAAM,cAAwB,OAAO,EAAE,QACpD,0BACF,EAEJ,CAAC,EAEDT,EAAG,wCAAyC,IAAM,CAEhD,MAAMK,EAAM,IAAIJ,EAAYG,EAAS,CAAC,EAChCI,EAAW,IAAIb,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,WAAW,CAAC,CAAC,CACzB,CAAC,EAGKc,EAASJ,EAAI,cAAcG,CAAQ,EAIzC,GADAT,EAAOF,EAAuBY,CAAM,CAAC,EAAE,KAAK,EAAK,EAC7C,CAACZ,EAAuBY,CAAM,EAChC,GAAI,cAAeA,EAAO,MACxBV,EAAOU,EAAO,MAAM,SAAS,EAAE,QAAQ,MAAM,MAE7C,OAAM,IAAI,MAAM,0CAA0C,CAGhE,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["ApduResponse", "InvalidStatusWordError", "isSuccessCommandResult", "describe", "expect", "it", "InitCommand", "DUMMY_PUBKEY_HEX", "PLACEHOLDER_BYTES", "makeArgs", "cmd", "apdu", "expected", "response", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as
|
|
1
|
+
import{ApduBuilder as t,ApduParser as s,CommandResultFactory as a,InvalidStatusWordError as d}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as m}from"@ledgerhq/signer-utils";import{Maybe as p}from"purify-ts";import{LEDGER_SYNC_ERRORS as i,LedgerKeyringProtocolErrorFactory as l}from"./utils/ledgerKeyringProtocolErrors";class P{constructor(r){this.args=r}name="parseBlockSignature";errorHelper=new m(i,l);getApdu(){const{signature:r}=this.args;return new t({cla:224,ins:8,p1:2,p2:0}).addBufferToData(r).build()}parseResponse(r){return p.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new s(r),n=e.getUnparsedRemainingLength(),o=e.extractFieldByLength(n);return o?a({data:o}):a({error:new d("No data returned by ParseBlockSignatureCommand")})})}}export{P as ParseBlockSignatureCommand};
|
|
2
2
|
//# sourceMappingURL=ParseBlockSignatureCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/ParseBlockSignatureCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type ParseBlockSignatureCommandResponse = Uint8Array;\n\nexport type ParseBlockSignatureCommandArgs = { signature: Uint8Array };\n\nexport class ParseBlockSignatureCommand\n implements\n Command<\n ParseBlockSignatureCommandResponse,\n ParseBlockSignatureCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n ParseBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: ParseBlockSignatureCommandArgs) {}\n\n getApdu(): Apdu {\n const { signature } = this.args;\n return (\n new ApduBuilder({\n cla: 0xe0,\n ins: 0x08,\n p1: 0x02,\n p2: 0x00,\n })\n // raw signature chunk\n .addBufferToData(signature)\n .build()\n );\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n ParseBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by ParseBlockSignatureCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAMA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type ParseBlockSignatureCommandResponse = Uint8Array;\n\nexport type ParseBlockSignatureCommandArgs = { signature: Uint8Array };\n\nexport class ParseBlockSignatureCommand\n implements\n Command<\n ParseBlockSignatureCommandResponse,\n ParseBlockSignatureCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"parseBlockSignature\";\n private readonly errorHelper = new CommandErrorHelper<\n ParseBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: ParseBlockSignatureCommandArgs) {}\n\n getApdu(): Apdu {\n const { signature } = this.args;\n return (\n new ApduBuilder({\n cla: 0xe0,\n ins: 0x08,\n p1: 0x02,\n p2: 0x00,\n })\n // raw signature chunk\n .addBufferToData(signature)\n .build()\n );\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n ParseBlockSignatureCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by ParseBlockSignatureCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCAMA,MAAMC,CAOb,CAOE,YAA6BC,EAAsC,CAAtC,UAAAA,CAAuC,CAN3D,KAAO,sBACC,YAAc,IAAIL,EAGjCE,EAAoBC,CAAiC,EAIvD,SAAgB,CACd,KAAM,CAAE,UAAAG,CAAU,EAAI,KAAK,KAC3B,OACE,IAAIV,EAAY,CACd,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAI,CACN,CAAC,EAEE,gBAAgBU,CAAS,EACzB,MAAM,CAEb,CAEA,cACEC,EAIA,CACA,OAAON,EAAM,aACX,KAAK,YAAY,SAASM,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAIX,EAAWU,CAAY,EACpCE,EAAYD,EAAO,2BAA2B,EAC9CE,EAAUF,EAAO,qBAAqBC,CAAS,EACrD,OAAKC,EAOEZ,EAAqB,CAAE,KAAMY,CAAQ,CAAC,EANpCZ,EAAqB,CAC1B,MAAO,IAAIC,EACT,gDACF,CACF,CAAC,CAGL,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "ParseBlockSignatureCommand", "args", "signature", "apduResponse", "parser", "remaining", "payload"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduResponse as
|
|
1
|
+
import{ApduResponse as u,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{describe as m,expect as t,it as n}from"vitest";import{ParseBlockSignatureCommand as c}from"./ParseBlockSignatureCommand";const d=Uint8Array.from([10,11,12]),i=Uint8Array.from([240,202,204,26]);m("ParseBlockSignatureCommand",()=>{const a=()=>({signature:d});m("name",()=>{n("should be 'parseBlockSignature'",()=>{const r=new c(a());t(r.name).toBe("parseBlockSignature")})}),m("getApdu()",()=>{n("builds correct APDU for signature chunk",()=>{const e=new c(a()).getApdu().getRawApdu();t(e).toEqual(Uint8Array.from([224,8,2,0,d.length,...d]))})}),m("parseResponse()",()=>{n("returns raw TLV payload on success",()=>{const r=new c(a()),s=new u({statusCode:Uint8Array.from([144,0]),data:i}),e=r.parseResponse(s);t(o(e)).toBe(!0),o(e)&&t(e.data).toEqual(i)}),n("maps SW errors to CommandResult error",()=>{const r=new c(a()),s=new u({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),e=r.parseResponse(s);t(o(e)).toBe(!1),o(e)||t(e.error.errorCode).toBe("6a86")}),n("errors when no TLV data returned",()=>{const r=new c(a()),s=new u({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),e=r.parseResponse(s);t(o(e)).toBe(!0),o(e)&&t(e.data).toEqual(new Uint8Array([]))})})});
|
|
2
2
|
//# sourceMappingURL=ParseBlockSignatureCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/ParseBlockSignatureCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n ParseBlockSignatureCommand,\n type ParseBlockSignatureCommandArgs,\n} from \"./ParseBlockSignatureCommand\";\n\nconst DUMMY_SIGNATURE = Uint8Array.from([0x0a, 0x0b, 0x0c]);\n\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"ParseBlockSignatureCommand\", () => {\n const makeArgs = (): ParseBlockSignatureCommandArgs => ({\n signature: DUMMY_SIGNATURE,\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU for signature chunk\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const raw = apdu.getRawApdu();\n\n // then\n expect(raw).toEqual(\n Uint8Array.from([\n 0xe0,\n 0x08,\n 0x02,\n 0x00,\n DUMMY_SIGNATURE.length,\n ...DUMMY_SIGNATURE,\n ]),\n );\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns raw TLV payload on success\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: PLACEHOLDER_BYTES,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(PLACEHOLDER_BYTES);\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"errors when no TLV data returned\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array([]));\n }\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "AAEA,OACE,gBAAAA,EACA,0BAAAC,MACK,kCACP,OAAS,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,MAAU,SAErC,OACE,8BAAAC,MAEK,+BAEP,MAAMC,EAAkB,WAAW,KAAK,CAAC,GAAM,GAAM,EAAI,CAAC,EAEpDC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EAElEL,EAAS,6BAA8B,IAAM,CAC3C,MAAMM,EAAW,KAAuC,CACtD,UAAWF,CACb,GAEAJ,EAAS,YAAa,IAAM,CAC1BE,EAAG,0CAA2C,IAAM,CAMlD,
|
|
6
|
-
"names": ["ApduResponse", "isSuccessCommandResult", "describe", "expect", "it", "ParseBlockSignatureCommand", "DUMMY_SIGNATURE", "PLACEHOLDER_BYTES", "makeArgs", "
|
|
4
|
+
"sourcesContent": ["/* eslint-disable @typescript-eslint/no-unsafe-member-access */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ApduResponse,\n isSuccessCommandResult,\n} from \"@ledgerhq/device-management-kit\";\nimport { describe, expect, it } from \"vitest\";\n\nimport {\n ParseBlockSignatureCommand,\n type ParseBlockSignatureCommandArgs,\n} from \"./ParseBlockSignatureCommand\";\n\nconst DUMMY_SIGNATURE = Uint8Array.from([0x0a, 0x0b, 0x0c]);\n\nconst PLACEHOLDER_BYTES = Uint8Array.from([0xf0, 0xca, 0xcc, 0x1a]);\n\ndescribe(\"ParseBlockSignatureCommand\", () => {\n const makeArgs = (): ParseBlockSignatureCommandArgs => ({\n signature: DUMMY_SIGNATURE,\n });\n\n describe(\"name\", () => {\n it(\"should be 'parseBlockSignature'\", () => {\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n expect(cmd.name).toBe(\"parseBlockSignature\");\n });\n });\n\n describe(\"getApdu()\", () => {\n it(\"builds correct APDU for signature chunk\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n\n // when\n const apdu = cmd.getApdu();\n const raw = apdu.getRawApdu();\n\n // then\n expect(raw).toEqual(\n Uint8Array.from([\n 0xe0,\n 0x08,\n 0x02,\n 0x00,\n DUMMY_SIGNATURE.length,\n ...DUMMY_SIGNATURE,\n ]),\n );\n });\n });\n\n describe(\"parseResponse()\", () => {\n it(\"returns raw TLV payload on success\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: PLACEHOLDER_BYTES,\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(PLACEHOLDER_BYTES);\n }\n });\n\n it(\"maps SW errors to CommandResult error\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x6a, 0x86]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(false);\n if (!isSuccessCommandResult(result)) {\n expect((result.error as any).errorCode).toBe(\"6a86\");\n }\n });\n\n it(\"errors when no TLV data returned\", () => {\n // given\n const cmd = new ParseBlockSignatureCommand(makeArgs());\n const response = new ApduResponse({\n statusCode: Uint8Array.from([0x90, 0x00]),\n data: new Uint8Array(),\n });\n\n // when\n const result = cmd.parseResponse(response);\n\n // then\n expect(isSuccessCommandResult(result)).toBe(true);\n if (isSuccessCommandResult(result)) {\n expect(result.data).toEqual(new Uint8Array([]));\n }\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "AAEA,OACE,gBAAAA,EACA,0BAAAC,MACK,kCACP,OAAS,YAAAC,EAAU,UAAAC,EAAQ,MAAAC,MAAU,SAErC,OACE,8BAAAC,MAEK,+BAEP,MAAMC,EAAkB,WAAW,KAAK,CAAC,GAAM,GAAM,EAAI,CAAC,EAEpDC,EAAoB,WAAW,KAAK,CAAC,IAAM,IAAM,IAAM,EAAI,CAAC,EAElEL,EAAS,6BAA8B,IAAM,CAC3C,MAAMM,EAAW,KAAuC,CACtD,UAAWF,CACb,GAEAJ,EAAS,OAAQ,IAAM,CACrBE,EAAG,kCAAmC,IAAM,CAC1C,MAAMK,EAAM,IAAIJ,EAA2BG,EAAS,CAAC,EACrDL,EAAOM,EAAI,IAAI,EAAE,KAAK,qBAAqB,CAC7C,CAAC,CACH,CAAC,EAEDP,EAAS,YAAa,IAAM,CAC1BE,EAAG,0CAA2C,IAAM,CAMlD,MAAMM,EAJM,IAAIL,EAA2BG,EAAS,CAAC,EAGpC,QAAQ,EACR,WAAW,EAG5BL,EAAOO,CAAG,EAAE,QACV,WAAW,KAAK,CACd,IACA,EACA,EACA,EACAJ,EAAgB,OAChB,GAAGA,CACL,CAAC,CACH,CACF,CAAC,CACH,CAAC,EAEDJ,EAAS,kBAAmB,IAAM,CAChCE,EAAG,qCAAsC,IAAM,CAE7C,MAAMK,EAAM,IAAIJ,EAA2BG,EAAS,CAAC,EAC/CG,EAAW,IAAIX,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAMO,CACR,CAAC,EAGKK,EAASH,EAAI,cAAcE,CAAQ,EAGzCR,EAAOF,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAI,EAC5CX,EAAuBW,CAAM,GAC/BT,EAAOS,EAAO,IAAI,EAAE,QAAQL,CAAiB,CAEjD,CAAC,EAEDH,EAAG,wCAAyC,IAAM,CAEhD,MAAMK,EAAM,IAAIJ,EAA2BG,EAAS,CAAC,EAC/CG,EAAW,IAAIX,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,GAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKY,EAASH,EAAI,cAAcE,CAAQ,EAGzCR,EAAOF,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAK,EAC5CX,EAAuBW,CAAM,GAChCT,EAAQS,EAAO,MAAc,SAAS,EAAE,KAAK,MAAM,CAEvD,CAAC,EAEDR,EAAG,mCAAoC,IAAM,CAE3C,MAAMK,EAAM,IAAIJ,EAA2BG,EAAS,CAAC,EAC/CG,EAAW,IAAIX,EAAa,CAChC,WAAY,WAAW,KAAK,CAAC,IAAM,CAAI,CAAC,EACxC,KAAM,IAAI,UACZ,CAAC,EAGKY,EAASH,EAAI,cAAcE,CAAQ,EAGzCR,EAAOF,EAAuBW,CAAM,CAAC,EAAE,KAAK,EAAI,EAC5CX,EAAuBW,CAAM,GAC/BT,EAAOS,EAAO,IAAI,EAAE,QAAQ,IAAI,WAAW,CAAC,CAAC,CAAC,CAElD,CAAC,CACH,CAAC,CACH,CAAC",
|
|
6
|
+
"names": ["ApduResponse", "isSuccessCommandResult", "describe", "expect", "it", "ParseBlockSignatureCommand", "DUMMY_SIGNATURE", "PLACEHOLDER_BYTES", "makeArgs", "cmd", "raw", "response", "result"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduBuilder as t,ApduParser as s,CommandResultFactory as n,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Maybe as p}from"purify-ts";import{LEDGER_SYNC_ERRORS as
|
|
1
|
+
import{ApduBuilder as t,ApduParser as s,CommandResultFactory as n,InvalidStatusWordError as m}from"@ledgerhq/device-management-kit";import{CommandErrorHelper as d}from"@ledgerhq/signer-utils";import{Maybe as p}from"purify-ts";import{LEDGER_SYNC_ERRORS as l,LedgerKeyringProtocolErrorFactory as i}from"./utils/ledgerKeyringProtocolErrors";class P{constructor(r){this.args=r}name="parseSingle";errorHelper=new d(l,i);getApdu(){const{command:r,outputTrustedParam:e=!0}=this.args;return new t({cla:224,ins:8,p1:1,p2:e?1:0}).addBufferToData(r).build()}parseResponse(r){return p.fromNullable(this.errorHelper.getError(r)).orDefaultLazy(()=>{const e=new s(r),a=e.getUnparsedRemainingLength(),o=e.extractFieldByLength(a);return o?n({data:o}):n({error:new m("No data returned by ParseSingleCommand")})})}}export{P as ParseSingleCommand};
|
|
2
2
|
//# sourceMappingURL=ParseStreamBlockCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/internal/app-binder/command/ParseStreamBlockCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type ParseSingleCommandArgs = {\n command: Uint8Array;\n outputTrustedParam?: boolean;\n};\n\nexport type ParseSingleCommandResponse = Uint8Array;\n\nexport class ParseSingleCommand\n implements\n Command<\n ParseSingleCommandResponse,\n ParseSingleCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n private readonly errorHelper = new CommandErrorHelper<\n ParseSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: ParseSingleCommandArgs) {}\n\n getApdu(): Apdu {\n const { command, outputTrustedParam = true } = this.args;\n return (\n new ApduBuilder({\n cla: 0xe0,\n ins: 0x08,\n p1: 0x01,\n p2: outputTrustedParam ? 0x01 : 0x00,\n })\n // raw command chunk\n .addBufferToData(command)\n .build()\n );\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n ParseSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by ParseSingleCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCASA,MAAMC,CAOb,
|
|
4
|
+
"sourcesContent": ["import {\n type Apdu,\n ApduBuilder,\n ApduParser,\n type ApduResponse,\n type Command,\n type CommandResult,\n CommandResultFactory,\n InvalidStatusWordError,\n} from \"@ledgerhq/device-management-kit\";\nimport { CommandErrorHelper } from \"@ledgerhq/signer-utils\";\nimport { Maybe } from \"purify-ts\";\n\nimport {\n LEDGER_SYNC_ERRORS,\n type LedgerKeyringProtocolErrorCodes,\n LedgerKeyringProtocolErrorFactory,\n} from \"./utils/ledgerKeyringProtocolErrors\";\n\nexport type ParseSingleCommandArgs = {\n command: Uint8Array;\n outputTrustedParam?: boolean;\n};\n\nexport type ParseSingleCommandResponse = Uint8Array;\n\nexport class ParseSingleCommand\n implements\n Command<\n ParseSingleCommandResponse,\n ParseSingleCommandArgs,\n LedgerKeyringProtocolErrorCodes\n >\n{\n readonly name = \"parseSingle\";\n private readonly errorHelper = new CommandErrorHelper<\n ParseSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n >(LEDGER_SYNC_ERRORS, LedgerKeyringProtocolErrorFactory);\n\n constructor(private readonly args: ParseSingleCommandArgs) {}\n\n getApdu(): Apdu {\n const { command, outputTrustedParam = true } = this.args;\n return (\n new ApduBuilder({\n cla: 0xe0,\n ins: 0x08,\n p1: 0x01,\n p2: outputTrustedParam ? 0x01 : 0x00,\n })\n // raw command chunk\n .addBufferToData(command)\n .build()\n );\n }\n\n parseResponse(\n apduResponse: ApduResponse,\n ): CommandResult<\n ParseSingleCommandResponse,\n LedgerKeyringProtocolErrorCodes\n > {\n return Maybe.fromNullable(\n this.errorHelper.getError(apduResponse),\n ).orDefaultLazy(() => {\n const parser = new ApduParser(apduResponse);\n const remaining = parser.getUnparsedRemainingLength();\n const payload = parser.extractFieldByLength(remaining);\n if (!payload) {\n return CommandResultFactory({\n error: new InvalidStatusWordError(\n \"No data returned by ParseSingleCommand\",\n ),\n });\n }\n return CommandResultFactory({ data: payload });\n });\n }\n}\n"],
|
|
5
|
+
"mappings": "AAAA,OAEE,eAAAA,EACA,cAAAC,EAIA,wBAAAC,EACA,0BAAAC,MACK,kCACP,OAAS,sBAAAC,MAA0B,yBACnC,OAAS,SAAAC,MAAa,YAEtB,OACE,sBAAAC,EAEA,qCAAAC,MACK,sCASA,MAAMC,CAOb,CAOE,YAA6BC,EAA8B,CAA9B,UAAAA,CAA+B,CANnD,KAAO,cACC,YAAc,IAAIL,EAGjCE,EAAoBC,CAAiC,EAIvD,SAAgB,CACd,KAAM,CAAE,QAAAG,EAAS,mBAAAC,EAAqB,EAAK,EAAI,KAAK,KACpD,OACE,IAAIX,EAAY,CACd,IAAK,IACL,IAAK,EACL,GAAI,EACJ,GAAIW,EAAqB,EAAO,CAClC,CAAC,EAEE,gBAAgBD,CAAO,EACvB,MAAM,CAEb,CAEA,cACEE,EAIA,CACA,OAAOP,EAAM,aACX,KAAK,YAAY,SAASO,CAAY,CACxC,EAAE,cAAc,IAAM,CACpB,MAAMC,EAAS,IAAIZ,EAAWW,CAAY,EACpCE,EAAYD,EAAO,2BAA2B,EAC9CE,EAAUF,EAAO,qBAAqBC,CAAS,EACrD,OAAKC,EAOEb,EAAqB,CAAE,KAAMa,CAAQ,CAAC,EANpCb,EAAqB,CAC1B,MAAO,IAAIC,EACT,wCACF,CACF,CAAC,CAGL,CAAC,CACH,CACF",
|
|
6
6
|
"names": ["ApduBuilder", "ApduParser", "CommandResultFactory", "InvalidStatusWordError", "CommandErrorHelper", "Maybe", "LEDGER_SYNC_ERRORS", "LedgerKeyringProtocolErrorFactory", "ParseSingleCommand", "args", "command", "outputTrustedParam", "apduResponse", "parser", "remaining", "payload"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{ApduResponse as
|
|
1
|
+
import{ApduResponse as u,isSuccessCommandResult as o}from"@ledgerhq/device-management-kit";import{describe as m,expect as t,it as n}from"vitest";import{ParseSingleCommand as d}from"./ParseStreamBlockCommand";const c=Uint8Array.from([1,2,3]),p=Uint8Array.from([240,202,204,26]);m("ParseSingleCommand",()=>{const a=(r=!1)=>({command:c,outputTrustedParam:r});m("name",()=>{n("should be 'parseSingle'",()=>{const r=new d(a());t(r.name).toBe("parseSingle")})}),m("getApdu()",()=>{n("builds correct APDU without trustedParam",()=>{const e=new d(a(!1)).getApdu().getRawApdu();t(e).toEqual(Uint8Array.from([224,8,1,0,c.length,...c]))}),n("builds correct APDU with trustedParam",()=>{const e=new d(a(!0)).getApdu().getRawApdu();t(e).toEqual(Uint8Array.from([224,8,1,1,c.length,...c]))})}),m("parseResponse()",()=>{n("returns raw TLV payload on success",()=>{const r=new d(a()),s=new u({statusCode:Uint8Array.from([144,0]),data:p}),e=r.parseResponse(s);t(o(e)).toBe(!0),o(e)&&t(e.data).toEqual(p)}),n("maps SW errors to CommandResult error",()=>{const r=new d(a()),s=new u({statusCode:Uint8Array.from([106,134]),data:new Uint8Array}),e=r.parseResponse(s);t(o(e)).toBe(!1),o(e)||t(e.error.errorCode).toBe("6a86")}),n("errors when no TLV data returned",()=>{const r=new d(a()),s=new u({statusCode:Uint8Array.from([144,0]),data:new Uint8Array}),e=r.parseResponse(s);t(o(e)).toBe(!0),o(e)&&t(e.data).toEqual(new Uint8Array([]))})})});
|
|
2
2
|
//# sourceMappingURL=ParseStreamBlockCommand.test.js.map
|