\documentclass{standalone} \usepackage{amsmath} \usepackage{tikz} \usepackage{xcolor} % Colorblind-friendly palette from <https://jfly.uni-koeln.de/color/>. \definecolor{Vermillion} {cmy}{0, 0.8, 1} \definecolor{Orange} {cmy}{0, 0.5, 1} \definecolor{SkyBlue} {cmy}{0.8, 0, 0} \definecolor{BluishGreen} {cmy}{0.97, 0, 0.75} \definecolor{Yellow} {cmy}{0.1, 0.5, 0.9} \definecolor{Blue} {cmy}{1, 0.5, 0} \definecolor{ReddishPurple} {cmy}{0.1, 0.7, 0} \begin{document} \begin{tikzpicture} \usetikzlibrary{calc} \usetikzlibrary{shapes} % Nodes representing data. \tikzset{publicdatum/.style={ shape=circle, rounded corners=0.5ex, minimum height=4ex, fill=SkyBlue, fill opacity=0.4, text opacity=1, }} \tikzset{secretdatum/.style={ shape=rectangle, rounded corners=0.5ex, minimum height=4ex, fill=Vermillion, fill opacity=0.4, text opacity=1, }} % Nodes representing operations on data. \tikzset{operation/.style={ shape=trapezium, trapezium left angle=-65, trapezium right angle=-65, minimum height=4ex, }} \node (gen) at (1/4, 5) [draw, operation] {$\operatorname{Gen}$}; \coordinate (gen-pk) at ($(gen.south) - (1/4,0)$); \coordinate (gen-sk) at ($(gen.south) + (1/4,0)$); \node (m0) at (-2.5, 3) [draw, secretdatum] {$m$}; \node (pk) at (-1.5, 3) [draw, publicdatum] {$\mathit{pk}$}; \node (encrypt) at (-2, 2) [draw, operation] {$\operatorname{Encrypt}(\mathit{pk}, m)$}; \coordinate (encrypt-m) at ($(encrypt.north) - (1/2,0)$); \coordinate (encrypt-pk) at ($(encrypt.north) + (1/2,0)$); \coordinate (encrypt-c) at (encrypt.south); \node (c) at (-1.25, 0.5) [draw, publicdatum] {$c$}; \node (sk) at (0.5, 0) [draw, secretdatum] {$\mathit{sk}$}; \node (decrypt) at (0, -1) [draw, operation] {$\operatorname{Decrypt}(\mathit{sk}, c)$}; \coordinate (decrypt-c) at ($(decrypt.north) - (1/2,0)$); \coordinate (decrypt-sk) at ($(decrypt.north) + (1/2,0)$); \coordinate (decrypt-m) at (decrypt.south); \node (m1) at (0, -2) [draw, secretdatum] {$m$}; \draw[->] (gen-pk) |- ($(pk) + (0,1)$) -- (pk); \draw[->] (gen-sk) -- (sk); \draw[->] (m0) -- (encrypt-m); \draw[->] (pk) -- (encrypt-pk); \draw[->] (encrypt-c) |- (c); \draw[->] (c) -| (decrypt-c); \draw[->] (sk) -- (decrypt-sk); \draw[->] (decrypt-m) -- (m1); \end{tikzpicture} \end{document}