\foreach \x in {0, 1, 2} {
    % Draw the PRF instances.
    \node (f\x) at ($\x*(3.0cm,0)$) [minimum size=1.25cm, rounded corners=1ex, draw] {\Large $F_k$};

    % Draw nodes for ciphertext, XOR (circle only), and plaintext, respectively.
    \node (c\x) [below of=f\x, node distance=2.5cm] {$c_\x$};
    \node (p\x) [below of=f\x, node distance=1.5cm, circle, draw] {};
    \node (m\x) [left of=p\x, node distance=1.0cm] {$m_\x$};

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

    % Arrow: Plaintext input'd to XOR.
    \draw[-latex] (m\x) -- (p\x);
    % Arrow: PRF output to XOR.
    \draw[-latex] (f\x) -- (p\x);
    % Arrow: XOR output is ciphertext.
    \draw[-latex] (p\x) -- (c\x);

  % Inputs to the PRFs...
  \node (n0) [above of=f0, node distance=1.5cm] {$nonce\|ctr$};
  \node (n1) [above of=f1, node distance=1.5cm] {$nonce\|(ctr+1)$};
  \node (n2) [above of=f2, node distance=1.5cm] {$nonce\|(ctr+2)$};

  % ... and respective arrows.
  \draw[-latex] (n0) -- (f0);
  \draw[-latex] (n1) -- (f1);
  \draw[-latex] (n2) -- (f2);