\clearpage
\begin{appendices}

\section{Implementation}
\label{app:impl}

\begin{table}[!ht]
\begin{tabular}{l l}
Repository: & \url{https://cgit.brentj.es/cmix.git/} \\
Documentation: & \url{https://dump.brentj.es/cmix/} \\
\end{tabular}
\end{table}

\section{PC specifications}
\label{app-specs}

\begin{table}[!ht]
\centering
\begin{tabular}{|l l|}
\hline
CPU: &Intel Core i7 960 @ 3.20GHz\\
Microcode: &0x19 \\
RAM: &3x 4GB @ 1066 MHz DDR3 \\
Bogomips: &6619.51 \\
OS: &Arch Linux \\
Turbo Boost: &off \\
\hline
\end{tabular}
\caption{Basic PC specs}
\end{table}

\begin{table}[!ht]
\noindent
\centering
\begin{tabular}{|l r r r|}
\hline
System Benchmarks Index Values              &BASELINE  &    RESULT  & INDEX\\\hline
Dhrystone 2 using register variables        &116700.0  &28324596.9  &2427.1\\\hline
Double-Precision Whetstone                  &    55.0  &    3683.4  & 669.7\\\hline
Execl Throughput                            &    43.0  &    4629.5  &1076.6\\\hline
File Copy 1024 bufsize 2000 maxblocks       &  3960.0  &  982540.2  &2481.2\\\hline
File Copy 256 bufsize 500 maxblocks         &  1655.0  &  275396.4  &1664.0\\\hline
File Copy 4096 bufsize 8000 maxblocks       &  5800.0  & 1976435.4  &3407.6\\\hline
Pipe Throughput                             & 12440.0  & 1939188.3  &1558.8\\\hline
Pipe-based Context Switching                &  4000.0  &  115504.5  & 288.8\\\hline
Process Creation                            &   126.0  &    5137.2  & 407.7\\\hline
Shell Scripts (1 concurrent)                &    42.4  &    1885.8  & 444.8\\\hline
Shell Scripts (8 concurrent)                &     6.0  &    1093.4  &1822.3\\\hline
System Call Overhead                        & 15000.0  & 2935648.7  &1957.1\\\hline
\hline
System Benchmarks Index Score               &          &            &1178.4\\\hline

\hline
\end{tabular}
\caption{Unix Bench index results to give a comparable baseline}
\end{table}

\section{Compiler options}
\label{app-ccopts}

both C and C++ optimization related compiler flags:

\begin{table}[!ht]
\begin{tabularx}{\columnwidth}{p{0.12\columnwidth} p{0.88\columnwidth}}
-flto:   &Link\ time\ optimization\\
-O3:     &3rd\ level\ optimizations\\
\end{tabularx}
\end{table}

\section{Some scripts to do result processing}

The script that converts the output from the statsd to a \LaTeX\xspace table format.

\begin{lstlisting}
cut -d ',' -f 2,5,8,11,14,17,20,23,26,29,32,35 | awk 'BEGIN {FS=",";}; {if (NR == 1) {print "prepre (s) & premix (s) & prepost (s) & realpre (s) & realmix (s) & realpost (s) \\\\\hline\\hline";} else{ OFMT="%.2f"; c=1000000000; print ($5-$6)/c,"&",($1-$2)/c,"&",($3-$4)/c,"&",($11-$12)/c,"&",($7-$8)/c,"&",($9-$10)/c,"\\\\\\hline";}}'
\end{lstlisting}

Script that calculates the mean and standard deviation of each column.

\begin{lstlisting}
tail -n +2 | cut -d ',' -f 2,5,8,11,14,17,20,23,26,29,32,35 | awk 'BEGIN {FS=",";}; { OFMT="%.2f"; c=1000000000; print ($5-$6)/c,($1-$2)/c,($3-$4)/c,($11-$12)/c,($7-$8)/c,($9-$10)/c;}' | awk '{for(i=1;i<=NF;i++) {sum[i] += $i; sumsq[i] += ($i)^2}} END {for (i=1;i<=NF;i++) {printf " & %.3f (%.3f)", sum[i]/NR, sqrt((sumsq[i]-sum[i]^2/NR)/NR)} printf("\n")}'
\end{lstlisting}

\clearpage

\section{averaged results}

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 0.752 (0.018) & 0.582 (0.009) & 0.274 (0.007) & 0.097 (0.005) & 0.027 (0.005) & 0.027 (0.004) \\\hline
			Node2 & 0.752 (0.013) & 0.583 (0.009) & 0.274 (0.013) & 0.095 (0.008) & 0.026 (0.005) & 0.026 (0.005) \\\hline
			Node3 & 0.742 (0.015) & 0.582 (0.010) & 0.274 (0.006) & 0.097 (0.005) & 0.063 (0.005) & 0.126 (0.007) \\\hline
		\end{tabular}
	\end{footnotesize}
	
	\caption{Node time average over 50 runs with standard deviation in seconds using ed25519 and running 100 clients.}
\end{table}

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 3.494 (0.025) & 3.484 (0.020) & 2.257 (0.035) & 1.151 (0.061) & 0.004 (0.005) & 0.008 (0.004) \\\hline
			Node2 & 3.484 (0.018) & 3.486 (0.012) & 2.282 (0.029) & 1.177 (0.079) & 0.004 (0.005) & 0.007 (0.004) \\\hline
			Node3 & 3.482 (0.018) & 3.488 (0.013) & 2.287 (0.032) & 1.180 (0.069) & 0.002 (0.004) & 0.259 (0.012) \\\hline
		\end{tabular}
	\end{footnotesize}
	\caption{Node time average over 50 runs with standard deviation in seconds using 2048 bit multiplicative group and running 100 clients.}
	
\end{table}

%-----------------------------------------------------------------------

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 1.495 (0.040) & 1.107 (0.020) & 0.483 (0.013) & 0.157 (0.005) & 0.054 (0.005) & 0.054 (0.005) \\\hline
			Node2 & 1.469 (0.038) & 1.106 (0.012) & 0.483 (0.010) & 0.156 (0.005) & 0.053 (0.005) & 0.054 (0.005) \\\hline
			Node3 & 1.457 (0.022) & 1.104 (0.013) & 0.484 (0.011) & 0.154 (0.014) & 0.115 (0.005) & 0.212 (0.009) \\\hline
		\end{tabular}
	\end{footnotesize}
	
	\caption{Node time average over 50 runs with standard deviation in seconds using ed25519 and running 200 clients.}
\end{table}

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 7.035 (0.053) & 6.978 (0.019) & 5.283 (0.097) & 4.066 (0.262) & 0.013 (0.005) & 0.029 (0.003) \\\hline
			Node2 & 6.973 (0.023) & 6.980 (0.016) & 5.300 (0.076) & 4.108 (0.246) & 0.014 (0.005) & 0.029 (0.003) \\\hline
			Node3 & 6.983 (0.021) & 6.976 (0.022) & 5.301 (0.115) & 4.080 (0.271) & 0.012 (0.004) & 0.549 (0.005) \\\hline
		\end{tabular}
	\end{footnotesize}
	\caption{Node time average over 50 runs with standard deviation in seconds using 2048 bit multiplicative group and running 200 clients.}
	
\end{table}

%-----------------------------------------------------------------------

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 2.270 (0.127) & 1.635 (0.025) & 0.696 (0.016) & 0.200 (0.010) & 0.081 (0.003) & 0.081 (0.004) \\\hline
			Node2 & 2.219 (0.045) & 1.651 (0.027) & 0.694 (0.016) & 0.202 (0.004) & 0.080 (0.004) & 0.080 (0.003) \\\hline
			Node3 & 2.181 (0.040) & 1.647 (0.022) & 0.694 (0.016) & 0.203 (0.005) & 0.151 (0.005) & 0.289 (0.013) \\\hline
		\end{tabular}
	\end{footnotesize}
	
	\caption{Node time average over 50 runs with standard deviation in seconds using ed25519 and running 300 clients.}
\end{table}

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 10.590 (0.061) & 10.534 (0.023) & 9.192 (0.224) & 8.981 (0.572) & 0.029 (0.004) & 0.064 (0.005) \\\hline
			Node2 & 10.549 (0.035) & 10.539 (0.031) & 9.247 (0.193) & 9.026 (0.585) & 0.029 (0.004) & 0.064 (0.005) \\\hline
			Node3 & 10.556 (0.028) & 10.538 (0.026) & 9.195 (0.245) & 9.028 (0.466) & 0.031 (0.002) & 0.814 (0.008) \\\hline
		\end{tabular}
	\end{footnotesize}
	\caption{Node time average over 50 runs with standard deviation in seconds using 2048 bit multiplicative group and running 300 clients.}
	
\end{table}
\vfill
\clearpage
%-----------------------------------------------------------------------

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 2.966 (0.057) & 2.177 (0.028) & 0.907 (0.045) & 0.247 (0.005) & 0.105 (0.005) & 0.106 (0.005) \\\hline
			Node2 & 2.898 (0.058) & 2.172 (0.031) & 0.898 (0.021) & 0.247 (0.005) & 0.104 (0.005) & 0.104 (0.005) \\\hline
			Node3 & 2.846 (0.053) & 2.155 (0.040) & 0.900 (0.024) & 0.247 (0.005) & 0.180 (0.004) & 0.367 (0.014) \\\hline
		\end{tabular}
	\end{footnotesize}
	
	\caption{Node time average over 50 runs with standard deviation in seconds using ed25519 and running 400 clients.}
\end{table}

\begin{table}[!ht]
	\centering
	\begin{footnotesize}
		\begin{tabular}{|r|r|r|r|r|r|r|}
			\hline
			Node & prepre (s (\textsigma)) & premix (s (\textsigma)) & prepost (s (\textsigma)) & realpre (s (\textsigma)) & realmix (s (\textsigma)) & realpost (s (\textsigma)) \\\hline\hline  
			Node1 & 15.233 (0.027) & 15.228 (0.028) & 14.763 (0.306) & 16.099 (0.799) & 0.049 (0.003) & 0.104 (0.005) \\\hline
			Node2 & 15.282 (0.030) & 15.225 (0.027) & 14.954 (0.297) & 16.344 (0.588) & 0.049 (0.004) & 0.105 (0.007) \\\hline
			Node3 & 15.284 (0.038) & 15.234 (0.034) & 14.947 (0.348) & 16.294 (0.765) & 0.050 (0.003) & 1.166 (0.010) \\\hline
		\end{tabular}
	\end{footnotesize}
	\caption{Node time average over 50 runs with standard deviation in seconds using 2048 bit multiplicative group and running 400 clients.}
	
\end{table}

%-----------------------------------------------------------------------

\vfill
\clearpage

\section{Raw Result tables}
\label{app-tables}

\newcommand{\rtable}[2]{
\begin{table}[!ht]
\centering
\begin{scriptsize}
\begin{tabular}{|r|r|r|r|r|r|}
\hline
\input{#1}
\end{tabular}
\end{scriptsize}
\caption{#2}
\end{table}
}

\vspace{2.355em}

\rtable{results/node1_100_ec.tab}{Timings of Node 1 elliptic curve algorithm with 100 clients}

\rtable{results/node2_100_ec.tab}{Timings of Node 2 elliptic curve algorithm with 100 clients}

\rtable{results/node3_100_ec.tab}{Timings of Node 3 elliptic curve algorithm with 100 clients}

\rtable{results/node1_100_mg.tab}{Timings of Node 1 multiplicative group algorithm with 100 clients}

\rtable{results/node2_100_mg.tab}{Timings of Node 2 multiplicative group algorithm with 100 clients}

\rtable{results/node3_100_mg.tab}{Timings of Node 3 multiplicative group algorithm with 100 clients}

%---------------------------------------------------------------------------------

\rtable{results/node1_200_ec.tab}{Timings of Node 1 elliptic curve algorithm with 200 clients}

\rtable{results/node2_200_ec.tab}{Timings of Node 2 elliptic curve algorithm with 200 clients}

\rtable{results/node3_200_ec.tab}{Timings of Node 3 elliptic curve algorithm with 200 clients}

\rtable{results/node1_200_mg.tab}{Timings of Node 1 multiplicative group algorithm with 200 clients}

\rtable{results/node2_200_mg.tab}{Timings of Node 2 multiplicative group algorithm with 200 clients}

\rtable{results/node3_200_mg.tab}{Timings of Node 3 multiplicative group algorithm with 200 clients}

%---------------------------------------------------------------------------------

\rtable{results/node1_300_ec.tab}{Timings of Node 1 elliptic curve algorithm with 300 clients}

\rtable{results/node2_300_ec.tab}{Timings of Node 2 elliptic curve algorithm with 300 clients}

\rtable{results/node3_300_ec.tab}{Timings of Node 3 elliptic curve algorithm with 300 clients}

\rtable{results/node1_300_mg.tab}{Timings of Node 1 multiplicative group algorithm with 300 clients}

\rtable{results/node2_300_mg.tab}{Timings of Node 2 multiplicative group algorithm with 300 clients}

\rtable{results/node3_300_mg.tab}{Timings of Node 3 multiplicative group algorithm with 300 clients}

%---------------------------------------------------------------------------------

\rtable{results/node1_400_ec.tab}{Timings of Node 1 elliptic curve algorithm with 400 clients}

\rtable{results/node2_400_ec.tab}{Timings of Node 2 elliptic curve algorithm with 400 clients}

\rtable{results/node3_400_ec.tab}{Timings of Node 3 elliptic curve algorithm with 400 clients}

\rtable{results/node1_400_mg.tab}{Timings of Node 1 multiplicative group algorithm with 400 clients}

\rtable{results/node2_400_mg.tab}{Timings of Node 2 multiplicative group algorithm with 400 clients}

\rtable{results/node3_400_mg.tab}{Timings of Node 3 multiplicative group algorithm with 400 clients}

%---------------------------------------------------------------------------------

\rtable{results/node1_500_ec.tab}{Timings of Node 1 elliptic curve algorithm with 500 clients}

\rtable{results/node2_500_ec.tab}{Timings of Node 2 elliptic curve algorithm with 500 clients}

\rtable{results/node3_500_ec.tab}{Timings of Node 3 elliptic curve algorithm with 500 clients}

\rtable{results/node1_500_mg.tab}{Timings of Node 1 multiplicative group algorithm with 500 clients}

\rtable{results/node2_500_mg.tab}{Timings of Node 2 multiplicative group algorithm with 500 clients}

\rtable{results/node3_500_mg.tab}{Timings of Node 3 multiplicative group algorithm with 500 clients}

%---------------------------------------------------------------------------------

\clearpage
%Keep this as last appendix.
%\section{Reference manual}

%\includepdf[pages=1]{appendices/refman.pdf}
%\includepdf[pages=2-]{appendices/refman.pdf}

\end{appendices}