/**
  * Performs encryption operation.
  *
  * <p>The input plain text <code>in</code>, starting at <code>inOff</code> and ending at <code>
  * (inOff + len - 1)</code>, is encrypted. The result is stored in <code>out</code>, starting at
  * <code>outOfs</code>.
  *
  * @param in the buffer with the input data to be encrypted
  * @param inOfs the offset in <code>in</code>
  * @param len the length of the input data
  * @param out the buffer for the result
  * @param outOfs the offset in <code>out</code>
  * @exception ProviderException if <code>len</code> is not a multiple of the block size
  * @return the number of bytes placed into the <code>out</code> buffer
  */
 int encrypt(byte[] in, int inOfs, int len, byte[] out, int outOfs) {
   if ((len % blockSize) != 0) {
     throw new ProviderException("Internal error in input buffering");
   }
   processAAD();
   if (len > 0) {
     gctrPAndC.update(in, inOfs, len, out, outOfs);
     processed += len;
     ghashAllToS.update(out, outOfs, len);
   }
   return len;
 }