hashValue function
Implementation
BinaryBlob hashValue(dynamic value) {
if (value is String) {
return hashString(value);
} else if (value is num) {
return hash(lebEncode(value));
} else if (value is Uint8List) {
return hash(value);
} else if (value is Uint8Buffer) {
return hash(Uint8List.fromList(value));
} else if (value is List && (value is! Uint8List)) {
final vals = value.map(hashValue).toList();
return hash(concat(vals));
} else if (value is Principal) {
return hash(value.toUint8Array());
} else if (value is Map && (value as ToHashable).toHash is Function) {
return hashValue((value as ToHashable).toHash());
// ignore: todo
// TODO This should be move to a specific async method as the webauthn flow required
// the flow to be synchronous to ensure Safari touch id works.
// } else if (value instanceof Promise) {
// return value.then(x => hashValue(x));
} else if (value is BigInt) {
// Do this check much later than the other bigint check because this one is much less
// type-safe.
// So we want to try all the high-assurance type guards before this 'probable' one.
return hash(lebEncode(value));
} else if (value is Expiry) {
return hashValue(value.toHash());
} else if (value is ByteBuffer) {
return hashValue(value.asUint8List());
}
throw 'Attempt to hash a value of unsupported type: $value';
}