]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Changed definition of pcr_value in pcr_entry_t structure
authorSansar Choinyambuu <schoinya@hsr.ch>
Wed, 19 Oct 2011 11:54:29 +0000 (13:54 +0200)
committerAndreas Steffen <andreas.steffen@strongswan.org>
Mon, 28 Nov 2011 18:06:35 +0000 (19:06 +0100)
Implemented function to check if recevied PCR after value matches with any configured pcr value

src/libpts/pts/pts.c
src/libpts/pts/pts.h

index 0f850f292f494befd4702c1c283bdd3779e3c926..1178a0f9037f168f5d8ad2bed407a4994ce35a1d 100644 (file)
@@ -984,6 +984,45 @@ static u_int32_t get_max_pcr_index(private_pts_t *this)
        return ret;
 }
 
+METHOD(pts_t, does_pcr_value_match, bool,
+       private_pts_t *this, chunk_t pcr_after_value)
+{
+       linked_list_t *entries;
+       enumerator_t *e;
+       pcr_entry_t *pcr_entry;
+       bool match_found = FALSE;
+       
+       if (!load_pcr_entries(&entries))
+       {
+               DBG1(DBG_PTS, "failed to load PCR entries");
+               return FALSE;
+       }
+       
+       e = entries->create_enumerator(entries);
+       while (e->enumerate(e, &pcr_entry))
+       {
+               if (chunk_equals(chunk_create(pcr_entry->pcr_value, PCR_LEN), pcr_after_value))
+               {
+                       DBG1(DBG_PTS, "PCR %d value matched with configured value",
+                                pcr_entry->pcr_number);
+                       match_found = TRUE;
+                       break;
+               }
+       }
+       
+       DESTROY_IF(e);
+       DESTROY_IF(entries);
+       free(pcr_entry);
+
+       if (match_found)
+       {
+               return TRUE;
+       }
+       
+       DBG1(DBG_PTS, "PCR after value didn't match with any of the configured values");
+       return FALSE;
+}
+
 /**
  * 1. build a TCPA_PCR_COMPOSITE structure which contains (pcrCompositeBuf)
  * TCPA_PCR_SELECTION structure (bitmask length + bitmask)
@@ -1045,6 +1084,7 @@ METHOD(pts_t, get_quote_info, bool,
                u_int32_t index = pcr_entry->pcr_number;
                mask_bytes[index / 8] |= (1 << (index % 8));
        }
+       
        e->destroy(e);
 
        for (i = 0; i< bitmask_len ; i++)
index 5b8d8986f829d5faf7593bb6763799bfc3f631b6..41f81e40f715c74651d6aac2094120010d3a1abc 100644 (file)
@@ -388,6 +388,13 @@ struct pts_t {
         bool (*quote_tpm)(pts_t *this, u_int32_t *pcrs, u_int32_t num_of_pcrs,
                                           chunk_t *pcr_composite, chunk_t *quote_signature);
 
+        /**
+        * Check PCR after value in Simple Component Evidence matches configured value
+        *
+        * @return                                      FALSE in case of any error or non-match, TRUE otherwise
+        */
+        bool (*does_pcr_value_match)(pts_t *this, chunk_t pcr_after_value);
+
         /**
         * Constructs and returns PCR Quote Digest structure expected from IMC
         *