// Copyright (c) 2012, 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.

// Library tag to allow the test to run on Dartium.
library hmac_sha1_test;

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

part 'hmac_sha1_test_vectors.dart';

void main() {
  test('standard vectors', () {
    _testStandardVectors(hmac_sha1_inputs, hmac_sha1_keys, hmac_sha1_macs);
  });
}

void _testStandardVectors(inputs, keys, macs) {
  for (var i = 0; i < inputs.length; i++) {
    var hmac = new HMAC(new SHA1(), keys[i]);
    hmac.add(inputs[i]);
    var d = hmac.close();
    expect(CryptoUtils.bytesToHex(d), startsWith(macs[i]));
  }
}
