SHA256
Миграция PDA на client.key
This commit is contained in:
@@ -111,6 +111,18 @@ async function pairFromSeedBase58(seedB58, explicitPubB58) {
|
||||
|
||||
export async function buildKeyBundleFromForm(fieldMap, options = {}) {
|
||||
const requireBlockchain = options.requireBlockchain !== false;
|
||||
let recovery = null;
|
||||
const masterSecretValue = fieldMap.masterSecret ? String($(fieldMap.masterSecret).value || '').trim() : '';
|
||||
if (masterSecretValue) {
|
||||
const masterSecret32 = ensure32Bytes(base58ToBytes(masterSecretValue));
|
||||
const recoveryPair = await deriveEd25519FromMasterSecret(masterSecret32, 'recovery.key');
|
||||
recovery = {
|
||||
publicKeyB64: recoveryPair.publicKeyB64,
|
||||
privatePkcs8B64: recoveryPair.privatePkcs8B64,
|
||||
publicKeyB58: bytesToBase58(base64ToBytes(recoveryPair.publicKeyB64)),
|
||||
privateSeedB58: bytesToBase58(base64ToBytes(recoveryPair.privatePkcs8B64).slice(-32)),
|
||||
};
|
||||
}
|
||||
const root = await pairFromSeedBase58($(fieldMap.rootPriv).value, $(fieldMap.rootPub).value);
|
||||
const device = await pairFromSeedBase58($(fieldMap.devPriv).value, $(fieldMap.devPub).value);
|
||||
const blockchainPriv = String($(fieldMap.bchPriv).value || '').trim();
|
||||
@@ -122,13 +134,18 @@ export async function buildKeyBundleFromForm(fieldMap, options = {}) {
|
||||
}
|
||||
return {
|
||||
keyBundle: {
|
||||
recoveryPair: recovery
|
||||
? { publicKeyB64: recovery.publicKeyB64, privatePkcs8B64: recovery.privatePkcs8B64 }
|
||||
: null,
|
||||
rootPair: { publicKeyB64: root.publicKeyB64, privatePkcs8B64: root.privatePkcs8B64 },
|
||||
blockchainPair: blockchain
|
||||
? { publicKeyB64: blockchain.publicKeyB64, privatePkcs8B64: blockchain.privatePkcs8B64 }
|
||||
: null,
|
||||
devicePair: { publicKeyB64: device.publicKeyB64, privatePkcs8B64: device.privatePkcs8B64 },
|
||||
clientPair: { publicKeyB64: device.publicKeyB64, privatePkcs8B64: device.privatePkcs8B64 },
|
||||
},
|
||||
normalized: {
|
||||
recoveryPubB58: recovery?.publicKeyB58 || '',
|
||||
recoveryPrivB58: recovery?.privateSeedB58 || '',
|
||||
rootPubB58: root.publicKeyB58,
|
||||
rootPrivB58: root.privateSeedB58,
|
||||
bchPubB58: blockchain?.publicKeyB58 || '',
|
||||
@@ -148,14 +165,20 @@ export async function deriveKeyBundleFromPassword({ login, password, onProgress
|
||||
login: cleanLogin,
|
||||
onProgress,
|
||||
});
|
||||
const [rootPair, blockchainPair, devicePair] = await Promise.all([
|
||||
const [recoveryPair, rootPair, blockchainPair, clientPair] = await Promise.all([
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'recovery.key'),
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'root.key'),
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'bch.key'),
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'dev.key'),
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'blockchain.key'),
|
||||
deriveEd25519FromMasterSecret(masterSecret32, 'client.key'),
|
||||
]);
|
||||
return {
|
||||
masterSecret32,
|
||||
keyBundle: { rootPair, blockchainPair, devicePair },
|
||||
keyBundle: {
|
||||
recoveryPair,
|
||||
rootPair,
|
||||
blockchainPair,
|
||||
clientPair,
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
@@ -163,12 +186,16 @@ export function fillKeyFields(fieldMap, keyBundle, masterSecret32) {
|
||||
if (masterSecret32) {
|
||||
$(fieldMap.masterSecret).value = bytesToBase58(masterSecret32);
|
||||
}
|
||||
if (fieldMap.recoveryPub && fieldMap.recoveryPriv && keyBundle.recoveryPair) {
|
||||
$(fieldMap.recoveryPub).value = bytesToBase58(base64ToBytes(keyBundle.recoveryPair.publicKeyB64));
|
||||
$(fieldMap.recoveryPriv).value = bytesToBase58(base64ToBytes(keyBundle.recoveryPair.privatePkcs8B64).slice(-32));
|
||||
}
|
||||
$(fieldMap.rootPub).value = bytesToBase58(base64ToBytes(keyBundle.rootPair.publicKeyB64));
|
||||
$(fieldMap.rootPriv).value = bytesToBase58(base64ToBytes(keyBundle.rootPair.privatePkcs8B64).slice(-32));
|
||||
$(fieldMap.bchPub).value = bytesToBase58(base64ToBytes(keyBundle.blockchainPair.publicKeyB64));
|
||||
$(fieldMap.bchPriv).value = bytesToBase58(base64ToBytes(keyBundle.blockchainPair.privatePkcs8B64).slice(-32));
|
||||
$(fieldMap.devPub).value = bytesToBase58(base64ToBytes(keyBundle.devicePair.publicKeyB64));
|
||||
$(fieldMap.devPriv).value = bytesToBase58(base64ToBytes(keyBundle.devicePair.privatePkcs8B64).slice(-32));
|
||||
$(fieldMap.devPub).value = bytesToBase58(base64ToBytes(keyBundle.clientPair.publicKeyB64));
|
||||
$(fieldMap.devPriv).value = bytesToBase58(base64ToBytes(keyBundle.clientPair.privatePkcs8B64).slice(-32));
|
||||
}
|
||||
|
||||
export function updateSolAddress(fieldMap) {
|
||||
|
||||
Reference in New Issue
Block a user