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