// 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.

#include "trunks/scoped_key_handle.h"

#include <base/logging.h>

#include "trunks/error_codes.h"

namespace {

const trunks::TPM_HANDLE kInvalidHandle = 0;

}  // namespace

namespace trunks {

ScopedKeyHandle::ScopedKeyHandle(const TrunksFactory& factory)
    : factory_(factory),
      handle_(kInvalidHandle) {}

ScopedKeyHandle::ScopedKeyHandle(const TrunksFactory& factory,
                                 TPM_HANDLE handle)
    : factory_(factory),
      handle_(handle) {}

ScopedKeyHandle::~ScopedKeyHandle() {
  if (handle_ != kInvalidHandle) {
    FlushHandleContext(handle_);
  }
}

TPM_HANDLE ScopedKeyHandle::release() {
  TPM_HANDLE tmp_handle = handle_;
  handle_ = kInvalidHandle;
  return tmp_handle;
}

void ScopedKeyHandle::reset(TPM_HANDLE new_handle) {
  TPM_HANDLE tmp_handle = handle_;
  handle_ = new_handle;
  if (tmp_handle != kInvalidHandle) {
    FlushHandleContext(tmp_handle);
  }
}

void ScopedKeyHandle::reset() {
  reset(kInvalidHandle);
}

TPM_HANDLE ScopedKeyHandle::get() const {
  return handle_;
}

void ScopedKeyHandle::FlushHandleContext(TPM_HANDLE handle) {
  TPM_RC result = TPM_RC_SUCCESS;
  result = factory_.GetTpm()->FlushContextSync(handle, nullptr);
  if (result) {
    LOG(WARNING) << "Error closing handle: " << handle << " : "
                 << GetErrorString(result);
  }
}

}  // namespace trunks
