// Copyright 2018 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 HERMES_SMDP_INTERFACE_H_
#define HERMES_SMDP_INTERFACE_H_

#include <cstdint>
#include <memory>
#include <string>
#include <vector>

#include <base/callback.h>
#include <base/values.h>

namespace hermes {

// Provides an interface through which the LPD can communicate with the SM-DP
// server. This is responsible for opening, maintaining, and closing a HTTPS
// connection to the server.
class SmdpInterface {
 public:
  using InitiateAuthenticationCallback =
      base::Callback<void(const std::string& transaction_id,
                          const std::vector<uint8_t>& server_signed1,
                          const std::vector<uint8_t>& server_signature1,
                          const std::vector<uint8_t>& euicc_ci_pk_id_to_be_used,
                          const std::vector<uint8_t>& server_certificate)>;
  using AuthenticateClientCallback =
      base::Callback<void(const std::string& transaction_id,
                          const std::vector<uint8_t>& profile_metadata,
                          const std::vector<uint8_t>& smdp_signed2,
                          const std::vector<uint8_t>& smdp_signature2,
                          const std::vector<uint8_t>& public_key)>;
  using GetBoundProfilePackageCallback =
      base::Callback<void(const std::string& transaction_id,
                          const std::vector<uint8_t>& bound_profile_package)>;
  using ErrorCallback =
      base::Callback<void(const std::vector<uint8_t>& error_data)>;
  using DictionaryPtr = std::unique_ptr<base::DictionaryValue>;

  virtual ~SmdpInterface() = default;

  // First, establishes a connection to the SM-DP+ server over which
  // the ES8+ secure channel will be tunneled, then sends server the eSIM
  // challenge and info1 to begin the Authentication procedure. |callback| is
  // called upon server's response, or |error_callback| is called on server
  // error.
  //
  // Parameters
  //    challenge - eSIM challenge as returned by Esim.GetEuiccChallenge
  //    info1 - eSIM info1 as returned by Esim.GetEuiccInfo
  virtual void InitiateAuthentication(
      const std::vector<uint8_t>& info1,
      const std::vector<uint8_t>& challenge,
      const InitiateAuthenticationCallback& data_callback,
      const ErrorCallback& error_callback) = 0;

  virtual void AuthenticateClient(
      const std::string& transaction_id,
      const std::vector<uint8_t>& data,
      const AuthenticateClientCallback& data_callback,
      const ErrorCallback& error_callback) = 0;

  virtual void GetBoundProfilePackage(
      const std::string& transaction_id,
      const std::vector<uint8_t>& data,
      const GetBoundProfilePackageCallback& data_callback,
      const ErrorCallback& error_callback) = 0;
};

}  // namespace hermes

#endif  // HERMES_SMDP_INTERFACE_H_
