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);
}
Aggregations