apply method
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);
}
}