Search in sources :

Example 1 with SecretKeySpec

use of de.flexiprovider.api.keys.SecretKeySpec in project core by jcryptool.

the class BlockCipherEngine method init.

@Override
public KeyObject init(IFlexiProviderOperation operation) {
    // $NON-NLS-1$
    LogUtil.logInfo("initializing block cipher engine");
    this.operation = operation;
    char[] password = new char[4];
    Key key = null;
    if (operation.useCustomKey()) {
        try {
            SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(operation.getAlgorithmDescriptor().getAlgorithmName(), // $NON-NLS-1$
            "FlexiCore");
            SecretKeySpec keySpec = new SecretKeySpec(operation.getKeyBytes(), operation.getAlgorithmDescriptor().getAlgorithmName());
            key = (Key) secretKeyFactory.generateSecret(keySpec);
        } catch (Exception e) {
            LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, "Exception while creating key", e, // $NON-NLS-1$
            true);
            return null;
        }
    } else {
        // password may be contained in the ActionItem, otherwise prompt
        if (operation.getPassword() != null) {
            password = operation.getPassword();
        } else {
            password = promptPassword();
        }
        if (password != null) {
            try {
                key = (Key) KeyStoreManager.getInstance().getSecretKey(operation.getKeyStoreAlias(), password);
                // save in the operation if no exception occurred
                operation.setPassword(password);
            } catch (UnrecoverableEntryException e) {
                JCTMessageDialog.showInfoDialog(new Status(IStatus.INFO, FlexiProviderEnginesPlugin.PLUGIN_ID, Messages.ExAccessKeystorePassword, e));
                return null;
            } catch (Exception e) {
                LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, "Exception while accessing a secret key", e, // $NON-NLS-1$
                true);
                return null;
            }
        }
    }
    if (key != null) {
        try {
            String fullCipherName = // Name of algorithm
            operation.getAlgorithmDescriptor().getAlgorithmName() + // $NON-NLS-1$
            "/" + // Name of mode
            ((BlockCipherDescriptor) operation.getAlgorithmDescriptor()).getMode() + // $NON-NLS-1$
            "/" + // Name of padding
            ((BlockCipherDescriptor) operation.getAlgorithmDescriptor()).getPadding();
            cipher = Registry.getBlockCipher(fullCipherName);
            if (operation.getOperation().equals(OperationType.ENCRYPT)) {
                ((BlockCipher) cipher).initEncrypt(key, ((BlockCipherDescriptor) operation.getAlgorithmDescriptor()).getModeParameters(), operation.getAlgorithmDescriptor().getAlgorithmParameterSpec(), FlexiProviderEnginesPlugin.getSecureRandom());
            } else {
                ((BlockCipher) cipher).initDecrypt(key, ((BlockCipherDescriptor) operation.getAlgorithmDescriptor()).getModeParameters(), operation.getAlgorithmDescriptor().getAlgorithmParameterSpec());
            }
            initialized = true;
        } catch (NoSuchAlgorithmException e) {
            LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, "NoSuchAlgorithmException while initializing a block cipher engine", e, // $NON-NLS-1$
            true);
            return null;
        } catch (NoSuchPaddingException e) {
            LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, "NoSuchPaddingException while initializing a block cipher engine", e, // $NON-NLS-1$
            true);
            return null;
        } catch (InvalidKeyException e) {
            LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, Messages.BlockCipherEngine_5, e, true);
            return null;
        } catch (InvalidAlgorithmParameterException e) {
            LogUtil.logError(FlexiProviderEnginesPlugin.PLUGIN_ID, "InvalidAlgorithmParameterException while initializing a block cipher engine", e, // $NON-NLS-1$
            true);
            return null;
        }
    }
    return new KeyObject(key, password);
}
Also used : Status(org.eclipse.core.runtime.Status) IStatus(org.eclipse.core.runtime.IStatus) InvalidAlgorithmParameterException(de.flexiprovider.api.exceptions.InvalidAlgorithmParameterException) BlockCipher(de.flexiprovider.api.BlockCipher) NoSuchPaddingException(de.flexiprovider.api.exceptions.NoSuchPaddingException) NoSuchAlgorithmException(de.flexiprovider.api.exceptions.NoSuchAlgorithmException) InvalidKeyException(de.flexiprovider.api.exceptions.InvalidKeyException) NoSuchAlgorithmException(de.flexiprovider.api.exceptions.NoSuchAlgorithmException) InvalidKeyException(de.flexiprovider.api.exceptions.InvalidKeyException) InvalidAlgorithmParameterException(de.flexiprovider.api.exceptions.InvalidAlgorithmParameterException) NoSuchPaddingException(de.flexiprovider.api.exceptions.NoSuchPaddingException) UnrecoverableEntryException(java.security.UnrecoverableEntryException) SecretKeySpec(de.flexiprovider.api.keys.SecretKeySpec) UnrecoverableEntryException(java.security.UnrecoverableEntryException) SecretKeyFactory(javax.crypto.SecretKeyFactory) Key(de.flexiprovider.api.keys.Key)

Aggregations

BlockCipher (de.flexiprovider.api.BlockCipher)1 InvalidAlgorithmParameterException (de.flexiprovider.api.exceptions.InvalidAlgorithmParameterException)1 InvalidKeyException (de.flexiprovider.api.exceptions.InvalidKeyException)1 NoSuchAlgorithmException (de.flexiprovider.api.exceptions.NoSuchAlgorithmException)1 NoSuchPaddingException (de.flexiprovider.api.exceptions.NoSuchPaddingException)1 Key (de.flexiprovider.api.keys.Key)1 SecretKeySpec (de.flexiprovider.api.keys.SecretKeySpec)1 UnrecoverableEntryException (java.security.UnrecoverableEntryException)1 SecretKeyFactory (javax.crypto.SecretKeyFactory)1 IStatus (org.eclipse.core.runtime.IStatus)1 Status (org.eclipse.core.runtime.Status)1