/* Microsoft Reference Implementation for TPM 2.0 * * The copyright in this software is being made available under the BSD License, * included below. This software may be subject to other third party and * contributor rights, including patent rights, and no such rights are granted * under this license. * * Copyright (c) Microsoft Corporation * * All rights reserved. * * BSD License * * Redistribution and use in source and binary forms, with or without modification, * are permitted provided that the following conditions are met: * * Redistributions of source code must retain the above copyright notice, this list * of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, this * list of conditions and the following disclaimer in the documentation and/or * other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS"" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ //** Includes #include "Tpm.h" #include "AC_spt_fp.h" #if 1 // This is the simulated AC data. typedef struct { TPMI_RH_AC ac; TPML_AC_CAPABILITIES *acData; } acCapabilities; TPML_AC_CAPABILITIES acData0001 = {1, {{TPM_AT_PV1, 0x01234567}}}; acCapabilities ac[1] = { {0x0001, &acData0001} }; #define NUM_AC (sizeof(ac) / sizeof(acCapabilities)) #endif // 1 The simulated AC data //*** AcToCapabilities() // This function returns a pointer to a list of AC capabilities. TPML_AC_CAPABILITIES * AcToCapabilities( TPMI_RH_AC component // IN: component ) { UINT32 index; // for(index = 0; index < NUM_AC; index++) { if(ac[index].ac == component) return ac[index].acData; } return NULL; } //*** AcIsAccessible() // Function to determine if an AC handle references an actual AC // Return Type: BOOL BOOL AcIsAccessible( TPM_HANDLE acHandle ) { // In this implementation, the AC exists if there are some capabilities to go // with the handle return AcToCapabilities(acHandle) != NULL; } //*** AcCapabilitiesGet() // This function returns a list of capabilities associated with an AC // Return Type: TPMI_YES_NO // YES if there are more handles available // NO all the available handles has been returned TPMI_YES_NO AcCapabilitiesGet( TPMI_RH_AC component, // IN: the component TPM_AT type, // IN: start capability type TPML_AC_CAPABILITIES *capabilityList // OUT: list of handle ) { TPMI_YES_NO more = NO; UINT32 i; TPML_AC_CAPABILITIES *capabilities = AcToCapabilities(component); pAssert(HandleGetType(component) == TPM_HT_AC); // Initialize output handle list capabilityList->count = 0; if(capabilities != NULL) { // Find the first capability less than or equal to type for(i = 0; i < capabilities->count; i++) { if(capabilities->acCapabilities[i].tag >= type) { // copy the capabilities until we run out or fill the list for(; (capabilityList->count < MAX_AC_CAPABILITIES) && (i < capabilities->count); i++) { capabilityList->acCapabilities[capabilityList->count] = capabilities->acCapabilities[i]; capabilityList->count++; } more = i < capabilities->count; } } } return more; } //*** AcSendObject() // Stub to handle sending of an AC object // Return Type: TPM_RC TPM_RC AcSendObject( TPM_HANDLE acHandle, // IN: Handle of AC receiving object OBJECT *object, // IN: object structure to send TPMS_AC_OUTPUT *acDataOut // OUT: results of operation ) { NOT_REFERENCED(object); NOT_REFERENCED(acHandle); acDataOut->tag = TPM_AT_ERROR; // indicate that the response contains an // error code acDataOut->data = TPM_AE_NONE; // but there is no error. return TPM_RC_SUCCESS; }