protected boolean createDataSetKey() {
    XnatToolPanelController masterController = createDialog.getMasterController();

    String sourceId = masterController.getDataSetSourceID();
    DataSetConfig dataSetConfig = masterController.getDataSetConfig();
    if (dataSetConfig == null) {
      masterController.showError("No DataSet Configuration Created. Create one first!");
      return false;
    }

    String dataSetName = dataSetConfig.getDataSetName();

    Secret passP1 = createDialog.getPassphraseSecret();

    if ((passP1.getChars() == null) || (passP1.getChars().length < 8)) {
      masterController.showError("Passphrase is to short!");
      return false;
    }

    SecretHolder valueH = new SecretHolder();
    masterController.uiAskField(
        "Verify passphrase.", "Verify your passphrase Please for DataSet:" + dataSetName, valueH);

    if (valueH.value == null || valueH.value.isEmpty()) {
      masterController.logger.debugPrintf(
          "KeyCreateDialogController:doCreateNewKey(): Cancelled\n");
      return false;
    }

    Secret secret2 = valueH.value;
    if (!passP1.equals(secret2)) {
      masterController.showError("Passphrases do not match!");
      return false;
    }

    try {
      // Use passphrase both as key digest source and encryption password
      // for now.

      Secret keySourceText = secret2;
      Secret keyPassphrase = secret2;
      XnatTool xnatTool = masterController.getXnatTool();
      xnatTool.initializeEncryptionKeyFromSourceText(sourceId, keySourceText, keyPassphrase);
      // authenticate and initalize encryption:
      xnatTool.authenticateEncryptionKeys(sourceId, keyPassphrase, false);
      byte rawKey[] = xnatTool.getCurrentDataSetConfig().getEncryptionKey();
      this.createDialog.setKey(rawKey, this.createDialog.showRawKeyCB.isSelected());
      this.createDialog.setPassphrase(secret2);
      // / update main panel as well:
      this.createDialog.getMasterController().updatePassphrase(keyPassphrase);

      return true;
    } catch (Exception e) {
      this.handle("Could not initialize new Encryption Key.", e);
    }

    return false;
  }
 private void handle(String action, Exception ex) {
   if (createDialog.getMasterController() != null) {
     createDialog.getMasterController().handle(action, ex);
   } else {
     // stand alone:
     System.err.printf("Error:%s\n", action);
     System.err.printf("Exception:%s\n", ex);
     ex.printStackTrace();
   }
 }
 private void updatePassphrase() throws NoSuchAlgorithmException, UnsupportedEncodingException {
   char chars[] = createDialog.getPassphraseField().getPassword();
   if (chars != null) {
     boolean result = createDataSetKey();
     this.createDialog.okBut.setEnabled(result);
   }
 }
  @Override
  public void actionPerformed(ActionEvent e) {
    Object source = e.getSource();

    // String cmd=e.getActionCommand();
    try {
      if (source == createDialog.passphraseTF) {
        updatePassphrase();
      } else if (source == createDialog.getCreateKeyBut()) {
        updatePassphrase();
      } else if (source == createDialog.showPPCB) {
        createDialog.togglePasswordField(createDialog.showPPCB.isSelected());
      } else if (source == createDialog.showRawKeyCB) {
        createDialog.showKey(createDialog.showRawKeyCB.isSelected());
      }

    } catch (Exception ex) {
      handle("Error", ex);
    }
  }