decodeKeychain function

Keychain decodeKeychain(
  1. Uint8List binary
)

Implementation

Keychain decodeKeychain(Uint8List binary) {
  var pos = 0;
  final version = binary.sublist(pos, 4).buffer.asByteData().getInt32(0);
  pos = pos + 4;
  final seedSize = binary.sublist(pos, pos + 1)[0];
  pos++;
  final seed = binary.sublist(pos, pos + seedSize);
  pos = pos + seedSize;
  final nbServices = binary.sublist(pos, pos + 1)[0];
  pos++;

  final services = <String, Service>{};
  for (var i = 0; i < nbServices; i++) {
    final serviceNameLength = binary.sublist(pos, pos + 1)[0];
    pos++;
    final serviceName = binary.sublist(pos, pos + serviceNameLength);
    pos = pos + serviceNameLength;
    final derivationPathLength = binary.sublist(pos, pos + 1)[0];
    pos++;
    final derivationPath = binary.sublist(pos, pos + derivationPathLength);
    pos = pos + derivationPathLength;
    final curveId = binary.sublist(pos, pos + 1)[0];
    pos++;
    final hashAlgoId = binary.sublist(pos, pos + 1)[0];
    pos++;

    services[utf8.decode(serviceName)] = Service(
      derivationPath: utf8.decode(derivationPath),
      curve: crypto.idToCurve(curveId),
      hashAlgo: crypto.idToHashAlgo(hashAlgoId),
    );
  }
  return Keychain(
    seed: seed,
    version: version,
    services: services,
  );
}