docs: public void announceSupportAndPublish()
              throws NoSuchAlgorithmException, NoSuchProviderException, InterruptedException,
              PubSubException.NotALeafNodeException, XMPPException.XMPPErrorException,
              SmackException.NotConnectedException, SmackException.NoResponseException, IOException,
              InvalidAlgorithmParameterException, SmackException.NotLoggedInException, PGPException {
          throwIfNoProviderSet();
          throwIfNotAuthenticated();
  
          OpenPgpV4Fingerprint primaryFingerprint = getOurFingerprint();
  
          if (primaryFingerprint == null) {
              primaryFingerprint = generateAndImportKeyPair(getJidOrThrow());
          }
  
          // Create <pubkey/> element
          PubkeyElement pubkeyElement;
          try {
              pubkeyElement = createPubkeyElement(getJidOrThrow(), primaryFingerprint, new Date());
          } catch (MissingOpenPgpKeyException e) {
              throw new AssertionError("Cannot publish our public key, since it is missing (MUST NOT happen!)");
          }
  
          // publish it
          publishPublicKey(pepManager, pubkeyElement, primaryFingerprint);
  
          // Subscribe to public key changes
          PepManager.getInstanceFor(connection()).addPepListener(metadataListener);
          ServiceDiscoveryManager.getInstanceFor(connection())
                  .addFeature(PEP_NODE_PUBLIC_KEYS_NOTIFY);
      }