docs: public void backupSecretKeyToServer(DisplayBackupCodeCallback displayCodeCallback,
                                          SecretKeyBackupSelectionCallback selectKeyCallback)
              throws InterruptedException, PubSubException.NotALeafNodeException,
              XMPPException.XMPPErrorException, SmackException.NotConnectedException, SmackException.NoResponseException,
              SmackException.NotLoggedInException, IOException,
              SmackException.FeatureNotSupportedException, PGPException, MissingOpenPgpKeyException {
          throwIfNoProviderSet();
          throwIfNotAuthenticated();
  
          BareJid ownJid = connection().getUser().asBareJid();
  
          String backupCode = SecretKeyBackupHelper.generateBackupPassword();
  
          PGPSecretKeyRingCollection secretKeyRings = provider.getStore().getSecretKeysOf(ownJid);
  
          Set<OpenPgpV4Fingerprint> availableKeyPairs = new HashSet<>();
          for (PGPSecretKeyRing ring : secretKeyRings) {
              availableKeyPairs.add(new OpenPgpV4Fingerprint(ring));
          }
  
          Set<OpenPgpV4Fingerprint> selectedKeyPairs = selectKeyCallback.selectKeysToBackup(availableKeyPairs);
  
          SecretkeyElement secretKey = SecretKeyBackupHelper.createSecretkeyElement(provider, ownJid, selectedKeyPairs, backupCode);
  
          OpenPgpPubSubUtil.depositSecretKey(connection(), secretKey);
          displayCodeCallback.displayBackupCode(backupCode);
      }