code: protected void _F(byte[] dest, int offset, PRF prf, byte[] S, int c,
              int blockIndex)
      {
          int hLen = prf.getHLen();
          byte U_r[] = new byte[hLen];
  
          // U0 = S || INT (i);
          byte U_i[] = new byte[S.length + 4];
          System.arraycopy(S, 0, U_i, 0, S.length);
          INT(U_i, S.length, blockIndex);
  
          for (int i = 0; i < c; i++)
          {
              U_i = prf.doFinal(U_i);
              xor(U_r, U_i);
          }
          System.arraycopy(U_r, 0, dest, offset, hLen);
      }
docs: Function F.
  
  @see <a href="http://tools.ietf.org/html/rfc2898">RFC 2898 5.2 Step 3.</a>
  @param dest
  Destination byte buffer
  @param offset
  Offset into destination byte buffer
  @param prf
  Pseudo Random Function
  @param S
  Salt as array of bytes
  @param c
  Iteration count
  @param blockIndex
  The block index (&gt;= 1).