Tests/esapi: Add PCR_Read, _Event, _Allocate

Signed-off-by: Juergen Repp <juergen.repp@sit.fraunhofer.de>
Signed-off-by: Andreas Fuchs <andreas.fuchs@sit.fraunhofer.de>
diff --git a/test/integration/esys-pcr-basic.int.c b/test/integration/esys-pcr-basic.int.c
index 08cbb28..c3ca2aa 100644
--- a/test/integration/esys-pcr-basic.int.c
+++ b/test/integration/esys-pcr-basic.int.c
@@ -31,39 +31,17 @@
 #define LOGMODULE test
 #include "util/log.h"
 
-/* Test the basic commands for PCR processing: Esys_PCR_Extend */
+/*
+ * Test the basic commands for PCR processing: Esys_PCR_Extend, Esys_PCR_Read,
+ * Esys_PCR_Reset, Esys_PCR_Event, and Esys_PCR_Allocate
+ */
 
 int
 test_invoke_esapi(ESYS_CONTEXT * esys_context)
 {
     uint32_t r = 0;
 
-#ifdef TEST_SESSION
-    ESYS_TR session;
-    TPMT_SYM_DEF symmetric = {.algorithm = TPM2_ALG_AES,
-                              .keyBits = {.aes = 128},
-                              .mode = {.aes = TPM2_ALG_CFB}
-    };
-    TPMA_SESSION sessionAttributes;
-    TPM2B_NONCE *nonceTpm;
-    TPM2B_NONCE nonceCaller = {
-        .size = 20,
-        .buffer = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
-                   11, 12, 13, 14, 15, 16, 17, 18, 19, 20}
-    };
-
-    memset(&sessionAttributes, 0, sizeof sessionAttributes);
-
-    r = Esys_StartAuthSession(esys_context, ESYS_TR_NONE, ESYS_TR_NONE,
-                              ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
-                              &nonceCaller,
-                              TPM2_SE_HMAC, &symmetric, TPM2_ALG_SHA1, &session,
-                              &nonceTpm);
-
-    goto_if_error(r, "Error: During initialization of session", error);
-#endif /* TEST_SESSION */
-
-    ESYS_TR  pcrHandle_handle = 1;
+    ESYS_TR  pcrHandle_handle = 16;
     TPML_DIGEST_VALUES digests
         = {
         .count = 1,
@@ -71,25 +49,94 @@
             {
                 .hashAlg = TPM2_ALG_SHA1,
                 .digest = {
-                    .sha1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
+                    .sha1 = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+                              11, 12, 13, 14, 15, 16, 17, 18, 19}
                 }
             },
         }};
 
-    r = Esys_PCR_Extend (
+    r = Esys_PCR_Extend(
         esys_context,
         pcrHandle_handle,
-#ifdef TEST_SESSION
-        session,
-#else
         ESYS_TR_PASSWORD,
-#endif
         ESYS_TR_NONE,
         ESYS_TR_NONE,
         &digests
         );
     goto_if_error(r, "Error: PCR_Extend", error);
 
+    TPML_PCR_SELECTION pcrSelectionIn = {
+        .count = 2,
+        .pcrSelections = {
+            { .hash = TPM2_ALG_SHA1,
+              .sizeofSelect = 3,
+              .pcrSelect = { 00, 00, 01},
+            },
+            { .hash = TPM2_ALG_SHA256,
+              .sizeofSelect = 3,
+              .pcrSelect = { 00, 00, 01}
+            },
+        }
+    };
+    UINT32 pcrUpdateCounter;
+    TPML_PCR_SELECTION *pcrSelectionOut;
+    TPML_DIGEST *pcrValues;
+
+    r = Esys_PCR_Read(
+        esys_context,
+        ESYS_TR_NONE,
+        ESYS_TR_NONE,
+        ESYS_TR_NONE,
+        &pcrSelectionIn,
+        &pcrUpdateCounter,
+        &pcrSelectionOut,
+        &pcrValues);
+    goto_if_error(r, "Error: PCR_Read", error);
+
+    r = Esys_PCR_Reset(
+        esys_context,
+        pcrHandle_handle,
+        ESYS_TR_PASSWORD,
+        ESYS_TR_NONE,
+        ESYS_TR_NONE);
+
+    goto_if_error(r, "Error: PCR_Reset", error);
+
+    TPM2B_EVENT eventData = { .size = 20,
+                              .buffer={0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
+                                       1, 2, 3, 4, 5, 6, 7, 8, 9}};
+    TPML_DIGEST_VALUES *digestsEvent;
+
+    r = Esys_PCR_Event(
+        esys_context,
+        pcrHandle_handle,
+        ESYS_TR_PASSWORD,
+        ESYS_TR_NONE,
+        ESYS_TR_NONE,
+        &eventData,
+        &digestsEvent);
+
+    goto_if_error(r, "Error: PCR_Reset", error);
+
+    TPMI_YES_NO allocationSuccess;
+    UINT32 maxPCR;
+    UINT32 sizeNeeded;
+    UINT32 sizeAvailable;
+
+    r = Esys_PCR_Allocate(
+        esys_context,
+        ESYS_TR_RH_PLATFORM,
+        ESYS_TR_PASSWORD,
+        ESYS_TR_NONE,
+        ESYS_TR_NONE,
+        &pcrSelectionIn,
+        &allocationSuccess,
+        &maxPCR,
+        &sizeNeeded,
+        &sizeAvailable);
+
+    goto_if_error(r, "Error: PCR_Allocate", error);
+
     return 0;
 
  error: