PIN(核心指南)
处理 OneKey 设备 PIN 码的基本规则。
关键要点
- 设备锁定机制:当设备锁定时,受保护的调用会触发
UI_REQUEST.REQUEST_PIN事件。 - Pro/Touch:PIN 码只能在硬件设备上输入(不支持软件输入)。
- 其他型号:支持软件端 PIN 输入(位置加密方式),但出于安全考虑建议在设备上输入。
支持矩阵(软件 PIN 输入)
使用此表格快速确定某个型号是否支持软件端 PIN 输入。为了最佳安全性,建议所有型号都在设备上输入 PIN;仅在确实必要且仅在支持的型号上启用软件端 PIN 输入。
| 设备 | 软件端 PIN 输入 | 仅设备端输入 |
|---|---|---|
| OneKey Classic | 支持 | 否 |
| OneKey Classic 1s | 支持 | 否 |
| OneKey Classic 1s Pure | 支持 | 否 |
| OneKey Mini | 支持 | 否 |
| OneKey Touch | 不支持 | 是 |
| OneKey Pro | 不支持 | 是 |
UI 预期
- 显示单个 PIN 输入提示,包含两个选项:
- 在设备上输入(推荐;Pro/Touch 设备必须使用此方式)
- 在此屏幕上输入(软件端 PIN 输入)— 使用固定的 3x3 键盘(1-9),掩码显示,不会显示真实数字
- 收到
UI_REQUEST.CLOSE_UI_WINDOW时关闭对话框。
PIN 位置映射(软件键盘)
固定键盘布局(软件 UI):
7 8 9
4 5 6
1 2 3映射数组(索引 0..8 将软件标签 1..9 映射到转换后的数字):
const BLIND_KEYBOARD_MAP = ['7','8','9','4','5','6','1','2','3'];
function onSoftwareKey(label: number) {
// label 是来自固定键盘的 1..9
transformedPin += BLIND_KEYBOARD_MAP[label - 1];
}示例:如果用户点击软件键 “1, 9”,转换后变为 7(来自索引 0)然后 3(来自索引 8)= 73。通过 uiResponse 发送此转换后的字符串。
事件到响应
import { UI_EVENT, UI_REQUEST, UI_RESPONSE } from '@onekeyfe/hd-core';
HardwareSDK.on(UI_EVENT, (msg) => {
if (msg.type === UI_REQUEST.REQUEST_PIN) {
// 选项 A:在设备上输入
HardwareSDK.uiResponse({
type: UI_RESPONSE.RECEIVE_PIN,
payload: '@@ONEKEY_INPUT_PIN_IN_DEVICE',
});
// 选项 B:软件端 PIN 输入(Pro/Touch 设备不支持)
// const transformed = '73'; // 从键盘位置派生
// HardwareSDK.uiResponse({ type: UI_RESPONSE.RECEIVE_PIN, payload: transformed });
}
});Last updated on