code: public final void updateAAD(ByteBuffer src) {
          checkCipherState();
  
          // Input sanity check
          if (src == null) {
              throw new IllegalArgumentException("src ByteBuffer is null");
          }
  
          updateProviderIfNeeded();
          if (src.remaining() == 0) {
              return;
          }
          spi.engineUpdateAAD(src);
      }
docs: Continues a multi-part update of the Additional Authentication
  Data (AAD).
  <p>
  Calls to this method provide AAD to the cipher when operating in
  modes such as AEAD (GCM/CCM).  If this cipher is operating in
  either GCM or CCM mode, all AAD must be supplied before beginning
  operations on the ciphertext (via the {@code update} and {@code
  doFinal} methods).
  <p>
  All {@code src.remaining()} bytes starting at
  {@code src.position()} are processed.
  Upon return, the input buffer's position will be equal
  to its limit; its limit will not have changed.
  
  @param src the buffer containing the AAD
  
  @throws IllegalArgumentException if the {@code src ByteBuffer}
  is null
  @throws IllegalStateException if this cipher is in a wrong state
  (e.g., has not been initialized), does not accept AAD, or if
  operating in either GCM or CCM mode and one of the {@code update}
  methods has already been called for the active
  encryption/decryption operation
  @throws UnsupportedOperationException if the corresponding method
  in the {@code CipherSpi} has not been overridden by an
  implementation
  
  @since 1.7