blob: 46d4b94ad2af86e0a6c71828aa8645e84837800a [file] [log] [blame]
/******************************************************************************
* Copyright (c) 2006 IBM Corporation.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Initial Implementation
*
*****************************************************************************/
package org.eclipse.ptp.remotetools.internal.ssh;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.osgi.util.NLS;
/**
* Available cipher types and associated information.
* To add another cipher type, it's necessary that two attributes of the String type are created: first one
* returns the id of the cipher type and must have its name in the format CIPHER_<cipher attributes' name>. Second one
* must return the return the cipher's name and must have its name in the format NAME_CIPHER_<cipher attributes' name>
*
* @author Richard Maciel
*
*/
public class CipherTypes {
// Available JSch cipher types: blowfish-cbc, 3des-cbc, aes128-cbc,aes192-cbc,aes256-cbc
public static final String CIPHER_BLOWFISH = CipherTypesMessages.getString("KEY_BLOWFISH"); //$NON-NLS-1$
public static final String CIPHER_3DES = CipherTypesMessages.getString("KEY_3DES"); //$NON-NLS-1$
public static final String CIPHER_AES128 = CipherTypesMessages.getString("KEY_AES128"); //$NON-NLS-1$
public static final String CIPHER_AES192 = CipherTypesMessages.getString("KEY_AES192"); //$NON-NLS-1$
public static final String CIPHER_AES256 = CipherTypesMessages.getString("KEY_AES256"); //$NON-NLS-1$
// Use the default JSch cipher
public static final String CIPHER_DEFAULT = CipherTypesMessages.getString("KEY_DEFAULT"); //$NON-NLS-1$
public static final String NAME_CIPHER_BLOWFISH = CipherTypesMessages.getString("NAME_BLOWFISH"); //$NON-NLS-1$
public static final String NAME_CIPHER_3DES = CipherTypesMessages.getString("NAME_3DES"); //$NON-NLS-1$
public static final String NAME_CIPHER_AES128 = CipherTypesMessages.getString("NAME_AES128"); //$NON-NLS-1$
public static final String NAME_CIPHER_AES192 = CipherTypesMessages.getString("NAME_AES192"); //$NON-NLS-1$
public static final String NAME_CIPHER_AES256 = CipherTypesMessages.getString("NAME_AES256"); //$NON-NLS-1$
public static final String NAME_CIPHER_DEFAULT = CipherTypesMessages.getString("NAME_DEFAULT"); // Use the default JSch cipher //$NON-NLS-1$
private static Map cipherTypesMap = null;
/**
* Creates a map containing tuples CipherTypeId and CipherTypeName
* from the declared attributes.
* @return Map created
*/
private static Map createCipherTypesMap() {
Field [] fields = CipherTypes.class.getDeclaredFields();
List fieldList = new ArrayList(Arrays.asList(fields));
Map cipherMap = new HashMap();
// Get the tuples of attributes from the fieldList and put them in the cipherMap
for(Iterator it = fieldList.iterator(); it.hasNext(); ) {
// Look for a attribute whose prefix is CIPHER and fetch its value
Field f = (Field)it.next();
if(f.getName().startsWith("CIPHER_")) { //$NON-NLS-1$
Field ciphField = f;
// Found one. Now concat the NAME_ prefix into the choosen name string and
// look for an attribute with that name.
try {
Field nameCiphField = (Field)CipherTypes.class.getField("NAME_" + ciphField.getName()); //$NON-NLS-1$
try {
// Add field values to map.
cipherMap.put(ciphField.get(null), nameCiphField.get(null));
} catch (IllegalArgumentException e) {
// Will not occur, since we use null as argument
e.printStackTrace();
throw new RuntimeException(e);
} catch (IllegalAccessException e) {
// Will not occur since outside try already treat this case.
e.printStackTrace();
throw new RuntimeException(e);
}
} catch (SecurityException e) {
// Ignore protected and private fields
} catch (NoSuchFieldException e) {
// No equivalent name field. Throw a RuntimeException
e.printStackTrace();
//"Did not find " + "NAME_" + ciphField.getName() + " to match"
throw new RuntimeException(
NLS.bind(CipherTypesMessages.getString("CipherTypes.AttributeNameExceptionMsg2"), //$NON-NLS-1$
ciphField.getName())); //$NON-NLS-1$
}
}
}
return cipherMap;
}
/**
* Get the map containing tuples CipherTypeId and CipherTypeName
*
* @return Map
*/
static public Map getCipherTypesMap() {
// Return the value of the singleton
if(cipherTypesMap == null)
cipherTypesMap = createCipherTypesMap();
return cipherTypesMap;
}
/**
* Class should not be created.
*/
protected CipherTypes() {
}
}