blob: 0fab39cb8aff98d42cdc5f4de5145e1ceeba3011 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.shared.kerberos.codec.types;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import org.apache.directory.api.util.Strings;
/**
* A type-safe enumeration of Kerberos encryption types.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public enum EncryptionType
{
/**
* The "unknown" encryption type.
*/
UNKNOWN(-1, "UNKNOWN"),
/**
* The "null" encryption type.
*/
NULL(0, "null"),
/**
* The des-cbc-crc encryption type.
*/
DES_CBC_CRC(1, "des-cbc-crc"),
/**
* The des-cbc-md4 encryption type.
*/
DES_CBC_MD4(2, "des-cbc-md4"),
/**
* The des-cbc-md5 encryption type.
*/
DES_CBC_MD5(3, "des-cbc-md5"),
/**
* The reserved (4) encryption type.
*/
RESERVED4(4, "[reserved]"),
/**
* The des3-cbc-md5 encryption type.
*/
DES3_CBC_MD5(5, "des3-cbc-md5"),
/**
* The reserved (6) encryption type.
*/
RESERVED6(6, "[reserved]"),
/**
* The des3-cbc-sha1 encryption type.
*/
DES3_CBC_SHA1(7, "des3-cbc-sha1"),
/**
* The dsaWithSHA1-CmsOID encryption type.
*/
DSAWITHSHA1_CMSOID(9, "dsaWithSHA1-CmsOID"),
/**
* The md5WithRSAEncryption-CmsOID encryption type.
*/
MD5WITHRSAENCRYPTION_CMSOID(10, "md5WithRSAEncryption-CmsOID"),
/**
* The sha1WithRSAEncryption-CmsOID encryption type.
*/
SHA1WITHRSAENCRYPTION_CMSOID(11, "sha1WithRSAEncryption-CmsOID"),
/**
* The rc2CBC-EnvOID encryption type.
*/
RC2CBC_ENVOID(12, "rc2CBC-EnvOID"),
/**
* The rsaEncryption-EnvOID encryption type.
*/
RSAENCRYPTION_ENVOID(13, "rsaEncryption-EnvOID"),
/**
* The rsaES-OAEP-ENV-OID encryption type.
*/
RSAES_OAEP_ENV_OID(14, "rsaES-OAEP-ENV-OID"),
/**
* The des-ede3-cbc-Env-OID encryption type.
*/
DES_EDE3_CBC_ENV_OID(15, "des-ede3-cbc-Env-OID"),
/**
* The des3-cbc-sha1-kd encryption type.
*/
DES3_CBC_SHA1_KD(16, "des3-cbc-sha1-kd"),
/**
* The aes128-cts-hmac-sha1-96 encryption type.
*/
AES128_CTS_HMAC_SHA1_96(17, "aes128-cts-hmac-sha1-96"),
/**
* The aes256-cts-hmac-sha1-96 encryption type.
*/
AES256_CTS_HMAC_SHA1_96(18, "aes256-cts-hmac-sha1-96"),
/**
* The rc4-hmac encryption type.
*/
RC4_HMAC(23, "rc4-hmac"),
/**
* The rc4-hmac-exp encryption type.
*/
RC4_HMAC_EXP(24, "rc4-hmac-exp"),
/**
* The subkey-keymaterial encryption type.
*/
SUBKEY_KEYMATERIAL(65, "subkey-keymaterial"),
/**
* The rc4-md4 encryption type.
*/
RC4_MD4(-128, "rc4-md4"),
/**
* The c4-hmac-old encryption type.
*/
RC4_HMAC_OLD(-133, "rc4-hmac-old"),
/**
* The rc4-hmac-old-exp encryption type.
*/
RC4_HMAC_OLD_EXP(-135, "rc4-hmac-old-exp");
/**
* The value/code for the encryption type.
*/
private final int value;
/**
* The name
*/
private final String name;
/** A map containing all the values */
private static Map<String, EncryptionType> encryptionTypesByName = new HashMap<String, EncryptionType>();
/** A map containing all the values */
private static Map<Integer, EncryptionType> encryptionTypesByValue = new HashMap<Integer, EncryptionType>();
/** Initialization of the previous map */
static
{
for ( EncryptionType type : EncryptionType.values() )
{
encryptionTypesByName.put( Strings.toLowerCase( type.getName() ), type );
encryptionTypesByValue.put( type.getValue(), type );
}
}
/**
* Private constructor prevents construction outside of this class.
*/
private EncryptionType( int value, String name )
{
this.value = value;
this.name = name;
}
/**
* Get all the encryption types
*
* @return A set of encryption types.
*/
public static Collection<EncryptionType> getEncryptionTypes()
{
return encryptionTypesByName.values();
}
/**
* Returns the encryption type when specified by its value.
*
* @param type
* @return The encryption type.
*/
public static EncryptionType getTypeByValue( int type )
{
if ( encryptionTypesByValue.containsKey( type ) )
{
return encryptionTypesByValue.get( type );
}
else
{
return UNKNOWN;
}
}
/**
* Returns the number associated with this encryption type.
*
* @return The encryption type number.
*/
public int getValue()
{
return value;
}
/**
* Returns the name associated with this encryption type.
*
* @return The name.
*/
public String getName()
{
return name;
}
/**
* Get the EncryptionType given a String.
* @param type The encryption string we want to find
* @return The found EncryptionType, or UNKNOWN
*/
public static EncryptionType getByName( String type )
{
if ( type == null )
{
return UNKNOWN;
}
String lcType = Strings.toLowerCase( type );
if ( encryptionTypesByName.containsKey( lcType ) )
{
return encryptionTypesByName.get( lcType );
}
else
{
return UNKNOWN;
}
}
/**
* @see Object#toString()
*/
public String toString()
{
return getName() + " (" + value + ")";
}
}