1// This file was extracted from the TCG Published 2// Trusted Platform Module Library 3// Part 4: Supporting Routines 4// Family "2.0" 5// Level 00 Revision 01.16 6// October 30, 2014 7 8#include <stdlib.h> 9#include <stdio.h> 10#include <stdint.h> 11#include <ctype.h> 12#include <windows.h> 13#include <strsafe.h> 14#include "string.h" 15#include "TpmTcpProtocol.h" 16#include "..\tpm\include\TpmBuildSwitches.h" 17#include "..\tpm\include\prototypes\Manufacture_fp.h" 18#define PURPOSE \ 19"TPM Reference Simulator.\nCopyright Microsoft 2010, 2011.\n" 20#define DEFAULT_TPM_PORT 2321 21void* MainPointer; 22int _plat__NVEnable(void* platParameters); 23void _plat__NVDisable(); 24int StartTcpServer(int PortNumber); 25// 26// 27// Functions 28// 29// Usage() 30// 31// This function prints the proper calling sequence for the simulator. 32// 33void 34Usage( 35 char *pszProgramName 36 ) 37{ 38 fprintf_s(stderr, "%s", PURPOSE); 39 fprintf_s(stderr, "Usage:\n"); 40 fprintf_s(stderr, "%s - Starts the TPM server listening on port %d\n", 41 pszProgramName, DEFAULT_TPM_PORT); 42 fprintf_s(stderr, 43 "%s PortNum - Starts the TPM server listening on port PortNum\n", 44 pszProgramName); 45 fprintf_s(stderr, "%s ? - This message\n", pszProgramName); 46 exit(1); 47} 48// 49// 50// main() 51// 52// This is the main entry point for the simulator. 53// main: register the interface, start listening for clients 54// 55void __cdecl 56main( 57 int argc, 58 char *argv[] 59 ) 60{ 61 int portNum = DEFAULT_TPM_PORT; 62 if(argc>2) 63 { 64 Usage(argv[0]); 65 } 66 if(argc==2) 67 { 68 if(strcmp(argv[1], "?") ==0) 69 { 70 Usage(argv[0]); 71 } 72 portNum = atoi(argv[1]); 73 if(portNum <=0 || portNum>65535) 74 { 75 Usage(argv[0]); 76 } 77 } 78 _plat__NVEnable(NULL); 79 if(TPM_Manufacture(1) != 0) 80 { 81 exit(1); 82 } 83 // Coverage test - repeated manufacturing attempt 84 if(TPM_Manufacture(0) != 1) 85 { 86 exit(2); 87 } 88 // Coverage test - re-manufacturing 89 TPM_TearDown(); 90 if(TPM_Manufacture(1) != 0) 91 { 92 exit(3); 93 } 94 // Disable NV memory 95 _plat__NVDisable(); 96 StartTcpServer(portNum); 97 return; 98} 99