apply method

List<int> apply(
  1. List<int> sk, {
  2. List<List<int>> data = const [],
})

Implementation

List<int> apply(List<int> sk, {List<List<int>> data = const []}) {
  switch (this) {
    case PrfExpand.orchardZip32Child:
    case PrfExpand.adhocZip32Child:
    case PrfExpand.registeredZip32Child:
      if (data.length != 3 && data.length != 4) {
        throw ArgumentException.invalidOperationArguments(
          "PrfExpand",
          name: "sk",
          reason: "Invalid bytes arguments length.",
        );
      }
      final a = data.elementAt(0);
      final b = data.elementAt(1);
      final c = data.elementAt(2);
      final d = data.elementAtOrNull(3) ?? <int>[];
      if (BytesUtils.bytesEqual(c, [0]) && d.isEmpty) {
        return _apply(sk, data: [a, b]);
      }
      return _apply(sk, data: [a, b, c, d]);
    default:
      if (data.length != length.length ||
          data.indexed.any((e) => e.$2.length != length[e.$1])) {
        throw ArgumentException.invalidOperationArguments(
          "PrfExpand",
          name: "sk",
          reason: "Invalid bytes arguments length.",
        );
      }
      return _apply(sk, data: data);
  }
}