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
Usage(char * pszProgramName)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
main(int argc,char * argv[])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