// 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 <chromeos/dbus/dbus_object.h>
#include <chromeos/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 =
      chromeos::dbus_utils::AsyncEventSequencer::CompletionAction;

  DBusAdaptor(const scoped_refptr<dbus::Bus>& bus,
              easy_unlock::Service* service);
  ~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_;
  chromeos::dbus_utils::DBusObject dbus_object_;

  DISALLOW_COPY_AND_ASSIGN(DBusAdaptor);
};

}  // namespace easy_unlock

#endif  // EASY_UNLOCK_DBUS_ADAPTOR_H_
