From 27935713690d8e1e1af52f8385c077404a2b3107 Mon Sep 17 00:00:00 2001
From: josh <josh@elixxir.io>
Date: Fri, 22 Oct 2021 14:03:54 -0700
Subject: [PATCH] Add code for proto USer

---
 basice2e/permissioning.yaml |   4 +
 basice2e/run.sh             | 372 +++++++++++++++++++++---------------
 2 files changed, 223 insertions(+), 153 deletions(-)

diff --git a/basice2e/permissioning.yaml b/basice2e/permissioning.yaml
index 3b904d3..5b72acb 100644
--- a/basice2e/permissioning.yaml
+++ b/basice2e/permissioning.yaml
@@ -34,6 +34,10 @@ allowLocalIPs: true
 disableNDFPruning: true
 permissiveIPChecking: true
 
+# How long rounds will be tracked by gateways. Rounds (and messages as an extension)
+# prior to this period are not guaranteed to be delivered to clients.
+# Expects duration in"h". (Defaults to 1 weeks (168 hours)
+messageRetentionLimit: "168h"
 
 # "Location of the user discovery contact file.
 udContactPath: "results/udContact.bin"
diff --git a/basice2e/run.sh b/basice2e/run.sh
index d32a922..6ba74bc 100755
--- a/basice2e/run.sh
+++ b/basice2e/run.sh
@@ -239,159 +239,161 @@ runclients() {
 }
 
 
-if [ "$NETWORKENTRYPOINT" == "localhost:8440" ]
-then
-
-    echo "RUNNING BASIC CLIENTS..."
-    runclients
-    echo "RUNNING BASIC CLIENTS (2nd time)..."
-    runclients
-
-    # Send E2E messages between a single user
-    mkdir -p blob9
-    mkdir -p blob18
-    mkdir -p blob91
-    echo "TEST E2E WITH PRECANNED USERS..."
-    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob9/blob9 --sendid 9 --destid 9 -m \"Hi 9->9, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL
-    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob9/blob9 --sendid 9 --destid 9 -m \"Hi 9->9, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client19.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob19/blob19 --slowPolling --sendid 19 --destid 19 -m \"Hi 19->19, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client19.txt 2>&1 &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL
-
-
-    # Send E2E messages between two users
-    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 3 --receiveCount 3 -s blob9/blob9 --sendid 9 --destid 18 -m \"Hi 9->18, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
-    PIDVAL1=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client18.log --sendDelay 1000  --sendCount 3 --receiveCount 3 -s blob18/blob18 --sendid 18 --destid 9 -m \"Hi 18->9, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client18.txt 2>&1 &
-    PIDVAL2=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL1
-    wait $PIDVAL2
-
-
-    # Send multiple E2E encrypted messages between users that discovered each other
-    echo "SENDING MESSAGES TO PRECANNED USERS AND FORCING A REKEY..."
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client18_rekey.log --sendCount 20 --receiveCount 20 --destid 9 -s blob18/blob18 -m \"Hello, 9, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client18_rekey.txt 2>&1 || true &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client9_rekey.log --sendCount 20 --receiveCount 20 --destid 18 -s blob9/blob9 -m \"Hello, 18, with E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client9_rekey.txt 2>&1 || true &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL || true
-
-    echo "FORCING HISTORICAL ROUNDS... (NON-E2E, PRECAN)"
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS --forceHistoricalRounds --unsafe -l $CLIENTOUT/client35.log -s blob35 --sendid 1 --destid 2 --sendCount 5 --receiveCount 5 -m \"Hello from 1, without E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client35.txt || true &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS --forceHistoricalRounds --unsafe -l $CLIENTOUT/client36.log -s blob36 --sendid 2 --destid 1 --sendCount 5 --receiveCount 5 -m \"Hello from 2, without E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client36.txt || true &
-    PIDVAL2=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL
-    wait $PIDVAL2
-
-    echo "FORCING MESSAGE PICKUP RETRY... (NON-E2E, PRECAN)"
-    # Higher timeouts for this test to allow message pickup retry to function
-    CLIENTCMD="timeout 360s ../bin/client $CLIENTOPTS --forceMessagePickupRetry --unsafe -l $CLIENTOUT/client20.log -s blob20 --sendid 20 --destid 21 --sendCount 5 --receiveCount 5 -m \"Hello from 20, without E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client20.txt || true &
-    PIDVAL=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    CLIENTCMD="timeout 360s ../bin/client $CLIENTOPTS --forceMessagePickupRetry --unsafe -l $CLIENTOUT/client21.log -s blob21 --sendid 21 --destid 20 --sendCount 5 --receiveCount 5 -m \"Hello from 21, without E2E Encryption\""
-    eval $CLIENTCMD >> $CLIENTOUT/client21.txt || true &
-    PIDVAL2=$!
-    echo "$CLIENTCMD -- $PIDVAL"
-    wait $PIDVAL
-    wait $PIDVAL2
-
-
-fi
-
-# Non-precanned E2E user messaging
-echo "SENDING E2E MESSAGES TO NEW USERS..."
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --writeContact $CLIENTOUT/rick42-contact.bin --unsafe -m \"Hello from Rick42 to myself, without E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-PIDVAL=$!
-echo "$CLIENTCMD -- $PIDVAL"
-wait $PIDVAL
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43 --writeContact $CLIENTOUT/ben43-contact.bin --destfile $CLIENTOUT/rick42-contact.bin --send-auth-request --sendCount 0 --receiveCount 0"
-eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
-PIDVAL2=$!
-echo "$CLIENTCMD -- $PIDVAL"
-
-while [ ! -s $CLIENTOUT/ben43-contact.bin ]; do
-    sleep 1
-    echo -n "."
-done
-
-
-TMPID=$(cat $CLIENTOUT/client42.log | grep -a "User\:" | awk -F' ' '{print $5}')
-RICKID=${TMPID}
-echo "RICK ID: $RICKID"
-TMPID=$(cat $CLIENTOUT/client43.log | grep -a "User\:" | awk -F' ' '{print $5}')
-BENID=${TMPID}
-echo "BEN ID: $BENID"
-
-# Client 42 will now wait for client 43's E2E Auth channel request and confirm
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --destfile $CLIENTOUT/ben43-contact.bin --sendCount 0 --receiveCount 0"
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-PIDVAL=$!
-echo "$CLIENTCMD -- $PIDVAL"
-wait $PIDVAL
-wait $PIDVAL2
-
-# Test destid syntax too, note wait for 11 messages to catch the message from above ^^^
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-PIDVAL=$!
-echo "$CLIENTCMD -- $PIDVAL"
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43  --destid b64:$RICKID --sendCount 5 --receiveCount 5 -m \"Hello from Ben43, with E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
-PIDVAL2=$!
-echo "$CLIENTCMD -- $PIDVAL"
-wait $PIDVAL
-wait $PIDVAL2
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-PIDVAL=$!
-echo "$CLIENTCMD -- $PIDVAL"
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43  --destid b64:$RICKID --sendCount 5 --receiveCount 5 -m \"Hello from Ben43, with E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
-PIDVAL2=$!
-echo "$CLIENTCMD -- $PIDVAL"
-wait $PIDVAL
-wait $PIDVAL2
-
-echo "DELETING CONTACT FROM CLIENT..."
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --delete-channel --destfile $CLIENTOUT/ben43-contact.bin --sendCount 0 --receiveCount 0"
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-echo "$CLIENTCMD -- $PIDVAL"
-PIDVAL1=$!
-wait $PIDVAL1
-# NOTE the command below causes the following EXPECTED error:
-# panic: Could not confirm authentication channel for HTAmEeBhbLi6aFqcWsi3OZNDE/642GAchpATjhYFTHwD, waited 120 seconds.
-# Note that the above is example, client IDs will vary
-CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
-eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
-PIDVAL2=$!
-echo "$CLIENTCMD -- $PIDVAL"
-wait $PIDVAL2
-
+#if [ "$NETWORKENTRYPOINT" == "localhost:8440" ]
+#then
+#
+#    echo "RUNNING BASIC CLIENTS..."
+#    runclients
+#    echo "RUNNING BASIC CLIENTS (2nd time)..."
+#    runclients
+#
+#    # Send E2E messages between a single user
+#    mkdir -p blob9
+#    mkdir -p blob18
+#    mkdir -p blob91
+#    echo "TEST E2E WITH PRECANNED USERS..."
+#    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob9/blob9 --sendid 9 --destid 9 -m \"Hi 9->9, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL
+#    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob9/blob9 --sendid 9 --destid 9 -m \"Hi 9->9, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client19.log --sendDelay 1000 --sendCount 2 --receiveCount 2 -s blob19/blob19 --slowPolling --sendid 19 --destid 19 -m \"Hi 19->19, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client19.txt 2>&1 &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL
+#
+#
+#    # Send E2E messages between two users
+#    CLIENTCMD="timeout 240s ../bin/client  $CLIENTOPTS -l $CLIENTOUT/client9.log --sendDelay 1000 --sendCount 3 --receiveCount 3 -s blob9/blob9 --sendid 9 --destid 18 -m \"Hi 9->18, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client9.txt 2>&1 &
+#    PIDVAL1=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client18.log --sendDelay 1000  --sendCount 3 --receiveCount 3 -s blob18/blob18 --sendid 18 --destid 9 -m \"Hi 18->9, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client18.txt 2>&1 &
+#    PIDVAL2=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL1
+#    wait $PIDVAL2
+#
+#
+#    # Send multiple E2E encrypted messages between users that discovered each other
+#    echo "SENDING MESSAGES TO PRECANNED USERS AND FORCING A REKEY..."
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client18_rekey.log --sendCount 20 --receiveCount 20 --destid 9 -s blob18/blob18 -m \"Hello, 9, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client18_rekey.txt 2>&1 || true &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client9_rekey.log --sendCount 20 --receiveCount 20 --destid 18 -s blob9/blob9 -m \"Hello, 18, with E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client9_rekey.txt 2>&1 || true &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL || true
+#
+#    echo "FORCING HISTORICAL ROUNDS... (NON-E2E, PRECAN)"
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS --forceHistoricalRounds --unsafe -l $CLIENTOUT/client35.log -s blob35 --sendid 1 --destid 2 --sendCount 5 --receiveCount 5 -m \"Hello from 1, without E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client35.txt || true &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS --forceHistoricalRounds --unsafe -l $CLIENTOUT/client36.log -s blob36 --sendid 2 --destid 1 --sendCount 5 --receiveCount 5 -m \"Hello from 2, without E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client36.txt || true &
+#    PIDVAL2=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL
+#    wait $PIDVAL2
+#
+#    echo "FORCING MESSAGE PICKUP RETRY... (NON-E2E, PRECAN)"
+#    # Higher timeouts for this test to allow message pickup retry to function
+#    CLIENTCMD="timeout 360s ../bin/client $CLIENTOPTS --forceMessagePickupRetry --unsafe -l $CLIENTOUT/client20.log -s blob20 --sendid 20 --destid 21 --sendCount 5 --receiveCount 5 -m \"Hello from 20, without E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client20.txt || true &
+#    PIDVAL=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    CLIENTCMD="timeout 360s ../bin/client $CLIENTOPTS --forceMessagePickupRetry --unsafe -l $CLIENTOUT/client21.log -s blob21 --sendid 21 --destid 20 --sendCount 5 --receiveCount 5 -m \"Hello from 21, without E2E Encryption\""
+#    eval $CLIENTCMD >> $CLIENTOUT/client21.txt || true &
+#    PIDVAL2=$!
+#    echo "$CLIENTCMD -- $PIDVAL"
+#    wait $PIDVAL
+#    wait $PIDVAL2
+#
+#
+#fi
+
+## Non-precanned E2E user messaging
+#echo "SENDING E2E MESSAGES TO NEW USERS..."
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --writeContact $CLIENTOUT/rick42-contact.bin --unsafe -m \"Hello from Rick42 to myself, without E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#PIDVAL=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#wait $PIDVAL
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43 --writeContact $CLIENTOUT/ben43-contact.bin --destfile $CLIENTOUT/rick42-contact.bin --send-auth-request --sendCount 0 --receiveCount 0"
+#eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
+#PIDVAL2=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#
+#while [ ! -s $CLIENTOUT/ben43-contact.bin ]; do
+#    sleep 1
+#    echo -n "."
+#done
+#
+#
+#TMPID=$(cat $CLIENTOUT/client42.log | grep -a "User\:" | awk -F' ' '{print $5}')
+#RICKID=${TMPID}
+#echo "RICK ID: $RICKID"
+#TMPID=$(cat $CLIENTOUT/client43.log | grep -a "User\:" | awk -F' ' '{print $5}')
+#BENID=${TMPID}
+#echo "BEN ID: $BENID"
+#
+## Client 42 will now wait for client 43's E2E Auth channel request and confirm
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --destfile $CLIENTOUT/ben43-contact.bin --sendCount 0 --receiveCount 0"
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#PIDVAL=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#wait $PIDVAL
+#wait $PIDVAL2
+#
+## Test destid syntax too, note wait for 11 messages to catch the message from above ^^^
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#PIDVAL=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43  --destid b64:$RICKID --sendCount 5 --receiveCount 5 -m \"Hello from Ben43, with E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
+#PIDVAL2=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#wait $PIDVAL
+#wait $PIDVAL2
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#PIDVAL=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client43.log -s blob43  --destid b64:$RICKID --sendCount 5 --receiveCount 5 -m \"Hello from Ben43, with E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client43.txt || true &
+#PIDVAL2=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#wait $PIDVAL
+#wait $PIDVAL2
+#
+#echo "DELETING CONTACT FROM CLIENT..."
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42 --delete-channel --destfile $CLIENTOUT/ben43-contact.bin --sendCount 0 --receiveCount 0"
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#echo "$CLIENTCMD -- $PIDVAL"
+#PIDVAL1=$!
+#wait $PIDVAL1
+## NOTE the command below causes the following EXPECTED error:
+## panic: Could not confirm authentication channel for HTAmEeBhbLi6aFqcWsi3OZNDE/642GAchpATjhYFTHwD, waited 120 seconds.
+## Note that the above is example, client IDs will vary
+#CLIENTCMD="timeout 240s ../bin/client $CLIENTOPTS -l $CLIENTOUT/client42.log -s blob42  --destid b64:$BENID --sendCount 5 --receiveCount 5 -m \"Hello from Rick42, with E2E Encryption\""
+#eval $CLIENTCMD >> $CLIENTOUT/client42.txt || true &
+#PIDVAL2=$!
+#echo "$CLIENTCMD -- $PIDVAL"
+#wait $PIDVAL2
+
+
+########### KEEP COMMENTED OUT, DO NOT UNCOMMENT WHEN UNCOMMENTING OUT ABOVE ################################
 # echo "CREATING USERS for REKEY TEST..."
 # JAKEID=$(../bin/client init -s blob100 -l $CLIENTOUT/client100.log --password hello --ndf results/ndf.json --writeContact $CLIENTOUT/Jake100-contact.bin -v $DEBUGLEVEL)
 # NIAMHID=$(../bin/client init -s blob101 -l $CLIENTOUT/client101.log --password hello --ndf results/ndf.json --writeContact $CLIENTOUT/Niamh101-contact.bin -v $DEBUGLEVEL)
@@ -466,6 +468,70 @@ wait $PIDVAL2
 # wait $PIDVAL
 # wait $PIDVAL2
 
+################### Do not uncomment above, it was meant to be commented out
+
+# Proto user test: client25 and client26 generate a proto user JSON file and close.
+# Both clients are restarted and load from their respective proto user files and attempt to send.
+
+# Generate contact and proto user file for client25
+echo "TESTING PROTO USER FILE..."
+
+CLIENTCMD="../bin/client proto -l $CLIENTOUT/client25.log -s junk25 --password hello --ndf results/ndf.json --writeContact $CLIENTOUT/josh25-contact.bin --protoUserOut $CLIENTOUT/client25Proto.json --unsafe -m \"Hello from Rick42 to myself, without E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client25.txt || true &
+PIDVAL=$!
+echo "$CLIENTCMD -- $PIDVAL"
+wait $PIDVAL
+
+# Generate contact and proto user file for client 26
+CLIENTCMD="../bin/client proto -l $CLIENTOUT/client26.log -s junk26 --password hello --ndf results/ndf.json --writeContact $CLIENTOUT/jonah26-contact.bin --protoUserOut $CLIENTOUT/client26Proto.json --send-auth-request --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client25.txt || true &
+PIDVAL=$!
+echo "$CLIENTCMD -- $PIDVAL"
+wait $PIDVAL
+
+while [ ! -s $CLIENTOUT/jonah26-contact.bin ]; do
+    sleep 1
+    echo -n "."
+done
+
+# Print IDs to console
+TMPID=$(cat $CLIENTOUT/client25.log | grep -a "User\:" | awk -F' ' '{print $5}')
+JOSHID=${TMPID}
+echo "JOSH ID: $JOSHID"
+TMPID=$(cat $CLIENTOUT/client26.log | grep -a "User\:" | awk -F' ' '{print $5}')
+JONAHID=${TMPID}
+echo "JONAH ID: $JONAHID"
+
+# Client 25 will now wait for client 26's E2E Auth channel request and confirm
+CLIENTCMD="timeout 240s ../bin/client proto $CLIENTOPTS -l $CLIENTOUT/client25.log -s blob25  --protoUserPath $CLIENTOUT/client25Proto.json --destfile $CLIENTOUT/jonah26-contact.bin --sendCount 0 --receiveCount 0"
+eval $CLIENTCMD >> $CLIENTOUT/client25.txt || true &
+PIDVAL=$!
+echo "$CLIENTCMD -- $PIDVAL"
+wait $PIDVAL
+wait $PIDVAL2
+
+# Send E2E messages
+CLIENTCMD="timeout 240s ../bin/client proto $CLIENTOPTS -l $CLIENTOUT/client25.log -s blob25  --protoUserPath $CLIENTOUT/client25Proto.json  --destid b64:$JONAHID --sendCount 5 --receiveCount 5 -m \"Hello from Josh25, with E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client25.txt || true &
+PIDVAL=$!
+echo "$CLIENTCMD -- $PIDVAL"
+CLIENTCMD="timeout 240s ../bin/client proto $CLIENTOPTS -l $CLIENTOUT/client26.log -s blob26 --protoUserPath $CLIENTOUT/client26Proto.json  --destid b64:$JOSHID --sendCount 5 --receiveCount 5 -m \"Hello from Jonah26, with E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client26.txt || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL"
+wait $PIDVAL
+wait $PIDVAL2
+CLIENTCMD="timeout 240s ../bin/client proto $CLIENTOPTS -l $CLIENTOUT/client25.log -s blob25  --protoUserPath $CLIENTOUT/client25Proto.json  --destid b64:$JONAHID --sendCount 5 --receiveCount 5 -m \"Hello from Josh25, with E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client25.txt || true &
+PIDVAL=$!
+echo "$CLIENTCMD -- $PIDVAL"
+CLIENTCMD="timeout 240s ../bin/client proto $CLIENTOPTS -l $CLIENTOUT/client26.log -s blob26 --protoUserPath $CLIENTOUT/client26Proto.json  --destid b64:$JOSHID --sendCount 5 --receiveCount 5 -m \"Hello from Jonah26, with E2E Encryption\""
+eval $CLIENTCMD >> $CLIENTOUT/client26.txt || true &
+PIDVAL2=$!
+echo "$CLIENTCMD -- $PIDVAL"
+wait $PIDVAL
+wait $PIDVAL2
+
 
 # Single-use test: client53 sends message to client52; client52 responds with
 # the same message in the set number of message parts
-- 
GitLab