Files
xen/tools/vtpm_manager/util/bsg.h
T
shand@ubuntu.eng.hq.xensource.com f2a4d188c4 vTPM manager - Intel/IBM joint TPM Virtualization implementation for Xen.
This is a software implementation for people without h/w vTPM support. 

Signed-off-by: Vinnie Scarlata <vincent.r.scarlata@intel.com>
Signed-off-by: Joseph Cihula <joseph.cihula@intel.com>
Signed-off-by: Steven Hand <steven@xensource.com>
2005-08-30 11:39:25 -08:00

167 lines
4.9 KiB
C

// ===================================================================
//
// Copyright (c) 2005, Intel Corp.
// All rights reserved.
//
// 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.
// * Neither the name of Intel Corporation nor the names of its
// contributors may be used to endorse or promote products derived
// from this software without specific prior written permission.
//
// 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 OWNER 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.
// ===================================================================
//
// bsg.h
//
// This file contains API's for the TPM Byte Stream functions
//
// ==================================================================
#ifndef __BSG_H__
#define __BSG_H__
#include <stdarg.h>
#include "buffer.h"
typedef unsigned int BSG_UINT32;
typedef unsigned char BSG_BYTE;
// forward decl
struct pack_const_tuple_t;
struct pack_tuple_t;
/**
* Byte stream generator
*/
// this has to be manually kept in sync with the
// s_fmt array!!
// but now we have a self-check function which can make sure things are well
// (if used!)
typedef enum BSG_Type
{
BSG_TYPE_FIRST = 1,
BSG_TYPE_UINT32 = 1, // start at 1 so that Type 0 only serves as an
// unused/special value
BSG_TYPE_UINT16,
BSG_TYPE_BYTE,
BSG_TYPE_BOOL,
BSG_TPM_SIZE32_DATA, // a 32 bit unsigned size, followed by
// a pointer to that much data. can pass a
// struct pack_buf_t as the param
BSG_TPM_TAG,
BSG_TPM_HANDLE,
BSG_TPM_RESULT,
BSG_TPM_RESOURCE_TYPE,
BSG_TPM_COMMAND_CODE,
BSG_TPM_AUTH_DATA_USAGE,
BSG_TPM_ALGORITHM_ID,
BSG_TPM_PROTOCOL_ID,
BSG_TPM_KEY_USAGE,
BSG_TPM_ENC_SCHEME,
BSG_TPM_SIG_SCHEME,
BSG_TPM_MIGRATE_SCHEME,
BSG_TPM_KEY_FLAGS,
BSG_TPM_AUTHDATA,
BSG_TPM_SECRET,
BSG_TPM_ENCAUTH,
BSG_TPM_PAYLOAD_TYPE,
BSG_TPM_VERSION,
BSG_TPM_DIGEST,
BSG_TPM_COMPOSITE_HASH,
BSG_TPM_CHOSENID_HASH,
BSG_TPM_NONCE,
BSG_TPM_KEY_HANDLE,
BSG_TPM_KEY_HANDLE_LIST,
BSG_TPM_KEY_PARMS,
BSG_TPM_RSA_KEY_PARMS,
BSG_TPM_STORE_PUBKEY,
BSG_TPM_PUBKEY,
BSG_TPM_KEY,
BSG_TPM_MIGRATIONKEYAUTH,
BSG_TCPA_AUDIT_EVENT,
BSG_TCPA_EVENT_CERT,
BSG_TPM_PCR_SELECTION,
BSG_TPM_PCR_COMPOSITE,
BSG_TPM_PCR_INFO,
BSG_TPM_STORED_DATA,
BSG_TPM_SYMMETRIC_KEY,
BSG_TPM_STORE_PRIVKEY,
BSG_TPM_STORE_ASYMKEY,
BSG_TPM_MIGRATE_ASYMKEY,
BSG_TPM_QUOTE_INFO,
BSG_TPM_IDENTITY_CONTENTS,
BSG_TPM_PCRVALUE,
BSG_TCPA_PCR_FLAGS,
BSG_TCS_AUTH,
// this is the BSG_TPM_KEY struct without the encData field
BSG_TPM_KEY_NONSENSITIVE,
BSG_PACKED,
BSG_TYPE_MAX
} BSG_Type;
struct pack_const_tuple_t {
BSG_Type type;
const void * addr;
};
typedef struct pack_tuple_t {
BSG_Type type;
void * addr;
} pack_tuple_t;
int BSG_Pack(BSG_Type type, const void* src, BSG_BYTE* dst);
int BSG_Unpack(BSG_Type type, const BSG_BYTE* src, void* dst);
void BSG_Destroy(BSG_Type type, void* src);
// wrappers of Pack and PackList which malloc the ouput buffer. to be freed
// by the caller later. returns size of allocated buffer, or -1 in case
// allocation failed
int BSG_PackMalloc (BSG_Type type, const void* src, BSG_BYTE** o_dst);
int BSG_PackListMalloc (BSG_BYTE** outBuffer, int ParamCount, ... );
// a va_list version of PackList
int BSG_PackList(BSG_BYTE* outBuffer, int ParamCount, ... );
int BSG_UnpackList(const BSG_BYTE* inBuffer, int ParamCount, ... );
void BSG_DestroyList(int ParamCount, ... );
// wrapper of PackList which uses a buffer_t
TPM_RESULT BSG_PackListBuf (buffer_t * o_buf, int ParamCount, ...);
// and a tuple version
TPM_RESULT BSG_DestroyTuple (int numParams, pack_tuple_t params[]);
void BSG_PackConst(BSG_UINT32 val, int size, BSG_BYTE* dst);
BSG_UINT32 BSG_UnpackConst(const BSG_BYTE* src, int size);
BOOL BSG_static_selfcheck ();
#endif