https://github.com/google/tink
Raw File
Tip revision: 99edf8dfe462bff711095d881c00fcd3cb2da224 authored by Walter Cacau on 09 September 2017, 00:04:44 UTC
Set version numbers to 1.0.0
Tip revision: 99edf8d
hmac_key_manager.h
// Copyright 2017 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//     http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
///////////////////////////////////////////////////////////////////////////////

#include <algorithm>
#include <vector>

#ifndef TINK_MAC_HMAC_KEY_MANAGER_H_
#define TINK_MAC_HMAC_KEY_MANAGER_H_

#include "cc/mac.h"
#include "cc/key_manager.h"
#include "cc/util/errors.h"
#include "cc/util/status.h"
#include "cc/util/statusor.h"
#include "google/protobuf/message.h"
#include "proto/hmac.pb.h"
#include "proto/tink.pb.h"

namespace crypto {
namespace tink {

class HmacKeyManager : public KeyManager<Mac> {
 public:
  HmacKeyManager() : key_type_(kKeyType) {}

  // Constructs an instance of HMAC-Mac for the given 'key_data',
  // which must contain HmacKey-proto.
  crypto::tink::util::StatusOr<std::unique_ptr<Mac>> GetPrimitive(
      const google::crypto::tink::KeyData& key_data) const override;

  // Constructs an instance of HMAC-Mac for the given 'key',
  // which must be HmacKey-proto.
  crypto::tink::util::StatusOr<std::unique_ptr<Mac>>
  GetPrimitive(const google::protobuf::Message& key) const override;

  // Generates a new random HmacKey, based on the specified 'key_template',
  // which must contain HmacKeyFormat-proto.
  crypto::tink::util::StatusOr<std::unique_ptr<google::protobuf::Message>>
      NewKey(const google::crypto::tink::KeyTemplate& key_template)
      const override;

  // Returns the type_url identifying the key type handled by this manager.
  const std::string& get_key_type() const override;

  // Returns the version of this key manager.
  uint32_t get_version() const override;

  virtual ~HmacKeyManager() {}

 private:
  static constexpr char kKeyTypePrefix[] = "type.googleapis.com/";
  static constexpr char kKeyType[] =
      "type.googleapis.com/google.crypto.tink.HmacKey";

  std::string key_type_;

  // Constructs an instance of HMAC-Mac for the given 'key'.
  crypto::tink::util::StatusOr<std::unique_ptr<Mac>>
  GetPrimitiveImpl(const google::crypto::tink::HmacKey& key) const;

  crypto::tink::util::Status Validate(
      const google::crypto::tink::HmacParams& params) const;
  crypto::tink::util::Status Validate(
      const google::crypto::tink::HmacKey& key) const;
  crypto::tink::util::Status Validate(
      const google::crypto::tink::HmacKeyFormat& key_format) const;
};

}  // namespace tink
}  // namespace crypto

#endif  // TINK_MAC_HMAC_KEY_MANAGER_H_
back to top