\documentclass{standalone}
\usepackage{amssymb}
\usepackage{tikz}

%% Public TikZ libraries
\usetikzlibrary{positioning}

%% Custom TikZ addons
\usetikzlibrary{crypto.symbols}
\tikzset{shadows=no}        % Option: add shadows to XOR, ADD, etc.

%% Document
\begin{document}
\begin{tikzpicture}[
	thick,
	node distance=2.1cm and 0cm,
	]

    \tikzstyle{word} = [
		draw,
		rectangle,
		fill=cyan!20,
		text centered,
		text width=3em,
		minimum width=2cm,	
		%blur shadow={shadow blur steps=5},	
	]

    \tikzstyle{dot} = [
		fill,
		shape=circle,
		minimum size=5pt,
		inner sep=0pt,
	]	

    \tikzstyle{F} = [
		draw,
		rectangle,
		fill=green!20,
		text centered,
		text width=1.5em,
		minimum width=1.5em,
		minimum height=2em,	
		%blur shadow={shadow blur steps=5},	
	]

    \tikzstyle{rotatebox} = [
		draw,
		rectangle,
		fill=yellow!20,
		text centered,
		text width=1cm,
		minimum width=2em,	
		%blur shadow={shadow blur steps=5},		
	]
	
	\node[word] (a0) {$A_{i}$};
	\node[word,right of = a0] (b0) {$B_{i}$};
	\node[word,right of = b0] (c0) {$C_{i}$};
	\node[word,right of = c0] (d0) {$D_{i}$};
    
	\node[MODADD,scale=1.5,below = 2em of a0] (add1) {};
	\node[MODADD,scale=1.5,below = 2em of add1] (add2) {};
	\node[MODADD,scale=1.5,below = 2em of add2] (add3) {};
	\node[rotatebox,below = 2em of add3] (rot1) {$\lll s$};
	\node[MODADD,scale=1.5,below = 2em of rot1] (add4) {};

	\node[F,right = 1.5em of add1] (F) {$F_{i}$};

	\node[word,below of = add4] (a1) {$A_{i+1}$};
	\node[word,right of = a1] (b1) {$B_{i+1}$};
	\node[word,right of = b1] (c1) {$C_{i+1}$};
	\node[word,right of = c1] (d1) {$D_{i+1}$};

	\draw[line] (a0) -- (add1);
	\draw[line] (add1) -- (add2);
	\draw[line] (add2) -- (add3);
	\draw[line] (add3) -- (rot1);
	\draw[line] (rot1) -- (add4);

	\draw[line] let \p1=(add4.south),\p2=(b1.north),\p3=(add4.south) in 
		(\x1,\y1) 
		-- (\x1,\y3-0.5em)
		-- (\x2, \y2+1em)
		-- (\x2, \y2);

	\draw[line] let \p1=(b0.south),\p2=(c1.north),\p3=(add4.south) in 
		(\x1,\y1) 
		-- (\x1,\y3-0.5em)
		-- (\x2, \y2+1em)
		-- (\x2, \y2);

	\draw[line] let \p1=(c0.south),\p2=(d1.north),\p3=(add4.south) in 
		(\x1,\y1) 
		-- (\x1,\y3-0.5em)
		-- (\x2, \y2+1em)
		-- (\x2, \y2);
		
	\draw[line] let \p1=(d0.south),\p2=(a1.north),\p3=(add4.south) in 
		(\x1,\y1) 
		-- (\x1,\y3-0.5em)
		-- (\x2, \y2+1em)
		-- (\x2, \y2);

	\draw[line] (F) -- (add1);

	\node[left = 2em of add2] (m) {$M_{i}$};
	\draw[line] (m) -- (add2);

	\node[left = 2em of add3] (k) {$K_{i}$};
	\draw[line] (k) -- (add3);

	\path let \p1=(F.east),\p2=(d0.south) in node[dot] (dotD) at (\x2,\y1-0.6em) {};
	\path let \p1=(F.east),\p2=(c0.south) in node[dot] (dotC) at (\x2,\y1) {};
	\path let \p1=(F.east),\p2=(b0.south) in node[dot] (dotB) at (\x2,\y1+0.6em) {};
	\path let \p1=(add4.east),\p2=(b0.south) in node[dot] (dotB2) at (\x2,\y1) {};
	
	\draw[line] let \p1=(dotD),\p2=(F.east) in (dotD) -- (\x2,\y1);
	\draw[line] let \p1=(dotC),\p2=(F.east) in (dotC) -- (\x2,\y1);
	\draw[line] let \p1=(dotB),\p2=(F.east) in (dotB) -- (\x2,\y1);
	\draw[line] (dotB2) -- (add4);

\end{tikzpicture}
\end{document}
