Browse Source

account for potential recording issues

Stan Gurtler 2 years ago
parent
commit
11c7946272
3 changed files with 42 additions and 16 deletions
  1. 7 0
      prsona/inc/networking.hpp
  2. 18 16
      prsona/src/networkClient.cpp
  3. 17 0
      prsona/src/networking.cpp

+ 7 - 0
prsona/inc/networking.hpp

@@ -200,6 +200,13 @@ void write_log_data(
     const std::vector<double>& timingData,
     const std::vector<size_t>& bandwidthData);
 
+void write_special_log_data(
+    std::mutex& outputMtx,
+    const std::string& outputFilename,
+    const std::vector<double>& timingData,
+    const std::vector<size_t>& bandwidthData,
+    bool corruption);
+
 void write_usage_data(
     std::mutex& outputMtx,
     const std::string& outputFilename);

+ 18 - 16
prsona/src/networkClient.cpp

@@ -141,11 +141,11 @@ bool make_reputation_proof(
     const std::string& usageFilename)
 {
     std::vector<double> timingData(2);
-    std::vector<size_t> bandwidthData(2), bandwidthDataMidA(2), bandwidthDataMidB(2);
-    bandwidthData[0] = 0;
-    bandwidthData[1] = 0;
+    std::vector<size_t> bandwidthData(2), checkForIssue(2); /*, bandwidthDataMidA(2), bandwidthDataMidB(2);*/
+    // bandwidthData[0] = 0;
+    // bandwidthData[1] = 0;
 
-    std::string extraOutput = outputFilename + ".extra";
+    // std::string extraOutput = outputFilename + ".extra";
 
     std::vector<size_t> bandwidthDataBefore = get_server_log_data(civetServer.getContext());
     std::chrono::high_resolution_clock::time_point wallTimeBefore = std::chrono::high_resolution_clock::now();
@@ -156,8 +156,8 @@ bool make_reputation_proof(
     Twistpoint freshGenerator = get_generator(rng, serverIPs, serverPorts, true, generatorProof, bandwidthData);
 
     // EXTRA 1
-    bandwidthDataMidA = bandwidthData;
-    write_log_data(outputMtx, extraOutput, timingData, bandwidthData);
+    // bandwidthDataMidA = bandwidthData;
+    // write_log_data(outputMtx, extraOutput, timingData, bandwidthData);
 
     // Load fresh generator into client object
     prsonaClient->receive_fresh_generator(generatorProof, freshGenerator);
@@ -170,10 +170,10 @@ bool make_reputation_proof(
     EGCiphertext encryptedScore = get_server_committed_val<EGCiphertext>(rng, serverIPs, serverPorts, REQUEST_CLIENT_TALLY_URI, REQUEST_CLIENT_TALLY_COMMITMENT_URI, encryptedScoreProof, shortTermPublicKey, bandwidthData);
 
     // EXTRA 2
-    bandwidthDataMidB[0] = bandwidthData[0] - bandwidthDataMidA[0];
-    bandwidthDataMidB[1] = bandwidthData[1] - bandwidthDataMidA[1];
-    bandwidthDataMidA = bandwidthData;
-    write_log_data(outputMtx, extraOutput, timingData, bandwidthDataMidB);
+    // bandwidthDataMidB[0] = bandwidthData[0] - bandwidthDataMidA[0];
+    // bandwidthDataMidB[1] = bandwidthData[1] - bandwidthDataMidA[1];
+    // bandwidthDataMidA = bandwidthData;
+    // write_log_data(outputMtx, extraOutput, timingData, bandwidthDataMidB);
 
     // Load this current encrypted score into client object
     prsonaClient->receive_vote_tally(encryptedScoreProof, encryptedScore);
@@ -191,9 +191,9 @@ bool make_reputation_proof(
     char *responseFile = send_item(rng, target, targetPort, VERIFY_REPUTATION_PROOF_URI, data, true, bandwidthData);
 
     // EXTRA 3
-    bandwidthDataMidB[0] = bandwidthData[0] - bandwidthDataMidA[0];
-    bandwidthDataMidB[1] = bandwidthData[1] - bandwidthDataMidA[1];
-    write_log_data(outputMtx, extraOutput, timingData, bandwidthDataMidB);
+    // bandwidthDataMidB[0] = bandwidthData[0] - bandwidthDataMidA[0];
+    // bandwidthDataMidB[1] = bandwidthData[1] - bandwidthDataMidA[1];
+    // write_log_data(outputMtx, extraOutput, timingData, bandwidthDataMidB);
 
     clock_t cpuTimeAfter = clock();
     std::chrono::high_resolution_clock::time_point wallTimeAfter = std::chrono::high_resolution_clock::now();
@@ -202,10 +202,12 @@ bool make_reputation_proof(
     timingData[0] = std::chrono::duration_cast<std::chrono::duration<double>>(wallTimeAfter - wallTimeBefore).count();
     timingData[1] = ((double)(cpuTimeAfter - cpuTimeBefore)) / CLOCKS_PER_SEC;
 
-    bandwidthData[0] += bandwidthDataAfter[0] - bandwidthDataBefore[0];
-    bandwidthData[1] += bandwidthDataAfter[1] - bandwidthDataBefore[1];
+    checkForIssue[0] = bandwidthDataAfter[0] - bandwidthDataBefore[0];
+    checkForIssue[1] = bandwidthDataAfter[1] - bandwidthDataBefore[1];
 
-    write_log_data(outputMtx, outputFilename, timingData, bandwidthData);
+    bool corruption = checkForIssue[0] != 0 || checkForIssue[1] != 0;
+
+    write_special_log_data(outputMtx, outputFilename, timingData, bandwidthData, corruption);
     write_usage_data(usageMtx, usageFilename);
 
     // The other client will give one byte back, containing whether or not it accepted the proof

+ 17 - 0
prsona/src/networking.cpp

@@ -158,6 +158,23 @@ void write_log_data(
     fclose(outputFile);
 }
 
+void write_special_log_data(
+    std::mutex& outputMtx,
+    const std::string& outputFilename,
+    const std::vector<double>& timingData,
+    const std::vector<size_t>& bandwidthData,
+    bool corruption)
+{
+    std::unique_lock<std::mutex> lck(outputMtx);
+
+    FILE *outputFile = fopen(outputFilename.c_str(), "a");
+    if (!corruption)
+        fprintf(outputFile, "%f,%f,%zu,%zu\n", timingData[0], timingData[1], bandwidthData[0], bandwidthData[1]);
+    else
+        fprintf(outputFile, "%f*,%f*,%zu,%zu\n", timingData[0], timingData[1], bandwidthData[0], bandwidthData[1]);
+    fclose(outputFile);
+}
+
 void write_usage_data(
     std::mutex& outputMtx,
     const std::string& outputFilename)