SHA256
Миграция PDA на client.key
This commit is contained in:
@@ -7,7 +7,7 @@ Chrome-compatible Manifest V3 plugin for SHiNE wallet-session login.
|
||||
- создать `wallet-session` через `StartTrustedDeviceLogin`;
|
||||
- показать код подключения;
|
||||
- дождаться подтверждения на доверенном устройстве;
|
||||
- принять `session-only` payload без передачи `deviceKey/rootKey/blockchainKey`;
|
||||
- принять `session-only` payload без передачи `clientKey/rootKey/blockchainKey`;
|
||||
- сохранить `sessionPriv/sessionKey/sessionId` в локальном хранилище plugin;
|
||||
- восстанавливать session через `SessionChallenge -> SessionLogin`;
|
||||
- держать wallet-state в `background service worker`, а side panel использовать как UI.
|
||||
|
||||
@@ -563,11 +563,13 @@ function verifyWalletAgainstPda(wallet) {
|
||||
const type = String(wallet?.type || '').trim();
|
||||
const pub = String(wallet?.publicKeyBase58 || '').trim();
|
||||
const rootKey = String(state.walletProfile?.publicKeys?.rootKeyBase58 || '').trim();
|
||||
const deviceKey = String(state.walletProfile?.publicKeys?.deviceKeyBase58 || '').trim();
|
||||
if (type === 'dev.key') {
|
||||
const clientKey = String(
|
||||
state.walletProfile?.publicKeys?.clientKeyBase58 || '',
|
||||
).trim();
|
||||
if (type === 'client.key') {
|
||||
return {
|
||||
verified: !!deviceKey && deviceKey === pub,
|
||||
verificationText: deviceKey === pub ? 'Совпадает с deviceKey из PDA.' : 'Не совпадает с deviceKey из PDA.',
|
||||
verified: !!clientKey && clientKey === pub,
|
||||
verificationText: clientKey === pub ? 'Совпадает с clientKey из PDA.' : 'Не совпадает с clientKey из PDA.',
|
||||
};
|
||||
}
|
||||
if (type === 'root.key') {
|
||||
|
||||
@@ -69,8 +69,9 @@ function parseServerFieldsFromUserPda(dataBytes) {
|
||||
let isServer = false;
|
||||
let serverAddress = '';
|
||||
let accessServers = [];
|
||||
let recoveryKey32 = null;
|
||||
let rootKey32 = null;
|
||||
let deviceKey32 = null;
|
||||
let clientKey32 = null;
|
||||
let blockchainKey32 = null;
|
||||
let blockchainName = '';
|
||||
let homeserverSessions = [];
|
||||
@@ -79,10 +80,11 @@ function parseServerFieldsFromUserPda(dataBytes) {
|
||||
const blockType = readU8(bytes, cursorRef);
|
||||
cursorRef.value += 1; // block_version
|
||||
|
||||
if (blockType === 1 || blockType === 2) {
|
||||
if (blockType === 0 || blockType === 1 || blockType === 2) {
|
||||
const key32 = readBytes(bytes, cursorRef, 32);
|
||||
if (blockType === 0) recoveryKey32 = key32;
|
||||
if (blockType === 1) rootKey32 = key32;
|
||||
if (blockType === 2) deviceKey32 = key32;
|
||||
if (blockType === 2) clientKey32 = key32;
|
||||
continue;
|
||||
}
|
||||
if (blockType === 3) {
|
||||
@@ -150,8 +152,9 @@ function parseServerFieldsFromUserPda(dataBytes) {
|
||||
serverAddress: normalizeHostLike(serverAddress),
|
||||
accessServers: accessServers.map((value) => normalizeServerLogin(value)).filter(Boolean),
|
||||
publicKeys: {
|
||||
recoveryKeyBase58: recoveryKey32 ? new PublicKey(recoveryKey32).toBase58() : '',
|
||||
rootKeyBase58: rootKey32 ? new PublicKey(rootKey32).toBase58() : '',
|
||||
deviceKeyBase58: deviceKey32 ? new PublicKey(deviceKey32).toBase58() : '',
|
||||
clientKeyBase58: clientKey32 ? new PublicKey(clientKey32).toBase58() : '',
|
||||
blockchainKeyBase58: blockchainKey32 ? new PublicKey(blockchainKey32).toBase58() : '',
|
||||
blockchainName,
|
||||
},
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
<div class="summary-row"><span>Логин</span><strong id="session-login">—</strong></div>
|
||||
<div class="summary-row"><span>Session</span><code id="session-id">—</code></div>
|
||||
<div class="summary-row"><span>Тип</span><strong id="session-type">wallet</strong></div>
|
||||
<div class="summary-row"><span>deviceKey</span><code id="device-key-short">—</code></div>
|
||||
<div class="summary-row"><span>clientKey</span><code id="client-key-short">—</code></div>
|
||||
<div class="actions">
|
||||
<button id="resume-btn" class="btn secondary" type="button">Проверить session</button>
|
||||
<button id="disconnect-btn" class="btn danger" type="button">Отключить</button>
|
||||
|
||||
@@ -19,7 +19,7 @@ const els = {
|
||||
sessionLogin: document.querySelector('#session-login'),
|
||||
sessionId: document.querySelector('#session-id'),
|
||||
sessionType: document.querySelector('#session-type'),
|
||||
deviceKeyShort: document.querySelector('#device-key-short'),
|
||||
clientKeyShort: document.querySelector('#client-key-short'),
|
||||
resumeBtn: document.querySelector('#resume-btn'),
|
||||
refreshDevicesBtn: document.querySelector('#refresh-devices-btn'),
|
||||
disconnectBtn: document.querySelector('#disconnect-btn'),
|
||||
@@ -134,7 +134,7 @@ function applyState(nextState) {
|
||||
els.sessionLogin.textContent = session.login || '—';
|
||||
els.sessionId.textContent = session.sessionId || '—';
|
||||
els.sessionType.textContent = String(session.sessionType || 50) === '50' ? 'wallet' : String(session.sessionType || '—');
|
||||
els.deviceKeyShort.textContent = shortKey(walletProfile?.publicKeys?.deviceKeyBase58 || '');
|
||||
els.clientKeyShort.textContent = shortKey(walletProfile?.publicKeys?.clientKeyBase58 || '');
|
||||
}
|
||||
|
||||
const homeservers = Array.isArray(walletProfile?.homeserverSessions) ? walletProfile.homeserverSessions : [];
|
||||
|
||||
Reference in New Issue
Block a user