module RbNaCl::SelfTest

def hmac_test(klass, tag)

def hmac_test(klass, tag)
  authenticator = klass.new(vector("auth_key_#{klass.key_bytes}".to_sym))
  message = vector :auth_message
  raise SelfTestFailure, "#{klass} generated incorrect authentication tag" unless authenticator.auth(message) == vector(tag)
  raise SelfTestFailure, "#{klass} failed to verify authentication tag" unless authenticator.verify(vector(tag), message)
  begin
    passed = false
    authenticator.verify(vector(tag), message + " ")
  rescue CryptoError
    passed = true
  ensure
    passed || raise(SelfTestFailure, "failed to detect corrupt ciphertext")
  end
end