|
| 1 | +\begin{cccFunctionality} |
| 2 | + {\funcDiffuse} |
| 3 | + {diffuse} |
| 4 | + {The diffusion network.} |
| 5 | + |
| 6 | + \newcommand*{\msgid}{\ensuremath{\mathsf{mid}}\xspace} |
| 7 | + \newcommand*{\vecM}{\ensuremath{\vec{M}}\xspace} |
| 8 | + |
| 9 | + The functionality is parameterized by the network delay \delay. |
| 10 | + |
| 11 | + \begin{minipage}{\linewidth} |
| 12 | + \begin{tabularx}{.9\textwidth}{c X} |
| 13 | + \toprule[.3mm] |
| 14 | + \textbf{State Variable} |
| 15 | + & \textbf{Description} |
| 16 | + \\ \midrule[.3mm] |
| 17 | + $\partyset \gets \emptyset$ |
| 18 | + & The set of registered parties. |
| 19 | + \\ \midrule |
| 20 | + $\vecM \gets [] $ |
| 21 | + & A dynamically updatable list of quadruples $(m, \msgid, D_{\msgid}, \party)$ where $D_{\msgid}$ denotes the fetch counter. |
| 22 | + \\ \bottomrule[.3mm] |
| 23 | + \end{tabularx} |
| 24 | + \addtocounter{table}{-1} |
| 25 | + \end{minipage} |
| 26 | + |
| 27 | + \paragraph{Network capabilities:} |
| 28 | + % |
| 29 | + \begin{cccItemize}[nosep] |
| 30 | + \item Upon receiving $(\textsc{diffuse}, \sid, m)$ from some |
| 31 | + $\party_s \in \partyset$, where $\partyset = \{ \party_1, \ldots, \party_n \}$ denotes the current party set, do: |
| 32 | + % |
| 33 | + \begin{cccEnum}[nosep] |
| 34 | + \item Choose $n$ new unique message-IDs $\msgid_1, \ldots, \msgid_n$. |
| 35 | + \item Initialize $2n$ new variables $D_{\msgid_1} := D^{MAX}_{\msgid_1} \ldots := D_{\msgid_n} := D^{MAX}_{\msgid_n} := 1$ and a per message-delay $\delay_{\msgid_i} = \delay$ for $i \in [n]$. |
| 36 | + \item Set $\vecM := \vecM \concat (m, \msgid_1, D_{\msgid_1}, \party_1) \concat \ldots \concat (m, \msgid_n, D_{\msgid_n}, \party_n)$. |
| 37 | + \item Send $(\textsc{diffuse}, \sid, m, \party_s, (\party_1, \msgid_1), \ldots ,(\party_n, \msgid_n))$ to the adversary. |
| 38 | + \end{cccEnum} |
| 39 | + |
| 40 | + \item Upon receiving $(\textsc{fetch}, \sid)$ from $\party \in \partyset$, or from \adv on behalf of a corrupted party \party: |
| 41 | + % |
| 42 | + \begin{cccEnum}[nosep] |
| 43 | + \item For all tuples $(m, \msgid, D_\msgid, \party) \in \vecM$, set $D_\msgid := D_\msgid - 1$. |
| 44 | + \item Let $\vecM^\party_0$ denote the subvector \vecM including all tuples of the form $(m, \msgid, D_\msgid, \party)$ with $D_\msgid \le 0$ (in the same order as they appear in \vecM). |
| 45 | + % |
| 46 | + Delete all entries in $\vecM^\party_0$ from \vecM and in case some $(m, \msgid, D_\msgid, \party)$ is in |
| 47 | + $\vecM^\party_0$, where \party is honest, set $\delay_{\msgid'} = \delay$ for any $(m, \msgid', D_{\msgid'}, (\cdot, \sid))$ in \vecM and replace this record by $(m, \msgid', \min \{ D_{\msgid'}, \delay \}, \party')$. |
| 48 | + \item Output $\vecM^\party_0$ to \party (if \party is corrupted, send $\vecM^\party_0$ to \adv). |
| 49 | + \end{cccEnum} |
| 50 | + \end{cccItemize} |
| 51 | + |
| 52 | + \paragraph{Additional adversarial capabilities:} |
| 53 | + % |
| 54 | + \begin{cccItemize}[nosep] |
| 55 | + \item Upon receiving $(\textsc{diffuse}, \sid, m)$ from some corrupted $\party_s \in \partyset$ (or from \adv on behalf of $\party_s$ if corrupted), |
| 56 | + % do |
| 57 | + execute it the same way as an honest-sender diffuse, with the only difference that $\delay_{\msgid_i} = \infty$. |
| 58 | + |
| 59 | + \item Upon receiving $(\textsc{delays}, \sid, (T_{\msgid_{i_1}}, \msgid_{i_1}), \ldots, (T_{\msgid_{i_\ell}}, \msgid_{i_\ell}))$ from the adversary do the following for each pair $(T_{\msgid_{i_j}}, \msgid_{i_j})$: |
| 60 | + % |
| 61 | + if $D^{MAX}_{\msgid_{i_j}} + T_{\msgid_{i_j}} \le \delay_{\msgid_{i_j}}$ and $\msgid_{i_j}$ is a message-ID of receiver $\party = (\cdot, \sid)$ registered in the current \vecM, set $D_{\msgid_{i_j}} := D_{\msgid_{i_j}} + T_{\msgid_{i_j}}$ and set $D^{MAX}_{\msgid_{i_j}} := D^{MAX}_{\msgid_{i_j}} + T_{\msgid_{i_j}}$; otherwise, ignore this pair. |
| 62 | + |
| 63 | + \item Upon receiving $(\textsc{swap}, \sid, \msgid, \msgid')$ from the adversary, if \msgid and $\msgid'$ are message-IDs registered in the current \vecM, then swap the triples $(m, \msgid, D_\msgid, (\cdot, \sid))$ and $(m, \msgid', D_{\msgid'}, (\cdot, \sid))$ in \vecM. |
| 64 | + % |
| 65 | + Return $(\textsc{swap}, \sid)$ to the adversary. |
| 66 | + |
| 67 | + \item Upon receiving $(\textsc{get-reg}, \sid)$ from \adv, return the response $(\textsc{get-reg}, \sid, \partyset)$ to \adv. |
| 68 | + \end{cccItemize} |
| 69 | +\end{cccFunctionality} |
0 commit comments