\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}
