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 
10 #include "CryptoEngine.h"
11 #include "OsslCryptoEngine.h"
12 static void Trap(const char *function, int line, int code);
13 FAIL_FUNCTION       TpmFailFunction = (FAIL_FUNCTION)&Trap;
14 //
15 //
16 //          Functions
17 //
18 //          FAILURE_TRAP()
19 //
20 //     This function is called if the caller to _cpri__InitCryptoUnits() doesn't provide a call back address.
21 //
22 static void
Trap(const char * function,int line,int code)23 Trap(
24      const char          *function,
25      int                  line,
26      int                  code
27      )
28 {
29      UNREFERENCED(function);
30      UNREFERENCED(line);
31      UNREFERENCED(code);
32      abort();
33 }
34 //
35 //
36 //          _cpri__InitCryptoUnits()
37 //
38 //     This function calls the initialization functions of the other crypto modules that are part of the crypto engine
39 //     for this implementation. This function should be called as a result of _TPM_Init(). The parameter to this
40 //     function is a call back function it TPM.lib that is called when the crypto engine has a failure.
41 //
42 LIB_EXPORT CRYPT_RESULT
_cpri__InitCryptoUnits(FAIL_FUNCTION failFunction)43 _cpri__InitCryptoUnits(
44      FAIL_FUNCTION        failFunction
45      )
46 {
47    TpmFailFunction = failFunction;
48    _cpri__RngStartup();
49    _cpri__HashStartup();
50    _cpri__SymStartup();
51 #ifdef TPM_ALG_RSA
52    _cpri__RsaStartup();
53 #endif
54 #ifdef TPM_ALG_ECC
55    _cpri__EccStartup();
56 #endif
57    return CRYPT_SUCCESS;
58 }
59 //
60 //
61 //          _cpri__StopCryptoUnits()
62 //
63 //     This function calls the shutdown functions of the other crypto modules that are part of the crypto engine
64 //     for this implementation.
65 //
66 LIB_EXPORT void
_cpri__StopCryptoUnits(void)67 _cpri__StopCryptoUnits(
68    void
69    )
70 {
71    return;
72 }
73 //
74 //
75 //          _cpri__Startup()
76 //
77 //     This function calls the startup functions of the other crypto modules that are part of the crypto engine for
78 //     this implementation. This function should be called during processing of TPM2_Startup().
79 //
80 LIB_EXPORT BOOL
_cpri__Startup(void)81 _cpri__Startup(
82    void
83    )
84 {
85    return(       _cpri__HashStartup()
86               && _cpri__RngStartup()
87 #ifdef     TPM_ALG_RSA
88               && _cpri__RsaStartup()
89 #endif     // TPM_ALG_RSA
90 #ifdef     TPM_ALG_ECC
91               && _cpri__EccStartup()
92 #endif     // TPM_ALG_ECC
93               && _cpri__SymStartup());
94 }
95