/* Copyright (c) 2012 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 "tlcl.h"
#include "tlcl_internal.h"
#include "utility.h"
#include "vboot_api.h"

uint32_t TlclLibInit(void) {
  return VbExTpmInit();
}

uint32_t TlclLibClose(void) {
  return TPM_SUCCESS;
}

uint32_t TlclStartup(void) {
  return TPM_SUCCESS;
}

uint32_t TlclSaveState(void) {
  return TPM_SUCCESS;
}

uint32_t TlclResume(void) {
  return TPM_SUCCESS;
}

uint32_t TlclSelfTestFull(void) {
  return TPM_SUCCESS;
}

uint32_t TlclContinueSelfTest(void) {
  return TPM_SUCCESS;
}

uint32_t TlclDefineSpace(uint32_t index, uint32_t perm, uint32_t size) {
  return TPM_SUCCESS;
}

uint32_t TlclWrite(uint32_t index, const void* data, uint32_t length) {
  return TPM_SUCCESS;
}

uint32_t TlclRead(uint32_t index, void* data, uint32_t length) {
  Memset(data, '\0', length);
  return TPM_SUCCESS;
}

uint32_t TlclPCRRead(uint32_t index, void* data, uint32_t length) {
  Memset(data, '\0', length);
  return TPM_SUCCESS;
}

uint32_t TlclWriteLock(uint32_t index) {
  return TPM_SUCCESS;
}

uint32_t TlclReadLock(uint32_t index) {
  return TPM_SUCCESS;
}

uint32_t TlclAssertPhysicalPresence(void) {
  return TPM_SUCCESS;
}

uint32_t TlclPhysicalPresenceCMDEnable(void) {
  return TPM_SUCCESS;
}

uint32_t TlclFinalizePhysicalPresence(void) {
  return TPM_SUCCESS;
}

uint32_t TlclAssertPhysicalPresenceResult(void) {
  return TPM_SUCCESS;
}

uint32_t TlclLockPhysicalPresence(void) {
  return TPM_SUCCESS;
}

uint32_t TlclSetNvLocked(void) {
  return TPM_SUCCESS;
}

int TlclIsOwned(void) {
  return 0;
}

uint32_t TlclForceClear(void) {
  return TPM_SUCCESS;
}

uint32_t TlclSetEnable(void) {
  return TPM_SUCCESS;
}

uint32_t TlclClearEnable(void) {
  return TPM_SUCCESS;
}

uint32_t TlclSetDeactivated(uint8_t flag) {
  return TPM_SUCCESS;
}

uint32_t TlclGetPermanentFlags(TPM_PERMANENT_FLAGS* pflags) {
  Memset(pflags, '\0', sizeof(*pflags));
  return TPM_SUCCESS;
}

uint32_t TlclGetSTClearFlags(TPM_STCLEAR_FLAGS* vflags) {
  Memset(vflags, '\0', sizeof(*vflags));
  return TPM_SUCCESS;
}

uint32_t TlclGetFlags(uint8_t* disable,
                      uint8_t* deactivated,
                      uint8_t *nvlocked) {
  *disable = 0;
  *deactivated = 0;
  *nvlocked = 0;
  return TPM_SUCCESS;
}

uint32_t TlclSetGlobalLock(void) {
  return TPM_SUCCESS;
}

uint32_t TlclExtend(int pcr_num, const uint8_t* in_digest,
                    uint8_t* out_digest) {
  Memcpy(out_digest, in_digest, kPcrDigestLength);
  return TPM_SUCCESS;
}

uint32_t TlclGetPermissions(uint32_t index, uint32_t* permissions) {
  *permissions = 0;
  return TPM_SUCCESS;
}

uint32_t TlclGetOwnership(uint8_t* owned) {
  *owned = 0;
  return TPM_SUCCESS;
}

uint32_t TlclGetRandom(uint8_t* data, uint32_t length, uint32_t *size) {
  *size = length;
  /* http://dilbert.com/strips/comic/2001-10-25/ */
  Memset(data, '\x9', *size);
  return TPM_SUCCESS;
}
