Search in sources :

Example 26 with KeyStoreState

use of org.kse.utilities.history.KeyStoreState in project keystore-explorer by kaikramer.

the class RedoAction method setEnabled.

/**
 * Enable or disable the action.
 *
 * @param enabled
 *            True to enable, false to disable it
 */
@Override
public void setEnabled(boolean enabled) {
    super.setEnabled(enabled);
    if (enabled) {
        KeyStoreState currentState = kseFrame.getActiveKeyStoreHistory().getCurrentState();
        KeyStoreState nextState = currentState.nextState();
        putValue(NAME, MessageFormat.format(res.getString("RedoAction.dynamic.text"), nextState.getActionDescription()));
    } else {
        putValue(NAME, defaultName);
    }
}
Also used : KeyStoreState(org.kse.utilities.history.KeyStoreState)

Example 27 with KeyStoreState

use of org.kse.utilities.history.KeyStoreState in project keystore-explorer by kaikramer.

the class KseFrame method dragSelectedEntry.

/**
 * Get a the selected entry as a drag entry for DnD.
 *
 * @return Drag entry or null if entry could not be dragged
 */
public DragEntry dragSelectedEntry() {
    try {
        KeyStoreHistory history = getActiveKeyStoreHistory();
        if (history == null) {
            // No KeyStore to drag from
            return null;
        }
        KeyStoreState currentState = history.getCurrentState();
        KeyStore keyStore = currentState.getKeyStore();
        String alias = getSelectedEntryAlias();
        KeyStoreType type = KeyStoreType.resolveJce(keyStore.getType());
        if (alias == null) {
            // No selected entry to drag
            return null;
        }
        if (KeyStoreUtil.isKeyEntry(alias, keyStore)) {
            JOptionPane.showMessageDialog(frame, res.getString("KseFrame.NoDragKeyEntry.message"), KSE.getApplicationName(), JOptionPane.WARNING_MESSAGE);
            return null;
        }
        if (KeyStoreUtil.isKeyPairEntry(alias, keyStore) && type.hasExportablePrivateKeys()) {
            // Otherwise entry must already be unlocked to get password
            Password password = currentState.getEntryPassword(alias);
            if (password == null && type.hasEntryPasswords()) {
                JOptionPane.showMessageDialog(frame, res.getString("KseFrame.NoDragLockedKeyPairEntry.message"), KSE.getApplicationName(), JOptionPane.WARNING_MESSAGE);
                return null;
            }
            PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());
            Certificate[] certificateChain = keyStore.getCertificateChain(alias);
            return new DragKeyPairEntry(alias, privateKey, password, certificateChain);
        } else {
            Certificate trustedCertificate = keyStore.getCertificate(alias);
            return new DragTrustedCertificateEntry(alias, trustedCertificate);
        }
    } catch (Exception ex) {
        DError.displayError(frame, ex);
        return null;
    }
}
Also used : DragKeyPairEntry(org.kse.gui.dnd.DragKeyPairEntry) KeyStoreState(org.kse.utilities.history.KeyStoreState) KeyStoreHistory(org.kse.utilities.history.KeyStoreHistory) PrivateKey(java.security.PrivateKey) KeyStoreType(org.kse.crypto.keystore.KeyStoreType) DragTrustedCertificateEntry(org.kse.gui.dnd.DragTrustedCertificateEntry) KeyStore(java.security.KeyStore) KeyStoreException(java.security.KeyStoreException) GeneralSecurityException(java.security.GeneralSecurityException) CryptoException(org.kse.crypto.CryptoException) Password(org.kse.crypto.Password) Certificate(java.security.cert.Certificate)

Example 28 with KeyStoreState

use of org.kse.utilities.history.KeyStoreState in project keystore-explorer by kaikramer.

the class KseFrame method updateControls.

/**
 * Update the frame's controls dependent on the state of its open and active
 * KeyStores.
 *
 * @param keyStoreContentsChanged
 *            Have the active KeyStore's contents changed?
 */
public void updateControls(boolean keyStoreContentsChanged) {
    KeyStoreHistory history = getActiveKeyStoreHistory();
    if (history == null) {
        updateControlsNoKeyStoresOpen();
        return;
    }
    KeyStoreState currentState = history.getCurrentState();
    // Reload KeyStore in table if it has changed
    if (keyStoreContentsChanged) {
        try {
            String selectedAlias = getSelectedEntryAlias();
            ((KeyStoreTableModel) getActiveKeyStoreTable().getModel()).load(history);
            // Loading the model loses the selected entry - preserve it
            if (selectedAlias != null) {
                setSelectedEntryByAlias(selectedAlias);
            }
        } catch (GeneralSecurityException ex) {
            DError.displayError(frame, ex);
        } catch (CryptoException ex) {
            DError.displayError(frame, ex);
        }
    }
    // Can save if active KeyStore has not been saved
    if (!currentState.isSavedState()) {
        saveAction.setEnabled(true);
    } else {
        saveAction.setEnabled(false);
    }
    // Can save all if any KeyStore has been changed since saved
    boolean saveAll = false;
    for (int i = 0; i < histories.size(); i++) {
        KeyStoreHistory h = histories.get(i);
        if (!h.getCurrentState().isSavedState()) {
            // Yes - can Save All
            saveAll = true;
            break;
        }
    }
    saveAllAction.setEnabled(saveAll);
    // Can close
    closeAction.setEnabled(true);
    closeAllAction.setEnabled(true);
    // Can close others?
    if (jkstpKeyStores.getTabCount() > 1) {
        closeOthersAction.setEnabled(true);
    } else {
        closeOthersAction.setEnabled(false);
    }
    KeyStore keyStore = currentState.getKeyStore();
    KeyStoreType type = KeyStoreType.resolveJce(keyStore.getType());
    // Can Save As
    if (type.isFileBased()) {
        saveAsAction.setEnabled(true);
    }
    // May be able to undo/redo
    updateUndoRedoControls(currentState);
    // May be able to cut/copy/paste
    if (type.isFileBased()) {
        updateCutCopyPasteControls();
    }
    // Can use tools on
    generateKeyPairAction.setEnabled(true);
    generateSecretKeyAction.setEnabled(type.supportsKeyEntries());
    importTrustedCertificateAction.setEnabled(true);
    importKeyPairAction.setEnabled(true);
    propertiesAction.setEnabled(true);
    if (type.isFileBased()) {
        setPasswordAction.setEnabled(true);
    }
    // Show default status bar display
    setDefaultStatusBarText();
    // Passwords, and therefore unlocking, are not relevant for PKCS #12 or KeyStores that are not file-based
    if (!type.hasEntryPasswords() || !type.isFileBased()) {
        unlockKeyPairAction.setEnabled(false);
        setKeyPairPasswordAction.setEnabled(false);
        unlockKeyAction.setEnabled(false);
        setKeyPasswordAction.setEnabled(false);
    } else {
        unlockKeyPairAction.setEnabled(true);
        setKeyPairPasswordAction.setEnabled(true);
        unlockKeyAction.setEnabled(true);
        setKeyPasswordAction.setEnabled(true);
    }
    // Special restrictions for MSCAPI and PKCS#11 type
    if (type == KeyStoreType.MS_CAPI_PERSONAL || type == KeyStoreType.PKCS11) {
        keyPairPrivateKeyDetailsAction.setEnabled(false);
        keyDetailsAction.setEnabled(false);
        renameKeyAction.setEnabled(false);
        renameKeyPairAction.setEnabled(false);
        renameTrustedCertificateAction.setEnabled(false);
        exportKeyPairAction.setEnabled(false);
        exportKeyPairPrivateKeyAction.setEnabled(false);
        jmKeyPairEditCertChain.setEnabled(false);
        appendToCertificateChainAction.setEnabled(false);
        removeFromCertificateChainAction.setEnabled(false);
        // "UnsupportedOperationException" ...
        jmKeyPairImportCaReply.setEnabled(false);
    } else {
        keyPairPrivateKeyDetailsAction.setEnabled(true);
        keyDetailsAction.setEnabled(true);
        renameKeyAction.setEnabled(true);
        renameKeyPairAction.setEnabled(true);
        renameTrustedCertificateAction.setEnabled(true);
        exportKeyPairAction.setEnabled(true);
        exportKeyPairPrivateKeyAction.setEnabled(true);
        jmKeyPairEditCertChain.setEnabled(true);
        appendToCertificateChainAction.setEnabled(true);
        removeFromCertificateChainAction.setEnabled(true);
        jmKeyPairImportCaReply.setEnabled(true);
    }
    // KeyStore type menu items
    if (type.isFileBased()) {
        jmChangeType.setEnabled(true);
        if (type == JKS) {
            jrbmiChangeTypeJks.setSelected(true);
            jrbmiKeyStoreChangeTypeJks.setSelected(true);
        } else if (type == JCEKS) {
            jrbmiChangeTypeJceks.setSelected(true);
            jrbmiKeyStoreChangeTypeJceks.setSelected(true);
        } else if (type == PKCS12) {
            jrbmiChangeTypePkcs12.setSelected(true);
            jrbmiKeyStoreChangeTypePkcs12.setSelected(true);
        } else if (type == BKS_V1) {
            jrbmiChangeTypeBksV1.setSelected(true);
            jrbmiKeyStoreChangeTypeBksV1.setSelected(true);
        } else if (type == BKS) {
            jrbmiChangeTypeBks.setSelected(true);
            jrbmiKeyStoreChangeTypeBks.setSelected(true);
        } else {
            jrbmiChangeTypeUber.setSelected(true);
            jrbmiKeyStoreChangeTypeUber.setSelected(true);
        }
    } else {
        jmKeyStoreChangeType.setEnabled(false);
    }
    // Show KeyStores tabbed pane
    frame.getContentPane().remove(jQuickStart);
    frame.getContentPane().add(jkstpKeyStores, BorderLayout.CENTER);
    updateKeyStoreTabsText();
    updateApplicationTitle();
    frame.repaint();
}
Also used : KeyStoreState(org.kse.utilities.history.KeyStoreState) KeyStoreHistory(org.kse.utilities.history.KeyStoreHistory) KeyStoreType(org.kse.crypto.keystore.KeyStoreType) GeneralSecurityException(java.security.GeneralSecurityException) CryptoException(org.kse.crypto.CryptoException) KeyStore(java.security.KeyStore) Point(java.awt.Point)

Example 29 with KeyStoreState

use of org.kse.utilities.history.KeyStoreState in project keystore-explorer by kaikramer.

the class CutAction method bufferSelectedEntry.

private BufferEntry bufferSelectedEntry() {
    try {
        KeyStoreHistory history = kseFrame.getActiveKeyStoreHistory();
        KeyStoreState currentState = history.getCurrentState();
        String alias = kseFrame.getSelectedEntryAlias();
        if (alias == null) {
            return null;
        }
        BufferEntry bufferEntry = null;
        KeyStore keyStore = currentState.getKeyStore();
        if (KeyStoreUtil.isKeyEntry(alias, keyStore)) {
            Password password = getEntryPassword(alias, currentState);
            if (password == null) {
                return null;
            }
            Key key = keyStore.getKey(alias, password.toCharArray());
            if (key instanceof PrivateKey) {
                JOptionPane.showMessageDialog(frame, res.getString("CutAction.NoCutKeyEntryWithPrivateKey.message"), res.getString("CutAction.Cut.Title"), JOptionPane.WARNING_MESSAGE);
                return null;
            }
            bufferEntry = new KeyBufferEntry(alias, true, key, password);
        } else if (KeyStoreUtil.isTrustedCertificateEntry(alias, keyStore)) {
            Certificate certificate = keyStore.getCertificate(alias);
            bufferEntry = new TrustedCertificateBufferEntry(alias, true, certificate);
        } else if (KeyStoreUtil.isKeyPairEntry(alias, keyStore)) {
            Password password = getEntryPassword(alias, currentState);
            if (password == null) {
                return null;
            }
            PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());
            Certificate[] certificateChain = keyStore.getCertificateChain(alias);
            bufferEntry = new KeyPairBufferEntry(alias, true, privateKey, password, certificateChain);
        }
        KeyStoreState newState = currentState.createBasisForNextState(this);
        keyStore = newState.getKeyStore();
        keyStore.deleteEntry(alias);
        newState.removeEntryPassword(alias);
        currentState.append(newState);
        return bufferEntry;
    } catch (Exception ex) {
        DError.displayError(frame, ex);
        return null;
    }
}
Also used : KeyStoreState(org.kse.utilities.history.KeyStoreState) KeyStoreHistory(org.kse.utilities.history.KeyStoreHistory) PrivateKey(java.security.PrivateKey) KeyStore(java.security.KeyStore) KeyBufferEntry(org.kse.utilities.buffer.KeyBufferEntry) KeyPairBufferEntry(org.kse.utilities.buffer.KeyPairBufferEntry) TrustedCertificateBufferEntry(org.kse.utilities.buffer.TrustedCertificateBufferEntry) BufferEntry(org.kse.utilities.buffer.BufferEntry) KeyPairBufferEntry(org.kse.utilities.buffer.KeyPairBufferEntry) KeyBufferEntry(org.kse.utilities.buffer.KeyBufferEntry) TrustedCertificateBufferEntry(org.kse.utilities.buffer.TrustedCertificateBufferEntry) Key(java.security.Key) PrivateKey(java.security.PrivateKey) Password(org.kse.crypto.Password) Certificate(java.security.cert.Certificate)

Example 30 with KeyStoreState

use of org.kse.utilities.history.KeyStoreState in project keystore-explorer by kaikramer.

the class GenerateCsrAction method doAction.

/**
 * Do action.
 */
@Override
protected void doAction() {
    File csrFile = null;
    FileOutputStream fos = null;
    try {
        KeyStoreHistory history = kseFrame.getActiveKeyStoreHistory();
        KeyStoreState currentState = history.getCurrentState();
        Provider provider = history.getExplicitProvider();
        String alias = kseFrame.getSelectedEntryAlias();
        Password password = getEntryPassword(alias, currentState);
        if (password == null) {
            return;
        }
        KeyStore keyStore = currentState.getKeyStore();
        PrivateKey privateKey = (PrivateKey) keyStore.getKey(alias, password.toCharArray());
        String keyPairAlg = privateKey.getAlgorithm();
        KeyPairType keyPairType = KeyPairUtil.getKeyPairType(privateKey);
        if (keyPairType == null) {
            throw new CryptoException(MessageFormat.format(res.getString("GenerateCsrAction.NoCsrForKeyPairAlg.message"), keyPairAlg));
        }
        // determine dir of current keystore as proposal for CSR file location
        String path = CurrentDirectory.get().getAbsolutePath();
        File keyStoreFile = history.getFile();
        if (keyStoreFile != null) {
            path = keyStoreFile.getAbsoluteFile().getParent();
        }
        DGenerateCsr dGenerateCsr = new DGenerateCsr(frame, alias, privateKey, keyPairType, path, provider);
        dGenerateCsr.setLocationRelativeTo(frame);
        dGenerateCsr.setVisible(true);
        if (!dGenerateCsr.generateSelected()) {
            return;
        }
        CsrType format = dGenerateCsr.getFormat();
        SignatureType signatureType = dGenerateCsr.getSignatureType();
        String challenge = dGenerateCsr.getChallenge();
        String unstructuredName = dGenerateCsr.getUnstructuredName();
        boolean useCertificateExtensions = dGenerateCsr.isAddExtensionsWanted();
        csrFile = dGenerateCsr.getCsrFile();
        X509Certificate firstCertInChain = X509CertUtil.orderX509CertChain(X509CertUtil.convertCertificates(keyStore.getCertificateChain(alias)))[0];
        fos = new FileOutputStream(csrFile);
        if (format == CsrType.PKCS10) {
            String csr = Pkcs10Util.getCsrEncodedDerPem(Pkcs10Util.generateCsr(firstCertInChain, privateKey, signatureType, challenge, unstructuredName, useCertificateExtensions, provider));
            fos.write(csr.getBytes());
        } else {
            SpkacSubject subject = new SpkacSubject(X500NameUtils.x500PrincipalToX500Name(firstCertInChain.getSubjectX500Principal()));
            PublicKey publicKey = firstCertInChain.getPublicKey();
            // TODO handle other providers (PKCS11 etc)
            Spkac spkac = new Spkac(challenge, signatureType, subject, publicKey, privateKey);
            spkac.output(fos);
        }
    } catch (FileNotFoundException ex) {
        JOptionPane.showMessageDialog(frame, MessageFormat.format(res.getString("GenerateCsrAction.NoWriteFile.message"), csrFile), res.getString("GenerateCsrAction.GenerateCsr.Title"), JOptionPane.WARNING_MESSAGE);
        return;
    } catch (Exception ex) {
        DError.displayError(frame, ex);
        return;
    } finally {
        IOUtils.closeQuietly(fos);
    }
    JOptionPane.showMessageDialog(frame, res.getString("GenerateCsrAction.CsrGenerationSuccessful.message"), res.getString("GenerateCsrAction.GenerateCsr.Title"), JOptionPane.INFORMATION_MESSAGE);
}
Also used : KeyStoreState(org.kse.utilities.history.KeyStoreState) SpkacSubject(org.kse.crypto.csr.spkac.SpkacSubject) KeyStoreHistory(org.kse.utilities.history.KeyStoreHistory) PrivateKey(java.security.PrivateKey) PublicKey(java.security.PublicKey) FileNotFoundException(java.io.FileNotFoundException) SignatureType(org.kse.crypto.signing.SignatureType) KeyStore(java.security.KeyStore) X509Certificate(java.security.cert.X509Certificate) CryptoException(org.kse.crypto.CryptoException) FileNotFoundException(java.io.FileNotFoundException) Provider(java.security.Provider) CsrType(org.kse.crypto.csr.CsrType) Spkac(org.kse.crypto.csr.spkac.Spkac) FileOutputStream(java.io.FileOutputStream) DGenerateCsr(org.kse.gui.dialogs.DGenerateCsr) KeyPairType(org.kse.crypto.keypair.KeyPairType) CryptoException(org.kse.crypto.CryptoException) File(java.io.File) Password(org.kse.crypto.Password)

Aggregations

KeyStoreState (org.kse.utilities.history.KeyStoreState)48 KeyStoreHistory (org.kse.utilities.history.KeyStoreHistory)41 KeyStore (java.security.KeyStore)39 Password (org.kse.crypto.Password)32 PrivateKey (java.security.PrivateKey)17 X509Certificate (java.security.cert.X509Certificate)15 Certificate (java.security.cert.Certificate)13 KeyStoreType (org.kse.crypto.keystore.KeyStoreType)13 Key (java.security.Key)12 DGetAlias (org.kse.gui.dialogs.DGetAlias)10 File (java.io.File)9 FileNotFoundException (java.io.FileNotFoundException)7 DGetNewPassword (org.kse.gui.password.DGetNewPassword)6 PublicKey (java.security.PublicKey)5 CryptoException (org.kse.crypto.CryptoException)5 GeneralSecurityException (java.security.GeneralSecurityException)4 KeyStoreException (java.security.KeyStoreException)4 Provider (java.security.Provider)4 ArrayList (java.util.ArrayList)3 KeyPairType (org.kse.crypto.keypair.KeyPairType)3