PHP WebShell
Текущая директория: /opt/BitGoJS/modules/sdk-coin-ada/src/lib
Просмотр файла: keyPair.ts
import { DefaultKeys, KeyPairOptions, Ed25519KeyPair, toHex, AddressFormat, toUint8Array } from '@bitgo/sdk-core';
import {
PublicKey,
PrivateKey,
EnterpriseAddress,
NetworkInfo,
Credential,
} from '@emurgo/cardano-serialization-lib-nodejs';
import * as nacl from 'tweetnacl';
export class KeyPair extends Ed25519KeyPair {
/**
* Public constructor. By default, creates a key pair with a random master seed.
*
* @param { KeyPairOptions } source Either a master seed, a private key, or a public key
*
*/
constructor(source?: KeyPairOptions) {
super(source);
}
/**
* @returns { Address }
*/
getAddress(format): string {
const bytesFromHex = new Uint8Array(Buffer.from(this.keyPair.pub, 'hex'));
const pubKey = PublicKey.from_bytes(bytesFromHex);
let enterpriseAddress;
if (format === AddressFormat.testnet) {
enterpriseAddress = EnterpriseAddress.new(
NetworkInfo.testnet_preprod().network_id(),
Credential.from_keyhash(pubKey.hash())
);
} else if (format === AddressFormat.mainnet) {
enterpriseAddress = EnterpriseAddress.new(
NetworkInfo.mainnet().network_id(),
Credential.from_keyhash(pubKey.hash())
);
}
return enterpriseAddress.to_address().to_bech32();
}
getKeys(): DefaultKeys {
const result: DefaultKeys = { pub: this.keyPair.pub };
if (this.keyPair.prv) {
result.prv = this.keyPair.prv;
}
return result;
}
recordKeysFromPrivateKeyInProtocolFormat(prv: string): DefaultKeys {
const rawPrv = PrivateKey.from_bech32(prv).as_bytes();
return new KeyPair({ prv: toHex(rawPrv) }).keyPair;
}
recordKeysFromPublicKeyInProtocolFormat(pub: string): DefaultKeys {
const rawPub = PublicKey.from_bech32(pub).as_bytes();
return { pub: toHex(rawPub) };
}
/** @inheritdoc */
signMessage(message: string): Uint8Array {
const messageToSign = new Uint8Array(Buffer.from(message, 'hex'));
const prv = this.keyPair?.prv;
if (!prv) {
throw new Error('Missing private key');
}
return nacl.sign.detached(messageToSign, nacl.sign.keyPair.fromSeed(toUint8Array(prv)).secretKey);
}
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!