// Copyright 2020 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ATTESTATION_SERVER_GOOGLE_KEYS_H_
#define ATTESTATION_SERVER_GOOGLE_KEYS_H_

#include <array>
#include <string>

#include <attestation/proto_bindings/google_key.pb.h>
#include <attestation/proto_bindings/interface.pb.h>

namespace attestation {

// A class that manages the public keys along with their key IDs the attestation
// service uses.
class GoogleKeys {
 public:
  GoogleKeys();
  explicit GoogleKeys(const DefaultGoogleRsaPublicKeySet& default_key_set);
  ~GoogleKeys() = default;

  // Copyable and movable with the default behavior.
  GoogleKeys(const GoogleKeys&) = default;
  GoogleKeys& operator=(const GoogleKeys&) = default;
  GoogleKeys(GoogleKeys&&) = default;
  GoogleKeys& operator=(GoogleKeys&&) = default;

  const GoogleRsaPublicKey& ca_encryption_key(ACAType aca_type) const;
  const GoogleRsaPublicKey& va_signing_key(VAType va_type) const;
  const GoogleRsaPublicKey& va_encryption_key(VAType va_type) const;

 private:
  std::array<GoogleRsaPublicKey, ACAType_ARRAYSIZE> ca_encryption_keys_;
  std::array<GoogleRsaPublicKey, VAType_ARRAYSIZE> va_signing_keys_;
  std::array<GoogleRsaPublicKey, VAType_ARRAYSIZE> va_encryption_keys_;
};

}  // namespace attestation

#endif  // ATTESTATION_SERVER_GOOGLE_KEYS_H_
