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 21 void* MainPointer; 22 int _plat__NVEnable(void* platParameters); 23 void _plat__NVDisable(); 24 int StartTcpServer(int PortNumber); 25 // 26 // 27 // Functions 28 // 29 // Usage() 30 // 31 // This function prints the proper calling sequence for the simulator. 32 // 33 void 34 Usage( 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 // 55 void __cdecl 56 main( 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