code: private void setMessage(String message) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidAlgorithmParameterException, InvalidKeyException, UnsupportedEncodingException, BadPaddingException, IllegalBlockSizeException {
          if (message == null) {
              return;
          }
  
          // Encrypt message body
          SecretKey secretKey = new SecretKeySpec(messageKey, KEYTYPE);
          IvParameterSpec ivSpec = new IvParameterSpec(initializationVector);
          Cipher cipher = Cipher.getInstance(CIPHERMODE);
          cipher.init(Cipher.ENCRYPT_MODE, secretKey, ivSpec);
  
          byte[] body;
          byte[] ciphertext;
  
          body = message.getBytes(StringUtils.UTF8);
          ciphertext = cipher.doFinal(body);
  
          byte[] clearKeyWithAuthTag = new byte[messageKey.length + 16];
          byte[] cipherTextWithoutAuthTag = new byte[ciphertext.length - 16];
  
          moveAuthTag(messageKey, ciphertext, clearKeyWithAuthTag, cipherTextWithoutAuthTag);
  
          ciphertextMessage = cipherTextWithoutAuthTag;
          messageKey = clearKeyWithAuthTag;
      }
docs: Encrypt the message with the aes key.
  Move the AuthTag from the end of the cipherText to the end of the messageKey afterwards.
  This prevents an attacker which compromised one recipient device to switch out the cipherText for other recipients.
  @see <a href="https://conversations.im/omemo/audit.pdf">OMEMO security audit</a>.
  
  @param message plaintext message
  @throws NoSuchPaddingException
  @throws NoSuchProviderException
  @throws InvalidAlgorithmParameterException
  @throws InvalidKeyException
  @throws UnsupportedEncodingException
  @throws BadPaddingException
  @throws IllegalBlockSizeException