Home | History | Annotate | Download | only in tpm2
      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