icdatahash function
Uint8List
icdatahash(
- dynamic datastructure
)
Implementation
Uint8List icdatahash(dynamic datastructure) {
//print(datastructure);
//print(datastructure.runtimeType);
var valueforthehash = <int>[];
if (datastructure is String) {
valueforthehash = utf8.encode(datastructure); }
else if (datastructure is int || datastructure is BigInt) {
valueforthehash = leb128.encodeUnsigned(datastructure); }
else if (datastructure is Uint8List) {
valueforthehash= datastructure; }
else if (datastructure is List) {
valueforthehash= datastructure.fold(<int>[], (p,c)=> p + icdatahash(c)); }
else if (datastructure is Map) {
List<List<int>> datafieldshashs = [];
for (String key in datastructure.keys) {
List<int> fieldhash = [];
fieldhash.addAll(sha256.convert(ascii.encode(key)).bytes);
fieldhash.addAll(icdatahash(datastructure[key]));
datafieldshashs.add(fieldhash);
}
datafieldshashs.sort((a,b) => bytesasabitstring(a).compareTo(bytesasabitstring(b)));
valueforthehash = datafieldshashs.fold(<int>[],(p,c)=>p+c); }
else {
throw Exception('icdatahash: check: type of the datastructure: ${datastructure.runtimeType}');
}
return Uint8List.fromList(sha256.convert(valueforthehash).bytes);
}