libimcv: Allow pts_t.set_peer_public_value() to fail
authorMartin Willi <martin@revosec.ch>
Mon, 23 Mar 2015 10:28:57 +0000 (11:28 +0100)
committerMartin Willi <martin@revosec.ch>
Mon, 23 Mar 2015 16:54:02 +0000 (17:54 +0100)
src/libimcv/plugins/imc_attestation/imc_attestation_process.c
src/libimcv/plugins/imv_attestation/imv_attestation_process.c
src/libimcv/pts/pts.c
src/libimcv/pts/pts.h

index 6f8e4ea..f24aec8 100644 (file)
@@ -178,8 +178,10 @@ bool imc_attestation_process(pa_tnc_attr_t *attr, imc_msg_t *msg,
                                return FALSE;
                        }
 
-                       pts->set_peer_public_value(pts, initiator_value, initiator_nonce);
-                       if (!pts->calculate_secret(pts))
+
+                       if (!pts->set_peer_public_value(pts, initiator_value,
+                                                                                       initiator_nonce) ||
+                               !pts->calculate_secret(pts))
                        {
                                return FALSE;
                        }
index bad536a..fbeb661 100644 (file)
@@ -134,11 +134,11 @@ bool imv_attestation_process(pa_tnc_attr_t *attr, imv_msg_t *out_msg,
                        }
 
                        responder_value = attr_cast->get_responder_value(attr_cast);
-                       pts->set_peer_public_value(pts, responder_value,
-                                                                                       responder_nonce);
 
                        /* Calculate secret assessment value */
-                       if (!pts->calculate_secret(pts))
+                       if (!pts->set_peer_public_value(pts, responder_value,
+                                                                                       responder_nonce) ||
+                               !pts->calculate_secret(pts))
                        {
                                return FALSE;
                        }
index 6deccc8..8d13bfc 100644 (file)
@@ -232,7 +232,7 @@ METHOD(pts_t, get_my_public_value, bool,
        return TRUE;
 }
 
-METHOD(pts_t, set_peer_public_value, void,
+METHOD(pts_t, set_peer_public_value, bool,
        private_pts_t *this, chunk_t value, chunk_t nonce)
 {
        this->dh->set_other_public_value(this->dh, value);
@@ -246,6 +246,7 @@ METHOD(pts_t, set_peer_public_value, void,
        {
                this->responder_nonce = nonce;
        }
+       return TRUE;
 }
 
 METHOD(pts_t, calculate_secret, bool,
index 4d3284e..d525306 100644 (file)
@@ -152,8 +152,9 @@ struct pts_t {
         *
         * @param value                         Peer public DH value
         * @param nonce                         Peer DH nonce
+        * @return                                      TRUE if public value set successfully
         */
-       void (*set_peer_public_value) (pts_t *this, chunk_t value, chunk_t nonce);
+       bool (*set_peer_public_value) (pts_t *this, chunk_t value, chunk_t nonce);
 
        /**
         * Calculates assessment secret to be used for TPM Quote as ExternalData