1 package org.bouncycastle.operator; 2 3 import java.util.Collections; 4 import java.util.HashMap; 5 import java.util.Map; 6 7 import org.bouncycastle.asn1.ASN1ObjectIdentifier; 8 import org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers; 9 import org.bouncycastle.asn1.kisa.KISAObjectIdentifiers; 10 import org.bouncycastle.asn1.nist.NISTObjectIdentifiers; 11 import org.bouncycastle.asn1.ntt.NTTObjectIdentifiers; 12 import org.bouncycastle.asn1.oiw.OIWObjectIdentifiers; 13 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers; 14 import org.bouncycastle.asn1.x509.AlgorithmIdentifier; 15 import org.bouncycastle.util.Integers; 16 17 public class DefaultSecretKeySizeProvider 18 implements SecretKeySizeProvider 19 { 20 public static final SecretKeySizeProvider INSTANCE = new DefaultSecretKeySizeProvider(); 21 22 private static final Map KEY_SIZES; 23 24 static 25 { 26 Map keySizes = new HashMap(); 27 keySizes.put(new ASN1ObjectIdentifier(R), Integers.valueOf(128))28 keySizes.put(new ASN1ObjectIdentifier("1.2.840.113533.7.66.10"), Integers.valueOf(128)); 29 keySizes.put(PKCSObjectIdentifiers.des_EDE3_CBC, Integers.valueOf(192))30 keySizes.put(PKCSObjectIdentifiers.des_EDE3_CBC, Integers.valueOf(192)); keySizes.put(PKCSObjectIdentifiers.id_alg_CMS3DESwrap, Integers.valueOf(192))31 keySizes.put(PKCSObjectIdentifiers.id_alg_CMS3DESwrap, Integers.valueOf(192)); 32 keySizes.put(PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, Integers.valueOf(64))33 keySizes.put(PKCSObjectIdentifiers.pbeWithSHA1AndDES_CBC, Integers.valueOf(64)); keySizes.put(PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, Integers.valueOf(64))34 keySizes.put(PKCSObjectIdentifiers.pbeWithMD5AndDES_CBC, Integers.valueOf(64)); 35 keySizes.put(NISTObjectIdentifiers.id_aes128_CBC, Integers.valueOf(128))36 keySizes.put(NISTObjectIdentifiers.id_aes128_CBC, Integers.valueOf(128)); keySizes.put(NISTObjectIdentifiers.id_aes192_CBC, Integers.valueOf(192))37 keySizes.put(NISTObjectIdentifiers.id_aes192_CBC, Integers.valueOf(192)); keySizes.put(NISTObjectIdentifiers.id_aes256_CBC, Integers.valueOf(256))38 keySizes.put(NISTObjectIdentifiers.id_aes256_CBC, Integers.valueOf(256)); keySizes.put(NISTObjectIdentifiers.id_aes128_GCM, Integers.valueOf(128))39 keySizes.put(NISTObjectIdentifiers.id_aes128_GCM, Integers.valueOf(128)); keySizes.put(NISTObjectIdentifiers.id_aes192_GCM, Integers.valueOf(192))40 keySizes.put(NISTObjectIdentifiers.id_aes192_GCM, Integers.valueOf(192)); keySizes.put(NISTObjectIdentifiers.id_aes256_GCM, Integers.valueOf(256))41 keySizes.put(NISTObjectIdentifiers.id_aes256_GCM, Integers.valueOf(256)); keySizes.put(NISTObjectIdentifiers.id_aes128_CCM, Integers.valueOf(128))42 keySizes.put(NISTObjectIdentifiers.id_aes128_CCM, Integers.valueOf(128)); keySizes.put(NISTObjectIdentifiers.id_aes192_CCM, Integers.valueOf(192))43 keySizes.put(NISTObjectIdentifiers.id_aes192_CCM, Integers.valueOf(192)); keySizes.put(NISTObjectIdentifiers.id_aes256_CCM, Integers.valueOf(256))44 keySizes.put(NISTObjectIdentifiers.id_aes256_CCM, Integers.valueOf(256)); keySizes.put(NISTObjectIdentifiers.id_aes128_wrap, Integers.valueOf(128))45 keySizes.put(NISTObjectIdentifiers.id_aes128_wrap, Integers.valueOf(128)); keySizes.put(NISTObjectIdentifiers.id_aes192_wrap, Integers.valueOf(192))46 keySizes.put(NISTObjectIdentifiers.id_aes192_wrap, Integers.valueOf(192)); keySizes.put(NISTObjectIdentifiers.id_aes256_wrap, Integers.valueOf(256))47 keySizes.put(NISTObjectIdentifiers.id_aes256_wrap, Integers.valueOf(256)); keySizes.put(NISTObjectIdentifiers.id_aes128_wrap_pad, Integers.valueOf(128))48 keySizes.put(NISTObjectIdentifiers.id_aes128_wrap_pad, Integers.valueOf(128)); keySizes.put(NISTObjectIdentifiers.id_aes192_wrap_pad, Integers.valueOf(192))49 keySizes.put(NISTObjectIdentifiers.id_aes192_wrap_pad, Integers.valueOf(192)); keySizes.put(NISTObjectIdentifiers.id_aes256_wrap_pad, Integers.valueOf(256))50 keySizes.put(NISTObjectIdentifiers.id_aes256_wrap_pad, Integers.valueOf(256)); 51 keySizes.put(NTTObjectIdentifiers.id_camellia128_cbc, Integers.valueOf(128))52 keySizes.put(NTTObjectIdentifiers.id_camellia128_cbc, Integers.valueOf(128)); keySizes.put(NTTObjectIdentifiers.id_camellia192_cbc, Integers.valueOf(192))53 keySizes.put(NTTObjectIdentifiers.id_camellia192_cbc, Integers.valueOf(192)); keySizes.put(NTTObjectIdentifiers.id_camellia256_cbc, Integers.valueOf(256))54 keySizes.put(NTTObjectIdentifiers.id_camellia256_cbc, Integers.valueOf(256)); keySizes.put(NTTObjectIdentifiers.id_camellia128_wrap, Integers.valueOf(128))55 keySizes.put(NTTObjectIdentifiers.id_camellia128_wrap, Integers.valueOf(128)); keySizes.put(NTTObjectIdentifiers.id_camellia192_wrap, Integers.valueOf(192))56 keySizes.put(NTTObjectIdentifiers.id_camellia192_wrap, Integers.valueOf(192)); keySizes.put(NTTObjectIdentifiers.id_camellia256_wrap, Integers.valueOf(256))57 keySizes.put(NTTObjectIdentifiers.id_camellia256_wrap, Integers.valueOf(256)); 58 keySizes.put(KISAObjectIdentifiers.id_seedCBC, Integers.valueOf(128))59 keySizes.put(KISAObjectIdentifiers.id_seedCBC, Integers.valueOf(128)); 60 keySizes.put(OIWObjectIdentifiers.desCBC, Integers.valueOf(64))61 keySizes.put(OIWObjectIdentifiers.desCBC, Integers.valueOf(64)); 62 keySizes.put(CryptoProObjectIdentifiers.gostR28147_gcfb, Integers.valueOf(256))63 keySizes.put(CryptoProObjectIdentifiers.gostR28147_gcfb, Integers.valueOf(256)); 64 65 KEY_SIZES = Collections.unmodifiableMap(keySizes); 66 } 67 getKeySize(AlgorithmIdentifier algorithmIdentifier)68 public int getKeySize(AlgorithmIdentifier algorithmIdentifier) 69 { 70 int keySize = getKeySize(algorithmIdentifier.getAlgorithm()); 71 72 // just need the OID 73 if (keySize > 0) 74 { 75 return keySize; 76 } 77 78 // TODO: support OID/Parameter key sizes (e.g. RC2). 79 80 return -1; 81 } 82 getKeySize(ASN1ObjectIdentifier algorithm)83 public int getKeySize(ASN1ObjectIdentifier algorithm) 84 { 85 Integer keySize = (Integer)KEY_SIZES.get(algorithm); 86 87 if (keySize != null) 88 { 89 return keySize.intValue(); 90 } 91 92 return -1; 93 } 94 } 95