hash function

Uint8List hash(
  1. dynamic content, {
  2. String algo = 'sha256',
})

Create a hash digest from the data with an hash algorithm identification prepending the digest @param {String | Uint8List} content Data to hash (string or buffer) @param {String} algo Hash algorithm ("sha256", "sha512", "sha3-256", "sha3-512", "blake2b")

Implementation

Uint8List hash(content, {String algo = 'sha256'}) {
  if (!(content is Uint8List) && !(content is String)) {
    throw "'content' must be a string or Uint8List";
  }

  if (content is String) {
    if (isHex(content)) {
      content = hexToUint8List(content);
    } else {
      content = Uint8List.fromList(utf8.encode(content));
    }
  }

  switch (algo) {
    case 'sha256':
      final Digest sha256 = Digest('SHA-256');
      return concatUint8List(<Uint8List>[
        Uint8List.fromList(<int>[0]),
        sha256.process(content)
      ]);
    case 'sha512':
      final Digest sha512 = Digest('SHA-512');
      return concatUint8List(<Uint8List>[
        Uint8List.fromList(<int>[1]),
        sha512.process(content)
      ]);
    case 'sha3-256':
      final Digest sha3_256 = Digest('SHA3-256');
      return concatUint8List(<Uint8List>[
        Uint8List.fromList(<int>[2]),
        sha3_256.process(content)
      ]);
    case 'sha3-512':
      final Digest sha3_512 = Digest('SHA3-512');
      return concatUint8List(<Uint8List>[
        Uint8List.fromList(<int>[3]),
        sha3_512.process(content)
      ]);
    case 'blake2b':
      final Digest blake2b = Digest('Blake2b');
      return concatUint8List(<Uint8List>[
        Uint8List.fromList(<int>[4]),
        blake2b.process(content)
      ]);
    default:
      throw 'Hash algorithm not supported';
  }
}