\begin{tikzpicture}[scale=0.7, every node/.style={scale=0.7}]
  \foreach \x in {0, 1, 2} {
    % Nodes for PRF, plaintext blocks, and XORs, respectively.
    \node (f\x) at ($\x*(2.5cm,0)$) [minimum size=1.25cm,rounded corners=1ex,draw] {\Large $F_k$};
    \node (m\x) [above of=f\x, node distance=2cm] {$m_\x$};
    \node (p\x) [above of=f\x, node distance=1.2cm, circle, draw] {};

    % Draw the ``cross'' of the XORs.
    \draw[-] (p\x.north) -- (p\x.south);
    \draw[-] (p\x.east) -- (p\x.west);

    % Arrow for one of the inputs to XOR: the plaintext block.
    \draw[-latex] (m\x) -- (p\x);

    % Line taking the output of XOR to the input of PRF.
    \draw[-] (p\x) -- (f\x);

  % Arrows connecting PRF output for plaintext block i, to XOR input for
  % plaintext block i+1.
  \foreach \x in {0, 1} {
    \draw[-latex] (f\x.south) -- +(0cm,-0.3cm) -| +(1.25cm,1.85cm) -- ($(p\x.west) + (2.5cm,0)$);

  % IV, and arrow ``inputting'' it to first XOR.
  \node (m) [left of=p0, node distance = 1cm] {$0^n$};
  \draw[-latex] (m) -- (p0);

  % Arrow corresponding to tag output.
  \draw[-latex] (f2.south) |- +(0.5cm,-0.3cm) node [anchor=west] {t};