getKeysFromPrivateKey method

KeyStoreModel getKeysFromPrivateKey(
  1. String privateKey,
  2. SignerCurve signerCurve
)

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");
}