getKeysFromPrivateKey method
Implementation
KeyStoreModel getKeysFromPrivateKey(
String privateKey, SignerCurve signerCurve) {
if (signerCurve == SignerCurve.ED25519) {
Uint8List secretKeyBytes =
GenerateKeys.writeKeyWithHint(privateKey, 'edsk');
KeyPair keys = Dartez.sodiumUtils.publicKey(secretKeyBytes);
String pkKey = TezosMessageUtils.readKeyWithHint(keys.pk, 'edpk');
String pk = TezosMessageUtils.readKeyWithHint(keys.sk, 'edsk');
String pkKeyHash = GenerateKeys.computeKeyHash(
keys.pk, GenerateKeys.keyPrefixes[PrefixEnum.tz1]!);
// private key length is 32 bytes then pk = privateKey
if (secretKeyBytes.length == 32) {
pk = privateKey;
}
return KeyStoreModel(
publicKeyHash: pkKeyHash, publicKey: pkKey, secretKey: pk);
} else if (signerCurve == SignerCurve.SECP256K1) {
PrivateKey secpPk = PrivateKey.fromHex(
hex.encode(GenerateKeys.writeKeyWithHint(privateKey, "spsk")));
String pubHex = secpPk.publicKey.toCompressedHex();
Uint8List pubBytes = Uint8List.fromList(hex.decode(pubHex));
String publicKey = GenerateKeys.readKeysWithHint(
pubBytes, GenerateKeys.keyPrefixes[PrefixEnum.sppk]!);
String pkH = GenerateKeys.computeKeyHash(
GenerateKeys.writeKeyWithHint(publicKey, "sppk"),
GenerateKeys.keyPrefixes[PrefixEnum.tz2]!);
return KeyStoreModel(
publicKeyHash: pkH, publicKey: publicKey, secretKey: privateKey);
}
throw new Exception("SECP256R1 is not supported");
}