ledgerMaster static method

Uint8List ledgerMaster(
  1. Uint8List seed,
  2. String path
)

derive path for dot ed25519.

Implementation

static Uint8List ledgerMaster(Uint8List seed, String path) {
  final chainCode = Hmac(sha256, utf8.encode(ED25519_CRYPTO))
      .convert(Uint8List.fromList([1, ...seed]))
      .bytes;
  List<int> priv = [];
  while (priv.length == 0 || (priv[31] & 32) != 0) {
    List<int> convertBytes = priv;
    if (priv.length == 0) {
      convertBytes = seed;
    }
    priv =
        Hmac(sha512, utf8.encode(ED25519_CRYPTO)).convert(convertBytes).bytes;
  }
  priv[0] &= 248;
  priv[31] &= 127;
  priv[31] |= 64;
  var result = Uint8List.fromList([...priv, ...chainCode]);

  List<String> segments = path.split('/');
  segments = segments.sublist(1);
  for (String segment in segments) {
    int index = int.parse(segment.replaceAll("'", ""));
    result = _ledgerDerivePrivate(result, index);
  }
  return dynamicToUint8List(result.sublist(0, 32));
}