// Copyright 2014 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 EASY_UNLOCK_DBUS_ADAPTOR_H_
#define EASY_UNLOCK_DBUS_ADAPTOR_H_

#include <stdint.h>

#include <string>
#include <vector>

#include <base/macros.h>
#include <brillo/dbus/dbus_object.h>
#include <brillo/dbus/async_event_sequencer.h>

namespace dbus {
class MethodCall;
}  // namespace dbus

namespace easy_unlock {
class Service;
}  // namespace easy_unlock

namespace easy_unlock {

// DBus adaptor for EasyUnlock dbus service.
class DBusAdaptor {
 public:
  using CompletionAction =
      brillo::dbus_utils::AsyncEventSequencer::CompletionAction;

  DBusAdaptor(const scoped_refptr<dbus::Bus>& bus,
              easy_unlock::Service* service);
  DBusAdaptor(const DBusAdaptor&) = delete;
  DBusAdaptor& operator=(const DBusAdaptor&) = delete;

  ~DBusAdaptor();

  // Registers handlers for EasyUnlock service method calls.
  void Register(const CompletionAction& callback);

 private:
  // Handlers for DBus method calls exported in |ExportDBusMethods|.
  // See service_impl.h in easy-unlock-crypto repo for more info on specific
  // methods.
  void GenerateEcP256KeyPair(std::vector<uint8_t>* private_key,
                             std::vector<uint8_t>* public_key);
  std::vector<uint8_t> WrapPublicKey(const std::string& algorithm_str,
                                     const std::vector<uint8_t>& public_key);
  std::vector<uint8_t> PerformECDHKeyAgreement(
      const std::vector<uint8_t>& private_key,
      const std::vector<uint8_t>& public_key);
  std::vector<uint8_t> CreateSecureMessage(
      const std::vector<uint8_t>& payload,
      const std::vector<uint8_t>& key,
      const std::vector<uint8_t>& associated_data,
      const std::vector<uint8_t>& public_metadata,
      const std::vector<uint8_t>& verification_key_id,
      const std::vector<uint8_t>& decryption_key_id,
      const std::string& encryption_type_str,
      const std::string& signature_type_str);
  std::vector<uint8_t> UnwrapSecureMessage(
      const std::vector<uint8_t>& message,
      const std::vector<uint8_t>& key,
      const std::vector<uint8_t>& associated_data,
      const std::string& encryption_type_str,
      const std::string& signature_type_str);

  // The EasyUnlock service implementation to which DBus method calls
  // are forwarded.
  easy_unlock::Service* const service_impl_;
  brillo::dbus_utils::DBusObject dbus_object_;
};

}  // namespace easy_unlock

#endif  // EASY_UNLOCK_DBUS_ADAPTOR_H_
