// Copyright 2015 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_COMMON_ATTESTATION_INTERFACE_H_
#define ATTESTATION_COMMON_ATTESTATION_INTERFACE_H_

#include <string>

#include <base/callback_forward.h>

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

namespace attestation {

// The main attestation interface implemented by proxies and services. The
// anticipated flow looks like this:
//   [APP] -> AttestationInterface -> [IPC] -> AttestationInterface
class AttestationInterface {
 public:
  virtual ~AttestationInterface() = default;

  // Performs initialization tasks that may take a long time. This method must
  // be successfully called before calling any other method. Returns true on
  // success.
  virtual bool Initialize() = 0;

  // Processes a GetKeyInfoRequest and responds with a GetKeyInfoReply.
  using GetKeyInfoCallback = base::Callback<void(const GetKeyInfoReply&)>;
  virtual void GetKeyInfo(const GetKeyInfoRequest& request,
                          const GetKeyInfoCallback& callback) = 0;

  // Processes a GetEndorsementInfoRequest and responds with a
  // GetEndorsementInfoReply.
  using GetEndorsementInfoCallback =
      base::Callback<void(const GetEndorsementInfoReply&)>;
  virtual void GetEndorsementInfo(
      const GetEndorsementInfoRequest& request,
      const GetEndorsementInfoCallback& callback) = 0;

  // Processes a GetAttestationKeyInfoRequest and responds with a
  // GetAttestationKeyInfoReply.
  using GetAttestationKeyInfoCallback =
      base::Callback<void(const GetAttestationKeyInfoReply&)>;
  virtual void GetAttestationKeyInfo(
      const GetAttestationKeyInfoRequest& request,
      const GetAttestationKeyInfoCallback& callback) = 0;

  // Processes a ActivateAttestationKeyRequest and responds with a
  // ActivateAttestationKeyReply.
  using ActivateAttestationKeyCallback =
      base::Callback<void(const ActivateAttestationKeyReply&)>;
  virtual void ActivateAttestationKey(
      const ActivateAttestationKeyRequest& request,
      const ActivateAttestationKeyCallback& callback) = 0;

  // Processes a CreateCertifiableKeyRequest and responds with a
  // CreateCertifiableKeyReply.
  using CreateCertifiableKeyCallback =
      base::Callback<void(const CreateCertifiableKeyReply&)>;
  virtual void CreateCertifiableKey(
      const CreateCertifiableKeyRequest& request,
      const CreateCertifiableKeyCallback& callback) = 0;

  // Processes a DecryptRequest and responds with a DecryptReply.
  using DecryptCallback = base::Callback<void(const DecryptReply&)>;
  virtual void Decrypt(const DecryptRequest& request,
                       const DecryptCallback& callback) = 0;

  // Processes a SignRequest and responds with a SignReply.
  using SignCallback = base::Callback<void(const SignReply&)>;
  virtual void Sign(const SignRequest& request,
                    const SignCallback& callback) = 0;

  // Processes a RegisterKeyWithChapsTokenRequest and responds with a
  // RegisterKeyWithChapsTokenReply.
  using RegisterKeyWithChapsTokenCallback =
      base::Callback<void(const RegisterKeyWithChapsTokenReply&)>;
  virtual void RegisterKeyWithChapsToken(
      const RegisterKeyWithChapsTokenRequest& request,
      const RegisterKeyWithChapsTokenCallback& callback) = 0;

  // Processes a GetEnrollmentPreparationsRequest and responds with a
  // GetEnrollmentPreparationsReply.
  using GetEnrollmentPreparationsCallback =
     base::RepeatingCallback<void(const GetEnrollmentPreparationsReply&)>;
  virtual void GetEnrollmentPreparations(
      const GetEnrollmentPreparationsRequest& request,
      const GetEnrollmentPreparationsCallback& callback) = 0;

  // Processes a GetStatusRequest and responds with a
  // GetStatusReply.
  using GetStatusCallback =
      base::Callback<void(const GetStatusReply&)>;
  virtual void GetStatus(
      const GetStatusRequest& request,
      const GetStatusCallback& callback) = 0;

  // Processes a VerifyRequest and responds with a
  // VerifyReply.
  using VerifyCallback =
      base::Callback<void(const VerifyReply&)>;
  virtual void Verify(
      const VerifyRequest& request,
      const VerifyCallback& callback) = 0;

  // Processes a CreateEnrollRequestRequest and responds with a
  // CreateEnrollRequestReply.
  using CreateEnrollRequestCallback =
      base::Callback<void(const CreateEnrollRequestReply&)>;
  virtual void CreateEnrollRequest(
      const CreateEnrollRequestRequest& request,
      const CreateEnrollRequestCallback& callback) = 0;

  // Processes a FinishEnrollRequest and responds with a
  // FinishEnrollReply.
  using FinishEnrollCallback =
      base::Callback<void(const FinishEnrollReply&)>;
  virtual void FinishEnroll(
      const FinishEnrollRequest& request,
      const FinishEnrollCallback& callback) = 0;

  // Processes a EnrollRequest and responds with a
  // EnrollReply.
  using EnrollCallback = base::Callback<void(const EnrollReply&)>;
  virtual void Enroll(const EnrollRequest& request,
                      const EnrollCallback& callback) = 0;

  // Processes a CreateCertificateRequestRequest and responds with a
  // CreateCertificateRequestReply.
  using CreateCertificateRequestCallback =
      base::Callback<void(const CreateCertificateRequestReply&)>;
  virtual void CreateCertificateRequest(
      const CreateCertificateRequestRequest& request,
      const CreateCertificateRequestCallback& callback) = 0;

  // Processes a FinishCertificateRequestRequest and responds with a
  // FinishCertificateRequestReply.
  using FinishCertificateRequestCallback =
      base::Callback<void(const FinishCertificateRequestReply&)>;
  virtual void FinishCertificateRequest(
      const FinishCertificateRequestRequest& request,
      const FinishCertificateRequestCallback& callback) = 0;

  // Processes a GetCertificateRequest and responds with a
  // GetCertificateReply.
  using GetCertificateCallback =
      base::Callback<void(const GetCertificateReply&)>;
  virtual void GetCertificate(const GetCertificateRequest& request,
                              const GetCertificateCallback& callback) = 0;

  // Processes a SignEnterpriseChallengeRequest and responds with a
  // SignEnterpriseChallengeReply.
  using SignEnterpriseChallengeCallback =
      base::Callback<void(const SignEnterpriseChallengeReply&)>;
  virtual void SignEnterpriseChallenge(
      const SignEnterpriseChallengeRequest& request,
      const SignEnterpriseChallengeCallback& callback) = 0;

  // Processes a SignSimpleChallengeRequest and responds with a
  // SignSimpleChallengeReply.
  using SignSimpleChallengeCallback =
      base::Callback<void(const SignSimpleChallengeReply&)>;
  virtual void SignSimpleChallenge(
      const SignSimpleChallengeRequest& request,
      const SignSimpleChallengeCallback& callback) = 0;

  // Processes a SetKeyPayloadRequest and responds with a
  // SetKeyPayloadReply.
  using SetKeyPayloadCallback =
      base::Callback<void(const SetKeyPayloadReply&)>;
  virtual void SetKeyPayload(
      const SetKeyPayloadRequest& request,
      const SetKeyPayloadCallback& callback) = 0;

  // Processes a DeleteKeysRequest and responds with a
  // DeleteKeysReply.
  using DeleteKeysCallback =
      base::Callback<void(const DeleteKeysReply&)>;
  virtual void DeleteKeys(
      const DeleteKeysRequest& request,
      const DeleteKeysCallback& callback) = 0;

  // Processes a ResetIdentityRequest and responds with a
  // ResetIdentityReply.
  using ResetIdentityCallback =
      base::Callback<void(const ResetIdentityReply&)>;
  virtual void ResetIdentity(
      const ResetIdentityRequest& request,
      const ResetIdentityCallback& callback) = 0;

  // Processes a GetEnrollmentId request and responds with GetEnrollmentIdReply.
  using GetEnrollmentIdCallback =
      base::Callback<void(const GetEnrollmentIdReply&)>;
  virtual void GetEnrollmentId(
      const GetEnrollmentIdRequest& request,
      const GetEnrollmentIdCallback& callback) = 0;

  // Processes a GetCertifiedNvIndex request and responds with
  // GetCertifiedNvIndexReply.
  using GetCertifiedNvIndexCallback =
      base::Callback<void(const GetCertifiedNvIndexReply&)>;
  virtual void GetCertifiedNvIndex(
      const GetCertifiedNvIndexRequest& request,
      const GetCertifiedNvIndexCallback& callback) = 0;
};

}  // namespace attestation

#endif  // ATTESTATION_COMMON_ATTESTATION_INTERFACE_H_
