\begin{tikzpicture}[ -latex, rrs/.style = { draw = gray!30, thick, rounded rectangle, fill = white, minimum width = 2cm, font = \fontsize{8}{8}\selectfont, text = white, }, ls/.style = { font=\fontsize{6}{6}\selectfont, }, ] \draw (0, 1) node[rrs, fill=darkRed] (Log) {Log}; \draw (0, -1) node[rrs, fill=darkGreen] (Subject) {Subject}; \draw (3.5, 0) node[rrs, fill=darkBlue] (Endpoint) {Notifier}; \draw (-3.5, 0) node[rrs, fill=gray] (Monitor) {Monitor}; \path [draw, ->, rounded corners] (Log.north) |- ($ (Log.north) + (Log.west) - (Log) + (-0.25, 0.25) $) node[ls, above, pos=0.75]{ STH with snapshot extension } |- (Log.west); \path [draw, ->, rounded corners] (Monitor.south) |- ($ (Monitor.south) + (Monitor.west) - (Monitor) + (-0.25, -0.25) $) node[ls, below, pos=0.75]{ verify STH extension } |- (Monitor.west); \path [draw, ->, rounded corners] (Subject.south) |- ($ (Subject.south) + (Subject.east) - (Subject) + (0.25, -0.25) $) node[ls, below, pos=0.75]{ verify notification } |- (Subject.east); \path [draw, <-, dashed, rounded corners] (Endpoint.north) |- ($ (Endpoint.east) + (Endpoint.north) - (Endpoint) + (0.25, 0.25) $) node[ls, above, pos=0.75]{ optional verify } |- (Endpoint.east); \draw [->] (Log.south east) -- node[ls, sloped, anchor=center, above]{% batch, STH } (Endpoint.north west); \draw [->] (Endpoint.south west) -- node[ls, sloped, anchor=center, above]{% notification } (Subject.north east); \path [draw, ->] (Log.south west) -- node[ls, sloped, anchor=center, above]{% batch, STH } (Monitor.north east); \end{tikzpicture}