1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * this work for additional information regarding copyright ownership. 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * (the "License"); you may not use this file except in compliance with 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the License. You may obtain a copy of the License at 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.apache.harmony.xnet.provider.jsse; 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.GeneralSecurityException; 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.util.Hashtable; 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport javax.crypto.Cipher; 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/** 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Represents Cipher Suite as defined in TLS 1.0 spec., 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * A.5. The CipherSuite; 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * C. CipherSuite definitions. 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see <a href="http://www.ietf.org/rfc/rfc2246.txt">TLS 1.0 spec.</a> 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class CipherSuite { 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * true if this cipher suite is supported 36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project boolean supported = true; 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cipher suite key exchange 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int keyExchange; 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * cipher 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final String cipherName; 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Cipher information 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int keyMaterial; 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int expandedKeyMaterial; 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int effectiveKeyBytes; 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final int IVSize; 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final private int blockSize; 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // cipher suite code 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final byte[] cipherSuiteCode; 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // cipher suite name 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final String name; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // true if cipher suite is exportable 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private final boolean isExportable; 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Hash algorithm 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final private String hashName; 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // MAC algorithm 71f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final private String hmacName; 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // Hash size 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project final private int hashSize; 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * key exchange values 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_RSA = 1; 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_RSA_EXPORT = 2; 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DHE_DSS = 3; 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DHE_DSS_EXPORT = 4; 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DHE_RSA = 5; 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DHE_RSA_EXPORT = 6; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_DSS = 7; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_RSA = 8; 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_anon = 9; 88f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_anon_EXPORT = 10; 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_DSS_EXPORT = 11; 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static int KeyExchange_DH_RSA_EXPORT = 12; 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * TLS cipher suite codes 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_NULL_WITH_NULL_NULL = { 0x00, 0x00 }; 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_NULL_MD5 = { 0x00, 0x01 }; 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_NULL_SHA = { 0x00, 0x02 }; 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_EXPORT_WITH_RC4_40_MD5 = { 0x00, 0x03 }; 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_RC4_128_MD5 = { 0x00, 0x04 }; 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_RC4_128_SHA = { 0x00, 0x05 }; 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = { 0x00, 0x06 }; 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_IDEA_CBC_SHA = { 0x00, 0x07 }; 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x08 }; 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_DES_CBC_SHA = { 0x00, 0x09 }; 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x0A }; 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x0B }; 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_DSS_WITH_DES_CBC_SHA = { 0x00, 0x0C }; 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x0D }; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x0E }; 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_RSA_WITH_DES_CBC_SHA = { 0x00, 0x0F }; 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x10 }; 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x11 }; 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_DSS_WITH_DES_CBC_SHA = { 0x00, 0x12 }; 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x13 }; 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x14 }; 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_RSA_WITH_DES_CBC_SHA = { 0x00, 0x15 }; 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x16 }; 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = { 0x00, 0x17 }; 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_anon_WITH_RC4_128_MD5 = { 0x00, 0x18 }; 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = { 0x00, 0x19 }; 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_anon_WITH_DES_CBC_SHA = { 0x00, 0x1A }; 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static byte[] code_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = { 0x00, 0x1B }; 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_NULL_WITH_NULL_NULL = new CipherSuite( 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_NULL_WITH_NULL_NULL", true, 0, null, null, 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_NULL_WITH_NULL_NULL); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_NULL_MD5 = new CipherSuite( 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_NULL_MD5", true, KeyExchange_RSA, null, "MD5", 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_RSA_WITH_NULL_MD5); 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_NULL_SHA = new CipherSuite( 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_NULL_SHA", true, KeyExchange_RSA, null, "SHA", 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_RSA_WITH_NULL_SHA); 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_EXPORT_WITH_RC4_40_MD5 = new CipherSuite( 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_EXPORT_WITH_RC4_40_MD5", true, KeyExchange_RSA_EXPORT, 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "RC4_40", "MD5", code_TLS_RSA_EXPORT_WITH_RC4_40_MD5); 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_RC4_128_MD5 = new CipherSuite( 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_RC4_128_MD5", false, KeyExchange_RSA, "RC4_128", 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "MD5", code_TLS_RSA_WITH_RC4_128_MD5); 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_RC4_128_SHA = new CipherSuite( 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_RC4_128_SHA", false, KeyExchange_RSA, "RC4_128", 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "SHA", code_TLS_RSA_WITH_RC4_128_SHA); 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5 = new CipherSuite( 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5", true, KeyExchange_RSA_EXPORT, 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "RC2_CBC_40", "MD5", code_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_IDEA_CBC_SHA = new CipherSuite( 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_IDEA_CBC_SHA", false, KeyExchange_RSA, "IDEA_CBC", 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "SHA", code_TLS_RSA_WITH_IDEA_CBC_SHA); 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA", true, KeyExchange_RSA_EXPORT, 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES40_CBC", "SHA", code_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA); 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_DES_CBC_SHA = new CipherSuite( 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_DES_CBC_SHA", false, KeyExchange_RSA, "DES_CBC", 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "SHA", code_TLS_RSA_WITH_DES_CBC_SHA); 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_RSA_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_RSA_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_RSA, 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_RSA_WITH_3DES_EDE_CBC_SHA); 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA", true, 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DH_DSS_EXPORT, "DES40_CBC", "SHA", 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA); 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_DSS_WITH_DES_CBC_SHA = new CipherSuite( 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_DSS_WITH_DES_CBC_SHA", false, KeyExchange_DH_DSS, 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES_CBC", "SHA", code_TLS_DH_DSS_WITH_DES_CBC_SHA); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_DH_DSS, 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA); 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 182f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA", true, 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DH_RSA_EXPORT, "DES40_CBC", "SHA", 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA); 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_RSA_WITH_DES_CBC_SHA = new CipherSuite( 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_RSA_WITH_DES_CBC_SHA", false, KeyExchange_DH_RSA, 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES_CBC", "SHA", code_TLS_DH_RSA_WITH_DES_CBC_SHA); 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_DH_RSA, 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA); 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA", true, 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DHE_DSS_EXPORT, "DES40_CBC", "SHA", 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA); 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_DSS_WITH_DES_CBC_SHA = new CipherSuite( 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_DSS_WITH_DES_CBC_SHA", false, KeyExchange_DHE_DSS, 201f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES_CBC", "SHA", code_TLS_DHE_DSS_WITH_DES_CBC_SHA); 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_DHE_DSS, 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA", true, 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DHE_RSA_EXPORT, "DES40_CBC", "SHA", 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA); 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_RSA_WITH_DES_CBC_SHA = new CipherSuite( 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_RSA_WITH_DES_CBC_SHA", false, KeyExchange_DHE_RSA, 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES_CBC", "SHA", code_TLS_DHE_RSA_WITH_DES_CBC_SHA); 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_DHE_RSA, 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_anon_EXPORT_WITH_RC4_40_MD5 = new CipherSuite( 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5", true, 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DH_anon_EXPORT, "RC4_40", "MD5", 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5); 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_anon_WITH_RC4_128_MD5 = new CipherSuite( 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_anon_WITH_RC4_128_MD5", false, KeyExchange_DH_anon, 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "RC4_128", "MD5", code_TLS_DH_anon_WITH_RC4_128_MD5); 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = new CipherSuite( 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA", true, 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project KeyExchange_DH_anon_EXPORT, "DES40_CBC", "SHA", 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project code_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA); 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_anon_WITH_DES_CBC_SHA = new CipherSuite( 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_anon_WITH_DES_CBC_SHA", false, KeyExchange_DH_anon, 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "DES_CBC", "SHA", code_TLS_DH_anon_WITH_DES_CBC_SHA); 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite TLS_DH_anon_WITH_3DES_EDE_CBC_SHA = new CipherSuite( 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA", false, KeyExchange_DH_anon, 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "3DES_EDE_CBC", "SHA", code_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA); 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // array for quick access to cipher suite by code 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project private static CipherSuite[] cuitesByCode = { 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_NULL_WITH_NULL_NULL, 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_NULL_MD5, 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_NULL_SHA, 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_EXPORT_WITH_RC4_40_MD5, 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_RC4_128_MD5, 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_RC4_128_SHA, 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5, 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_IDEA_CBC_SHA, 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_EXPORT_WITH_DES40_CBC_SHA, 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_DES_CBC_SHA, 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_3DES_EDE_CBC_SHA, 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA, 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_DSS_WITH_DES_CBC_SHA, 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA, 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA, 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_RSA_WITH_DES_CBC_SHA, 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA, 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_DSS_WITH_DES_CBC_SHA, 263f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, 264f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, 265f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_WITH_DES_CBC_SHA, 266f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 267f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_anon_EXPORT_WITH_RC4_40_MD5, 268f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_anon_WITH_RC4_128_MD5, 269f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, 270f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_anon_WITH_DES_CBC_SHA, 271f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DH_anon_WITH_3DES_EDE_CBC_SHA 272f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 273f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 274f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // hash for quick access to cipher suite by name 275a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson private static Hashtable<String, CipherSuite> cuitesByName; 276f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 277f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 278a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson * array of supported cipher suites. 279f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Set of supported suites is defined at the moment provider's start 280f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 281a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson// TODO Dynamically supported suites: new providers may be dynamically 282a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson// added/removed and the set of supported suites may be changed 283f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite[] supportedCipherSuites; 284f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 285f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 286a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson * array of supported cipher suites names 287f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 288f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static String[] supportedCipherSuiteNames; 289f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 290f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 291a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson * default cipher suites 292f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 293f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static CipherSuite[] defaultCipherSuites; 294f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 295f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project static { 296f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int count = 0; 297a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson cuitesByName = new Hashtable<String, CipherSuite>(); 298f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < cuitesByCode.length; i++) { 299f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cuitesByName.put(cuitesByCode[i].getName(), cuitesByCode[i]); 300f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cuitesByCode[i].supported) { 301f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count++; 302f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 303f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 304f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project supportedCipherSuites = new CipherSuite[count]; 305f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project supportedCipherSuiteNames = new String[count]; 306f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count = 0; 307f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < cuitesByCode.length; i++) { 308f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cuitesByCode[i].supported) { 309f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project supportedCipherSuites[count] = cuitesByCode[i]; 310f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project supportedCipherSuiteNames[count] = supportedCipherSuites[count].getName(); 311f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count++; 312f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 313f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 314f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 315f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project CipherSuite[] defaultPretendent = { 316f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_RC4_128_MD5, 317f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_RC4_128_SHA, 318f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // TLS_RSA_WITH_AES_128_CBC_SHA, 319f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // TLS_DHE_RSA_WITH_AES_128_CBC_SHA, 320f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // LS_DHE_DSS_WITH_AES_128_CBC_SHA, 321f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_WITH_3DES_EDE_CBC_SHA, 322f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA, 323f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, TLS_RSA_WITH_DES_CBC_SHA, 324f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_WITH_DES_CBC_SHA, TLS_DHE_DSS_WITH_DES_CBC_SHA, 325f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_EXPORT_WITH_RC4_40_MD5, 326f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_RSA_EXPORT_WITH_DES40_CBC_SHA, 327f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, 328f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA 329f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project }; 330f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count = 0; 331f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < defaultPretendent.length; i++) { 332f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (defaultPretendent[i].supported) { 333f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count++; 334f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 335f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 336f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project defaultCipherSuites = new CipherSuite[count]; 337f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project count = 0; 338f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project for (int i = 0; i < defaultPretendent.length; i++) { 339f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (defaultPretendent[i].supported) { 340f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project defaultCipherSuites[count++] = defaultPretendent[i]; 341f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 342f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 343f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 344f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 345f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 346f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns CipherSuite by name 347f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 348f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 349f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 350f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CipherSuite getByName(String name) { 351a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson return cuitesByName.get(name); 352f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 353f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 354f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 355f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns CipherSuite based on TLS CipherSuite code 356f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @see <a href="http://www.ietf.org/rfc/rfc2246.txt">TLS 1.0 spec., A.5. The CipherSuite</a> 357f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param b1 358f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param b2 359f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 360f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 361f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CipherSuite getByCode(byte b1, byte b2) { 362a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson if (b1 != 0 || (b2 & 0xFF) > cuitesByCode.length) { 363a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson // Unknown 364f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CipherSuite("UNKNOUN_" + b1 + "_" + b2, false, 0, "", 365f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "", new byte[] { b1, b2 }); 366f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 367f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return cuitesByCode[b2]; 368f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 369f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 370f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 371f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns CipherSuite based on V2CipherSpec code 372f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * as described in TLS 1.0 spec., E. Backward Compatibility With SSL 373f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 374f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param b1 375f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param b2 376f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param b3 377f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return CipherSuite 378f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 379f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CipherSuite getByCode(byte b1, byte b2, byte b3) { 380f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (b1 == 0 && b2 == 0) { 381a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson if ((b3 & 0xFF) <= cuitesByCode.length) { 382f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return cuitesByCode[b3]; 383f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 384f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 385f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // as TLSv1 equivalent of V2CipherSpec should be included in 386f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project // V2ClientHello, ignore V2CipherSpec 387f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return new CipherSuite("UNKNOUN_" + b1 + "_" + b2 + "_" + b3, false, 0, 388f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project "", "", new byte[] { b1, b2, b3 }); 389f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 390f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 391f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 392f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Creates CipherSuite 393f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param name 394f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param isExportable 395f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param keyExchange 396f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param cipherName 397f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param hash 398f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @param code 399f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 400f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public CipherSuite(String name, boolean isExportable, int keyExchange, 401f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project String cipherName, String hash, byte[] code) { 402f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.name = name; 403f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.keyExchange = keyExchange; 404f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.isExportable = isExportable; 405f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (cipherName == null) { 406f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = null; 407f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 0; 408f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 0; 409f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 0; 410f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 0; 411f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 0; 412f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("IDEA_CBC".equals(cipherName)) { 413f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "IDEA/CBC/NoPadding"; 414f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 16; 415f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 16; 416f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 16; 417f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 8; 418f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 8; 419f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("RC2_CBC_40".equals(cipherName)) { 420f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "RC2/CBC/NoPadding"; 421f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 5; 422f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 16; 423f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 5; 424f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 8; 425f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 8; 426f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("RC4_40".equals(cipherName)) { 427f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "RC4"; 428f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 5; 429f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 16; 430f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 5; 431f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 0; 432f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 0; 433f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("RC4_128".equals(cipherName)) { 434f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "RC4"; 435f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 16; 436f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 16; 437f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 16; 438f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 0; 439f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 0; 440f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("DES40_CBC".equals(cipherName)) { 441f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "DES/CBC/NoPadding"; 442f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 5; 443f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 8; 444f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 5; 445f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 8; 446f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 8; 447f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("DES_CBC".equals(cipherName)) { 448f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "DES/CBC/NoPadding"; 449f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 8; 450f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 8; 451f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 7; 452f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 8; 453f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 8; 454f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("3DES_EDE_CBC".equals(cipherName)) { 455f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = "DESede/CBC/NoPadding"; 456f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 24; 457f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 24; 458f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 24; 459f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 8; 460f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 8; 461f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 462f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.cipherName = cipherName; 463f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project keyMaterial = 0; 464f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project expandedKeyMaterial = 0; 465f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project effectiveKeyBytes = 0; 466f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project IVSize = 0; 467f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project blockSize = 0; 468f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 469f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 470f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if ("MD5".equals(hash)) { 471f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hmacName = "HmacMD5"; 472f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hashName = "MD5"; 473f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hashSize = 16; 474f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else if ("SHA".equals(hash)) { 475f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hmacName = "HmacSHA1"; 476f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hashName = "SHA-1"; 477f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hashSize = 20; 478f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } else { 479f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hmacName = null; 480f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project this.hashName = null; 481f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project hashSize = 0; 482f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 483f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 484f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project cipherSuiteCode = code; 485f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 486f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (this.cipherName != null) { 487f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project try { 488f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Cipher.getInstance(this.cipherName); 489f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } catch (GeneralSecurityException e) { 490f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project supported = false; 491f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 492f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 493f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 494f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 495f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 496f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 497f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns true if cipher suite is anonymous 498f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 499f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 500f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isAnonymous() { 501f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (keyExchange == KeyExchange_DH_anon 502f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project || keyExchange == KeyExchange_DH_anon_EXPORT) { 503f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 504f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 505f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 506f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 507f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 508f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 509f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns array of supported CipherSuites 510f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 511f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 512f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static CipherSuite[] getSupported() { 513f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return supportedCipherSuites; 514f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 515f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 516f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 517f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns array of supported cipher suites names 518f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 519f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 520f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public static String[] getSupportedCipherSuiteNames() { 521a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson return supportedCipherSuiteNames.clone(); 522f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 523f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 524f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 525f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns cipher suite name 526f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 527f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 528f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getName() { 529f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return name; 530f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 531f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 532f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 533f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns cipher suite code as byte array 534f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 535f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 536f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public byte[] toBytes() { 537f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return cipherSuiteCode; 538f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 539f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 540f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 541f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns cipher suite description 542f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 543a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson @Override 544f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String toString() { 545f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return name + ": " + cipherSuiteCode[0] + " " + cipherSuiteCode[1]; 546f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 547f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 548f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 549f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Compares this cipher suite to the specified object. 550f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 551a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson @Override 552f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean equals(Object obj) { 553f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (obj instanceof CipherSuite 554f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.cipherSuiteCode[0] == ((CipherSuite) obj).cipherSuiteCode[0] 555f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project && this.cipherSuiteCode[1] == ((CipherSuite) obj).cipherSuiteCode[1]) { 556f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return true; 557f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 558f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return false; 559f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 560f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 561f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 562f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns cipher algorithm name 563f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 564f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 565f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getBulkEncryptionAlgorithm() { 566f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return cipherName; 567f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 568f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 569f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 570f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns cipher block size 571f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 572f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 573f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getBlockSize() { 574f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return blockSize; 575f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 576f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 577f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 578f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns MAC algorithm name 579f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 580f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 581f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getHmacName() { 582f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hmacName; 583f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 584f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 585f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 586f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns hash algorithm name 587f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 588f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 589f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public String getHashName() { 590f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hashName; 591f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 592f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 593f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 594f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns hash size 595f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 596f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 597f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public int getMACLength() { 598f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return hashSize; 599f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 600f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 601f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /** 602f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Indicates whether this cipher suite is exportable 603f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * @return 604f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 605f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project public boolean isExportable() { 606f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project return isExportable; 607f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 608f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 609f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 610a055db83f05034fcd5564ab5930e8d16d4ececfbJesse Wilson 611