\begin{tikzpicture}[ -latex, entity/.style = { draw = gray!30, thick, rounded rectangle, fill = white, minimum width = 2cm, font = \fontsize{8}{8}\selectfont, text = white, }, relation/.style = { draw = none, font = \fontsize{6}{6}\selectfont, }, path/.style = { draw, thick, -latex, }, ] \node[entity, fill=darkBlue] (Publisher) at (0,0) { Publisher }; \node[entity, fill=darkGreen, below=1.5cm of Publisher] (EndUser) {End-user}; \node[entity, fill=darkOrange, left=1.5cm of Publisher] (Log) {Log}; \node[entity, fill=darkRed, below=1.5cm of Log] (Witness) {Witness}; % Key setup \path[path, dashed] ($ (EndUser) + (2,0) $) -- node[relation, above] { Public keys } (EndUser); % Get data and signature \path[path] (Publisher) -- node[relation, right] { \begin{tabular}{c} Opaque data\\ Signature\\ Proofs of logging\\ \end{tabular} } (EndUser); % Verification \path[path, rounded corners] (EndUser.180) -| ($ (EndUser) + (-1.25,-.75) $) node[relation, below]{ Verify } -| (EndUser.210); % Cosigning \path[path] (Witness) edge[bend right] node[relation,right]{Cosignature} (Log); \path[path] (Log) edge[bend right] node[relation,left]{Tree head} (Witness); \path[path, rounded corners] (Witness.180) -| ($ (Witness) + (-1.25,-.75) $) node[relation, below]{ Verify } -| (Witness.210); % Get proofs \path[path] (Log) -- node[relation,above]{Proofs of logging} (Publisher); \end{tikzpicture}