PHP WebShell
Текущая директория: /opt/BitGoJS/node_modules/@aptos-labs/ts-sdk/src/core/crypto
Просмотр файла: hdKey.ts
// Copyright © Aptos Foundation
// SPDX-License-Identifier: Apache-2.0
import { hmac } from "@noble/hashes/hmac";
import { sha512 } from "@noble/hashes/sha512";
import * as bip39 from "@scure/bip39";
/**
* Contains the derived cryptographic key as a Uint8Array.
*/
export type DerivedKeys = {
key: Uint8Array;
chainCode: Uint8Array;
};
/**
* Aptos derive path is 637
*/
export const APTOS_HARDENED_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+'\/[0-9]+'?$/;
export const APTOS_BIP44_REGEX = /^m\/44'\/637'\/[0-9]+'\/[0-9]+\/[0-9]+$/;
/**
* Supported key types and their associated seeds.
*/
export enum KeyType {
ED25519 = "ed25519 seed",
}
export const HARDENED_OFFSET = 0x80000000;
/**
* Validate a BIP-44 derivation path string to ensure it meets the required format.
* This function checks if the provided path adheres to the BIP-44 standard for Secp256k1.
* Parse and validate a path that is compliant to BIP-44 in form m/44'/637'/{account_index}'/{change_index}/{address_index}
* for Secp256k1
*
* Note that for Secp256k1, the last two components must be non-hardened.
*
* @param path - The path string to validate (e.g. `m/44'/637'/0'/0/0`).
*/
export function isValidBIP44Path(path: string): boolean {
return APTOS_BIP44_REGEX.test(path);
}
/**
* Aptos derive path is 637
*
* Parse and validate a path that is compliant to SLIP-0010 and BIP-44
* in form m/44'/637'/{account_index}'/{change_index}'/{address_index}'.
* See SLIP-0010 {@link https://github.com/satoshilabs/slips/blob/master/slip-0044.md}
* See BIP-44 {@link https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki}
*
* Note that for Ed25519, all components must be hardened.
* This is because non-hardened [PK] derivation would not work due to Ed25519's lack of a key homomorphism.
* Specifically, you cannot derive the PK associated with derivation path a/b/c given the PK of a/b.
* This is because the PK in Ed25519 is, more or less, computed as 𝑔𝐻(𝑠𝑘),
* with the hash function breaking the homomorphism.
*
* @param path - The derivation path string to validate (e.g. `m/44'/637'/0'/0'/0'`).
*/
export function isValidHardenedPath(path: string): boolean {
return APTOS_HARDENED_REGEX.test(path);
}
export const deriveKey = (hashSeed: Uint8Array | string, data: Uint8Array | string): DerivedKeys => {
const digest = hmac.create(sha512, hashSeed).update(data).digest();
return {
key: digest.slice(0, 32),
chainCode: digest.slice(32),
};
};
/**
* Derive a child key from the private key
* @param key
* @param chainCode
* @param index
*/
export const CKDPriv = ({ key, chainCode }: DerivedKeys, index: number): DerivedKeys => {
const buffer = new ArrayBuffer(4);
new DataView(buffer).setUint32(0, index);
const indexBytes = new Uint8Array(buffer);
const zero = new Uint8Array([0]);
const data = new Uint8Array([...zero, ...key, ...indexBytes]);
return deriveKey(chainCode, data);
};
const removeApostrophes = (val: string): string => val.replace(/'/g, "");
/**
* Splits derive path into segments
* @param path
*/
export const splitPath = (path: string): Array<string> => path.split("/").slice(1).map(removeApostrophes);
/**
* Normalizes the mnemonic by removing extra whitespace and making it lowercase
* @param mnemonic the mnemonic seed phrase
*/
export const mnemonicToSeed = (mnemonic: string): Uint8Array => {
const normalizedMnemonic = mnemonic
.trim()
.split(/\s+/)
.map((part) => part.toLowerCase())
.join(" ");
return bip39.mnemonicToSeedSync(normalizedMnemonic);
};
Выполнить команду
Для локальной разработки. Не используйте в интернете!