// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'dart:typed_data';

import 'package:crypto/crypto.dart';
import 'package:test/test.dart';

/// Asserts that an HMAC using [hash] returns [mac] for [input] and [key].
void expectHmacEquals(Hash hash, List<int> input, List<int> key, String mac) {
  var hmac = Hmac(hash, key);
  expect(hmac.convert(input).toString(), startsWith(mac));
}

final toupleMatch = RegExp('([0-9a-fA-F]{2})');

Uint8List bytesFromHexString(String message) {
  var bytes = <int>[];
  for (var match in toupleMatch.allMatches(message)) {
    bytes.add(int.parse(match.group(0), radix: 16));
  }
  return Uint8List.fromList(bytes);
}
