// This file was extracted from the TCG Published
// Trusted Platform Module Library
// Part 4: Supporting Routines
// Family "2.0"
// Level 00 Revision 01.16
// October 30, 2014
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <ctype.h>
#include <windows.h>
#include <strsafe.h>
#include "string.h"
#include "TpmTcpProtocol.h"
#include "..\tpm\include\TpmBuildSwitches.h"
#include "..\tpm\include\prototypes\Manufacture_fp.h"
#define PURPOSE \
"TPM Reference Simulator.\nCopyright Microsoft 2010, 2011.\n"
#define DEFAULT_TPM_PORT 2321
void* MainPointer;
int _plat__NVEnable(void* platParameters);
void _plat__NVDisable();
int StartTcpServer(int PortNumber);
//
//
// Functions
//
// Usage()
//
// This function prints the proper calling sequence for the simulator.
//
void
Usage(
char *pszProgramName
)
{
fprintf_s(stderr, "%s", PURPOSE);
fprintf_s(stderr, "Usage:\n");
fprintf_s(stderr, "%s - Starts the TPM server listening on port %d\n",
pszProgramName, DEFAULT_TPM_PORT);
fprintf_s(stderr,
"%s PortNum - Starts the TPM server listening on port PortNum\n",
pszProgramName);
fprintf_s(stderr, "%s ? - This message\n", pszProgramName);
exit(1);
}
//
//
// main()
//
// This is the main entry point for the simulator.
// main: register the interface, start listening for clients
//
void __cdecl
main(
int argc,
char *argv[]
)
{
int portNum = DEFAULT_TPM_PORT;
if(argc>2)
{
Usage(argv[0]);
}
if(argc==2)
{
if(strcmp(argv[1], "?") ==0)
{
Usage(argv[0]);
}
portNum = atoi(argv[1]);
if(portNum <=0 || portNum>65535)
{
Usage(argv[0]);
}
}
_plat__NVEnable(NULL);
if(TPM_Manufacture(1) != 0)
{
exit(1);
}
// Coverage test - repeated manufacturing attempt
if(TPM_Manufacture(0) != 1)
{
exit(2);
}
// Coverage test - re-manufacturing
TPM_TearDown();
if(TPM_Manufacture(1) != 0)
{
exit(3);
}
// Disable NV memory
_plat__NVDisable();
StartTcpServer(portNum);
return;
}