/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.utils.encryption;
import de.rcenvironment.core.utils.encryption.internal.DefaultEncryption;
/**
* Creates {@link PassphraseBasedEncryption} instances and {@link KeyBasedEncryption} instances for
* different encryption algorithms. Supported ones are declared in
* {@link PassphraseBasedEncryptionAlgorithm} and {@link KeyBasedEncryptionAlgorithm}.
*
* @author Doreen Seider
*/
public class EncryptionFactory {
/**
* Supported passphrase-based encryption algorithms.
*
* @author Doreen Seider
*/
public enum PassphraseBasedEncryptionAlgorithm implements EncryptionAlgorithm {
/** AES. */
AES,
/** Blowfish. */
Blowfish;
@Override
public String getName() {
return name();
}
}
/**
* Supported key-based encryption algorithms.
*
* @author Doreen Seider
*/
public enum KeyBasedEncryptionAlgorithm implements EncryptionAlgorithm {
/** RSA. */
RSA;
@Override
public String getName() {
return name();
}
}
/**
* Describes an encryption algorithm.
*
* @author Doreen Seider
*/
public interface EncryptionAlgorithm {
/**
* @return name of the encryption algorithm
*/
String getName();
}
/**
* Create a {@link PassphraseBasedEncryption} instance for given encryption algorithm.
*
* @param algorithm encryption algorithm to support
* @return {@link PassphraseBasedEncryption} instance supporting given algorithm
*/
public PassphraseBasedEncryption createPassphraseBasedEncryption(PassphraseBasedEncryptionAlgorithm algorithm) {
PassphraseBasedEncryption encryption;
switch (algorithm) {
case AES:
encryption = new DefaultEncryption(PassphraseBasedEncryptionAlgorithm.AES);
break;
case Blowfish:
encryption = new DefaultEncryption(PassphraseBasedEncryptionAlgorithm.Blowfish);
break;
default:
throw new IllegalArgumentException("desired passphrase-based enryption algorithm not supported: " + algorithm
+ " - supported ones are: " + PassphraseBasedEncryptionAlgorithm.AES + ", " + PassphraseBasedEncryptionAlgorithm.Blowfish);
}
return encryption;
}
/**
* Create a {@link KeyBasedEncryption} instance for given encryption algorithm.
*
* @param algorithm encryption algorithm to support
* @return {@link KeyBasedEncryption} instance supporting given algorithm
*/
public KeyBasedEncryption createKeyBasedEncryption(KeyBasedEncryptionAlgorithm algorithm) {
KeyBasedEncryption encryption;
switch (algorithm) {
case RSA:
encryption = new DefaultEncryption(KeyBasedEncryptionAlgorithm.RSA);
break;
default:
throw new IllegalArgumentException("desired passphrase-based enryption algorithm not supported: " + algorithm
+ " - supported ones are: " + PassphraseBasedEncryptionAlgorithm.AES + ", " + PassphraseBasedEncryptionAlgorithm.Blowfish);
}
return encryption;
}
}