diff --git a/modules/hdwallet b/modules/hdwallet index 2a24030b..1ae8ea07 160000 --- a/modules/hdwallet +++ b/modules/hdwallet @@ -1 +1 @@ -Subproject commit 2a24030b943b6dfe836126d8aa9d675c8a436add +Subproject commit 1ae8ea0724719e34611f57583b103f2a3ac73a73 diff --git a/projects/keepkey-sdk/lib/index.d.ts b/projects/keepkey-sdk/lib/index.d.ts index 27835644..f98edf60 100644 --- a/projects/keepkey-sdk/lib/index.d.ts +++ b/projects/keepkey-sdk/lib/index.d.ts @@ -1,5 +1,5 @@ import { VaultClient } from './client'; -import type { SdkConfig, DeviceFeatures, DeviceInfo, SignedTx, AddressRequest, EthSignTxParams, EthSignTypedDataParams, EthSignMessageParams, EthVerifyMessageParams, BtcSignTxParams, CosmosAminoSignParams, XrpSignTxParams, BnbSignTxParams, SolanaSignTxParams, SolanaSignOffchainMessageParams, SolanaOffchainMessageSignatureResult, TronSignTxParams, TronSignMessageParams, TronMessageSignatureResult, TronVerifyMessageParams, TronSignTypedHashParams, TronTypedDataSignatureResult, TonSignTxParams, TonSignMessageParams, TonMessageSignatureResult, TonBuildTransferParams, TonBuildTransferResult, TonFinalizeTransferParams, TonFinalizeTransferResult, GetPublicKeyRequest, BatchPubkeysPath, ApplySettingsParams, HealthResponse, SupportedAsset, PortfolioBalancesParams, MarketInfoParams, SearchAssetsParams, ListUnspentParams, PubkeyInfoParams, TxHistoryParams, BroadcastParams, NetworkIdParams, NetworkAddressParams, TokenDecimalsParams, StakingParams, SwapQuoteParams, SweepScanParams, SweepScanStatus, SweepExecuteParams, SweepExecuteResult } from './types'; +import type { SdkConfig, DeviceFeatures, DeviceInfo, SignedTx, AddressRequest, EthSignTxParams, LoadClearsignSignerParams, LoadClearsignSignerResult, EthSignTypedDataParams, EthSignMessageParams, EthVerifyMessageParams, BtcSignTxParams, CosmosAminoSignParams, XrpSignTxParams, BnbSignTxParams, SolanaSignTxParams, SolanaSignOffchainMessageParams, SolanaOffchainMessageSignatureResult, TronSignTxParams, TronSignMessageParams, TronMessageSignatureResult, TronVerifyMessageParams, TronSignTypedHashParams, TronTypedDataSignatureResult, TonSignTxParams, TonSignMessageParams, TonMessageSignatureResult, TonBuildTransferParams, TonBuildTransferResult, TonFinalizeTransferParams, TonFinalizeTransferResult, GetPublicKeyRequest, BatchPubkeysPath, ApplySettingsParams, HealthResponse, SupportedAsset, PortfolioBalancesParams, MarketInfoParams, SearchAssetsParams, ListUnspentParams, PubkeyInfoParams, TxHistoryParams, BroadcastParams, NetworkIdParams, NetworkAddressParams, TokenDecimalsParams, StakingParams, SwapQuoteParams, SweepScanParams, SweepScanStatus, SweepExecuteParams, SweepExecuteResult } from './types'; export { SdkError } from './client'; export * from './types'; /** @@ -216,6 +216,14 @@ export declare class KeepKeySdk { eth: { /** Sign an Ethereum or EVM transaction. Supports legacy and EIP-1559. */ ethSignTransaction: (params: EthSignTxParams) => Promise; + /** + * Load a runtime EVM clear-sign signer into a device key slot (RAM-only, + * user-confirmed on device). The device shows a trust screen naming the + * alias + pubkey fingerprint. Dropped on reboot/wipe — reload per session. + * Firmware 7.15.0+. Used to trust a metadata-signing key (e.g. a CI test + * key in slot 3) so `ethSignTransaction`'s `txMetadata` blobs verify. + */ + loadClearsignSigner: (params: LoadClearsignSignerParams) => Promise; /** Sign a personal message (`eth_sign` / `personal_sign`). */ ethSignMessage: (params: EthSignMessageParams) => Promise; /** Sign an EIP-712 typed data structure. */ diff --git a/projects/keepkey-sdk/lib/index.d.ts.map b/projects/keepkey-sdk/lib/index.d.ts.map index a3b21a44..aa253317 100644 --- a/projects/keepkey-sdk/lib/index.d.ts.map +++ b/projects/keepkey-sdk/lib/index.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/projects/keepkey-sdk/lib/index.js b/projects/keepkey-sdk/lib/index.js index 58bebc18..5f653897 100644 --- a/projects/keepkey-sdk/lib/index.js +++ b/projects/keepkey-sdk/lib/index.js @@ -149,6 +149,14 @@ class KeepKeySdk { this.eth = { /** Sign an Ethereum or EVM transaction. Supports legacy and EIP-1559. */ ethSignTransaction: (params) => this.client.post('/eth/sign-transaction', params), + /** + * Load a runtime EVM clear-sign signer into a device key slot (RAM-only, + * user-confirmed on device). The device shows a trust screen naming the + * alias + pubkey fingerprint. Dropped on reboot/wipe — reload per session. + * Firmware 7.15.0+. Used to trust a metadata-signing key (e.g. a CI test + * key in slot 3) so `ethSignTransaction`'s `txMetadata` blobs verify. + */ + loadClearsignSigner: (params) => this.client.post('/eth/clearsign/load-signer', params), /** Sign a personal message (`eth_sign` / `personal_sign`). */ ethSignMessage: (params) => this.client.post('/eth/sign', params), /** Sign an EIP-712 typed data structure. */ diff --git a/projects/keepkey-sdk/lib/index.js.map b/projects/keepkey-sdk/lib/index.js.map index a4536f3d..1b74f4a0 100644 --- a/projects/keepkey-sdk/lib/index.js.map +++ b/projects/keepkey-sdk/lib/index.js.map @@ -1 +1 @@ -{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/projects/keepkey-sdk/lib/types.d.ts b/projects/keepkey-sdk/lib/types.d.ts index 1549185e..eaed3bd3 100644 --- a/projects/keepkey-sdk/lib/types.d.ts +++ b/projects/keepkey-sdk/lib/types.d.ts @@ -85,6 +85,31 @@ export interface EthSignTxParams { maxFeePerGas?: string; maxPriorityFeePerGas?: string; chainId?: number; + /** + * EVM clear-signing metadata (firmware 7.15.0+). A signed blob, bound to this + * tx's exact sighash, sent as EthereumTxMetadata before signing so the device + * shows decoded contract-call info instead of raw hex. `keyId` names the + * device key slot the blob is signed against (0 = built-in production key; + * 3 = a runtime signer loaded via `loadClearsignSigner`). + */ + txMetadata?: { + signedPayload: string; + keyId?: number; + }; +} +/** Params for `eth.loadClearsignSigner` — POST /eth/clearsign/load-signer. */ +export interface LoadClearsignSignerParams { + /** Device key slot 1-3 (0 = built-in production key, not loadable). */ + keyId: number; + /** 33-byte compressed secp256k1 pubkey, hex (with or without 0x). */ + pubkey: string; + /** Signer label shown on the device trust screen. `[A-Za-z0-9 _-]`, 1-31 chars. */ + alias: string; +} +export interface LoadClearsignSignerResult { + ok: true; + keyId: number; + alias: string; } export interface EthSignTypedDataParams { address: string; @@ -133,6 +158,124 @@ export interface TonSignTxParams { addressNList?: number[]; raw_tx: string; } +export interface TronSignMessageParams { + address_n?: number[]; + addressNList?: number[]; + /** UTF-8 string by default; pass is_text=false to send as hex bytes */ + message: string; + is_text?: boolean; + show_display?: boolean; +} +export interface TronMessageSignatureResult { + /** Base58Check signer address derived from the recovered pubkey */ + address: string; + /** 65-byte recoverable secp256k1 signature (r || s || v), hex-encoded */ + signature: string; +} +export interface TronVerifyMessageParams { + address: string; + /** Hex (with or without 0x) */ + signature: string; + message: string; + is_text?: boolean; +} +export interface TronSignTypedHashParams { + address_n?: number[]; + addressNList?: number[]; + /** 32-byte domainSeparator hash, hex (with or without 0x) */ + domain_separator_hash: string; + /** 32-byte message hash, hex; omit for primaryType=EIP712Domain */ + message_hash?: string; +} +export interface TronTypedDataSignatureResult { + address: string; + /** 65-byte recoverable secp256k1 signature, hex */ + signature: string; +} +export interface TonSignMessageParams { + address_n?: number[]; + addressNList?: number[]; + message: string; + is_text?: boolean; + show_display?: boolean; +} +export interface TonMessageSignatureResult { + /** 32-byte Ed25519 public key, hex */ + publicKey: string; + /** 64-byte Ed25519 signature, hex */ + signature: string; +} +export interface SolanaSignOffchainMessageParams { + address_n?: number[]; + addressNList?: number[]; + message: string; + is_text?: boolean; + /** Spec version. Only 0 currently defined. */ + version?: number; + /** 0 = restricted ASCII, 1 = UTF-8 limited (max 1212 bytes). 2 not supported. */ + message_format?: number; + show_display?: boolean; +} +export interface SolanaOffchainMessageSignatureResult { + /** 32-byte Ed25519 public key, hex */ + publicKey: string; + /** 64-byte Ed25519 signature over the spec envelope, hex */ + signature: string; +} +export interface TonBuildTransferParams { + fromAddress: string; + toAddress: string; + /** Transfer amount in nanoTON, as a decimal string (BigInt-compatible). */ + amountNano: string; + memo?: string; + /** Ed25519 public key hex — only needed for first-time activation. */ + publicKeyHex?: string; +} +/** + * Opaque internal state carried between /ton/build-transfer and + * /ton/finalize-transfer. Callers should echo this back verbatim; + * they don't need to inspect it. + */ +export interface TonBuildResult { + bodyHash: string; + rawTx: string; + seqno: number; + expireAt: number; + toAddress: string; + amountNano: string; + needsDeploy: boolean; + publicKeyHex?: string; + _internal: { + destWorkchain: number; + destHash: string; + fromWorkchain: number; + fromHash: string; + amountNano: string; + bounce: boolean; + memo?: string; + }; +} +export interface TonBuildTransferResult { + build: TonBuildResult; + bodyHash: string; + rawTx: string; + seqno: number; + expireAt: number; + needsDeploy: boolean; + feeEstimate: string; +} +export interface TonFinalizeTransferParams { + build: TonBuildResult; + /** 64-byte Ed25519 signature, hex-encoded (128 chars). */ + signature: string; + /** Default true. When false, vault returns the signed BOC without broadcasting. */ + broadcast?: boolean; +} +export interface TonFinalizeTransferResult { + boc: string; + txid: string; + broadcasted: boolean; +} export interface GetPublicKeyRequest { address_n: number[]; ecdsa_curve_name?: string; diff --git a/projects/keepkey-sdk/lib/types.d.ts.map b/projects/keepkey-sdk/lib/types.d.ts.map index f362dd65..3876df5a 100644 --- a/projects/keepkey-sdk/lib/types.d.ts.map +++ b/projects/keepkey-sdk/lib/types.d.ts.map @@ -1 +1 @@ -{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/projects/keepkey-sdk/openapi/swagger.json b/projects/keepkey-sdk/openapi/swagger.json index cc05a6f7..fef6c8a7 100644 --- a/projects/keepkey-sdk/openapi/swagger.json +++ b/projects/keepkey-sdk/openapi/swagger.json @@ -837,6 +837,55 @@ ] } }, + "/addresses/hive": { + "post": { + "operationId": "HiveGetPublicKey", + "summary": "Get Hive Public Key", + "description": "Get a Hive STM-prefixed public key at the given BIP-32 path, optionally displaying it on-device. Requires firmware v7.14.0+.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "show_display": { "type": "boolean", "example": false }, + "address_n": { + "$ref": "#/components/schemas/types.AddressNList", + "example": [2147483692, 2147485179, 2147483648, 0, 0] + } + }, + "required": ["address_n"], + "example": { + "address_n": [2147483692, 2147485179, 2147483648, 0, 0], + "coin": "Hive", + "show_display": false + } + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { "address": { "type": "string" } }, + "required": ["address"] + } + } + } + }, + "400": { "description": "Bad request" }, + "500": { "description": "Error processing request" } + }, + "security": [{ "apiKey": [] }], + "tags": ["Address"] + } + }, "/addresses/xrp": { "post": { "operationId": "XrpGetAddress", @@ -3988,6 +4037,104 @@ ] } }, + "/ton/build-transfer": { + "post": { + "operationId": "ton_buildTransfer", + "summary": "Build an unsigned TON v4R2 transfer", + "description": "Fetches the sender's current seqno and wallet-initialization state from TonCenter, then constructs the unsigned body cell for a v4R2 wallet transfer. The returned `bodyHash` is the 32-byte hex string the KeepKey firmware signs via `/ton/sign-transaction`; pass the full `build` object back to `/ton/finalize-transfer` with the signature to assemble and broadcast the BOC. Clients never touch BOC/Cell internals.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "fromAddress": { "type": "string", "description": "Sender TON address (bounceable, non-bounceable, or raw workchain:hex)" }, + "toAddress": { "type": "string", "description": "Recipient TON address" }, + "amountNano": { "type": "string", "description": "Transfer amount in nanoTON (decimal string — BigInt-compatible)" }, + "memo": { "type": "string", "description": "Optional plain-text memo attached to the transfer" }, + "publicKeyHex":{ "type": "string", "description": "Sender ed25519 public key hex — required only for first-time activation (StateInit deploy)" } + }, + "required": ["fromAddress", "toAddress", "amountNano"] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "build": { "type": "object", "description": "Opaque build object — echo back to /ton/finalize-transfer unchanged" }, + "bodyHash": { "type": "string", "description": "32-byte hex body-cell hash — pass to /ton/sign-transaction as raw_tx" }, + "rawTx": { "type": "string", "description": "Alias for bodyHash (matches hdwallet's rawTx field)" }, + "seqno": { "type": "number" }, + "expireAt": { "type": "number", "description": "Unix seconds — contract rejects the message past this" }, + "needsDeploy": { "type": "boolean", "description": "True when the wallet has no code on-chain yet; first tx carries StateInit" }, + "feeEstimate": { "type": "string", "description": "Approximate fee in TON (0.005 normal, 0.01 deploy)" } + } + } + } + } + }, + "400": { "description": "Missing publicKeyHex for uninitialized wallet / invalid params" }, + "500": { "description": "Error processing request" }, + "502": { "description": "Upstream TON network error" } + }, + "security": [ { "apiKey": [] } ], + "tags": [ "TON" ] + } + }, + "/ton/finalize-transfer": { + "post": { + "operationId": "ton_finalizeTransfer", + "summary": "Assemble signed BOC from /ton/build-transfer + device signature and broadcast", + "description": "Combines the earlier `build` response with the 64-byte Ed25519 signature returned by `/ton/sign-transaction`, serializes the external message as BOC, and (by default) broadcasts via TonCenter. Pass `broadcast: false` to return the BOC for offline inspection or custom broadcast.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "build": { "type": "object", "description": "Exact object returned by /ton/build-transfer" }, + "signature": { "type": "string", "description": "64-byte Ed25519 signature as 128-char hex" }, + "broadcast": { "type": "boolean", "description": "Default true; set false to skip TonCenter and return the BOC" } + }, + "required": ["build", "signature"] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "boc": { "type": "string", "description": "Base64-encoded signed external message BOC" }, + "txid": { "type": "string", "description": "Hex external-message cell hash — TON's transaction id" }, + "broadcasted": { "type": "boolean" } + } + } + } + } + }, + "400": { "description": "Malformed build object or signature" }, + "500": { "description": "Error processing request" }, + "502": { "description": "TonCenter broadcast failed (BOC + txid preserved in error payload so caller can retry without re-signing)" } + }, + "security": [ { "apiKey": [] } ], + "tags": [ "TON" ] + } + }, "/admin/wallets": { "get": { "operationId": "ListWallets", @@ -4085,13 +4232,58 @@ "application/json": { "schema": { "type": "array", - "items": {} + "items": { + "type": "object", + "properties": { + "busNumber": { "type": "integer", "nullable": true }, + "deviceAddress": { "type": "integer", "nullable": true }, + "portNumbers": { + "type": "array", + "items": { "type": "integer" } + }, + "vendorId": { "type": "integer", "nullable": true }, + "vendorIdHex": { "type": "string", "nullable": true }, + "productId": { "type": "integer", "nullable": true }, + "productIdHex": { "type": "string", "nullable": true }, + "deviceClass": { "type": "integer", "nullable": true }, + "deviceSubClass": { "type": "integer", "nullable": true }, + "deviceProtocol": { "type": "integer", "nullable": true }, + "usbVersion": { "type": "string", "nullable": true }, + "deviceVersion": { "type": "string", "nullable": true }, + "manufacturerIndex": { "type": "integer", "nullable": true }, + "productIndex": { "type": "integer", "nullable": true }, + "serialNumberIndex": { "type": "integer", "nullable": true }, + "isKeepKey": { "type": "boolean" } + }, + "required": [ + "busNumber", + "deviceAddress", + "portNumbers", + "vendorId", + "vendorIdHex", + "productId", + "productIdHex", + "deviceClass", + "deviceSubClass", + "deviceProtocol", + "usbVersion", + "deviceVersion", + "manufacturerIndex", + "productIndex", + "serialNumberIndex", + "isKeepKey" + ] + } } } } } }, - "security": [] + "security": [ + { + "apiKey": [] + } + ] } }, "/admin/usb/state": { @@ -4109,17 +4301,53 @@ "properties": { "connected": { "type": "boolean" + }, + "state": { + "type": "string" + }, + "deviceId": { + "type": "string", + "nullable": true + }, + "label": { + "type": "string", + "nullable": true + }, + "firmwareVersion": { + "type": "string", + "nullable": true + }, + "activeTransport": { + "type": "string", + "nullable": true + }, + "keepKeyOnBus": { + "type": "boolean" + }, + "usbDeviceCount": { + "type": "integer" } }, "required": [ - "connected" + "connected", + "state", + "deviceId", + "label", + "firmwareVersion", + "activeTransport", + "keepKeyOnBus", + "usbDeviceCount" ] } } } } }, - "security": [] + "security": [ + { + "apiKey": [] + } + ] } }, "/admin/info": { @@ -4637,6 +4865,74 @@ ] } }, + "/api/pioneer/status": { + "get": { + "operationId": "GetPioneerStatus", + "summary": "Get current Pioneer API URL", + "description": "Returns the active Pioneer API base URL and whether it is the default.", + "parameters": [], + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "url": { "type": "string" }, + "is_default": { "type": "boolean" } + }, + "required": ["url", "is_default"] + } + } + } + } + }, + "tags": ["System"] + } + }, + "/api/pioneer/url": { + "post": { + "operationId": "SetPioneerUrl", + "summary": "Switch Pioneer API URL", + "description": "Set a custom Pioneer API base URL (e.g. http://localhost:9001). Send empty string to reset to default. Immediately resets the Pioneer client and swap cache.", + "parameters": [], + "requestBody": { + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "url": { "type": "string", "example": "http://localhost:9001" } + }, + "required": ["url"] + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "Ok", + "content": { + "application/json": { + "schema": { + "type": "object", + "properties": { + "url": { "type": "string" }, + "is_default": { "type": "boolean" } + }, + "required": ["url", "is_default"] + } + } + } + }, + "400": { "description": "Invalid URL" } + }, + "security": [{ "apiKey": [] }], + "tags": ["System"] + } + }, "/api/cache/status": { "get": { "operationId": "GetCacheStatus", @@ -6555,4 +6851,4 @@ } } } -} \ No newline at end of file +} diff --git a/projects/keepkey-sdk/src/index.ts b/projects/keepkey-sdk/src/index.ts index f0fe0623..76fdac7f 100644 --- a/projects/keepkey-sdk/src/index.ts +++ b/projects/keepkey-sdk/src/index.ts @@ -6,6 +6,8 @@ import type { SignedTx, AddressRequest, EthSignTxParams, + LoadClearsignSignerParams, + LoadClearsignSignerResult, EthSignTypedDataParams, EthSignMessageParams, EthVerifyMessageParams, @@ -330,6 +332,16 @@ export class KeepKeySdk { ethSignTransaction: (params: EthSignTxParams): Promise => this.client.post('/eth/sign-transaction', params), + /** + * Load a runtime EVM clear-sign signer into a device key slot (RAM-only, + * user-confirmed on device). The device shows a trust screen naming the + * alias + pubkey fingerprint. Dropped on reboot/wipe — reload per session. + * Firmware 7.15.0+. Used to trust a metadata-signing key (e.g. a CI test + * key in slot 3) so `ethSignTransaction`'s `txMetadata` blobs verify. + */ + loadClearsignSigner: (params: LoadClearsignSignerParams): Promise => + this.client.post('/eth/clearsign/load-signer', params), + /** Sign a personal message (`eth_sign` / `personal_sign`). */ ethSignMessage: (params: EthSignMessageParams): Promise => this.client.post('/eth/sign', params), diff --git a/projects/keepkey-sdk/src/types.ts b/projects/keepkey-sdk/src/types.ts index b332849d..3b7772d8 100644 --- a/projects/keepkey-sdk/src/types.ts +++ b/projects/keepkey-sdk/src/types.ts @@ -92,6 +92,33 @@ export interface EthSignTxParams { maxFeePerGas?: string maxPriorityFeePerGas?: string chainId?: number + /** + * EVM clear-signing metadata (firmware 7.15.0+). A signed blob, bound to this + * tx's exact sighash, sent as EthereumTxMetadata before signing so the device + * shows decoded contract-call info instead of raw hex. `keyId` names the + * device key slot the blob is signed against (0 = built-in production key; + * 3 = a runtime signer loaded via `loadClearsignSigner`). + */ + txMetadata?: { + signedPayload: string + keyId?: number + } +} + +/** Params for `eth.loadClearsignSigner` — POST /eth/clearsign/load-signer. */ +export interface LoadClearsignSignerParams { + /** Device key slot 1-3 (0 = built-in production key, not loadable). */ + keyId: number + /** 33-byte compressed secp256k1 pubkey, hex (with or without 0x). */ + pubkey: string + /** Signer label shown on the device trust screen. `[A-Za-z0-9 _-]`, 1-31 chars. */ + alias: string +} + +export interface LoadClearsignSignerResult { + ok: true + keyId: number + alias: string } export interface EthSignTypedDataParams { diff --git a/projects/keepkey-vault/src/bun/calldata-decoder.ts b/projects/keepkey-vault/src/bun/calldata-decoder.ts index c5d67455..a8cc2362 100644 --- a/projects/keepkey-vault/src/bun/calldata-decoder.ts +++ b/projects/keepkey-vault/src/bun/calldata-decoder.ts @@ -1,18 +1,17 @@ /** * Calldata decoder — decodes EVM transaction calldata into human-readable fields - * for the signing approval UI. + * for the signing approval UI. Fully vendored/local — no network round-trip. * - * Three tiers: - * 1. Pioneer client SDK — DecodeCalldata + SignDescriptor (remote, comprehensive) - * 2. Local fallback for common ERC-20 functions (transfer, approve, transferFrom) - * 3. Unknown — selector only + * Two tiers: + * 1. Local decoders for common contracts (ERC-20, Uniswap, THORChain, 0x, …) + * 2. Unknown — selector only * - * All Pioneer calls go through @pioneer-platform/pioneer-client via getPioneer(). - * The only exception is /descriptors/sign which is not yet in the public swagger - * spec — that uses a direct fetch until the spec is regenerated. + * (Pioneer's remote /descriptors/decode + /descriptors/sign are gone — the + * per-tx online signer was removed by design, and both endpoints now 404. + * Firmware clear-signing is driven off the vendored `firmwareClearSigns` + * allowlist below, which mirrors the device's own `ethereum_contractHandled`.) */ import type { CalldataDecodedInfo, CalldataDecodedField } from '../shared/types' -import { getPioneer, getPioneerApiBase } from './pioneer' // ── Helpers ────────────────────────────────────────────────────────────── @@ -33,12 +32,6 @@ function formatUint256(raw: string): string { } } -// ── Chain ID → CAIP-2 mapping ──────────────────────────────────────────── - -function chainIdToNetworkId(chainId: number): string { - return `eip155:${chainId}` -} - // ── Local ERC-20 decoder (offline fallback) ────────────────────────────── interface LocalDecoder { @@ -392,118 +385,66 @@ export function decodeCalldataLocal( return null } -// ── Pioneer SDK calls ─────────────────────────────────────────────────── - -interface PioneerDecodeResponse { - success: boolean - dappName: string - contractName: string - method: string - selector: string - functionType?: string - args: Array<{ name: string; type: string; value: string; format?: string }> +// ── Firmware clear-sign allowlist (mirrors device ethereum_contractHandled) ── +// +// rc3 firmware clear-signs a contract call WITHOUT AdvancedMode and WITHOUT any +// signed-metadata blob ONLY for the pinned (selector, to) pairs below, plus a +// standard 68-byte ERC-20 transfer/approve. Anything else the device blind-signs +// (hard "Blocked" unless AdvancedMode is on). The signing overlay MUST gate off +// THIS — not off "did our decoder recognize the calldata" — otherwise it either +// under-warns (Uniswap/1inch/relay look verified but the device blind-signs) or +// over-forces global AdvancedMode on txs the device would clear-sign natively +// (the drain vector PR #261/#303 closed). Addresses copied from firmware +// lib/firmware/ethereum_contracts/*.{c,h} on origin/develop (the rc3 line). +const ADDR = { + ZX_EXCHANGE_PROXY: '0xdef1c0ded9bec7f1a1670819833240f027b25eff', // 0x transformERC20 / sellToUniswap + UNISWAP_V2_ROUTER: '0x7a250d5630b4cf539739df2c5dacb4c659f2488d', // 0x liquid add/remove + approve-to-router + SALARY_PROXY: '0xbd6a40bb904aea5a49c59050b5395f7484a4203d', // saproxy withdrawFromSalary + THOR_ROUTER: '0xd37bbe5744d730a1d98d8dc97c42f0ca46ad7146', + MAYA_ROUTER: '0xd89dce570de35a6f42d3bca7dba50a6d89bfc2a2', } -interface PioneerSignResponse { - success: boolean - signedPayload: string // base64 signed insight blob - keyId: number - classification: 'VERIFIED' | 'UNKNOWN' - dappName?: string - contractName?: string - method?: string - txHash?: string // the sighash the blob is bound to (== device's sighash) +// selector → the ONE contract address the firmware pins that selector to. +const FIRMWARE_PINNED: Record = { + '0x415565b0': ADDR.ZX_EXCHANGE_PROXY, // transformERC20 + '0xd9627aa4': ADDR.ZX_EXCHANGE_PROXY, // sellToUniswap (0x) + '0xf305d719': ADDR.UNISWAP_V2_ROUTER, // addLiquidityETH + '0x02751cec': ADDR.UNISWAP_V2_ROUTER, // removeLiquidityETH + '0xfea7c53f': ADDR.SALARY_PROXY, // withdrawFromSalary + '0x1fece7b4': ADDR.THOR_ROUTER, // THORChain deposit + '0x44bc937b': ADDR.THOR_ROUTER, // THORChain depositWithExpiry } +// THOR/Maya share both deposit selectors — accept either router for either. +const THOR_MAYA_DEPOSIT = new Set(['0x1fece7b4', '0x44bc937b']) -/** - * The full unsigned-tx fields /descriptors/sign needs to bind the blob to the - * exact sighash the device will sign. MUST be byte-identical to the values - * later passed to ethSignTx — any drift and rc3 firmware refuses the blob. - */ -export interface EvmUnsignedTxFields { - nonce: string | number - gasLimit: string | number - value: string | number - gasPrice?: string | number - maxFeePerGas?: string | number - maxPriorityFeePerGas?: string | number -} +/** ERC-20 transfer/approve the firmware renders natively (standard 68-byte). */ +const ERC20_NATIVE = new Set(['0xa9059cbb', '0x095ea7b3']) /** - * Decode calldata via pioneer-client SDK (DecodeCalldata operationId). - * 3s timeout — non-blocking for signing flow. + * True iff the rc3 device clear-signs this tx natively (no AdvancedMode, no + * signed blob). Mirrors firmware `ethereum_contractHandled` + the standard + * ERC-20 transfer/approve path in ethereum.c. Contract-address pinning matters: + * the same selector to a DIFFERENT address is NOT clear-signed by the device. */ -async function fetchPioneerDecode( - networkId: string, - contractAddress: string, - data: string -): Promise { - try { - const pioneer = await Promise.race([ - getPioneer(), - new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)), - ]) - if (!pioneer?.DecodeCalldata) return null - - const resp = await Promise.race([ - pioneer.DecodeCalldata({ networkId, contractAddress, data }), - new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)), - ]) - const result = resp?.data as PioneerDecodeResponse | undefined - return result?.success ? result : null - } catch { - // Pioneer not ready, timeout, or method missing — fall through to local - return null - } -} +export function firmwareClearSigns(to?: string, data?: string, _chainId?: number): boolean { + if (!to || !data || data.length < 10) return false + const selector = data.slice(0, 10).toLowerCase() + const dest = to.toLowerCase() -/** - * Fetch signed insight blob from Pioneer. - * - * NOTE: SignDescriptor is not yet in the public swagger spec so pioneer-client - * doesn't auto-generate the method. Using direct fetch until the Pioneer server - * regenerates its spec (tsoa spec-and-routes). Once the spec includes - * operationId "SignDescriptor", switch to: pioneer.SignDescriptor({...}) - */ -async function fetchPioneerSignedBlob( - chainId: number, - contractAddress: string, - data: string, - tx?: EvmUnsignedTxFields -): Promise { - // The blob's tx_hash covers nonce/gas/value/fees — without the full tx the - // server 400s (and any blob it could make would fail the rc3 hash binding). - if (!tx) return null - const request = { chainId, contractAddress, data, ...tx } - try { - // Try SDK first (available once spec is regenerated) - const pioneer = await Promise.race([ - getPioneer(), - new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)), - ]) - if (pioneer?.SignDescriptor) { - const resp = await Promise.race([ - pioneer.SignDescriptor(request), - new Promise((_, reject) => setTimeout(() => reject(new Error('timeout')), 3000)), - ]) - const result = resp?.data as PioneerSignResponse | undefined - return (result?.success && result.signedPayload) ? result : null - } + // Standard ERC-20 transfer/approve: 4-byte selector + 2 32-byte words = 68B. + // ponytail: firmware also requires the token be in its built-in registry + // (unknown tokens hard-block); we can't cheaply mirror that list, so an exotic + // token defers to the device's own "enable AdvancedMode" prompt — benign UX, + // never an under-warn. Upgrade path: ship the token list into Vault. + if (ERC20_NATIVE.has(selector) && (data.length - 2) === 136) return true - // Fallback: direct fetch until spec is regenerated - const base = getPioneerApiBase() - const resp = await fetch(`${base}/api/v1/descriptors/sign`, { - method: 'POST', - headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(request), - signal: AbortSignal.timeout(3000), - }) - if (!resp.ok) return null - const result = await resp.json() as PioneerSignResponse - return (result.success && result.signedPayload) ? result : null - } catch { - return null + if (THOR_MAYA_DEPOSIT.has(selector)) { + return dest === ADDR.THOR_ROUTER || dest === ADDR.MAYA_ROUTER } + const pinned = FIRMWARE_PINNED[selector] + return pinned != null && dest === pinned + // ponytail: MakerDAO (address+param gated, rare) intentionally omitted → those + // over-warn as blind. Add if a MakerDAO clear-sign flow actually shows up. } // ── Main decode function ───────────────────────────────────────────────── @@ -511,72 +452,14 @@ async function fetchPioneerSignedBlob( export async function decodeCalldata( contractAddress: string, data: string, - chainId?: number, - tx?: EvmUnsignedTxFields, + _chainId?: number, ): Promise { // Skip if no calldata or just a bare transfer (no data) if (!data || data === '0x' || data.length < 10) return null const selector = data.slice(0, 10).toLowerCase() - // Tier 1: Try Pioneer SDK — fetch decode + signed blob in parallel - // Default to Ethereum mainnet (1) when chainId is missing — most contract - // calls target mainnet, and omitting chainId shouldn't skip Pioneer entirely. - const resolvedChainId = chainId || 1 - if (resolvedChainId) { - const networkId = chainIdToNetworkId(resolvedChainId) - const [pioneer, signedBlobRaw] = await Promise.all([ - fetchPioneerDecode(networkId, contractAddress, data), - fetchPioneerSignedBlob(resolvedChainId, contractAddress, data, tx), - ]) - - // Only attach VERIFIED blobs. An OPAQUE/UNKNOWN blob doesn't enable - // clear-sign — rc3 fail-closes on it — and attaching it would just mask - // the honest "unverified contract call" state from the UI/device paths. - const signedBlob = signedBlobRaw?.classification === 'VERIFIED' ? signedBlobRaw : null - if (signedBlobRaw) { - console.log(`[calldata] Pioneer /sign: classification=${signedBlobRaw.classification} keyId=${signedBlobRaw.keyId} txHash=${signedBlobRaw.txHash ?? '(n/a)'} attach=${!!signedBlob}`) - } - - if (pioneer) { - const fields: CalldataDecodedField[] = pioneer.args.map((arg) => ({ - name: arg.name, - type: arg.type, - value: arg.value, - format: mapFormat(arg.type, arg.format), - })) - - return { - dappName: pioneer.dappName, - contractName: pioneer.contractName, - method: pioneer.method, - selector, - functionType: pioneer.functionType, - fields, - source: 'pioneer', - signedInsightBlob: signedBlob?.signedPayload, - insightKeyId: signedBlob?.keyId, - insightClassification: signedBlobRaw?.classification, - } - } - - // Pioneer decode failed but we got a VERIFIED blob — still useful - if (signedBlob) { - return { - dappName: signedBlob.dappName || 'Unknown', - contractName: signedBlob.contractName || contractAddress, - method: signedBlob.method || `Unknown (${selector})`, - selector, - fields: [], - source: 'pioneer', - signedInsightBlob: signedBlob.signedPayload, - insightKeyId: signedBlob.keyId, - insightClassification: signedBlob.classification, - } - } - } - - // Tier 2: Local decoders (offline, instant) + // Tier 1: Local decoders (offline, instant) for (const decoder of LOCAL_DECODERS) { if (selector === decoder.selector && data.length >= 10) { // Derive dApp name from method — DeFi protocols get their own name @@ -599,7 +482,7 @@ export async function decodeCalldata( } } - // Tier 3: Unknown — return selector only + // Tier 2: Unknown — return selector only return { dappName: 'Unknown', contractName: contractAddress, @@ -609,14 +492,3 @@ export async function decodeCalldata( source: 'none', } } - -function mapFormat(solidityType: string, apiFormat?: string): CalldataDecodedField['format'] { - if (apiFormat) { - if (apiFormat.includes('AMOUNT')) return 'amount' - if (apiFormat.includes('EIP55') || apiFormat.includes('ADDRESS')) return 'address' - } - if (solidityType === 'address') return 'address' - if (solidityType.startsWith('uint') || solidityType.startsWith('int')) return 'amount' - if (solidityType.startsWith('bytes')) return 'hex' - return 'raw' -} diff --git a/projects/keepkey-vault/src/bun/engine-controller.ts b/projects/keepkey-vault/src/bun/engine-controller.ts index 84b06988..90f3684d 100644 --- a/projects/keepkey-vault/src/bun/engine-controller.ts +++ b/projects/keepkey-vault/src/bun/engine-controller.ts @@ -2376,6 +2376,14 @@ export class EngineController extends EventEmitter { */ async flashCustomFirmware(data: Buffer) { if (!this.wallet) throw new Error('No device connected') + // Firmware can only be written in bootloader (updater) mode. Erasing a + // wallet-mode device stalls the synchronous HID read (see firmwareErase + // note below) — the flash hangs on "do not unplug" with no recovery. Fail + // fast with an actionable message instead. The UI gates on this too, but + // guard here so any RPC caller can't brick the flow. + if (this.cachedFeatures?.bootloaderMode !== true) { + throw new Error('Device is not in bootloader mode. Unplug your KeepKey, hold the button, and plug it back in while holding to enter bootloader mode, then try again.') + } this.updatePhase = 'flashing' this.emit('state-change', this.getDeviceState()) this.emit('firmware-progress', { percent: 0, message: 'Preparing custom firmware...' }) diff --git a/projects/keepkey-vault/src/bun/rest-api.ts b/projects/keepkey-vault/src/bun/rest-api.ts index fad27ce5..6e7786ad 100644 --- a/projects/keepkey-vault/src/bun/rest-api.ts +++ b/projects/keepkey-vault/src/bun/rest-api.ts @@ -3,10 +3,8 @@ import type { AuthStore } from './auth' import { HttpError } from './auth' import type { SigningRequestInfo, ApiLogEntry, EIP712DecodedInfo } from '../shared/types' import { decodeEIP712 } from './eip712-decoder' -import { decodeCalldata, type EvmUnsignedTxFields } from './calldata-decoder' +import { decodeCalldata, firmwareClearSigns } from './calldata-decoder' import { CHAINS, isChainSupported } from '../shared/chains' -import { EVM_INSIGHT } from '../shared/flags' -import { versionCompare } from '../shared/firmware-versions' import { initializeOrchardFromDevice, scanOrchardNotes, getShieldedBalance, buildShieldedTx, finalizeShieldedTx, broadcastShieldedTx, @@ -1063,10 +1061,6 @@ const ROUTE_TO_CHAIN: Record = { } export function startRestApi(engine: EngineController, auth: AuthStore, port = 1646, callbacks?: RestApiCallbacks) { - // EVM clear-signing (insight): OFF by default, and only on firmware >= 7.15.0. - // getDeviceState() is an in-memory read (cachedFeatures); `?? '0.0.0'` fails closed. - const evmInsightEnabled = (): boolean => - EVM_INSIGHT && versionCompare(engine.getDeviceState().firmwareVersion ?? '0.0.0', '7.15.0') >= 0 const getWalletDbScope = (): { deviceId: string; walletId: string } | null => { const deviceId = engine.getDeviceState().deviceId if (!deviceId) return null @@ -1711,48 +1705,41 @@ export function startRestApi(engine: EngineController, auth: AuthStore, port = 1 signingInfo.chainId = preview.chainId || preview.chain_id signingInfo.data = preview.data // full data — UI handles display - // Clear-signing: decode calldata via Pioneer descriptor API + local fallback + // Clear-signing: decode calldata locally (vendored, no network) for + // the UI, and gate blind-signing off what the FIRMWARE clear-signs. if (preview.data && preview.data.length >= 10 && preview.to) { + const chainIdNum = typeof signingInfo.chainId === 'string' + ? (signingInfo.chainId.startsWith('0x') ? parseInt(signingInfo.chainId, 16) : parseInt(signingInfo.chainId, 10)) + : signingInfo.chainId try { - const chainIdNum = typeof signingInfo.chainId === 'string' - ? (signingInfo.chainId.startsWith('0x') ? parseInt(signingInfo.chainId, 16) : parseInt(signingInfo.chainId, 10)) - : signingInfo.chainId - // Full unsigned tx for the pioneer signed blob. MUST mirror the - // msg construction in the /eth/sign-transaction handler exactly - // (same defaults, same fee-field selection) — the blob's tx_hash - // is bound to the sighash over these fields, and rc3 firmware - // refuses the blob if it doesn't match what the device signs. - // Gated: only fetch a Pioneer signed blob when insight is enabled + - // fw >= 7.15. Off → txFields stays undefined → fetchPioneerSignedBlob - // short-circuits to null (no /descriptors/sign call). Local decode + - // needsBlindSigning below stay live on all firmware. - let txFields: EvmUnsignedTxFields | undefined - if (evmInsightEnabled() && path === '/eth/sign-transaction') { - txFields = { - nonce: preview.nonce || '0x0', - gasLimit: preview.gas || preview.gasLimit || '0x5208', - value: preview.value || '0x0', - } - if (preview.maxFeePerGas || preview.max_fee_per_gas) { - txFields.maxFeePerGas = preview.maxFeePerGas || preview.max_fee_per_gas - // Handler sends '0x' (canonical empty) to the device for a - // zero priority fee; send pioneer '0x0' — ethers RLP-encodes - // zero as empty too, so both sides hash identically. - const prio = preview.maxPriorityFeePerGas || preview.max_priority_fee_per_gas - txFields.maxPriorityFeePerGas = (!prio || /^0x0*$/.test(prio)) ? '0x0' : prio - } else { - txFields.gasPrice = preview.gasPrice || preview.gas_price || '0x0' - } - } - signingInfo.calldataDecoded = await decodeCalldata(preview.to, preview.data, chainIdNum, txFields) ?? undefined + signingInfo.calldataDecoded = await decodeCalldata(preview.to, preview.data, chainIdNum) ?? undefined console.log(`[REST] Calldata decoded:`, JSON.stringify(signingInfo.calldataDecoded, null, 2)) } catch (e) { console.warn('[REST] Calldata decode failed:', e) } - // Determine if this tx needs blind signing: - // Has calldata AND calldata is not fully decoded (source is 'none' or missing) - const decoded = signingInfo.calldataDecoded - signingInfo.needsBlindSigning = !decoded || decoded.source === 'none' - console.log(`[REST] needsBlindSigning=${signingInfo.needsBlindSigning}, source=${decoded?.source}`) + // Caller supplied a runtime-signer blob directly (LoadClearsignSigner + // flow — the /eth/sign-transaction handler below honors this at + // priority 1). The device verifies it against the loaded signer and + // clear-signs regardless of what the firmware natively handles. + if (preview.txMetadata?.signedPayload) { + signingInfo.calldataDecoded = { + dappName: 'Unknown', contractName: 'Unknown', method: '(runtime signer)', + selector: preview.data.slice(0, 10), fields: [], source: 'none', + ...signingInfo.calldataDecoded, + signedInsightBlob: preview.txMetadata.signedPayload, + insightKeyId: preview.txMetadata.keyId, + } + signingInfo.needsBlindSigning = false + console.log(`[REST] needsBlindSigning=false (caller-provided runtime-signer blob, keyId=${preview.txMetadata.keyId})`) + } else { + // Needs blind signing unless the firmware clear-signs it natively. + // Keyed off the device's own allowlist (firmwareClearSigns), NOT + // whether our decoder recognized the calldata — a contract we can + // decode (Uniswap/1inch) but the firmware can't still blind-signs, + // and forcing global AdvancedMode on a firmware-clearsignable tx + // re-opens the drain vector (PR #261/#303). + signingInfo.needsBlindSigning = !firmwareClearSigns(preview.to, preview.data, chainIdNum) + console.log(`[REST] needsBlindSigning=${signingInfo.needsBlindSigning} (firmwareClearSigns=${!signingInfo.needsBlindSigning}, decoder source=${signingInfo.calldataDecoded?.source})`) + } } } } catch (e: any) { @@ -2097,42 +2084,34 @@ export function startRestApi(engine: EngineController, auth: AuthStore, port = 1 } // ── EVM Clear-Signing: attach signed metadata blob for device OLED ── - // Gated OFF by default + fw >= 7.15. This is the device-facing chokepoint: - // the caller-provided branch reads the blob straight from the request body, - // independent of the fetch gate above, so it MUST be gated here on its own — - // otherwise a caller could inject a blob and force clear-sign while disabled. // Priority: 1) caller provides txMetadata in request body (test fixtures) // 2) Pioneer signedInsightBlob from calldata decoder // 3) none — device falls back to raw hex - if (evmInsightEnabled()) { - if (body.txMetadata && body.txMetadata.signedPayload) { + if (body.txMetadata && body.txMetadata.signedPayload) { + msg.txMetadata = { + signedPayload: body.txMetadata.signedPayload, + keyId: body.txMetadata.keyId ?? 0, + } + console.log(`[REST] EVM clear-sign: using caller-provided blob (${String(body.txMetadata.signedPayload).length} chars, keyId=${msg.txMetadata.keyId})`) + } else { + const decoded = activeSigningInfo?.calldataDecoded + if (decoded?.signedInsightBlob) { + // Pioneer emits the blob as base64, but hdwallet's ethSignTx + // arrayify()s a STRING signedPayload as hex ("0x"+s) → a base64 + // string throws "invalid hexadecimal string" before the device + // sees anything. Hand it the raw bytes (Uint8Array branch) so the + // encoding is unambiguous. msg.txMetadata = { - signedPayload: body.txMetadata.signedPayload, - keyId: body.txMetadata.keyId ?? 0, + signedPayload: new Uint8Array(Buffer.from(decoded.signedInsightBlob, 'base64')), + keyId: decoded.insightKeyId, } - console.log(`[REST] EVM clear-sign: using caller-provided blob (${String(body.txMetadata.signedPayload).length} chars, keyId=${msg.txMetadata.keyId})`) + console.log(`[REST] EVM clear-sign: using Pioneer blob (keyId=${decoded.insightKeyId}, ${msg.txMetadata.signedPayload.length} bytes)`) } else { - const decoded = activeSigningInfo?.calldataDecoded - if (decoded?.signedInsightBlob) { - // Pioneer emits the blob as base64, but hdwallet's ethSignTx - // arrayify()s a STRING signedPayload as hex ("0x"+s) → a base64 - // string throws "invalid hexadecimal string" before the device - // sees anything. Hand it the raw bytes (Uint8Array branch) so the - // encoding is unambiguous. - msg.txMetadata = { - signedPayload: new Uint8Array(Buffer.from(decoded.signedInsightBlob, 'base64')), - keyId: decoded.insightKeyId, - } - console.log(`[REST] EVM clear-sign: using Pioneer blob (keyId=${decoded.insightKeyId}, ${msg.txMetadata.signedPayload.length} bytes)`) - } else { - console.log('[REST] EVM clear-sign: no metadata blob — device will show raw hex') - } + console.log('[REST] EVM clear-sign: no metadata blob — device will show raw hex') } } - // Replacer: txMetadata.signedPayload is a Uint8Array — default stringify - // emits one line per byte, flooding the log with the whole blob. - console.log('[REST] ethSignTx hdwallet payload:', JSON.stringify(msg, (_k, v) => v instanceof Uint8Array ? `Uint8Array(${v.length})` : v, 2)) + console.log('[REST] ethSignTx hdwallet payload:', JSON.stringify(msg, null, 2)) try { // Honest confirm dialog: decode msg.data so token/contract calls // don't show the contract as recipient or 0x0/hex-wei as amount. @@ -2150,6 +2129,28 @@ export function startRestApi(engine: EngineController, auth: AuthStore, port = 1 } } + if (path === '/eth/clearsign/load-signer' && method === 'POST') { + auth.requireAuth(req) + const wallet = requireWallet(engine) + const body = await parseRequest(req, S.LoadClearsignSignerRequest) + const pubkey = parseHex(body.pubkey, 'pubkey') + if (pubkey.length !== 33) throw new HttpError(400, `pubkey must be 33 bytes, got ${pubkey.length}`) + if (typeof (wallet as any).loadClearsignSigner !== 'function') { + throw new HttpError(501, 'Connected device does not support LoadClearsignSigner (requires firmware 7.15.0+)') + } + console.log(`[REST] clearsign load-signer: slot=${body.keyId} alias="${body.alias}" pubkey=${body.pubkey}`) + try { + await (wallet as any).loadClearsignSigner({ keyId: body.keyId, pubkey, alias: body.alias }) + return json({ ok: true, keyId: body.keyId, alias: body.alias }) + } catch (err: any) { + const errMsg = String(err?.message || err || '').toLowerCase() + if (errMsg.includes('cancel') || errMsg.includes('rejected') || errMsg.includes('denied') || errMsg.includes('action cancelled')) { + return json({ error: 'User rejected clear-sign signer on device' }, 403) + } + throw err + } + } + if (path === '/eth/sign-typed-data' && method === 'POST') { auth.requireAuth(req) const wallet = requireWallet(engine) diff --git a/projects/keepkey-vault/src/bun/schemas.ts b/projects/keepkey-vault/src/bun/schemas.ts index 8852cf75..bdb61854 100644 --- a/projects/keepkey-vault/src/bun/schemas.ts +++ b/projects/keepkey-vault/src/bun/schemas.ts @@ -74,6 +74,13 @@ export const EthSignTransactionRequest = z.object({ { message: 'Missing from address or addressNList' }, ) +/** POST /eth/clearsign/load-signer — load a runtime clear-sign signer (RAM-only, user-confirmed) */ +export const LoadClearsignSignerRequest = z.object({ + keyId: z.number().int().min(1).max(3), // slot 0 = built-in production key, not loadable + pubkey: z.string().regex(/^(0x)?[0-9a-fA-F]{66}$/), // 33-byte compressed secp256k1 hex + alias: z.string().min(1).max(31).regex(/^[A-Za-z0-9 _-]+$/), // shown on the device trust screen +}).strip() + /** POST /eth/sign-typed-data */ export const EthSignTypedDataRequest = z.object({ address: z.string().min(1), diff --git a/projects/keepkey-vault/src/mainview/components/FirmwareDropZone.tsx b/projects/keepkey-vault/src/mainview/components/FirmwareDropZone.tsx index 49823331..41fa1bfe 100644 --- a/projects/keepkey-vault/src/mainview/components/FirmwareDropZone.tsx +++ b/projects/keepkey-vault/src/mainview/components/FirmwareDropZone.tsx @@ -1,10 +1,12 @@ import { useState, useEffect, useCallback, useRef } from "react" -import { Box, Flex, Text, Button } from "@chakra-ui/react" +import { Box, Flex, Text, Button, Spinner } from "@chakra-ui/react" import { rpcRequest, onRpcMessage } from "../lib/rpc" import { Z } from "../lib/z-index" import { IS_MAC, IS_WINDOWS } from "../lib/platform" import type { FirmwareAnalysis, FirmwareProgress } from "../../shared/types" import { FirmwareUpgradePreview } from "./FirmwareUpgradePreview" +import { useDeviceState } from "../hooks/useDeviceState" +import holdAndConnectRaw from "../assets/svg/hold-and-connect.svg?raw" /** * FirmwareDropZone — Global drag-and-drop dispatcher. @@ -37,6 +39,14 @@ export function FirmwareDropZone() { const phaseRef = useRef(phase) phaseRef.current = phase + // Live device state — a KeepKey can ONLY be flashed while in bootloader + // (updater) mode. Firmware-erase against a wallet-mode device stalls the HID + // read and the flash appears to freeze mid-"do not unplug". Gate on the live + // bootloader flag (not the analysis snapshot) so the flash button unlocks the + // moment the user finishes entering bootloader mode. + const deviceState = useDeviceState() + const inBootloader = deviceState.bootloaderMode === true + // Listen for firmware progress — only react when THIS component initiated the flash (C1 fix) useEffect(() => { return onRpcMessage("firmware-progress", (payload: FirmwareProgress) => { @@ -194,6 +204,9 @@ export function FirmwareDropZone() { const handleFlash = useCallback(async () => { if (!fileDataB64) return + // Never start a flash unless the device is actually in bootloader mode — + // otherwise firmwareErase hangs the HID read and looks like a freeze. + if (!inBootloader) return setPhase("flashing") setProgress({ percent: 0, message: "Starting firmware flash..." }) try { @@ -204,7 +217,7 @@ export function FirmwareDropZone() { setError(err?.message || "Firmware flash failed") setPhase("error") } - }, [fileDataB64]) + }, [fileDataB64, inBootloader]) const handleDismiss = useCallback(() => { setPhase("idle") @@ -590,6 +603,38 @@ export function FirmwareDropZone() { )} + {/* ── GATE: device must be in bootloader mode to flash ── */} + {!inBootloader && ( + + + Put your KeepKey in bootloader mode + + + Firmware can only be flashed from bootloader mode. Your device + isn't in bootloader mode yet — follow these steps: + + + + Unplug your KeepKey + Hold down the button on the device + While holding, plug in the USB cable + Release when the bootloader screen appears + + + + + Waiting for your device to enter bootloader mode… + + + + )} + {/* Actions */} - {analysis.willWipeDevice - ? "Wipe & Flash" - : `Flash ${analysis.detectedVersion || "Firmware"}`} + {!inBootloader + ? "Enter bootloader mode first" + : analysis.willWipeDevice + ? "Wipe & Flash" + : `Flash ${analysis.detectedVersion || "Firmware"}`} diff --git a/projects/keepkey-vault/src/mainview/components/device/SigningApproval.tsx b/projects/keepkey-vault/src/mainview/components/device/SigningApproval.tsx index 522b1e99..53a353c9 100644 --- a/projects/keepkey-vault/src/mainview/components/device/SigningApproval.tsx +++ b/projects/keepkey-vault/src/mainview/components/device/SigningApproval.tsx @@ -578,10 +578,13 @@ export function SigningApproval({ request, phase, onApprove, onReject }: Signing let trustLevel: 'verified' | 'known' | 'unknown' = 'verified' if (hasCalldata) { + // needsBlindSigning is authoritative: it mirrors what the FIRMWARE + // clear-signs. A contract our decoder recognizes (source 'local') but the + // firmware blind-signs (e.g. Uniswap) must still read 'unknown' — the badge + // can't claim "known" for a tx the device shows as raw hex. if (hasSignedBlob) trustLevel = 'verified' - else if (decoded?.source === 'pioneer') trustLevel = 'known' - else if (decoded?.source === 'local') trustLevel = 'known' else if (request.needsBlindSigning) trustLevel = 'unknown' + else if (decoded?.source === 'pioneer' || decoded?.source === 'local') trustLevel = 'known' } if (request.typedDataDecoded) { trustLevel = request.typedDataDecoded.isKnownType ? 'verified' : 'known'