SHA256
Миграция PDA на client.key
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
const encoder = new TextEncoder();
|
||||
const WEB_CRYPTO_REQUIRED_MESSAGE = 'Регистрация и подпись блоков требуют WebCrypto (crypto.subtle). Откройте приложение через HTTPS или localhost в современном браузере и повторите попытку.';
|
||||
import { argon2idAsync } from 'https://esm.sh/@noble/hashes@1.8.0/argon2.js';
|
||||
const SHINE_KEY_DERIVATION_PREFIX = 'SHiNE-key';
|
||||
|
||||
function getCryptoApi() {
|
||||
const api = globalThis.crypto;
|
||||
@@ -205,8 +206,19 @@ export async function deriveEd25519FromMasterSecret(masterSecret32, suffix) {
|
||||
if (secretBytes.length !== 32) {
|
||||
throw new Error('Master secret должен быть длиной 32 байта');
|
||||
}
|
||||
const material = `${bytesToBase64(secretBytes)}|${String(suffix || '')}`;
|
||||
const seed = await sha256Text(material);
|
||||
const suffixBytes = utf8Bytes(String(suffix || ''));
|
||||
const material = new Uint8Array(
|
||||
SHINE_KEY_DERIVATION_PREFIX.length + 1 + secretBytes.length + 1 + suffixBytes.length,
|
||||
);
|
||||
let offset = 0;
|
||||
material.set(utf8Bytes(SHINE_KEY_DERIVATION_PREFIX), offset);
|
||||
offset += SHINE_KEY_DERIVATION_PREFIX.length;
|
||||
material[offset++] = 0;
|
||||
material.set(secretBytes, offset);
|
||||
offset += secretBytes.length;
|
||||
material[offset++] = 0;
|
||||
material.set(suffixBytes, offset);
|
||||
const seed = await sha256Bytes(material);
|
||||
const pkcs8 = ed25519Pkcs8FromSeed(seed);
|
||||
const subtle = getSubtleApi();
|
||||
const privateKey = await subtle.importKey('pkcs8', pkcs8, { name: 'Ed25519' }, true, ['sign']);
|
||||
|
||||
Reference in New Issue
Block a user