#!/bin/sh
# Smoke test for the installed crypto library; runs offline.
set -eu

work=$(mktemp -d)
export HOME="$work"
trap 'rm -rf "$work"' EXIT INT TERM

DART=$(command -v dart 2>/dev/null || true)
[ -n "$DART" ] || DART=/usr/lib/dart/bin/dart

# Register every installed Dart package, so transitive dependencies resolve.
mkdir -p "$work/.dart_tool"
{
  printf '{"configVersion":2,"packages":['
  first=1
  for dir in /usr/share/dart/packages/*/; do
    name=$(basename "$dir")
    [ "$first" -eq 1 ] || printf ','
    first=0
    printf '{"name":"%s","rootUri":"file:///usr/share/dart/packages/%s","packageUri":"lib/"}' "$name" "$name"
  done
  printf ']}\n'
} > "$work/.dart_tool/package_config.json"

cat > "$work/main.dart" <<'DART'
import "dart:convert";

import "package:crypto/crypto.dart";

void main() {
  final sha = sha256.convert(utf8.encode("abc")).toString();
  if (sha != "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad") {
    throw StateError("sha256: $sha");
  }
  final md5sum = md5.convert(utf8.encode("abc")).toString();
  if (md5sum != "900150983cd24fb0d6963f7d28e17f72") {
    throw StateError("md5: $md5sum");
  }
  final hmac = Hmac(sha256, utf8.encode("key")).convert(utf8.encode("abc")).toString();
  if (hmac.isEmpty) {
    throw StateError("hmac empty");
  }
  print("crypto smoke test passed");
}
DART

cd "$work"
"$DART" run main.dart
