@ledgerhq/device-trusted-app-kit-ledger-keyring-protocol 0.0.0-web-ble-29-08---20250829104351 → 0.0.0-wrong-error-when-in-experimental-provider-20251021162636
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/cjs/api/LedgerKeyringProtocol.js +1 -1
- package/lib/cjs/api/LedgerKeyringProtocol.js.map +1 -1
- package/lib/cjs/api/LedgerKeyringProtocolBuilder.js +1 -1
- package/lib/cjs/api/LedgerKeyringProtocolBuilder.js.map +3 -3
- package/lib/cjs/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +2 -2
- package/lib/cjs/api/app-binder/AuthenticateDeviceActionTypes.js.map +1 -1
- package/lib/cjs/api/app-binder/GetVersionCommandTypes.js +1 -1
- package/lib/cjs/api/app-binder/GetVersionCommandTypes.js.map +1 -1
- package/lib/cjs/api/crypto/CryptoService.js +2 -0
- package/lib/cjs/api/crypto/CryptoService.js.map +7 -0
- package/lib/cjs/api/crypto/Key.js +2 -0
- package/lib/cjs/api/crypto/Key.js.map +7 -0
- package/lib/cjs/api/crypto/KeyPair.js +2 -0
- package/lib/cjs/api/crypto/KeyPair.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleCryptoService.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleCryptoService.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleCryptoService.test.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleCryptoService.test.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleKey.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleKey.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleKey.test.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleKey.test.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleKeyPair.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleKeyPair.js.map +7 -0
- package/lib/cjs/api/crypto/noble/NobleKeyPair.test.js +2 -0
- package/lib/cjs/api/crypto/noble/NobleKeyPair.test.js.map +7 -0
- package/lib/cjs/api/index.js +1 -1
- package/lib/cjs/api/index.js.map +2 -2
- package/lib/cjs/api/model/Env.js +2 -0
- package/lib/cjs/api/model/Env.js.map +7 -0
- package/lib/cjs/api/{app-binder → model}/Errors.js.map +1 -1
- package/lib/cjs/api/model/JWT.js +2 -0
- package/lib/cjs/api/model/JWT.js.map +7 -0
- package/lib/cjs/api/model/Permissions.js +2 -0
- package/lib/cjs/api/model/Permissions.js.map +7 -0
- package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js +1 -1
- package/lib/cjs/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
- package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
- package/lib/cjs/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
- 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 +3 -3
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js +2 -2
- package/lib/cjs/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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.map +2 -2
- 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.map +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
- package/lib/cjs/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +2 -2
- 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 +1 -1
- 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 +1 -1
- package/lib/cjs/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/InitTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/InitTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignBlockTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignBlockTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.test.js +1 -1
- package/lib/cjs/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +3 -3
- package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js +1 -1
- package/lib/cjs/internal/app-binder/task/utils/TrustedProperties.js.map +2 -2
- package/lib/cjs/internal/di.js +1 -1
- package/lib/cjs/internal/di.js.map +3 -3
- package/lib/cjs/internal/externalTypes.js +1 -1
- package/lib/cjs/internal/externalTypes.js.map +2 -2
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +2 -2
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
- package/lib/cjs/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +2 -2
- package/lib/cjs/internal/lkrp-datasource/data/LKRPDataSource.js.map +1 -1
- package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/authentication/AuthenticateUseCase.js.map +2 -2
- package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/authentication/DecryptDataUseCase.js.map +3 -3
- package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js +1 -1
- package/lib/cjs/internal/use-cases/authentication/EncryptDataUseCase.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlock.js +4 -4
- package/lib/cjs/internal/utils/LKRPBlock.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlock.test.js +3 -3
- package/lib/cjs/internal/utils/LKRPBlock.test.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlockStream.js +2 -2
- package/lib/cjs/internal/utils/LKRPBlockStream.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPBlockStream.test.js +2 -2
- package/lib/cjs/internal/utils/LKRPBlockStream.test.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPCommand.js +2 -2
- package/lib/cjs/internal/utils/LKRPCommand.js.map +3 -3
- package/lib/cjs/internal/utils/LKRPCommand.test.js +2 -2
- package/lib/cjs/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/cjs/internal/utils/TLVParser.js +1 -1
- package/lib/cjs/internal/utils/TLVParser.js.map +3 -3
- package/lib/cjs/internal/utils/TLVParser.test.js +1 -1
- package/lib/cjs/internal/utils/TLVParser.test.js.map +2 -2
- package/lib/cjs/internal/utils/required.js +1 -1
- package/lib/cjs/internal/utils/required.js.map +2 -2
- package/lib/cjs/package.json +2 -2
- package/lib/esm/api/LedgerKeyringProtocolBuilder.js +1 -1
- package/lib/esm/api/LedgerKeyringProtocolBuilder.js.map +3 -3
- package/lib/esm/api/app-binder/AddToTrustchainDeviceActionTypes.js.map +2 -2
- package/lib/esm/api/app-binder/AuthenticateDeviceActionTypes.js.map +1 -1
- package/lib/esm/api/crypto/CryptoService.js +2 -0
- package/lib/esm/api/crypto/CryptoService.js.map +7 -0
- package/lib/esm/api/crypto/Key.js +2 -0
- package/lib/esm/api/crypto/Key.js.map +7 -0
- package/lib/esm/api/crypto/KeyPair.js +2 -0
- package/lib/esm/api/crypto/KeyPair.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleCryptoService.js +2 -0
- package/lib/esm/api/crypto/noble/NobleCryptoService.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleCryptoService.test.js +2 -0
- package/lib/esm/api/crypto/noble/NobleCryptoService.test.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleKey.js +2 -0
- package/lib/esm/api/crypto/noble/NobleKey.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleKey.test.js +2 -0
- package/lib/esm/api/crypto/noble/NobleKey.test.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleKeyPair.js +2 -0
- package/lib/esm/api/crypto/noble/NobleKeyPair.js.map +7 -0
- package/lib/esm/api/crypto/noble/NobleKeyPair.test.js +2 -0
- package/lib/esm/api/crypto/noble/NobleKeyPair.test.js.map +7 -0
- package/lib/esm/api/index.js +1 -1
- package/lib/esm/api/index.js.map +2 -2
- package/lib/esm/api/model/Env.js +2 -0
- package/lib/esm/api/model/Env.js.map +7 -0
- package/lib/esm/api/{app-binder → model}/Errors.js.map +1 -1
- package/lib/esm/api/model/JWT.js +1 -0
- package/lib/esm/api/model/Permissions.js +2 -0
- package/lib/esm/api/model/Permissions.js.map +7 -0
- package/lib/esm/internal/DefaultLedgerKeyringProtocol.js +1 -1
- package/lib/esm/internal/DefaultLedgerKeyringProtocol.js.map +3 -3
- package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js +1 -1
- package/lib/esm/internal/app-binder/LedgerKeyringProtocolBinder.js.map +3 -3
- 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 +3 -3
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js +1 -1
- package/lib/esm/internal/app-binder/command/GetSeedIdCommand.test.js.map +3 -3
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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.map +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- 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 +2 -2
- package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AddToTrustchainDeviceAction.js.map +3 -3
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js +1 -1
- package/lib/esm/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.js.map +2 -2
- 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 +1 -1
- package/lib/esm/internal/app-binder/task/ExtractEncryptionKeyTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/InitTask.js +1 -1
- package/lib/esm/internal/app-binder/task/InitTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js +1 -1
- package/lib/esm/internal/app-binder/task/ParseStreamToDeviceTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignBlockTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignBlockTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js +1 -1
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.js.map +3 -3
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js +1 -1
- package/lib/esm/internal/app-binder/task/SignChallengeWithKeypairTask.test.js.map +3 -3
- package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js +1 -1
- package/lib/esm/internal/app-binder/task/utils/TrustedProperties.js.map +2 -2
- package/lib/esm/internal/di.js +1 -1
- package/lib/esm/internal/di.js.map +3 -3
- package/lib/esm/internal/externalTypes.js +1 -1
- package/lib/esm/internal/externalTypes.js.map +2 -2
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js +1 -1
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.js.map +2 -2
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js +1 -1
- package/lib/esm/internal/lkrp-datasource/data/HttpLKRPDataSource.test.js.map +2 -2
- package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js +1 -1
- package/lib/esm/internal/use-cases/authentication/AuthenticateUseCase.js.map +2 -2
- package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js +1 -1
- package/lib/esm/internal/use-cases/authentication/DecryptDataUseCase.js.map +3 -3
- package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js +1 -1
- package/lib/esm/internal/use-cases/authentication/EncryptDataUseCase.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlock.js +3 -3
- package/lib/esm/internal/utils/LKRPBlock.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlock.test.js +2 -2
- package/lib/esm/internal/utils/LKRPBlock.test.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlockStream.js +2 -2
- package/lib/esm/internal/utils/LKRPBlockStream.js.map +3 -3
- package/lib/esm/internal/utils/LKRPBlockStream.test.js +1 -1
- package/lib/esm/internal/utils/LKRPBlockStream.test.js.map +3 -3
- package/lib/esm/internal/utils/LKRPCommand.js +2 -2
- package/lib/esm/internal/utils/LKRPCommand.js.map +3 -3
- package/lib/esm/internal/utils/LKRPCommand.test.js +2 -2
- package/lib/esm/internal/utils/LKRPCommand.test.js.map +3 -3
- package/lib/esm/internal/utils/TLVParser.js +1 -1
- package/lib/esm/internal/utils/TLVParser.js.map +3 -3
- package/lib/esm/internal/utils/TLVParser.test.js +1 -1
- package/lib/esm/internal/utils/TLVParser.test.js.map +2 -2
- package/lib/esm/internal/utils/required.js +1 -1
- package/lib/esm/internal/utils/required.js.map +2 -2
- package/lib/esm/package.json +2 -2
- package/lib/types/api/LedgerKeyringProtocol.d.ts +2 -2
- package/lib/types/api/LedgerKeyringProtocol.d.ts.map +1 -1
- package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts +4 -1
- package/lib/types/api/LedgerKeyringProtocolBuilder.d.ts.map +1 -1
- package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts +8 -4
- package/lib/types/api/app-binder/AddToTrustchainDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts +2 -2
- package/lib/types/api/app-binder/AuthenticateDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/api/app-binder/GetVersionCommandTypes.d.ts +0 -1
- package/lib/types/api/app-binder/GetVersionCommandTypes.d.ts.map +1 -1
- package/lib/types/api/crypto/CryptoService.d.ts +22 -0
- package/lib/types/api/crypto/CryptoService.d.ts.map +1 -0
- package/lib/types/api/crypto/Key.d.ts +7 -0
- package/lib/types/api/crypto/Key.d.ts.map +1 -0
- package/lib/types/api/crypto/KeyPair.d.ts +13 -0
- package/lib/types/api/crypto/KeyPair.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleCryptoService.d.ts +13 -0
- package/lib/types/api/crypto/noble/NobleCryptoService.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleCryptoService.test.d.ts +2 -0
- package/lib/types/api/crypto/noble/NobleCryptoService.test.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleKey.d.ts +11 -0
- package/lib/types/api/crypto/noble/NobleKey.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleKey.test.d.ts +2 -0
- package/lib/types/api/crypto/noble/NobleKey.test.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleKeyPair.d.ts +18 -0
- package/lib/types/api/crypto/noble/NobleKeyPair.d.ts.map +1 -0
- package/lib/types/api/crypto/noble/NobleKeyPair.test.d.ts +2 -0
- package/lib/types/api/crypto/noble/NobleKeyPair.test.d.ts.map +1 -0
- package/lib/types/api/index.d.ts +10 -2
- package/lib/types/api/index.d.ts.map +1 -1
- package/lib/types/api/model/Env.d.ts +5 -0
- package/lib/types/api/model/Env.d.ts.map +1 -0
- package/lib/types/api/model/Errors.d.ts.map +1 -0
- package/lib/types/api/model/JWT.d.ts +9 -0
- package/lib/types/api/model/JWT.d.ts.map +1 -0
- package/lib/types/api/{app-binder/LKRPTypes.d.ts → model/Permissions.d.ts} +1 -19
- package/lib/types/api/model/Permissions.d.ts.map +1 -0
- package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts +6 -4
- package/lib/types/internal/DefaultLedgerKeyringProtocol.d.ts.map +1 -1
- package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts +7 -4
- package/lib/types/internal/app-binder/LedgerKeyringProtocolBinder.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts +4 -1
- package/lib/types/internal/app-binder/command/GetAppNameCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts +13 -1
- package/lib/types/internal/app-binder/command/GetSeedIdCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts +2 -1
- package/lib/types/internal/app-binder/command/GetVersionCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/InitCommand.d.ts +4 -1
- package/lib/types/internal/app-binder/command/InitCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts +4 -1
- package/lib/types/internal/app-binder/command/ParseBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts +5 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts +4 -1
- package/lib/types/internal/app-binder/command/ParseStreamBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts +5 -1
- package/lib/types/internal/app-binder/command/SetTrustedMemberCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts +5 -1
- package/lib/types/internal/app-binder/command/SignBlockHeader.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts +5 -1
- package/lib/types/internal/app-binder/command/SignBlockSignatureCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts +4 -1
- package/lib/types/internal/app-binder/command/SignBlockSingleCommand.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts +8 -4
- package/lib/types/internal/app-binder/device-action/AddToTrustchainDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts +5 -2
- package/lib/types/internal/app-binder/device-action/AuthenticateWithDeviceDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts +5 -2
- package/lib/types/internal/app-binder/device-action/AuthenticateWithKeypairDeviceAction.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts +5 -2
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithDeviceDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts +5 -2
- package/lib/types/internal/app-binder/device-action/models/AuthenticateWithKeypairDeviceActionTypes.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts +4 -7
- package/lib/types/internal/app-binder/task/ExtractEncryptionKeyTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/InitTask.d.ts +5 -3
- package/lib/types/internal/app-binder/task/InitTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts +1 -1
- package/lib/types/internal/app-binder/task/ParseStreamToDeviceTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignBlockTask.d.ts +11 -8
- package/lib/types/internal/app-binder/task/SignBlockTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts +5 -3
- package/lib/types/internal/app-binder/task/SignChallengeWithKeypairTask.d.ts.map +1 -1
- package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts +1 -1
- package/lib/types/internal/app-binder/task/utils/TrustedProperties.d.ts.map +1 -1
- package/lib/types/internal/di.d.ts +3 -1
- package/lib/types/internal/di.d.ts.map +1 -1
- package/lib/types/internal/externalTypes.d.ts +1 -0
- package/lib/types/internal/externalTypes.d.ts.map +1 -1
- package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts +2 -2
- package/lib/types/internal/lkrp-datasource/data/HttpLKRPDataSource.d.ts.map +1 -1
- package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts +2 -2
- package/lib/types/internal/lkrp-datasource/data/LKRPDataSource.d.ts.map +1 -1
- package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts +3 -2
- package/lib/types/internal/use-cases/authentication/AuthenticateUseCase.d.ts.map +1 -1
- package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts +4 -1
- package/lib/types/internal/use-cases/authentication/DecryptDataUseCase.d.ts.map +1 -1
- package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts +4 -1
- package/lib/types/internal/use-cases/authentication/EncryptDataUseCase.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPBlock.d.ts +1 -1
- package/lib/types/internal/utils/LKRPBlock.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPBlockStream.d.ts +4 -3
- package/lib/types/internal/utils/LKRPBlockStream.d.ts.map +1 -1
- package/lib/types/internal/utils/LKRPCommand.d.ts +1 -1
- package/lib/types/internal/utils/LKRPCommand.d.ts.map +1 -1
- package/lib/types/internal/utils/TLVParser.d.ts +1 -1
- package/lib/types/internal/utils/TLVParser.d.ts.map +1 -1
- package/lib/types/internal/utils/required.d.ts +1 -1
- package/lib/types/internal/utils/required.d.ts.map +1 -1
- package/lib/types/tsconfig.prod.tsbuildinfo +1 -1
- package/package.json +5 -5
- package/lib/cjs/api/app-binder/GetAppNameCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/GetAppNameCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/GetSeedIdCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/GetSeedIdCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/InitCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/InitCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/KeypairFromBytes.js +0 -2
- package/lib/cjs/api/app-binder/KeypairFromBytes.js.map +0 -7
- package/lib/cjs/api/app-binder/LKRPTypes.js +0 -2
- package/lib/cjs/api/app-binder/LKRPTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/ParseStreamBlockCommandCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/ParseStreamBlockCommandCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/ParseStreamBlockHeaderCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/ParseStreamBlockHeaderCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/ParseStreamBlockSignatureTypes.js +0 -2
- package/lib/cjs/api/app-binder/ParseStreamBlockSignatureTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/SetTrustedMemberTypes.js +0 -2
- package/lib/cjs/api/app-binder/SetTrustedMemberTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/SignBlockCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/SignBlockCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/SignBlockHeaderCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/SignBlockSignatureCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/SignBlockSignatureCommandTypes.js.map +0 -7
- package/lib/cjs/api/app-binder/SignBlockSingleCommandTypes.js +0 -2
- package/lib/cjs/api/app-binder/SignBlockSingleCommandTypes.js.map +0 -7
- package/lib/cjs/internal/utils/TLVBuilder.js +0 -2
- package/lib/cjs/internal/utils/TLVBuilder.js.map +0 -7
- package/lib/cjs/internal/utils/crypto.js +0 -2
- package/lib/cjs/internal/utils/crypto.js.map +0 -7
- package/lib/cjs/internal/utils/hex.js +0 -2
- package/lib/cjs/internal/utils/hex.js.map +0 -7
- package/lib/esm/api/app-binder/GetAppNameCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/GetSeedIdCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/GetSeedIdCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/InitCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/InitCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/KeypairFromBytes.js +0 -2
- package/lib/esm/api/app-binder/KeypairFromBytes.js.map +0 -7
- package/lib/esm/api/app-binder/LKRPTypes.js +0 -2
- package/lib/esm/api/app-binder/LKRPTypes.js.map +0 -7
- package/lib/esm/api/app-binder/ParseStreamBlockCommandCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/ParseStreamBlockCommandCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/ParseStreamBlockHeaderCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/ParseStreamBlockHeaderCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/ParseStreamBlockSignatureTypes.js +0 -1
- package/lib/esm/api/app-binder/ParseStreamBlockSignatureTypes.js.map +0 -7
- package/lib/esm/api/app-binder/SetTrustedMemberTypes.js +0 -1
- package/lib/esm/api/app-binder/SetTrustedMemberTypes.js.map +0 -7
- package/lib/esm/api/app-binder/SignBlockCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/SignBlockCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/SignBlockHeaderCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/SignBlockHeaderCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/SignBlockSignatureCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/SignBlockSignatureCommandTypes.js.map +0 -7
- package/lib/esm/api/app-binder/SignBlockSingleCommandTypes.js +0 -1
- package/lib/esm/api/app-binder/SignBlockSingleCommandTypes.js.map +0 -7
- package/lib/esm/internal/utils/TLVBuilder.js +0 -2
- package/lib/esm/internal/utils/TLVBuilder.js.map +0 -7
- package/lib/esm/internal/utils/crypto.js +0 -2
- package/lib/esm/internal/utils/crypto.js.map +0 -7
- package/lib/esm/internal/utils/hex.js +0 -2
- package/lib/esm/internal/utils/hex.js.map +0 -7
- package/lib/types/api/app-binder/Errors.d.ts.map +0 -1
- package/lib/types/api/app-binder/GetAppNameCommandTypes.d.ts +0 -5
- package/lib/types/api/app-binder/GetAppNameCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/GetSeedIdCommandTypes.d.ts +0 -14
- package/lib/types/api/app-binder/GetSeedIdCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/InitCommandTypes.d.ts +0 -5
- package/lib/types/api/app-binder/InitCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/KeypairFromBytes.d.ts +0 -11
- package/lib/types/api/app-binder/KeypairFromBytes.d.ts.map +0 -1
- package/lib/types/api/app-binder/LKRPTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/ParseStreamBlockCommandCommandTypes.d.ts +0 -6
- package/lib/types/api/app-binder/ParseStreamBlockCommandCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/ParseStreamBlockHeaderCommandTypes.d.ts +0 -5
- package/lib/types/api/app-binder/ParseStreamBlockHeaderCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/ParseStreamBlockSignatureTypes.d.ts +0 -5
- package/lib/types/api/app-binder/ParseStreamBlockSignatureTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/SetTrustedMemberTypes.d.ts +0 -6
- package/lib/types/api/app-binder/SetTrustedMemberTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/SignBlockCommandTypes.d.ts +0 -9
- package/lib/types/api/app-binder/SignBlockCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts +0 -6
- package/lib/types/api/app-binder/SignBlockHeaderCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/SignBlockSignatureCommandTypes.d.ts +0 -6
- package/lib/types/api/app-binder/SignBlockSignatureCommandTypes.d.ts.map +0 -1
- package/lib/types/api/app-binder/SignBlockSingleCommandTypes.d.ts +0 -5
- package/lib/types/api/app-binder/SignBlockSingleCommandTypes.d.ts.map +0 -1
- package/lib/types/internal/utils/TLVBuilder.d.ts +0 -15
- package/lib/types/internal/utils/TLVBuilder.d.ts.map +0 -1
- package/lib/types/internal/utils/crypto.d.ts +0 -19
- package/lib/types/internal/utils/crypto.d.ts.map +0 -1
- package/lib/types/internal/utils/hex.d.ts +0 -3
- package/lib/types/internal/utils/hex.d.ts.map +0 -1
- /package/lib/cjs/api/{app-binder → model}/Errors.js +0 -0
- /package/lib/esm/api/{app-binder → model}/Errors.js +0 -0
- /package/lib/esm/api/{app-binder/GetAppNameCommandTypes.js.map → model/JWT.js.map} +0 -0
- /package/lib/types/api/{app-binder → model}/Errors.d.ts +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPBlockStream.ts"],
|
|
4
|
-
"sourcesContent": ["import { Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,qBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,
|
|
6
|
-
"names": ["LKRPBlockStream_exports", "__export", "LKRPBlockStream", "__toCommonJS", "
|
|
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
|
+
"mappings": "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",
|
|
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
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var t=require("purify-ts"),p=require("../../api/
|
|
1
|
+
"use strict";var a=require("@ledgerhq/device-management-kit"),t=require("purify-ts"),p=require("../../api/model/Errors"),o=require("../models/Tags"),m=require("./LKRPBlock"),d=require("./LKRPBlockStream"),i=require("./LKRPCommand");describe("LKRPBlockStream",()=>{describe("toString",()=>{it("should return the hex representation of the block stream",()=>{const e="0102030405060708",c=d.LKRPBlockStream.fromHex(e);expect(c.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the block stream",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),c=new d.LKRPBlockStream(e);expect(c.toU8A()).toBe(e)})}),describe("toHuman",()=>{it("should return a human-readable representation of the block stream",()=>{const c=d.LKRPBlockStream.fromHex(r).toHuman();expect(c).toStrictEqual((0,t.Right)(["Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," Derive(0x15):"," path: m/0'/16'/0'"," groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"," initializationVector: a66c5a4486e870287caa53bbd609af00"," encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"," ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171"," AddMember(0x11):"," name: debug-d4c61d"," publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 4d305eae5b70b69cf657f3b9f7db5863"," encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"," recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"," ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4","Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02","","Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211","Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021","Commands:"," AddMember(0x11):"," name: debug-80a289"," publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," permissions: 4294967295"," PublishKey(0x12):"," initializationVector: 27bdb34fb6028128bfc919f4db7d1378"," encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"," recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"," ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4","Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8"].join(`
|
|
2
2
|
`)))})}),describe("parse",()=>{it("should parse the block stream correctly",()=>{const e=d.LKRPBlockStream.fromHex(r),c=e.parse();e.toHuman(),expect(c).toStrictEqual((0,t.Right)([m.LKRPBlock.fromData(f),m.LKRPBlock.fromData(n)]))}),it("should fail if the block stream data is invalid",()=>{const c=d.LKRPBlockStream.fromHex("00").parse();expect(c).toStrictEqual((0,t.Left)(new p.LKRPParsingError("Invalid end of TLV, expected length")))})}),describe("fromData",()=>{it("should create a BlockStream from data",()=>{const e=[{...f,parent:void 0},{...n,parent:void 0}],c=d.LKRPBlockStream.fromData(e,f.parent);expect(c.toString()).toBe(r)}),it("should assign a random parent hash if not provided",()=>{const e=[{...f,parent:void 0},{...n,parent:void 0}],b=d.LKRPBlockStream.fromData(e).parse().map(s=>s[0]?.hash()).caseOf({Left:()=>{},Right:s=>s});expect(typeof b).toBe("string"),expect(b?.length).toBe(64),expect(b).not.toBe(f.parent)})}),describe("validate",()=>{it("should validate the block stream",async()=>{const e=d.LKRPBlockStream.fromHex(r),c=await e.validate(f.parent),b=await e.validate(f.parent);expect(c).toBe(!0),expect(b).toBe(!0)}),it("should fail validation if the parent hash does not match",async()=>{const e=d.LKRPBlockStream.fromHex(r.replace(n.parent,f.parent)),c=await e.validate("0123455678"),b=await e.validate();expect(c).toBe(!1),expect(b).toBe(!1)})}),describe("getPath",()=>{it("should return the path of the block stream",()=>{const c=d.LKRPBlockStream.fromHex(r).getPath();expect(c).toEqual((0,t.Just)("m/0'/16'/0'"))})})});const r=`
|
|
3
3
|
01 01 01
|
|
4
4
|
02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db
|
|
36
36
|
06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4
|
|
37
37
|
03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8
|
|
38
|
-
`.replace(/\s/g,""),f={parent:"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45",issuer:(0,a.
|
|
38
|
+
`.replace(/\s/g,""),f={parent:"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45",issuer:(0,a.hexaStringToBuffer)("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[i.LKRPCommand.fromData({type:o.CommandTags.Derive,path:"m/0'/16'/0'",groupKey:(0,a.hexaStringToBuffer)("02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508"),initializationVector:(0,a.hexaStringToBuffer)("a66c5a4486e870287caa53bbd609af00"),encryptedXpriv:(0,a.hexaStringToBuffer)("0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19"),ephemeralPublicKey:(0,a.hexaStringToBuffer)("02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171")}),i.LKRPCommand.fromData({type:o.CommandTags.AddMember,name:"debug-d4c61d",publicKey:(0,a.hexaStringToBuffer)("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),permissions:4294967295}),i.LKRPCommand.fromData({type:o.CommandTags.PublishKey,initializationVector:(0,a.hexaStringToBuffer)("4d305eae5b70b69cf657f3b9f7db5863"),encryptedXpriv:(0,a.hexaStringToBuffer)("898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5"),recipient:(0,a.hexaStringToBuffer)("03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812"),ephemeralPublicKey:(0,a.hexaStringToBuffer)("023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4")})],signature:(0,a.hexaStringToBuffer)("3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02")},n={parent:"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211",issuer:(0,a.hexaStringToBuffer)("0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021"),commands:[i.LKRPCommand.fromData({type:o.CommandTags.AddMember,name:"debug-80a289",publicKey:(0,a.hexaStringToBuffer)("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),permissions:4294967295}),i.LKRPCommand.fromData({type:o.CommandTags.PublishKey,initializationVector:(0,a.hexaStringToBuffer)("27bdb34fb6028128bfc919f4db7d1378"),encryptedXpriv:(0,a.hexaStringToBuffer)("e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f"),recipient:(0,a.hexaStringToBuffer)("0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db"),ephemeralPublicKey:(0,a.hexaStringToBuffer)("027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4")})],signature:(0,a.hexaStringToBuffer)("30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8")};
|
|
39
39
|
//# sourceMappingURL=LKRPBlockStream.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPBlockStream.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Just, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { CommandTags } from \"@internal/models/Tags\";\n\nimport { hexToBytes } from \"./hex\";\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPBlockStream } from \"./LKRPBlockStream\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPBlockStream\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block stream\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const stream = LKRPBlockStream.fromHex(hex);\n // THEN\n expect(stream.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block stream\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const stream = new LKRPBlockStream(bytes);\n // THEN\n expect(stream.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const humanReadable = stream.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n \"Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" Derive(0x15):\",\n \" path: m/0'/16'/0'\",\n \" groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n \" initializationVector: a66c5a4486e870287caa53bbd609af00\",\n \" encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n \" ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n \" AddMember(0x11):\",\n \" name: debug-d4c61d\",\n \" publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 4d305eae5b70b69cf657f3b9f7db5863\",\n \" encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n \" recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n \"Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n \"\",\n \"Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" AddMember(0x11):\",\n \" name: debug-80a289\",\n \" publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 27bdb34fb6028128bfc919f4db7d1378\",\n \" encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n \" recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n \"Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block stream correctly\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const parsedData = stream.parse();\n stream.toHuman(); // Run toHuman to force the parsing of the commands\n\n // THEN\n expect(parsedData).toStrictEqual(\n Right([\n LKRPBlock.fromData(mockedBlockData1),\n LKRPBlock.fromData(mockedBlockData2),\n ]),\n );\n });\n\n it(\"should fail if the block stream data is invalid\", () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\"00\");\n // WHEN\n const parsedData = invalidStream.parse();\n\n // THEN\n expect(parsedData).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"fromData\", () => {\n it(\"should create a BlockStream from data\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n\n // WHEN\n const stream = LKRPBlockStream.fromData(\n mockedBlockData,\n mockedBlockData1.parent,\n );\n\n // THEN\n expect(stream.toString()).toBe(mockedHex);\n });\n\n it(\"should assign a random parent hash if not provided\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n // WHEN\n const stream = LKRPBlockStream.fromData(mockedBlockData);\n const hash = stream\n .parse()\n .map((blocks) => blocks[0]?.hash())\n .caseOf({ Left: () => undefined, Right: (h) => h });\n\n // THEN\n expect(typeof hash).toBe(\"string\");\n expect(hash?.length).toBe(64); // 32 bytes in hex\n expect(hash).not.toBe(mockedBlockData1.parent);\n });\n });\n\n describe(\"validate\", () => {\n it(\"should validate the block stream\", async () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const withParentHash = await stream.validate(mockedBlockData1.parent);\n const withoutParentHash = await stream.validate(mockedBlockData1.parent);\n\n // THEN\n expect(withParentHash).toBe(true);\n expect(withoutParentHash).toBe(true);\n });\n\n it(\"should fail validation if the parent hash does not match\", async () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\n mockedHex.replace(mockedBlockData2.parent, mockedBlockData1.parent),\n );\n\n // WHEN\n const wrongBlock1 = await invalidStream.validate(\"0123455678\");\n const wrongBlock2 = await invalidStream.validate();\n\n // THEN\n expect(wrongBlock1).toBe(false);\n expect(wrongBlock2).toBe(false);\n });\n });\n\n describe(\"getPath\", () => {\n it(\"should return the path of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const path = stream.getPath();\n\n // THEN\n expect(path).toEqual(Just(\"m/0'/16'/0'\"));\n });\n });\n});\n\nconst mockedHex = `\n 01 01 01\n 02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 00\n 06 21 02 83 9a 28 8f 6a 76 09 0b 64 31 22 81 d2 e7 d6 b0 2c 4d df 64 ed 5e 76 93 47 1b 1b 44 5f 81 95 08\n 05 10 a6 6c 5a 44 86 e8 70 28 7c aa 53 bb d6 09 af 00\n 05 50 0f 43 34 1d 6f 90 99 a5 18 0f b3 04 a2 88 9b 3b 04 68 f0 5f b0 b9 31 d2 22 11 75 3b 34 11 56 7a bb 21 98 1b 64 26 1e 95 bc d4 4a 35 12 af 7c 87 bb b5 a4 b6 b6 80 c0 3b 5f 09 e8 d9 c5 6a 9c b1 c0 78 89 93 a3 d9 d5 c1 40 a2 46 2c b1 93 0d 19\n 06 21 02 fb e2 6c 32 ab 99 1c 1b 10 71 56 e2 2f c1 58 c3 35 e0 ae ed c1 71 38 1c 9d 77 74 3c 66 f4 11 71\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 4d 30 5e ae 5b 70 b6 9c f6 57 f3 b9 f7 db 58 63\n 05 50 89 8d e5 35 f8 7f 7a c7 75 b0 9c 80 82 7d 14 ef dd ee aa 9a 2b 10 6b fd 7f cc 91 94 2d c3 6d 6a 17 51 79 3b a7 ec 07 92 ba 93 6f 5f 1d 85 8b c1 fc 54 ca 1a 70 e8 d2 8a 5b 0b f3 3b 5e 92 6f 3a dd 37 2c 80 2b 3b 9d a6 4b c0 6e 26 b9 34 9d b5\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 3d b6 6b 97 4b 87 1c 6c aa fd f4 86 c6 89 55 18 30 3b 14 0d 38 9e 78 7d 2c 3b 55 27 c2 df 50 f4\n 03 46 30 44 02 20 56 ab 42 6b d7 56 96 cb e9 53 8c b4 22 71 e8 79 6b a1 57 6d fe 3e 26 34 f0 a6 f1 a6 36 82 1e 50 02 20 5e 41 ae 68 eb d8 fb ff 40 43 40 a4 f0 12 4a f2 5e 94 8a a5 25 00 de 19 2d 15 ff 4f 8e e9 2c 02\n\n 01 01 01\n 02 20 15 4d 99 eb 86 7c fe ef 24 9d 57 3f c2 e1 f3 d3 07 c1 e4 9e c1 f6 6e 9a f1 c9 db d2 19 14 32 11 \n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 02\n 11 37\n 04 0c 64 65 62 75 67 2d 38 30 61 32 38 39\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 01 04 ff ff ff ff\n 12 aa\n 05 10 27 bd b3 4f b6 02 81 28 bf c9 19 f4 db 7d 13 78\n 05 50 e7 92 b8 3f 26 fa c0 de 46 ee 8f 1a 07 e5 3b 0e 50 8d 93 73 aa 2e 80 47 f0 a7 64 20 4a b0 f0 6a 2f ff a9 c2 95 99 f5 d3 fe 42 fe fa bd 98 27 86 71 57 bd 14 ec 7e 2b d8 ef 83 c6 f9 37 1d 7b 48 d2 8d 9a 44 99 f8 ed 62 6c e7 5f ce c0 a0 b3 3f\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4\n 03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8 \n`.replace(/\\s/g, \"\");\n\nconst mockedBlockData1 = {\n parent: \"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.Derive,\n path: \"m/0'/16'/0'\",\n groupKey: hexToBytes(\n \"02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n ),\n initializationVector: hexToBytes(\"a66c5a4486e870287caa53bbd609af00\"),\n encryptedXpriv: hexToBytes(\n \"0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n ),\n }),\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-d4c61d\",\n publicKey: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"4d305eae5b70b69cf657f3b9f7db5863\"),\n encryptedXpriv: hexToBytes(\n \"898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n ),\n recipient: hexToBytes(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n ),\n};\nconst mockedBlockData2 = {\n parent: \"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n issuer: hexToBytes(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n ),\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-80a289\",\n publicKey: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexToBytes(\"27bdb34fb6028128bfc919f4db7d1378\"),\n encryptedXpriv: hexToBytes(\n \"e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n ),\n recipient: hexToBytes(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n ),\n ephemeralPublicKey: hexToBytes(\n \"027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n ),\n }),\n ],\n signature: hexToBytes(\n \"30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ),\n};\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAAkC,qBAElCC,EAAiC,
|
|
6
|
-
"names": ["
|
|
4
|
+
"sourcesContent": ["import { hexaStringToBuffer } from \"@ledgerhq/device-management-kit\";\nimport { Just, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { CommandTags } from \"@internal/models/Tags\";\n\nimport { LKRPBlock } from \"./LKRPBlock\";\nimport { LKRPBlockStream } from \"./LKRPBlockStream\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPBlockStream\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex representation of the block stream\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const stream = LKRPBlockStream.fromHex(hex);\n // THEN\n expect(stream.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the block stream\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const stream = new LKRPBlockStream(bytes);\n // THEN\n expect(stream.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a human-readable representation of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const humanReadable = stream.toHuman();\n\n // THEN\n expect(humanReadable).toStrictEqual(\n Right(\n [\n \"Parent: 7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" Derive(0x15):\",\n \" path: m/0'/16'/0'\",\n \" groupKey: 02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n \" initializationVector: a66c5a4486e870287caa53bbd609af00\",\n \" encryptedXpriv: 0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n \" ephemeralPublicKey: 02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n \" AddMember(0x11):\",\n \" name: debug-d4c61d\",\n \" publicKey: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 4d305eae5b70b69cf657f3b9f7db5863\",\n \" encryptedXpriv: 898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n \" recipient: 03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n \" ephemeralPublicKey: 023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n \"Signature: 3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n \"\",\n \"Parent: 154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n \"Issuer: 0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n \"Commands:\",\n \" AddMember(0x11):\",\n \" name: debug-80a289\",\n \" publicKey: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" permissions: 4294967295\",\n \" PublishKey(0x12):\",\n \" initializationVector: 27bdb34fb6028128bfc919f4db7d1378\",\n \" encryptedXpriv: e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n \" recipient: 0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n \" ephemeralPublicKey: 027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n \"Signature: 30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n ].join(\"\\n\"),\n ),\n );\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the block stream correctly\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const parsedData = stream.parse();\n stream.toHuman(); // Run toHuman to force the parsing of the commands\n\n // THEN\n expect(parsedData).toStrictEqual(\n Right([\n LKRPBlock.fromData(mockedBlockData1),\n LKRPBlock.fromData(mockedBlockData2),\n ]),\n );\n });\n\n it(\"should fail if the block stream data is invalid\", () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\"00\");\n // WHEN\n const parsedData = invalidStream.parse();\n\n // THEN\n expect(parsedData).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"fromData\", () => {\n it(\"should create a BlockStream from data\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n\n // WHEN\n const stream = LKRPBlockStream.fromData(\n mockedBlockData,\n mockedBlockData1.parent,\n );\n\n // THEN\n expect(stream.toString()).toBe(mockedHex);\n });\n\n it(\"should assign a random parent hash if not provided\", () => {\n // GIVEN\n const mockedBlockData = [\n { ...mockedBlockData1, parent: undefined },\n { ...mockedBlockData2, parent: undefined },\n ];\n // WHEN\n const stream = LKRPBlockStream.fromData(mockedBlockData);\n const hash = stream\n .parse()\n .map((blocks) => blocks[0]?.hash())\n .caseOf({ Left: () => undefined, Right: (h) => h });\n\n // THEN\n expect(typeof hash).toBe(\"string\");\n expect(hash?.length).toBe(64); // 32 bytes in hex\n expect(hash).not.toBe(mockedBlockData1.parent);\n });\n });\n\n describe(\"validate\", () => {\n it(\"should validate the block stream\", async () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const withParentHash = await stream.validate(mockedBlockData1.parent);\n const withoutParentHash = await stream.validate(mockedBlockData1.parent);\n\n // THEN\n expect(withParentHash).toBe(true);\n expect(withoutParentHash).toBe(true);\n });\n\n it(\"should fail validation if the parent hash does not match\", async () => {\n // GIVEN\n const invalidStream = LKRPBlockStream.fromHex(\n mockedHex.replace(mockedBlockData2.parent, mockedBlockData1.parent),\n );\n\n // WHEN\n const wrongBlock1 = await invalidStream.validate(\"0123455678\");\n const wrongBlock2 = await invalidStream.validate();\n\n // THEN\n expect(wrongBlock1).toBe(false);\n expect(wrongBlock2).toBe(false);\n });\n });\n\n describe(\"getPath\", () => {\n it(\"should return the path of the block stream\", () => {\n // GIVEN\n const stream = LKRPBlockStream.fromHex(mockedHex);\n\n // WHEN\n const path = stream.getPath();\n\n // THEN\n expect(path).toEqual(Just(\"m/0'/16'/0'\"));\n });\n });\n});\n\nconst mockedHex = `\n 01 01 01\n 02 20 7b a5 ee fa c6 60 55 47 fc 50 18 8b a7 88 03 11 d3 d1 24 0a 7a e3 2e 6e aa c7 49 94 34 09 1c 45\n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 03\n 15 b8\n 05 0c 80 00 00 00 80 00 00 10 80 00 00 00\n 06 21 02 83 9a 28 8f 6a 76 09 0b 64 31 22 81 d2 e7 d6 b0 2c 4d df 64 ed 5e 76 93 47 1b 1b 44 5f 81 95 08\n 05 10 a6 6c 5a 44 86 e8 70 28 7c aa 53 bb d6 09 af 00\n 05 50 0f 43 34 1d 6f 90 99 a5 18 0f b3 04 a2 88 9b 3b 04 68 f0 5f b0 b9 31 d2 22 11 75 3b 34 11 56 7a bb 21 98 1b 64 26 1e 95 bc d4 4a 35 12 af 7c 87 bb b5 a4 b6 b6 80 c0 3b 5f 09 e8 d9 c5 6a 9c b1 c0 78 89 93 a3 d9 d5 c1 40 a2 46 2c b1 93 0d 19\n 06 21 02 fb e2 6c 32 ab 99 1c 1b 10 71 56 e2 2f c1 58 c3 35 e0 ae ed c1 71 38 1c 9d 77 74 3c 66 f4 11 71\n 11 37\n 04 0c 64 65 62 75 67 2d 64 34 63 36 31 64\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 01 04 ff ff ff ff\n 12 aa\n 05 10 4d 30 5e ae 5b 70 b6 9c f6 57 f3 b9 f7 db 58 63\n 05 50 89 8d e5 35 f8 7f 7a c7 75 b0 9c 80 82 7d 14 ef dd ee aa 9a 2b 10 6b fd 7f cc 91 94 2d c3 6d 6a 17 51 79 3b a7 ec 07 92 ba 93 6f 5f 1d 85 8b c1 fc 54 ca 1a 70 e8 d2 8a 5b 0b f3 3b 5e 92 6f 3a dd 37 2c 80 2b 3b 9d a6 4b c0 6e 26 b9 34 9d b5\n 06 21 03 d4 c6 1d da 2a af 76 29 54 fc e9 73 96 d9 be 03 99 e1 dc 75 c3 b7 90 c7 a3 4d de 85 96 a1 18 12\n 06 21 02 3d b6 6b 97 4b 87 1c 6c aa fd f4 86 c6 89 55 18 30 3b 14 0d 38 9e 78 7d 2c 3b 55 27 c2 df 50 f4\n 03 46 30 44 02 20 56 ab 42 6b d7 56 96 cb e9 53 8c b4 22 71 e8 79 6b a1 57 6d fe 3e 26 34 f0 a6 f1 a6 36 82 1e 50 02 20 5e 41 ae 68 eb d8 fb ff 40 43 40 a4 f0 12 4a f2 5e 94 8a a5 25 00 de 19 2d 15 ff 4f 8e e9 2c 02\n\n 01 01 01\n 02 20 15 4d 99 eb 86 7c fe ef 24 9d 57 3f c2 e1 f3 d3 07 c1 e4 9e c1 f6 6e 9a f1 c9 db d2 19 14 32 11 \n 06 21 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f 20 21\n 01 01 02\n 11 37\n 04 0c 64 65 62 75 67 2d 38 30 61 32 38 39\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 01 04 ff ff ff ff\n 12 aa\n 05 10 27 bd b3 4f b6 02 81 28 bf c9 19 f4 db 7d 13 78\n 05 50 e7 92 b8 3f 26 fa c0 de 46 ee 8f 1a 07 e5 3b 0e 50 8d 93 73 aa 2e 80 47 f0 a7 64 20 4a b0 f0 6a 2f ff a9 c2 95 99 f5 d3 fe 42 fe fa bd 98 27 86 71 57 bd 14 ec 7e 2b d8 ef 83 c6 f9 37 1d 7b 48 d2 8d 9a 44 99 f8 ed 62 6c e7 5f ce c0 a0 b3 3f\n 06 21 02 80 a2 89 18 36 9e 12 c8 6f eb 32 1c d1 00 fe 6d 95 8e 55 a0 bb 57 05 76 ef 71 8e 7a 37 92 04 db\n 06 21 02 7d 40 15 77 37 67 1b b0 4e ac a2 75 6b 8e c5 80 20 ff 5c 89 3b 10 cb fb 25 b4 80 14 c5 25 2d c4\n 03 46 30 44 02 20 71 8d 20 c9 99 68 93 63 9d a8 07 b8 a9 67 5d 94 4a bd c8 fd ed 97 f7 31 59 be ba 50 04 fa 17 f1 02 20 33 38 b7 4a 9e 6a 2e 69 6e a3 65 8d 3a f4 fc e9 5f fa 0f 74 c1 1b 2c 3d 37 b0 ca 1b 57 76 57 e8 \n`.replace(/\\s/g, \"\");\n\nconst mockedBlockData1 = {\n parent: \"7ba5eefac6605547fc50188ba7880311d3d1240a7ae32e6eaac7499434091c45\",\n issuer: hexaStringToBuffer(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n )!,\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.Derive,\n path: \"m/0'/16'/0'\",\n groupKey: hexaStringToBuffer(\n \"02839a288f6a76090b64312281d2e7d6b02c4ddf64ed5e7693471b1b445f819508\",\n )!,\n initializationVector: hexaStringToBuffer(\n \"a66c5a4486e870287caa53bbd609af00\",\n )!,\n encryptedXpriv: hexaStringToBuffer(\n \"0f43341d6f9099a5180fb304a2889b3b0468f05fb0b931d22211753b3411567abb21981b64261e95bcd44a3512af7c87bbb5a4b6b680c03b5f09e8d9c56a9cb1c0788993a3d9d5c140a2462cb1930d19\",\n )!,\n ephemeralPublicKey: hexaStringToBuffer(\n \"02fbe26c32ab991c1b107156e22fc158c335e0aeedc171381c9d77743c66f41171\",\n )!,\n }),\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-d4c61d\",\n publicKey: hexaStringToBuffer(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n )!,\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexaStringToBuffer(\n \"4d305eae5b70b69cf657f3b9f7db5863\",\n )!,\n encryptedXpriv: hexaStringToBuffer(\n \"898de535f87f7ac775b09c80827d14efddeeaa9a2b106bfd7fcc91942dc36d6a1751793ba7ec0792ba936f5f1d858bc1fc54ca1a70e8d28a5b0bf33b5e926f3add372c802b3b9da64bc06e26b9349db5\",\n )!,\n recipient: hexaStringToBuffer(\n \"03d4c61dda2aaf762954fce97396d9be0399e1dc75c3b790c7a34dde8596a11812\",\n )!,\n ephemeralPublicKey: hexaStringToBuffer(\n \"023db66b974b871c6caafdf486c6895518303b140d389e787d2c3b5527c2df50f4\",\n )!,\n }),\n ],\n signature: hexaStringToBuffer(\n \"3044022056ab426bd75696cbe9538cb42271e8796ba1576dfe3e2634f0a6f1a636821e5002205e41ae68ebd8fbff404340a4f0124af25e948aa52500de192d15ff4f8ee92c02\",\n )!,\n};\nconst mockedBlockData2 = {\n parent: \"154d99eb867cfeef249d573fc2e1f3d307c1e49ec1f66e9af1c9dbd219143211\",\n issuer: hexaStringToBuffer(\n \"0102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f2021\",\n )!,\n commands: [\n LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"debug-80a289\",\n publicKey: hexaStringToBuffer(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n )!,\n permissions: 0xffffffff,\n }),\n LKRPCommand.fromData({\n type: CommandTags.PublishKey,\n initializationVector: hexaStringToBuffer(\n \"27bdb34fb6028128bfc919f4db7d1378\",\n )!,\n encryptedXpriv: hexaStringToBuffer(\n \"e792b83f26fac0de46ee8f1a07e53b0e508d9373aa2e8047f0a764204ab0f06a2fffa9c29599f5d3fe42fefabd9827867157bd14ec7e2bd8ef83c6f9371d7b48d28d9a4499f8ed626ce75fcec0a0b33f\",\n )!,\n recipient: hexaStringToBuffer(\n \"0280a28918369e12c86feb321cd100fe6d958e55a0bb570576ef718e7a379204db\",\n )!,\n ephemeralPublicKey: hexaStringToBuffer(\n \"027d40157737671bb04eaca2756b8ec58020ff5c893b10cbfb25b48014c5252dc4\",\n )!,\n }),\n ],\n signature: hexaStringToBuffer(\n \"30440220718d20c9996893639da807b8a9675d944abdc8fded97f73159beba5004fa17f102203338b74a9e6a2e696ea3658d3af4fce95ffa0f74c11b2c3d37b0ca1b577657e8\",\n )!,\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_device_management_kit", "import_purify_ts", "import_Errors", "import_Tags", "import_LKRPBlock", "import_LKRPBlockStream", "import_LKRPCommand", "hex", "stream", "bytes", "humanReadable", "mockedHex", "parsedData", "mockedBlockData1", "mockedBlockData2", "mockedBlockData", "hash", "blocks", "h", "withParentHash", "withoutParentHash", "invalidStream", "wrongBlock1", "wrongBlock2", "path"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`))}getPublicKey(){switch(this.bytes[0]){case
|
|
1
|
+
"use strict";var m=Object.defineProperty;var f=Object.getOwnPropertyDescriptor;var p=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var l=(c,e)=>{for(var n in e)m(c,n,{get:e[n],enumerable:!0})},d=(c,e,n,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of p(e))!b.call(c,o)&&o!==n&&m(c,o,{get:()=>e[o],enumerable:!(i=f(e,o))||i.enumerable});return c};var h=c=>d(m({},"__esModule",{value:!0}),c);var B={};l(B,{LKRPCommand:()=>y});module.exports=h(B);var s=require("@ledgerhq/device-management-kit"),t=require("purify-ts"),r=require("../models/Tags"),a=require("./derivationPath"),u=require("./TLVParser");class y{constructor(e,n){this.bytes=e;this.data=n?(0,t.Just)((0,t.Right)(n)):t.Nothing}data;static fromHex(e){return new y((0,s.hexaStringToBuffer)(e)??new Uint8Array)}static fromData(e){const n=new s.ByteArrayBuilder;switch(e.type){case r.CommandTags.Seed:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.topic).encodeInTLVFromUInt16(r.GeneralTags.Int,e.protocolVersion).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.groupKey).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break;case r.CommandTags.AddMember:{const o=new ArrayBuffer(4);new DataView(o).setUint32(0,e.permissions),n.encodeInTLVFromAscii(r.GeneralTags.String,e.name).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.publicKey).encodeInTLVFromBuffer(r.GeneralTags.Int,new Uint8Array(o));break}case r.CommandTags.PublishKey:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.recipient).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break;case r.CommandTags.Derive:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,(0,a.derivationPathAsBytes)(e.path)).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.groupKey).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.initializationVector).encodeInTLVFromBuffer(r.GeneralTags.Bytes,e.encryptedXpriv).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.ephemeralPublicKey);break}const i=n.build();return new y(new Uint8Array([e.type,i.length,...i]),e)}static bytesFromUnsignedData(e){const n=new s.ByteArrayBuilder;switch(e.type){case r.CommandTags.AddMember:{const o=new ArrayBuffer(4);new DataView(o).setUint32(0,e.permissions),n.encodeInTLVFromAscii(r.GeneralTags.String,e.name).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.publicKey).encodeInTLVFromBuffer(r.GeneralTags.Int,new Uint8Array(o));break}case r.CommandTags.PublishKey:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,new Uint8Array).encodeInTLVFromBuffer(r.GeneralTags.Bytes,new Uint8Array).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,e.recipient).encodeInTLVFromBuffer(r.GeneralTags.PublicKey,new Uint8Array);break;case r.CommandTags.Derive:n.encodeInTLVFromBuffer(r.GeneralTags.Bytes,(0,a.derivationPathAsBytes)(e.path));break}const i=n.build();return new Uint8Array([e.type,i.length,...i])}toString(){return(0,s.bufferToHexaString)(this.bytes,!1)}toU8A(){return this.bytes}parse(){return this.data.orDefaultLazy(()=>{const e=new u.TLVParser(this.bytes).parseCommandData();return this.data=(0,t.Just)(e),e})}toHuman(){return this.parse().map(e=>Object.entries(e).map(([n,i])=>n==="type"?`${r.CommandTags[i]}(0x${i?.toString(16).padStart(2,"0")}):`:` ${n}: ${i instanceof Uint8Array?(0,s.bufferToHexaString)(i,!1):i}`).join(`
|
|
2
|
+
`))}getPublicKey(){switch(this.bytes[0]){case r.CommandTags.AddMember:case r.CommandTags.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case r.CommandTags.AddMember:return(0,t.Just)(e.publicKey);case r.CommandTags.PublishKey:return(0,t.Just)(e.recipient);default:return t.Nothing}}).map(e=>(0,s.bufferToHexaString)(e,!1));default:return t.Nothing}}getEncryptedPublishedKey(){switch(this.bytes[0]){case r.CommandTags.Seed:case r.CommandTags.Derive:case r.CommandTags.PublishKey:return this.parse().toMaybe().chain(e=>{switch(e.type){case r.CommandTags.Seed:case r.CommandTags.Derive:case r.CommandTags.PublishKey:return t.Maybe.of({...e});default:return t.Nothing}});default:return t.Nothing}}}0&&(module.exports={LKRPCommand});
|
|
3
3
|
//# sourceMappingURL=LKRPCommand.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPCommand.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyD,qBAOzDC,
|
|
6
|
-
"names": ["LKRPCommand_exports", "__export", "LKRPCommand", "__toCommonJS", "
|
|
4
|
+
"sourcesContent": ["import {\n bufferToHexaString,\n ByteArrayBuilder,\n hexaStringToBuffer,\n} from \"@ledgerhq/device-management-kit\";\nimport { type Either, Just, Maybe, Nothing, Right } from \"purify-ts\";\n\nimport { type LKRPParsingError } from \"@api/model/Errors\";\nimport {\n type LKRPCommandData,\n type UnsignedCommandData,\n} from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\nimport { type EncryptedPublishedKey } from \"@internal/models/Types\";\n\nimport { derivationPathAsBytes } from \"./derivationPath\";\nimport { TLVParser } from \"./TLVParser\";\n\nexport class LKRPCommand {\n private data: Maybe<Either<LKRPParsingError, LKRPCommandData>>;\n\n constructor(\n private bytes: Uint8Array,\n data?: LKRPCommandData,\n ) {\n this.data = data ? Just(Right(data)) : Nothing;\n }\n\n static fromHex(hex: string): LKRPCommand {\n return new LKRPCommand(hexaStringToBuffer(hex) ?? new Uint8Array());\n }\n\n static fromData(data: LKRPCommandData): LKRPCommand {\n const tlv = new ByteArrayBuilder();\n switch (data.type) {\n case CommandTags.Seed:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.topic)\n .encodeInTLVFromUInt16(GeneralTags.Int, data.protocolVersion)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.groupKey)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n\n case CommandTags.AddMember: {\n const permissions = new ArrayBuffer(4);\n new DataView(permissions).setUint32(0, data.permissions);\n tlv\n .encodeInTLVFromAscii(GeneralTags.String, data.name)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.publicKey)\n .encodeInTLVFromBuffer(GeneralTags.Int, new Uint8Array(permissions));\n break;\n }\n\n case CommandTags.PublishKey:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.recipient)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n\n case CommandTags.Derive:\n tlv\n .encodeInTLVFromBuffer(\n GeneralTags.Bytes,\n derivationPathAsBytes(data.path),\n )\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.groupKey)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.initializationVector)\n .encodeInTLVFromBuffer(GeneralTags.Bytes, data.encryptedXpriv)\n .encodeInTLVFromBuffer(\n GeneralTags.PublicKey,\n data.ephemeralPublicKey,\n );\n break;\n }\n\n const bytes = tlv.build();\n return new LKRPCommand(\n new Uint8Array([data.type, bytes.length, ...bytes]),\n data,\n );\n }\n\n static bytesFromUnsignedData(data: UnsignedCommandData): Uint8Array {\n const tlv = new ByteArrayBuilder();\n switch (data.type) {\n case CommandTags.AddMember: {\n // NOTE: encode the permission bytes array with DataView because\n // ByteArrayBuilder.encodeInTLVFromUInt32 doesn't seem to work with negative numbers\n // ByteArrayBuilder.add32BitIntToData doesn't seem to work with number > 0x7fffffff\n const permissions = new ArrayBuffer(4);\n new DataView(permissions).setUint32(0, data.permissions);\n tlv\n .encodeInTLVFromAscii(GeneralTags.String, data.name)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.publicKey)\n .encodeInTLVFromBuffer(GeneralTags.Int, new Uint8Array(permissions));\n break;\n }\n\n case CommandTags.PublishKey:\n tlv\n .encodeInTLVFromBuffer(GeneralTags.Bytes, new Uint8Array()) // Empty IV\n .encodeInTLVFromBuffer(GeneralTags.Bytes, new Uint8Array()) // Empty encryptedXpriv\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, data.recipient)\n .encodeInTLVFromBuffer(GeneralTags.PublicKey, new Uint8Array()); // Empty ephemeralPublicKey\n break;\n\n case CommandTags.Derive:\n tlv.encodeInTLVFromBuffer(\n GeneralTags.Bytes,\n derivationPathAsBytes(data.path),\n );\n break;\n }\n\n const bytes = tlv.build();\n return new Uint8Array([data.type, bytes.length, ...bytes]);\n }\n\n toString(): string {\n return bufferToHexaString(this.bytes, false);\n }\n\n toU8A(): Uint8Array {\n return this.bytes;\n }\n\n parse(): Either<LKRPParsingError, LKRPCommandData> {\n return this.data.orDefaultLazy(() => {\n const data = new TLVParser(this.bytes).parseCommandData();\n this.data = Just(data);\n return data;\n });\n }\n\n toHuman(): Either<LKRPParsingError, string> {\n return this.parse().map((data) =>\n Object.entries(data)\n .map(([key, value]) => {\n if (key === \"type\") {\n return `${CommandTags[value as CommandTags]}(0x${value?.toString(16).padStart(2, \"0\")}):`;\n }\n return ` ${key}: ${value instanceof Uint8Array ? bufferToHexaString(value, false) : value}`;\n })\n .join(\"\\n\"),\n );\n }\n\n getPublicKey(): Maybe<string> {\n switch (this.bytes[0]) {\n case CommandTags.AddMember:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.AddMember:\n return Just(data.publicKey);\n case CommandTags.PublishKey:\n return Just(data.recipient);\n default:\n return Nothing;\n }\n })\n .map((str) => bufferToHexaString(str, false));\n\n default:\n return Nothing;\n }\n }\n\n getEncryptedPublishedKey(): Maybe<EncryptedPublishedKey> {\n switch (this.bytes[0]) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return this.parse()\n .toMaybe()\n .chain((data) => {\n switch (data.type) {\n case CommandTags.Seed:\n case CommandTags.Derive:\n case CommandTags.PublishKey:\n return Maybe.of({ ...data });\n default:\n return Nothing;\n }\n });\n default:\n return Nothing;\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["LKRPCommand_exports", "__export", "LKRPCommand", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_Tags", "import_derivationPath", "import_TLVParser", "bytes", "data", "hex", "tlv", "permissions", "key", "value", "str"]
|
|
7
7
|
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";var r=require("purify-ts"),
|
|
2
|
-
`)))}),it("should fail for invalid command bytes format",()=>{const
|
|
1
|
+
"use strict";var r=require("purify-ts"),a=require("../../api/model/Errors"),c=require("../../api/model/Permissions"),x=require("../models/Tags"),t=require("./LKRPCommand");describe("LKRPCommand",()=>{describe("fromData",()=>{it("should encode add member permissions correctly",()=>{const e=Uint8Array.from([2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193]),n=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"OWNER",publicKey:e,permissions:c.Permissions.OWNER}),o=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"READER",publicKey:e,permissions:c.Permissions.CAN_ENCRYPT}),i=t.LKRPCommand.fromData({type:x.CommandTags.AddMember,name:"DAPP",publicKey:e,permissions:c.Permissions.OWNER&~c.Permissions.CAN_ADD_BLOCK});expect(n.toString()).toBe(["11 30","04 05 4f 57 4e 45 52","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 ff ff ff ff"].join("").replace(/ /g,"")),expect(o.toString()).toBe(["11 31","04 06 52 45 41 44 45 52","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 00 00 00 01"].join("").replace(/ /g,"")),expect(i.toString()).toBe(["11 2f","04 04 44 41 50 50","06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1","01 04 ff ff ff fb"].join("").replace(/ /g,""))})}),describe("bytesFromUnsignedData",()=>{it("should encode add member permissions correctly",()=>{const e=Uint8Array.from([2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193]),n=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"OWNER",publicKey:e,permissions:c.Permissions.OWNER}),o=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"READER",publicKey:e,permissions:c.Permissions.CAN_ENCRYPT}),i=t.LKRPCommand.bytesFromUnsignedData({type:x.CommandTags.AddMember,name:"DAPP",publicKey:e,permissions:c.Permissions.OWNER&~c.Permissions.CAN_ADD_BLOCK});expect(n).toEqual(Uint8Array.from([[17,48],[4,5,79,87,78,69,82],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,255,255,255,255]].flat())),expect(o).toEqual(Uint8Array.from([[17,49],[4,6,82,69,65,68,69,82],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,0,0,0,1]].flat())),expect(i).toEqual(Uint8Array.from([[17,47],[4,4,68,65,80,80],[6,33,2,191,92,13,155,240,244,149,22,40,90,210,3,146,196,196,184,113,20,246,196,140,132,115,6,222,31,231,243,147,78,67,193],[1,4,255,255,255,251]].flat()))})}),describe("toString",()=>{it("should return the hex of the bytes of the command",()=>{const e="0102030405060708",n=t.LKRPCommand.fromHex(e);expect(n.toString()).toBe(e)})}),describe("toU8A",()=>{it("should return the bytes of the command",()=>{const e=new Uint8Array([1,2,3,4,5,6,7,8]),n=new t.LKRPCommand(e);expect(n.toU8A()).toBe(e)})}),describe("parse",()=>{it("should parse the command data correctly",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Int,2,1,2,x.GeneralTags.PublicKey,3,2,4,6,x.GeneralTags.Bytes,3,3,5,7,x.GeneralTags.Bytes,3,4,8,16,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,e.length,...e]));expect(n.parse()).toStrictEqual((0,r.Right)({type:x.CommandTags.Seed,topic:new Uint8Array([1,2,3]),protocolVersion:258,groupKey:new Uint8Array([2,4,6]),initializationVector:new Uint8Array([3,5,7]),encryptedXpriv:new Uint8Array([4,8,16]),ephemeralPublicKey:new Uint8Array([10,11,12])}))}),it("should fail with invalid command bytes",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,1,1]));expect(e.parse()).toStrictEqual((0,r.Left)(new a.LKRPParsingError("Invalid end of TLV, expected length")))})}),describe("getPublicKey",()=>{it("should return the public key for AddMember command",()=>{const e=new Uint8Array([x.GeneralTags.String,3,65,66,67,x.GeneralTags.PublicKey,3,4,5,6,x.GeneralTags.Int,1,1]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.AddMember,e.length,...e]));expect(n.getPublicKey()).toStrictEqual((0,r.Just)("040506"))}),it("should return the public key for PublishKey commands",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Bytes,3,4,5,6,x.GeneralTags.PublicKey,3,7,8,9,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.PublishKey,e.length,...e]));expect(n.getPublicKey()).toEqual((0,r.Just)("070809"))}),it("should return undefined for other command types",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed]));expect(e.getPublicKey()).toEqual(r.Nothing)})}),describe("toHuman",()=>{it("should return a string representation of the command",()=>{const e=new Uint8Array([x.GeneralTags.Bytes,3,1,2,3,x.GeneralTags.Bytes,3,4,5,6,x.GeneralTags.PublicKey,3,7,8,9,x.GeneralTags.PublicKey,3,10,11,12]),n=new t.LKRPCommand(new Uint8Array([x.CommandTags.PublishKey,e.length,...e]));expect(n.toHuman()).toStrictEqual((0,r.Right)(["PublishKey(0x12):"," initializationVector: 010203"," encryptedXpriv: 040506"," recipient: 070809"," ephemeralPublicKey: 0a0b0c"].join(`
|
|
2
|
+
`)))}),it("should fail for invalid command bytes format",()=>{const e=new t.LKRPCommand(new Uint8Array([x.CommandTags.Seed,1,1]));expect(e.toHuman()).toStrictEqual((0,r.Left)(new a.LKRPParsingError("Invalid end of TLV, expected length")))})})});
|
|
3
3
|
//# sourceMappingURL=LKRPCommand.test.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/LKRPCommand.test.ts"],
|
|
4
|
-
"sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
|
|
5
|
-
"mappings": "aAAA,IAAAA,EAA2C,qBAE3CC,EAAiC,
|
|
6
|
-
"names": ["import_purify_ts", "import_Errors", "import_Tags", "import_LKRPCommand", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
|
|
4
|
+
"sourcesContent": ["import { Just, Left, Nothing, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { Permissions } from \"@api/model/Permissions\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ndescribe(\"LKRPCommand\", () => {\n describe(\"fromData\", () => {\n it(\"should encode add member permissions correctly\", () => {\n // GIVEN\n const publicKey = Uint8Array.from([\n 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16, 0x28, 0x5a, 0xd2,\n 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6, 0xc4, 0x8c, 0x84, 0x73,\n 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e, 0x43, 0xc1,\n ]);\n // WHEN\n const addOwner = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"OWNER\",\n publicKey,\n permissions: Permissions.OWNER,\n });\n const addReader = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"READER\",\n publicKey,\n permissions: Permissions.CAN_ENCRYPT,\n });\n const dapp = LKRPCommand.fromData({\n type: CommandTags.AddMember,\n name: \"DAPP\",\n publicKey,\n permissions: Permissions.OWNER & ~Permissions.CAN_ADD_BLOCK,\n });\n // THEN\n expect(addOwner.toString()).toBe(\n [\n \"11 30\", // header\n \"04 05 4f 57 4e 45 52\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 ff ff ff ff\", // permissions (OWNER)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n expect(addReader.toString()).toBe(\n [\n \"11 31\", // header\n \"04 06 52 45 41 44 45 52\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 00 00 00 01\", // permissions (CAN_ENCRYPT)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n expect(dapp.toString()).toBe(\n [\n \"11 2f\", // header\n \"04 04 44 41 50 50\", // name\n \"06 21 02 bf 5c 0d 9b f0 f4 95 16 28 5a d2 03 92 c4 c4 b8 71 14 f6 c4 8c 84 73 06 de 1f e7 f3 93 4e 43 c1\", // public key\n \"01 04 ff ff ff fb\", // permissions (OWNER & ~CAN_ADD_BLOCK)\n ]\n .join(\"\")\n .replace(/ /g, \"\"),\n );\n });\n });\n\n describe(\"bytesFromUnsignedData\", () => {\n it(\"should encode add member permissions correctly\", () => {\n // GIVEN\n const publicKey = Uint8Array.from([\n 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16, 0x28, 0x5a, 0xd2,\n 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6, 0xc4, 0x8c, 0x84, 0x73,\n 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e, 0x43, 0xc1,\n ]);\n // WHEN\n const addOwner = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"OWNER\",\n publicKey,\n permissions: Permissions.OWNER,\n });\n const addReader = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"READER\",\n publicKey,\n permissions: Permissions.CAN_ENCRYPT,\n });\n const dapp = LKRPCommand.bytesFromUnsignedData({\n type: CommandTags.AddMember,\n name: \"DAPP\",\n publicKey,\n permissions: Permissions.OWNER & ~Permissions.CAN_ADD_BLOCK,\n });\n // THEN\n expect(addOwner).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x30], // header\n [0x04, 0x05, 0x4f, 0x57, 0x4e, 0x45, 0x52], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0xff, 0xff, 0xff, 0xff], // permissions (OWNER)\n ].flat(),\n ),\n );\n expect(addReader).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x31], // header\n [0x04, 0x06, 0x52, 0x45, 0x41, 0x44, 0x45, 0x52], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0x00, 0x00, 0x00, 0x01], // permissions (CAN_ENCRYPT)\n ].flat(),\n ),\n );\n expect(dapp).toEqual(\n Uint8Array.from(\n [\n [0x11, 0x2f], // header\n [0x04, 0x04, 0x44, 0x41, 0x50, 0x50], // name\n [\n // public key\n 0x06, 0x21, 0x02, 0xbf, 0x5c, 0x0d, 0x9b, 0xf0, 0xf4, 0x95, 0x16,\n 0x28, 0x5a, 0xd2, 0x03, 0x92, 0xc4, 0xc4, 0xb8, 0x71, 0x14, 0xf6,\n 0xc4, 0x8c, 0x84, 0x73, 0x06, 0xde, 0x1f, 0xe7, 0xf3, 0x93, 0x4e,\n 0x43, 0xc1,\n ],\n [0x01, 0x04, 0xff, 0xff, 0xff, 0xfb], // permissions (OWNER & ~CAN_ADD_BLOCK)\n ].flat(),\n ),\n );\n });\n });\n\n describe(\"toString\", () => {\n it(\"should return the hex of the bytes of the command\", () => {\n // WHEN\n const hex = \"0102030405060708\";\n const command = LKRPCommand.fromHex(hex);\n // THEN\n expect(command.toString()).toBe(hex);\n });\n });\n\n describe(\"toU8A\", () => {\n it(\"should return the bytes of the command\", () => {\n // WHEN\n const bytes = new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]);\n const command = new LKRPCommand(bytes);\n // THEN\n expect(command.toU8A()).toBe(bytes);\n });\n });\n\n describe(\"parse\", () => {\n it(\"should parse the command data correctly\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Topic\n ...[GeneralTags.Int, 2, 0x01, 0x02], // Protocol Version\n ...[GeneralTags.PublicKey, 3, 0x02, 0x04, 0x06], // Group Key\n ...[GeneralTags.Bytes, 3, 0x03, 0x05, 0x07], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x08, 0x10], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, value.length, ...value]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Right({\n type: CommandTags.Seed,\n topic: new Uint8Array([0x01, 0x02, 0x03]),\n protocolVersion: 258,\n groupKey: new Uint8Array([0x02, 0x04, 0x06]),\n initializationVector: new Uint8Array([0x03, 0x05, 0x07]),\n encryptedXpriv: new Uint8Array([0x04, 0x08, 0x10]),\n ephemeralPublicKey: new Uint8Array([0x0a, 0x0b, 0x0c]),\n }),\n );\n });\n\n it(\"should fail with invalid command bytes\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.parse()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n\n describe(\"getPublicKey\", () => {\n it(\"should return the public key for AddMember command\", () => {\n // GIVEN\n const addMemberValue = new Uint8Array([\n ...[GeneralTags.String, 3, 0x41, 0x42, 0x43], // Name \"ABC\"\n ...[GeneralTags.PublicKey, 3, 0x04, 0x05, 0x06], // Public Key\n ...[GeneralTags.Int, 1, 0x01], // Permissions\n ]);\n\n // WHEN\n const addMemberCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.AddMember,\n addMemberValue.length,\n ...addMemberValue,\n ]),\n );\n\n // THEN\n expect(addMemberCmd.getPublicKey()).toStrictEqual(Just(\"040506\"));\n });\n\n it(\"should return the public key for PublishKey commands\", () => {\n // GIVEN\n const publishKeyValue = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const publishKeyCmd = new LKRPCommand(\n new Uint8Array([\n CommandTags.PublishKey,\n publishKeyValue.length,\n ...publishKeyValue,\n ]),\n );\n // THEN\n expect(publishKeyCmd.getPublicKey()).toEqual(Just(\"070809\"));\n });\n\n it(\"should return undefined for other command types\", () => {\n // WHEN\n const command = new LKRPCommand(new Uint8Array([CommandTags.Seed]));\n // THEN\n expect(command.getPublicKey()).toEqual(Nothing);\n });\n });\n\n describe(\"toHuman\", () => {\n it(\"should return a string representation of the command\", () => {\n // GIVEN\n const value = new Uint8Array([\n ...[GeneralTags.Bytes, 3, 0x01, 0x02, 0x03], // Initialization Vector\n ...[GeneralTags.Bytes, 3, 0x04, 0x05, 0x06], // Encrypted xpriv\n ...[GeneralTags.PublicKey, 3, 0x07, 0x08, 0x09], // Recipient\n ...[GeneralTags.PublicKey, 3, 0x0a, 0x0b, 0x0c], // Ephemeral Public Key\n ]);\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.PublishKey, value.length, ...value]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Right(\n [\n `PublishKey(0x12):`,\n ` initializationVector: 010203`,\n ` encryptedXpriv: 040506`,\n ` recipient: 070809`,\n ` ephemeralPublicKey: 0a0b0c`,\n ].join(\"\\n\"),\n ),\n );\n });\n\n it(\"should fail for invalid command bytes format\", () => {\n // WHEN\n const command = new LKRPCommand(\n new Uint8Array([CommandTags.Seed, 1, ...[0x01]]),\n );\n // THEN\n expect(command.toHuman()).toStrictEqual(\n Left(new LKRPParsingError(\"Invalid end of TLV, expected length\")),\n );\n });\n });\n});\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["import_purify_ts", "import_Errors", "import_Permissions", "import_Tags", "import_LKRPCommand", "publicKey", "addOwner", "addReader", "dapp", "hex", "command", "bytes", "value", "addMemberValue", "addMemberCmd", "publishKeyValue", "publishKeyCmd"]
|
|
7
7
|
}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var P=(o,e)=>{for(var t in e)u(o,t,{get:e[t],enumerable:!0})},E=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of m(e))!f.call(o,s)&&s!==t&&u(o,s,{get:()=>e[s],enumerable:!(n=y(e,s))||n.enumerable});return o};var v=o=>E(u({},"__esModule",{value:!0}),o);var L={};P(L,{TLVParser:()=>b});module.exports=v(L);var r=require("purify-ts"),i=require("../../api/
|
|
1
|
+
"use strict";var u=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var m=Object.getOwnPropertyNames;var f=Object.prototype.hasOwnProperty;var P=(o,e)=>{for(var t in e)u(o,t,{get:e[t],enumerable:!0})},E=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of m(e))!f.call(o,s)&&s!==t&&u(o,s,{get:()=>e[s],enumerable:!(n=y(e,s))||n.enumerable});return o};var v=o=>E(u({},"__esModule",{value:!0}),o);var L={};P(L,{TLVParser:()=>b});module.exports=v(L);var c=require("@ledgerhq/device-management-kit"),r=require("purify-ts"),i=require("../../api/model/Errors"),a=require("../models/Tags"),d=require("./derivationPath"),h=require("./eitherSeqRecord"),g=require("./LKRPCommand");const K=3;class b{bytes;parser;offset=0;constructor(e){this.bytes=e,this.parser=this.parseTLV(e)}get state(){return{offset:this.offset,isDone:this.offset>=this.bytes.length}}parse(){return this.parser.next().value}tlvEncoded(e){const t=this.offset;return e().map(()=>this.bytes.slice(t,this.offset))}parseNull(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Null?(0,r.Left)(new i.LKRPParsingError("Expected null")):(0,r.Right)(e.value))}parseInt(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Int?(0,r.Left)(new i.LKRPParsingError("Expected a number")):(0,r.Right)(e.value))}parseHash(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Hash?(0,r.Left)(new i.LKRPParsingError("Expected a hash")):(0,r.Right)(e.value))}parseSignature(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Signature?(0,r.Left)(new i.LKRPParsingError("Expected a signature")):(0,r.Right)(e.value))}parseString(){return this.parse().chain(e=>e.tag!==a.GeneralTags.String?(0,r.Left)(new i.LKRPParsingError("Expected a string")):(0,r.Right)(e.value))}parseBytes(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Bytes?(0,r.Left)(new i.LKRPParsingError("Expected bytes")):(0,r.Right)(e.value))}parsePublicKey(){return this.parse().chain(e=>e.tag!==a.GeneralTags.PublicKey?(0,r.Left)(new i.LKRPParsingError("Expected a public key")):(0,r.Right)(e.value))}parseCommandBytes(){return this.parse().chain(({tag:e,value:t})=>e<16||e>63||!(t instanceof Uint8Array)?(0,r.Left)(new i.LKRPParsingError(`Invalid command type: 0x${e.toString(16).padStart(2,"0")}`)):(0,r.Right)(t))}parseCommandData(){const e=this.parseCommandBytes(),t=this.offset;return e.chain(n=>{const s=n[0];switch(this.offset-=n.length-2,s){case a.CommandTags.Seed:return(0,h.eitherSeqRecord)({type:s,topic:()=>this.parseBytes(),protocolVersion:()=>this.parseInt(),groupKey:()=>this.parsePublicKey(),initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),ephemeralPublicKey:()=>this.parsePublicKey()});case a.CommandTags.AddMember:return(0,h.eitherSeqRecord)({type:s,name:()=>this.parseString(),publicKey:()=>this.parsePublicKey(),permissions:()=>this.parseInt()});case a.CommandTags.PublishKey:return(0,h.eitherSeqRecord)({type:s,initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),recipient:()=>this.parsePublicKey(),ephemeralPublicKey:()=>this.parsePublicKey()});case a.CommandTags.Derive:return(0,h.eitherSeqRecord)({type:s,path:()=>this.parseBytes().map(d.derivationPathAsString),groupKey:()=>this.parsePublicKey(),initializationVector:()=>this.parseBytes(),encryptedXpriv:()=>this.parseBytes(),ephemeralPublicKey:()=>this.parsePublicKey()});default:return(0,r.Left)(new i.LKRPParsingError(`Unsupported command type: 0x${s?.toString(16).padStart(2,"0")}`))}}).chain(n=>this.offset===t?(0,r.Right)(n):(0,r.Left)(new i.LKRPParsingError("Command was parsed incorrectly")))}parseCommands(){return this.parse().chain(e=>e.tag!==a.GeneralTags.Int?(0,r.Left)(new i.LKRPParsingError("Expected a command count")):(0,r.Right)(e.value)).chain(e=>{const t=[];for(let n=0;n<e;n++){const s=this.parseCommandBytes();if(s.isLeft())return s;s.ifRight(l=>t.push(new g.LKRPCommand(l)))}return(0,r.Right)(t)})}parseBlockData(){const e=this.offset;return this.parseInt().chain(t=>(0,h.eitherSeqRecord)({parent:()=>this.parseHash().map(n=>(0,c.bufferToHexaString)(n,!1)),issuer:()=>this.parsePublicKey(),header:()=>(0,r.Right)(this.bytes.slice(e,this.offset+K)),commands:()=>this.parseCommands(),signature:()=>this.tlvEncoded(()=>this.parseSignature())}))}*parseTLV(e){for(;;){const t=e[this.offset];if(typeof t>"u")return(0,r.Left)(new i.LKRPParsingError("Unexpected end of TLV"));this.offset++;const n=e[this.offset];if(typeof n>"u")return(0,r.Left)(new i.LKRPParsingError("Invalid end of TLV, expected length"));this.offset++;const s=this.offset+n,l=e.slice(this.offset,s);if(s>e.length)return(0,r.Left)(new i.LKRPParsingError("Invalid end of TLV value"));switch(this.offset=s,t){case a.GeneralTags.Null:yield n>0?(0,r.Left)(new i.LKRPParsingError("Invalid null length")):(0,r.Right)({tag:t,value:null});break;case a.GeneralTags.Int:{const p=new DataView(l.buffer);switch(l.length){case 1:yield(0,r.Right)({tag:t,value:p.getUint8(0)});break;case 2:yield(0,r.Right)({tag:t,value:p.getUint16(0,!1)});break;case 4:yield(0,r.Right)({tag:t,value:p.getUint32(0,!1)});break;default:yield(0,r.Left)(new i.LKRPParsingError("Unsupported integer length"))}}break;case a.GeneralTags.String:yield l.length===0?(0,r.Left)(new i.LKRPParsingError("Empty string value")):(0,r.Right)({tag:t,value:new TextDecoder().decode(l)});break;case a.GeneralTags.Hash:case a.GeneralTags.Signature:case a.GeneralTags.Bytes:case a.GeneralTags.PublicKey:yield(0,r.Right)({tag:t,value:l});break;default:yield(0,r.Right)({tag:t,value:new Uint8Array([t,n,...l])});break}}}}0&&(module.exports={TLVParser});
|
|
2
2
|
//# sourceMappingURL=TLVParser.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/internal/utils/TLVParser.ts"],
|
|
4
|
-
"sourcesContent": ["import { type Either, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/app-binder/Errors\";\nimport { type LKRPBlockParsedData } from \"@internal/models/LKRPBlockTypes\";\nimport { type LKRPCommandData } from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { derivationPathAsString } from \"./derivationPath\";\nimport { eitherSeqRecord } from \"./eitherSeqRecord\";\nimport { bytesToHex } from \"./hex\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ntype ParserValue = Either<\n LKRPParsingError,\n | { tag: GeneralTags.Null; value: null }\n | { tag: GeneralTags.Int; value: number }\n | { tag: GeneralTags.Hash; value: Uint8Array }\n | { tag: GeneralTags.Signature; value: Uint8Array }\n | { tag: GeneralTags.String; value: string }\n | { tag: GeneralTags.Bytes; value: Uint8Array }\n | { tag: GeneralTags.PublicKey; value: Uint8Array }\n | { tag: CommandTags; value: Uint8Array }\n | {\n tag: Exclude<number, GeneralTags | CommandTags>;\n value: null | number | Uint8Array;\n }\n>;\n\ntype Parser = Generator<ParserValue, ParserValue, void>;\n\nconst COMMAND_COUNT_LENGTH = 3;\n\nexport class TLVParser {\n private readonly bytes: Uint8Array;\n private readonly parser: Parser;\n private offset = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.parser = this.parseTLV(bytes);\n }\n\n get state() {\n return {\n offset: this.offset,\n isDone: this.offset >= this.bytes.length,\n };\n }\n\n parse(): ParserValue {\n return this.parser.next().value;\n }\n\n tlvEncoded(\n fn: () => Either<LKRPParsingError, unknown>,\n ): Either<LKRPParsingError, Uint8Array> {\n const start = this.offset;\n return fn().map(() => this.bytes.slice(start, this.offset));\n }\n\n parseNull(): Either<LKRPParsingError, null> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Null\n ? Left(new LKRPParsingError(\"Expected null\"))\n : Right(next.value),\n );\n }\n\n parseInt(): Either<LKRPParsingError, number> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a number\"))\n : Right(next.value),\n );\n }\n\n parseHash(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Hash\n ? Left(new LKRPParsingError(\"Expected a hash\"))\n : Right(next.value),\n );\n }\n\n parseSignature(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Signature\n ? Left(new LKRPParsingError(\"Expected a signature\"))\n : Right(next.value),\n );\n }\n\n parseString(): Either<LKRPParsingError, string> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.String\n ? Left(new LKRPParsingError(\"Expected a string\"))\n : Right(next.value),\n );\n }\n\n parseBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Bytes\n ? Left(new LKRPParsingError(\"Expected bytes\"))\n : Right(next.value),\n );\n }\n\n parsePublicKey(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.PublicKey\n ? Left(new LKRPParsingError(\"Expected a public key\"))\n : Right(next.value),\n );\n }\n\n parseCommandBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain(({ tag, value }) =>\n tag < 0x10 || tag > 0x3f || !(value instanceof Uint8Array)\n ? Left(\n new LKRPParsingError(\n `Invalid command type: 0x${tag.toString(16).padStart(2, \"0\")}`,\n ),\n )\n : Right(value),\n );\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Commands\n parseCommandData(): Either<LKRPParsingError, LKRPCommandData> {\n const bytes = this.parseCommandBytes();\n const end = this.offset;\n\n return bytes\n .chain<LKRPParsingError, LKRPCommandData>((value) => {\n const type = value[0];\n this.offset -= value.length - 2; // Adjust offset to the start of the command\n switch (type) {\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Seed-(0x10)\n case CommandTags.Seed:\n return eitherSeqRecord({\n type,\n topic: () => this.parseBytes(),\n protocolVersion: () => this.parseInt(),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#AddMember-(0x11)\n case CommandTags.AddMember:\n return eitherSeqRecord({\n type,\n name: () => this.parseString(),\n publicKey: () => this.parsePublicKey(),\n permissions: () => this.parseInt(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#PublishKey-(0x12)\n case CommandTags.PublishKey:\n return eitherSeqRecord({\n type,\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n recipient: () => this.parsePublicKey(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Derive-(0x15)\n case CommandTags.Derive:\n return eitherSeqRecord({\n type,\n path: () => this.parseBytes().map(derivationPathAsString),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n default:\n return Left(\n new LKRPParsingError(\n `Unsupported command type: 0x${type?.toString(16).padStart(2, \"0\")}`,\n ),\n );\n }\n })\n .chain((data) =>\n this.offset === end\n ? Right(data)\n : Left(new LKRPParsingError(\"Command was parsed incorrectly\")),\n );\n }\n\n parseCommands(): Either<LKRPParsingError, LKRPCommand[]> {\n return this.parse()\n .chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a command count\"))\n : Right(next.value),\n )\n .chain((count) => {\n const commands: LKRPCommand[] = [];\n for (let i = 0; i < count; i++) {\n const command = this.parseCommandBytes();\n if (command.isLeft()) return command;\n command.ifRight((value) => commands.push(new LKRPCommand(value)));\n }\n return Right(commands);\n });\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Block\n parseBlockData(): Either<LKRPParsingError, LKRPBlockParsedData> {\n const startOffset = this.offset;\n return this.parseInt().chain((_version) =>\n eitherSeqRecord({\n parent: () => this.parseHash().map(bytesToHex),\n issuer: () => this.parsePublicKey(),\n header: () =>\n Right(\n this.bytes.slice(startOffset, this.offset + COMMAND_COUNT_LENGTH),\n ),\n commands: () => this.parseCommands(),\n signature: () => this.tlvEncoded(() => this.parseSignature()),\n }),\n );\n }\n\n private *parseTLV(bytes: Uint8Array): Parser {\n while (true) {\n const tag = bytes[this.offset];\n if (typeof tag === \"undefined\") {\n return Left(new LKRPParsingError(\"Unexpected end of TLV\"));\n }\n this.offset++;\n const length = bytes[this.offset];\n if (typeof length === \"undefined\") {\n return Left(\n new LKRPParsingError(\"Invalid end of TLV, expected length\"),\n );\n }\n this.offset++;\n const valueEnd = this.offset + length;\n const value = bytes.slice(this.offset, valueEnd);\n if (valueEnd > bytes.length) {\n return Left(new LKRPParsingError(\"Invalid end of TLV value\"));\n }\n this.offset = valueEnd;\n\n switch (tag) {\n case GeneralTags.Null:\n yield length > 0\n ? Left(new LKRPParsingError(\"Invalid null length\"))\n : Right({ tag, value: null });\n break;\n\n case GeneralTags.Int:\n {\n const dataView = new DataView(value.buffer);\n switch (value.length) {\n case 1:\n yield Right({ tag, value: dataView.getUint8(0) });\n break;\n case 2:\n yield Right({ tag, value: dataView.getUint16(0, false) }); // Big-endian\n break;\n case 4:\n yield Right({ tag, value: dataView.getUint32(0, false) }); // Big-endian\n break;\n default:\n yield Left(new LKRPParsingError(\"Unsupported integer length\"));\n }\n }\n break;\n\n case GeneralTags.String:\n yield value.length === 0\n ? Left(new LKRPParsingError(\"Empty string value\"))\n : Right({ tag, value: new TextDecoder().decode(value) });\n break;\n\n case GeneralTags.Hash:\n case GeneralTags.Signature:\n case GeneralTags.Bytes:\n case GeneralTags.PublicKey:\n yield Right({ tag, value });\n break;\n\n default:\n yield Right({ tag, value: new Uint8Array([tag, length, ...value]) });\n break;\n }\n }\n }\n}\n"],
|
|
5
|
-
"mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,eAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAyC,qBAEzCC,EAAiC,
|
|
6
|
-
"names": ["TLVParser_exports", "__export", "TLVParser", "__toCommonJS", "import_purify_ts", "import_Errors", "import_Tags", "import_derivationPath", "import_eitherSeqRecord", "
|
|
4
|
+
"sourcesContent": ["import { bufferToHexaString } from \"@ledgerhq/device-management-kit\";\nimport { type Either, Left, Right } from \"purify-ts\";\n\nimport { LKRPParsingError } from \"@api/model/Errors\";\nimport { type LKRPBlockParsedData } from \"@internal/models/LKRPBlockTypes\";\nimport { type LKRPCommandData } from \"@internal/models/LKRPCommandTypes\";\nimport { CommandTags, GeneralTags } from \"@internal/models/Tags\";\n\nimport { derivationPathAsString } from \"./derivationPath\";\nimport { eitherSeqRecord } from \"./eitherSeqRecord\";\nimport { LKRPCommand } from \"./LKRPCommand\";\n\ntype ParserValue = Either<\n LKRPParsingError,\n | { tag: GeneralTags.Null; value: null }\n | { tag: GeneralTags.Int; value: number }\n | { tag: GeneralTags.Hash; value: Uint8Array }\n | { tag: GeneralTags.Signature; value: Uint8Array }\n | { tag: GeneralTags.String; value: string }\n | { tag: GeneralTags.Bytes; value: Uint8Array }\n | { tag: GeneralTags.PublicKey; value: Uint8Array }\n | { tag: CommandTags; value: Uint8Array }\n | {\n tag: Exclude<number, GeneralTags | CommandTags>;\n value: null | number | Uint8Array;\n }\n>;\n\ntype Parser = Generator<ParserValue, ParserValue, void>;\n\nconst COMMAND_COUNT_LENGTH = 3;\n\nexport class TLVParser {\n private readonly bytes: Uint8Array;\n private readonly parser: Parser;\n private offset = 0;\n\n constructor(bytes: Uint8Array) {\n this.bytes = bytes;\n this.parser = this.parseTLV(bytes);\n }\n\n get state() {\n return {\n offset: this.offset,\n isDone: this.offset >= this.bytes.length,\n };\n }\n\n parse(): ParserValue {\n return this.parser.next().value;\n }\n\n tlvEncoded(\n fn: () => Either<LKRPParsingError, unknown>,\n ): Either<LKRPParsingError, Uint8Array> {\n const start = this.offset;\n return fn().map(() => this.bytes.slice(start, this.offset));\n }\n\n parseNull(): Either<LKRPParsingError, null> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Null\n ? Left(new LKRPParsingError(\"Expected null\"))\n : Right(next.value),\n );\n }\n\n parseInt(): Either<LKRPParsingError, number> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a number\"))\n : Right(next.value),\n );\n }\n\n parseHash(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Hash\n ? Left(new LKRPParsingError(\"Expected a hash\"))\n : Right(next.value),\n );\n }\n\n parseSignature(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Signature\n ? Left(new LKRPParsingError(\"Expected a signature\"))\n : Right(next.value),\n );\n }\n\n parseString(): Either<LKRPParsingError, string> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.String\n ? Left(new LKRPParsingError(\"Expected a string\"))\n : Right(next.value),\n );\n }\n\n parseBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.Bytes\n ? Left(new LKRPParsingError(\"Expected bytes\"))\n : Right(next.value),\n );\n }\n\n parsePublicKey(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain((next) =>\n next.tag !== GeneralTags.PublicKey\n ? Left(new LKRPParsingError(\"Expected a public key\"))\n : Right(next.value),\n );\n }\n\n parseCommandBytes(): Either<LKRPParsingError, Uint8Array> {\n return this.parse().chain(({ tag, value }) =>\n tag < 0x10 || tag > 0x3f || !(value instanceof Uint8Array)\n ? Left(\n new LKRPParsingError(\n `Invalid command type: 0x${tag.toString(16).padStart(2, \"0\")}`,\n ),\n )\n : Right(value),\n );\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Commands\n parseCommandData(): Either<LKRPParsingError, LKRPCommandData> {\n const bytes = this.parseCommandBytes();\n const end = this.offset;\n\n return bytes\n .chain<LKRPParsingError, LKRPCommandData>((value) => {\n const type = value[0];\n this.offset -= value.length - 2; // Adjust offset to the start of the command\n switch (type) {\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Seed-(0x10)\n case CommandTags.Seed:\n return eitherSeqRecord({\n type,\n topic: () => this.parseBytes(),\n protocolVersion: () => this.parseInt(),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#AddMember-(0x11)\n case CommandTags.AddMember:\n return eitherSeqRecord({\n type,\n name: () => this.parseString(),\n publicKey: () => this.parsePublicKey(),\n permissions: () => this.parseInt(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#PublishKey-(0x12)\n case CommandTags.PublishKey:\n return eitherSeqRecord({\n type,\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n recipient: () => this.parsePublicKey(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Derive-(0x15)\n case CommandTags.Derive:\n return eitherSeqRecord({\n type,\n path: () => this.parseBytes().map(derivationPathAsString),\n groupKey: () => this.parsePublicKey(),\n initializationVector: () => this.parseBytes(),\n encryptedXpriv: () => this.parseBytes(),\n ephemeralPublicKey: () => this.parsePublicKey(),\n });\n\n default:\n return Left(\n new LKRPParsingError(\n `Unsupported command type: 0x${type?.toString(16).padStart(2, \"0\")}`,\n ),\n );\n }\n })\n .chain((data) =>\n this.offset === end\n ? Right(data)\n : Left(new LKRPParsingError(\"Command was parsed incorrectly\")),\n );\n }\n\n parseCommands(): Either<LKRPParsingError, LKRPCommand[]> {\n return this.parse()\n .chain((next) =>\n next.tag !== GeneralTags.Int\n ? Left(new LKRPParsingError(\"Expected a command count\"))\n : Right(next.value),\n )\n .chain((count) => {\n const commands: LKRPCommand[] = [];\n for (let i = 0; i < count; i++) {\n const command = this.parseCommandBytes();\n if (command.isLeft()) return command;\n command.ifRight((value) => commands.push(new LKRPCommand(value)));\n }\n return Right(commands);\n });\n }\n\n // https://ledgerhq.atlassian.net/wiki/spaces/TA/pages/4105207815/ARCH+LKRP+-+v1+specifications#Block\n parseBlockData(): Either<LKRPParsingError, LKRPBlockParsedData> {\n const startOffset = this.offset;\n return this.parseInt().chain((_version) =>\n eitherSeqRecord({\n parent: () =>\n this.parseHash().map((buf) => bufferToHexaString(buf, false)),\n issuer: () => this.parsePublicKey(),\n header: () =>\n Right(\n this.bytes.slice(startOffset, this.offset + COMMAND_COUNT_LENGTH),\n ),\n commands: () => this.parseCommands(),\n signature: () => this.tlvEncoded(() => this.parseSignature()),\n }),\n );\n }\n\n private *parseTLV(bytes: Uint8Array): Parser {\n while (true) {\n const tag = bytes[this.offset];\n if (typeof tag === \"undefined\") {\n return Left(new LKRPParsingError(\"Unexpected end of TLV\"));\n }\n this.offset++;\n const length = bytes[this.offset];\n if (typeof length === \"undefined\") {\n return Left(\n new LKRPParsingError(\"Invalid end of TLV, expected length\"),\n );\n }\n this.offset++;\n const valueEnd = this.offset + length;\n const value = bytes.slice(this.offset, valueEnd);\n if (valueEnd > bytes.length) {\n return Left(new LKRPParsingError(\"Invalid end of TLV value\"));\n }\n this.offset = valueEnd;\n\n switch (tag) {\n case GeneralTags.Null:\n yield length > 0\n ? Left(new LKRPParsingError(\"Invalid null length\"))\n : Right({ tag, value: null });\n break;\n\n case GeneralTags.Int:\n {\n const dataView = new DataView(value.buffer);\n switch (value.length) {\n case 1:\n yield Right({ tag, value: dataView.getUint8(0) });\n break;\n case 2:\n yield Right({ tag, value: dataView.getUint16(0, false) }); // Big-endian\n break;\n case 4:\n yield Right({ tag, value: dataView.getUint32(0, false) }); // Big-endian\n break;\n default:\n yield Left(new LKRPParsingError(\"Unsupported integer length\"));\n }\n }\n break;\n\n case GeneralTags.String:\n yield value.length === 0\n ? Left(new LKRPParsingError(\"Empty string value\"))\n : Right({ tag, value: new TextDecoder().decode(value) });\n break;\n\n case GeneralTags.Hash:\n case GeneralTags.Signature:\n case GeneralTags.Bytes:\n case GeneralTags.PublicKey:\n yield Right({ tag, value });\n break;\n\n default:\n yield Right({ tag, value: new Uint8Array([tag, length, ...value]) });\n break;\n }\n }\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["TLVParser_exports", "__export", "TLVParser", "__toCommonJS", "import_device_management_kit", "import_purify_ts", "import_Errors", "import_Tags", "import_derivationPath", "import_eitherSeqRecord", "import_LKRPCommand", "COMMAND_COUNT_LENGTH", "bytes", "fn", "start", "next", "tag", "value", "end", "type", "data", "count", "commands", "i", "command", "startOffset", "_version", "buf", "length", "valueEnd", "dataView"]
|
|
7
7
|
}
|