Skip to content

Commit

Permalink
Feat: sol sign message OK-34533 (#6420)
Browse files Browse the repository at this point in the history
* feat: sol sign message on headware

* feat: update hardware sdk version

* chore: fix lint

* optimize: sol sign message format
  • Loading branch information
ByteZhang1024 authored Dec 31, 2024
1 parent 20cb2a6 commit 9172da1
Show file tree
Hide file tree
Showing 5 changed files with 177 additions and 68 deletions.
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,11 +61,11 @@
"@onekeyfe/cross-inpage-provider-injected": "2.2.6",
"@onekeyfe/cross-inpage-provider-types": "2.2.6",
"@onekeyfe/extension-bridge-hosted": "2.2.6",
"@onekeyfe/hd-ble-sdk": "1.0.16",
"@onekeyfe/hd-core": "1.0.16",
"@onekeyfe/hd-shared": "1.0.16",
"@onekeyfe/hd-transport": "1.0.16",
"@onekeyfe/hd-web-sdk": "1.0.16",
"@onekeyfe/hd-ble-sdk": "1.0.17-alpha.0",
"@onekeyfe/hd-core": "1.0.17-alpha.0",
"@onekeyfe/hd-shared": "1.0.17-alpha.0",
"@onekeyfe/hd-transport": "1.0.17-alpha.0",
"@onekeyfe/hd-web-sdk": "1.0.17-alpha.0",
"@onekeyfe/onekey-cross-webview": "2.2.6",
"@polkadot/extension-inject": "0.46.6",
"@polkadot/types": "11.3.1",
Expand Down
6 changes: 5 additions & 1 deletion packages/kit-bg/src/services/ServiceNostr.ts
Original file line number Diff line number Diff line change
Expand Up @@ -152,7 +152,11 @@ class ServiceNostr extends ServiceBase {
});
return signedTx;
},
{ deviceParams, debugMethodName: 'nostr.encrypt' },
{
deviceParams,
skipDeviceCancel: true,
debugMethodName: 'nostr.encrypt',
},
);
return {
data: encrypted,
Expand Down
58 changes: 48 additions & 10 deletions packages/kit-bg/src/vaults/impls/sol/KeyringHardware.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
/* eslint-disable @typescript-eslint/no-unused-vars */
import { HardwareErrorCode } from '@onekeyfe/hd-shared';
import { PublicKey, VersionedTransaction } from '@solana/web3.js';
import bs58 from 'bs58';

Expand All @@ -14,14 +13,14 @@ import type {
ISignedTxPro,
} from '@onekeyhq/core/src/types';
import {
NotImplemented,
UnsupportedAddressTypeError,
} from '@onekeyhq/shared/src/errors';
import { convertDeviceResponse } from '@onekeyhq/shared/src/errors/utils/deviceErrorUtils';
convertDeviceError,
convertDeviceResponse,
} from '@onekeyhq/shared/src/errors/utils/deviceErrorUtils';
import { ETranslations } from '@onekeyhq/shared/src/locale';
import { appLocale } from '@onekeyhq/shared/src/locale/appLocale';
import accountUtils from '@onekeyhq/shared/src/utils/accountUtils';
import { checkIsDefined } from '@onekeyhq/shared/src/utils/assertUtils';
import stringUtils from '@onekeyhq/shared/src/utils/stringUtils';

import { KeyringHardwareBase } from '../../base/KeyringHardwareBase';

Expand Down Expand Up @@ -205,11 +204,50 @@ export class KeyringHardware extends KeyringHardwareBase {
);
}

override signMessage(params: ISignMessageParams): Promise<ISignedMessagePro> {
throw new NotImplemented(
appLocale.intl.formatMessage({
id: ETranslations.feedback_sol_sign_unupported_message,
}),
guessMessageFormat(message: Buffer) {
if (Object.prototype.toString.call(message) !== '[object Uint8Array]') {
return undefined;
}
if (stringUtils.isPrintableASCII(message)) {
return 0;
}
if (stringUtils.isUTF8(message)) {
return 1;
}
return undefined;
}

override async signMessage(
params: ISignMessageParams,
): Promise<ISignedMessagePro> {
const HardwareSDK = await this.getHardwareSDKInstance();
const deviceParams = checkIsDefined(params.deviceParams);
const { connectId, deviceId } = deviceParams.dbDevice;
const dbAccount = await this.vault.getAccount();

const result = await Promise.all(
params.messages.map(
async (payload: { type: string; message: string }) => {
const response = await HardwareSDK.solSignMessage(
connectId,
deviceId,
{
...params.deviceParams?.deviceCommonParams,
path: dbAccount.path,
messageHex: Buffer.from(payload.message).toString('hex'),
messageFormat: this.guessMessageFormat(
Buffer.from(payload.message),
),
},
);

if (!response.success) {
throw convertDeviceError(response.payload);
}
return response.payload?.signature;
},
),
);
return result.map((ret) => bs58.encode(Buffer.from(ret, 'hex')));
}
}
67 changes: 67 additions & 0 deletions packages/shared/src/utils/stringUtils.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* eslint-disable no-bitwise */
import safeStringify from 'fast-safe-stringify';

export function equalsIgnoreCase(
Expand Down Expand Up @@ -32,10 +33,76 @@ export function capitalizeWords(str: string): string {
return str.replace(/\b\w/g, (match) => match.toUpperCase());
}

export function isPrintableASCII(buffer: Buffer): boolean {
return (
buffer && buffer.every((element) => element >= 0x20 && element <= 0x7e)
);
}

export function isUTF8(buf: Buffer): boolean {
if (!buf) return false;

const len = buf.length;
let i = 0;

while (i < len) {
if ((buf[i] & 0x80) === 0x00) {
// 0xxxxxxx
// eslint-disable-next-line no-plusplus
i++;
} else if ((buf[i] & 0xe0) === 0xc0) {
// 110xxxxx 10xxxxxx
if (
i + 1 === len ||
(buf[i + 1] & 0xc0) !== 0x80 ||
(buf[i] & 0xfe) === 0xc0 // overlong
) {
return false;
}

i += 2;
} else if ((buf[i] & 0xf0) === 0xe0) {
// 1110xxxx 10xxxxxx 10xxxxxx
if (
i + 2 >= len ||
(buf[i + 1] & 0xc0) !== 0x80 ||
(buf[i + 2] & 0xc0) !== 0x80 ||
(buf[i] === 0xe0 && (buf[i + 1] & 0xe0) === 0x80) || // overlong
(buf[i] === 0xed && (buf[i + 1] & 0xe0) === 0xa0) // surrogate (U+D800 - U+DFFF)
) {
return false;
}

i += 3;
} else if ((buf[i] & 0xf8) === 0xf0) {
// 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
if (
i + 3 >= len ||
(buf[i + 1] & 0xc0) !== 0x80 ||
(buf[i + 2] & 0xc0) !== 0x80 ||
(buf[i + 3] & 0xc0) !== 0x80 ||
(buf[i] === 0xf0 && (buf[i + 1] & 0xf0) === 0x80) || // overlong
(buf[i] === 0xf4 && buf[i + 1] > 0x8f) ||
buf[i] > 0xf4 // > U+10FFFF
) {
return false;
}

i += 4;
} else {
return false;
}
}

return true;
}

export default {
stableStringify,
safeStringify,
randomString,
equalsIgnoreCase,
capitalizeWords,
isPrintableASCII,
isUTF8,
};
104 changes: 52 additions & 52 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -6127,23 +6127,23 @@ __metadata:
languageName: node
linkType: hard

"@onekeyfe/hd-ble-sdk@npm:1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-ble-sdk@npm:1.0.16"
"@onekeyfe/hd-ble-sdk@npm:1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-ble-sdk@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/hd-core": "npm:^1.0.16"
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport-react-native": "npm:^1.0.16"
checksum: 10/89edce114bd1f6f49655a72ed5e60f25b189e4975a3f4aba932a0883e70b507656cc49ac88979d3be07956ab828b25c47dc2581c6ea9576f47b4fadd39c6e13e
"@onekeyfe/hd-core": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport-react-native": "npm:^1.0.17-alpha.0"
checksum: 10/cbeaea468c929847ecc43470092131c3b5ffc8261cc611e76fae2a39bb7ea8e33fd0aa481c1c29173886c7adb3432ccc4cd0e9e476411db52286556dbee884fd
languageName: node
linkType: hard

"@onekeyfe/hd-core@npm:1.0.16, @onekeyfe/hd-core@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-core@npm:1.0.16"
"@onekeyfe/hd-core@npm:1.0.17-alpha.0, @onekeyfe/hd-core@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-core@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport": "npm:^1.0.16"
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport": "npm:^1.0.17-alpha.0"
axios: "npm:^0.27.2"
bignumber.js: "npm:^9.0.2"
bytebuffer: "npm:^5.0.1"
Expand All @@ -6153,71 +6153,71 @@ __metadata:
peerDependencies:
"@noble/hashes": ^1.1.3
ripple-keypairs: ^1.1.4
checksum: 10/b42674589d31c06c1028e5802bd394d44bd92cdfb18e1af49941be0f5ce8a202507ac29b5e82f04e43217faaca710298a816cd146cfd637e0bb646ce965004e7
checksum: 10/977bb89a27063f96cb2b46acdecff955f67982b3bae311f5fdc42dbb82f6fa324eb522ae55108d588bba543fed8e367dc713c3c1245babee2048c031f72ae28a
languageName: node
linkType: hard

"@onekeyfe/hd-shared@npm:1.0.16, @onekeyfe/hd-shared@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-shared@npm:1.0.16"
checksum: 10/4eabc316becd4ddbdd9914339e530228c7bd68f07ba6ff1f793f021ed003bb3cf10dfd05cc1f5429a131b38809b051fce514957c4be3b865d8e8c9a3ac9d63f7
"@onekeyfe/hd-shared@npm:1.0.17-alpha.0, @onekeyfe/hd-shared@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-shared@npm:1.0.17-alpha.0"
checksum: 10/cd558628166c2b4147b965bef166e6d40777f9b6a5c1612deed4f1e22028593e7e0783b266b199cb29f8e12602695151ced9bf533b088056c8775cbcd23d24fb
languageName: node
linkType: hard

"@onekeyfe/hd-transport-http@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-transport-http@npm:1.0.16"
"@onekeyfe/hd-transport-http@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-transport-http@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport": "npm:^1.0.16"
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport": "npm:^1.0.17-alpha.0"
axios: "npm:^0.27.2"
checksum: 10/b7f856f74141483a48632cd62556a02573a65e34eeb3556d2fab10ea890204daeec315a0bfd57c15b32eb3132eff6a3bbdeabaad82dd95fa0c63212984639772
checksum: 10/222fecc5fd7bd450f89d9951663e0d21e817ed4d5dc8e7e07a2a9a46daa4642ba36c75f55111a7dea8cf7ea6973ac50973df932b88e2105f420e4f6d62ddc29b
languageName: node
linkType: hard

"@onekeyfe/hd-transport-react-native@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-transport-react-native@npm:1.0.16"
"@onekeyfe/hd-transport-react-native@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-transport-react-native@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport": "npm:^1.0.16"
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport": "npm:^1.0.17-alpha.0"
"@onekeyfe/react-native-ble-plx": "npm:3.0.1"
react-native-ble-manager: "npm:^8.1.0"
checksum: 10/f1c59441063001d309be0bccff84a07abd44ab6116ae68a9e04428a03f51ea44b14bf4967dbdd1675708cfebcc4129d92e9cc5c648cd46c0a6985b7f815cdcfd
checksum: 10/88582654e9e9dc9c438c869ace55f0d0f758521a26c9afb14fb77640bd87dbf8fab6348ac605ef44851dd48da0399e8875be880104062b5afbc11a4b9597e9c6
languageName: node
linkType: hard

"@onekeyfe/hd-transport-webusb@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-transport-webusb@npm:1.0.16"
"@onekeyfe/hd-transport-webusb@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-transport-webusb@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport": "npm:^1.0.16"
checksum: 10/8083f73c12bd9184e5b39eb5825516bf5e1ca0d489b1e253bd2b675d56e505082d3844153855d1a9fda87d8be381c1087576ea9dbaeb116ca31076d7ffd28e31
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport": "npm:^1.0.17-alpha.0"
checksum: 10/3b30c80ad7e55ad8facb29f4eb0ef617dc001da2beacd2c4eb8b4aec7ef248fb03a6af8ad32fa7c0fcdee6a231ca002f600c0160da869edcf14f83c229b77042
languageName: node
linkType: hard

"@onekeyfe/hd-transport@npm:1.0.16, @onekeyfe/hd-transport@npm:^1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-transport@npm:1.0.16"
"@onekeyfe/hd-transport@npm:1.0.17-alpha.0, @onekeyfe/hd-transport@npm:^1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-transport@npm:1.0.17-alpha.0"
dependencies:
bytebuffer: "npm:^5.0.1"
long: "npm:^4.0.0"
protobufjs: "npm:^6.11.2"
checksum: 10/f14536402fefa6693a34213f332300f5b3048d2b79ab605c28f6330514745939f3641745ff40af5b8fafdc9b114868d3b8fb89addb87074be93c1444ae9847b0
checksum: 10/1d845bd8cc697762e86962e80dfb2da60cc1acbf6cd1c03143f1cb076ee6f93d8937f7ee5a30e0de58a6a8bed8b2b3dc824740628c85b58c3e038f0735fa3137
languageName: node
linkType: hard

"@onekeyfe/hd-web-sdk@npm:1.0.16":
version: 1.0.16
resolution: "@onekeyfe/hd-web-sdk@npm:1.0.16"
"@onekeyfe/hd-web-sdk@npm:1.0.17-alpha.0":
version: 1.0.17-alpha.0
resolution: "@onekeyfe/hd-web-sdk@npm:1.0.17-alpha.0"
dependencies:
"@onekeyfe/cross-inpage-provider-core": "npm:^0.0.17"
"@onekeyfe/hd-core": "npm:^1.0.16"
"@onekeyfe/hd-shared": "npm:^1.0.16"
"@onekeyfe/hd-transport-http": "npm:^1.0.16"
"@onekeyfe/hd-transport-webusb": "npm:^1.0.16"
checksum: 10/eb309d21c59585afe01cb0b41d28995f8a0027dde1a7252a6687256616719a7f5831657bac350564fd0c34535cd960b6dd760943ca8626f07e5a336a4bae1d19
"@onekeyfe/hd-core": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-shared": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport-http": "npm:^1.0.17-alpha.0"
"@onekeyfe/hd-transport-webusb": "npm:^1.0.17-alpha.0"
checksum: 10/dcaf4e5b395f14609505b8d1aff722fcba79a603725a23404d2bb6bcdacd9f0e6f00c2bf183cd2f514c2da2033608abf5349f8b1e051bba05dd8e898c91e5f1b
languageName: node
linkType: hard

Expand Down Expand Up @@ -6627,11 +6627,11 @@ __metadata:
"@onekeyfe/cross-inpage-provider-injected": "npm:2.2.6"
"@onekeyfe/cross-inpage-provider-types": "npm:2.2.6"
"@onekeyfe/extension-bridge-hosted": "npm:2.2.6"
"@onekeyfe/hd-ble-sdk": "npm:1.0.16"
"@onekeyfe/hd-core": "npm:1.0.16"
"@onekeyfe/hd-shared": "npm:1.0.16"
"@onekeyfe/hd-transport": "npm:1.0.16"
"@onekeyfe/hd-web-sdk": "npm:1.0.16"
"@onekeyfe/hd-ble-sdk": "npm:1.0.17-alpha.0"
"@onekeyfe/hd-core": "npm:1.0.17-alpha.0"
"@onekeyfe/hd-shared": "npm:1.0.17-alpha.0"
"@onekeyfe/hd-transport": "npm:1.0.17-alpha.0"
"@onekeyfe/hd-web-sdk": "npm:1.0.17-alpha.0"
"@onekeyfe/onekey-cross-webview": "npm:2.2.6"
"@open-wc/webpack-import-meta-loader": "npm:^0.4.7"
"@pmmmwh/react-refresh-webpack-plugin": "npm:^0.5.11"
Expand Down

0 comments on commit 9172da1

Please sign in to comment.