code: public OpenPgpMessage decryptAndVerify(OpenPgpElement element, OpenPgpContact sender)
              throws SmackException.NotLoggedInException, PGPException, IOException, XmlPullParserException {
  
          OpenPgpMessage decrypted = openPgpManager.decryptOpenPgpElement(element, sender);
          if (decrypted.getState() != OpenPgpMessage.State.signcrypt) {
              throw new IllegalArgumentException("Decrypted message does appear to not be an OX message. (State: " + decrypted.getState() + ")");
          }
  
          return decrypted;
      }
docs: Manually decrypt and verify an {@link OpenPgpElement}.
  
  @param element encrypted, signed {@link OpenPgpElement}.
  @param sender sender of the message.
  
  @return decrypted, verified message
  
  @throws SmackException.NotLoggedInException In case we are not logged in (we need our jid to access our keys)
  @throws PGPException in case of an PGP error
  @throws IOException in case of an IO error (reading keys, streams etc)
  @throws XmlPullParserException in case that the content of the {@link OpenPgpElement} is not a valid
  {@link OpenPgpContentElement} or broken XML.
  @throws IllegalArgumentException if the elements content is not a {@link SigncryptElement}. This happens, if the
  element likely is not an OX message.