Home | History | Annotate | Download | only in symmetric
      1 package org.bouncycastle.jcajce.provider.symmetric;
      2 
      3 import java.io.IOException;
      4 import java.security.AlgorithmParameters;
      5 import java.security.InvalidAlgorithmParameterException;
      6 import java.security.SecureRandom;
      7 import java.security.spec.AlgorithmParameterSpec;
      8 import java.security.spec.InvalidParameterSpecException;
      9 
     10 import javax.crypto.spec.IvParameterSpec;
     11 import javax.crypto.spec.RC2ParameterSpec;
     12 
     13 import org.bouncycastle.asn1.ASN1Primitive;
     14 import org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
     15 // Android-removed: Unsupported algorithms
     16 // import org.bouncycastle.asn1.pkcs.RC2CBCParameter;
     17 // import org.bouncycastle.crypto.CipherKeyGenerator;
     18 import org.bouncycastle.crypto.engines.RC2Engine;
     19 // Android-removed: Unsupported algorithms
     20 // import org.bouncycastle.crypto.engines.RC2WrapEngine;
     21 // import org.bouncycastle.crypto.macs.CBCBlockCipherMac;
     22 // import org.bouncycastle.crypto.macs.CFBBlockCipherMac;
     23 import org.bouncycastle.crypto.modes.CBCBlockCipher;
     24 import org.bouncycastle.jcajce.provider.config.ConfigurableProvider;
     25 // Android-removed: Unsupported algorithms
     26 // import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameterGenerator;
     27 // import org.bouncycastle.jcajce.provider.symmetric.util.BaseAlgorithmParameters;
     28 import org.bouncycastle.jcajce.provider.symmetric.util.BaseBlockCipher;
     29 // Android-removed: Unsupported algorithms
     30 // import org.bouncycastle.jcajce.provider.symmetric.util.BaseKeyGenerator;
     31 // import org.bouncycastle.jcajce.provider.symmetric.util.BaseMac;
     32 // import org.bouncycastle.jcajce.provider.symmetric.util.BaseWrapCipher;
     33 import org.bouncycastle.jcajce.provider.symmetric.util.PBESecretKeyFactory;
     34 import org.bouncycastle.jcajce.provider.util.AlgorithmProvider;
     35 import org.bouncycastle.util.Arrays;
     36 
     37 public final class RC2
     38 {
     39     private RC2()
     40     {
     41     }
     42 
     43     // BEGIN Android-removed: Unsupported algorithms
     44     /*
     45     /**
     46      * RC2
     47      *
     48     static public class ECB
     49         extends BaseBlockCipher
     50     {
     51         public ECB()
     52         {
     53             super(new RC2Engine());
     54         }
     55     }
     56 
     57     /**
     58      * RC2CBC
     59      *
     60     static public class CBC
     61         extends BaseBlockCipher
     62     {
     63         public CBC()
     64         {
     65             super(new CBCBlockCipher(new RC2Engine()), 64);
     66         }
     67     }
     68 
     69     public static class Wrap
     70         extends BaseWrapCipher
     71     {
     72         public Wrap()
     73         {
     74             super(new RC2WrapEngine());
     75         }
     76     }
     77 
     78     /**
     79      * RC2
     80      *
     81     public static class CBCMAC
     82         extends BaseMac
     83     {
     84         public CBCMAC()
     85         {
     86             super(new CBCBlockCipherMac(new RC2Engine()));
     87         }
     88     }
     89 
     90     public static class CFB8MAC
     91         extends BaseMac
     92     {
     93         public CFB8MAC()
     94         {
     95             super(new CFBBlockCipherMac(new RC2Engine()));
     96         }
     97     }
     98     */
     99     // END Android-removed: Unsupported algorithms
    100 
    101     /**
    102      * PBEWithSHA1AndRC2
    103      */
    104     static public class PBEWithSHA1KeyFactory
    105         extends PBESecretKeyFactory
    106     {
    107         public PBEWithSHA1KeyFactory()
    108         {
    109             super("PBEwithSHA1andRC2", PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC, true, PKCS5S1, SHA1, 64, 64);
    110         }
    111     }
    112 
    113     /**
    114      * PBEWithSHAAnd128BitRC2-CBC
    115      */
    116     static public class PBEWithSHAAnd128BitKeyFactory
    117         extends PBESecretKeyFactory
    118     {
    119         public PBEWithSHAAnd128BitKeyFactory()
    120         {
    121             super("PBEwithSHAand128BitRC2-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC, true, PKCS12, SHA1, 128, 64);
    122         }
    123     }
    124 
    125     /**
    126      * PBEWithSHAAnd40BitRC2-CBC
    127      */
    128     static public class PBEWithSHAAnd40BitKeyFactory
    129         extends PBESecretKeyFactory
    130     {
    131         public PBEWithSHAAnd40BitKeyFactory()
    132         {
    133             super("PBEwithSHAand40BitRC2-CBC", PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC2_CBC, true, PKCS12, SHA1, 40, 64);
    134         }
    135     }
    136 
    137     /**
    138      * PBEWithMD5AndRC2
    139      */
    140     static public class PBEWithMD5AndRC2
    141         extends BaseBlockCipher
    142     {
    143         public PBEWithMD5AndRC2()
    144         {
    145             super(new CBCBlockCipher(new RC2Engine()), PKCS5S1, MD5, 64, 8);
    146         }
    147     }
    148 
    149     /**
    150      * PBEWithSHA1AndRC2
    151      */
    152     static public class PBEWithSHA1AndRC2
    153         extends BaseBlockCipher
    154     {
    155         public PBEWithSHA1AndRC2()
    156         {
    157             super(new CBCBlockCipher(new RC2Engine()), PKCS5S1, SHA1, 64, 8);
    158         }
    159     }
    160 
    161     /**
    162      * PBEWithSHAAnd128BitRC2-CBC
    163      */
    164     static public class PBEWithSHAAnd128BitRC2
    165         extends BaseBlockCipher
    166     {
    167         public PBEWithSHAAnd128BitRC2()
    168         {
    169             super(new CBCBlockCipher(new RC2Engine()), PKCS12, SHA1, 128, 8);
    170         }
    171     }
    172 
    173     /**
    174      * PBEWithSHAAnd40BitRC2-CBC
    175      */
    176     static public class PBEWithSHAAnd40BitRC2
    177         extends BaseBlockCipher
    178     {
    179         public PBEWithSHAAnd40BitRC2()
    180         {
    181             super(new CBCBlockCipher(new RC2Engine()), PKCS12, SHA1, 40, 8);
    182         }
    183     }
    184 
    185     // BEGIN Android-removed: Unsupported algorithms
    186     /*
    187     /**
    188      * PBEWithMD2AndRC2
    189      *
    190     static public class PBEWithMD2KeyFactory
    191         extends PBESecretKeyFactory
    192     {
    193         public PBEWithMD2KeyFactory()
    194         {
    195             super("PBEwithMD2andRC2", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, true, PKCS5S1, MD2, 64, 64);
    196         }
    197     }
    198     */
    199     // END Android-removed: Unsupported algorithms
    200 
    201    /**
    202     * PBEWithMD5AndRC2
    203     */
    204    static public class PBEWithMD5KeyFactory
    205        extends PBESecretKeyFactory
    206    {
    207        public PBEWithMD5KeyFactory()
    208        {
    209            super("PBEwithMD5andRC2", PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, true, PKCS5S1, MD5, 64, 64);
    210        }
    211    }
    212 
    213     // BEGIN Android-removed: Unsupported algorithms
    214     /*
    215     public static class AlgParamGen
    216         extends BaseAlgorithmParameterGenerator
    217     {
    218         RC2ParameterSpec spec = null;
    219 
    220         protected void engineInit(
    221             AlgorithmParameterSpec genParamSpec,
    222             SecureRandom random)
    223             throws InvalidAlgorithmParameterException
    224         {
    225             if (genParamSpec instanceof RC2ParameterSpec)
    226             {
    227                 spec = (RC2ParameterSpec)genParamSpec;
    228                 return;
    229             }
    230 
    231             throw new InvalidAlgorithmParameterException("No supported AlgorithmParameterSpec for RC2 parameter generation.");
    232         }
    233 
    234         protected AlgorithmParameters engineGenerateParameters()
    235         {
    236             AlgorithmParameters params;
    237 
    238             if (spec == null)
    239             {
    240                 byte[] iv = new byte[8];
    241 
    242                 if (random == null)
    243                 {
    244                     random = new SecureRandom();
    245                 }
    246 
    247                 random.nextBytes(iv);
    248 
    249                 try
    250                 {
    251                     params = createParametersInstance("RC2");
    252                     params.init(new IvParameterSpec(iv));
    253                 }
    254                 catch (Exception e)
    255                 {
    256                     throw new RuntimeException(e.getMessage());
    257                 }
    258             }
    259             else
    260             {
    261                 try
    262                 {
    263                     params = createParametersInstance("RC2");
    264                     params.init(spec);
    265                 }
    266                 catch (Exception e)
    267                 {
    268                     throw new RuntimeException(e.getMessage());
    269                 }
    270             }
    271 
    272             return params;
    273         }
    274     }
    275 
    276     public static class KeyGenerator
    277         extends BaseKeyGenerator
    278     {
    279         public KeyGenerator()
    280         {
    281             super("RC2", 128, new CipherKeyGenerator());
    282         }
    283     }
    284 
    285     public static class AlgParams
    286         extends BaseAlgorithmParameters
    287     {
    288         private static final short[] table = {
    289             0xbd, 0x56, 0xea, 0xf2, 0xa2, 0xf1, 0xac, 0x2a, 0xb0, 0x93, 0xd1, 0x9c, 0x1b, 0x33, 0xfd, 0xd0,
    290             0x30, 0x04, 0xb6, 0xdc, 0x7d, 0xdf, 0x32, 0x4b, 0xf7, 0xcb, 0x45, 0x9b, 0x31, 0xbb, 0x21, 0x5a,
    291             0x41, 0x9f, 0xe1, 0xd9, 0x4a, 0x4d, 0x9e, 0xda, 0xa0, 0x68, 0x2c, 0xc3, 0x27, 0x5f, 0x80, 0x36,
    292             0x3e, 0xee, 0xfb, 0x95, 0x1a, 0xfe, 0xce, 0xa8, 0x34, 0xa9, 0x13, 0xf0, 0xa6, 0x3f, 0xd8, 0x0c,
    293             0x78, 0x24, 0xaf, 0x23, 0x52, 0xc1, 0x67, 0x17, 0xf5, 0x66, 0x90, 0xe7, 0xe8, 0x07, 0xb8, 0x60,
    294             0x48, 0xe6, 0x1e, 0x53, 0xf3, 0x92, 0xa4, 0x72, 0x8c, 0x08, 0x15, 0x6e, 0x86, 0x00, 0x84, 0xfa,
    295             0xf4, 0x7f, 0x8a, 0x42, 0x19, 0xf6, 0xdb, 0xcd, 0x14, 0x8d, 0x50, 0x12, 0xba, 0x3c, 0x06, 0x4e,
    296             0xec, 0xb3, 0x35, 0x11, 0xa1, 0x88, 0x8e, 0x2b, 0x94, 0x99, 0xb7, 0x71, 0x74, 0xd3, 0xe4, 0xbf,
    297             0x3a, 0xde, 0x96, 0x0e, 0xbc, 0x0a, 0xed, 0x77, 0xfc, 0x37, 0x6b, 0x03, 0x79, 0x89, 0x62, 0xc6,
    298             0xd7, 0xc0, 0xd2, 0x7c, 0x6a, 0x8b, 0x22, 0xa3, 0x5b, 0x05, 0x5d, 0x02, 0x75, 0xd5, 0x61, 0xe3,
    299             0x18, 0x8f, 0x55, 0x51, 0xad, 0x1f, 0x0b, 0x5e, 0x85, 0xe5, 0xc2, 0x57, 0x63, 0xca, 0x3d, 0x6c,
    300             0xb4, 0xc5, 0xcc, 0x70, 0xb2, 0x91, 0x59, 0x0d, 0x47, 0x20, 0xc8, 0x4f, 0x58, 0xe0, 0x01, 0xe2,
    301             0x16, 0x38, 0xc4, 0x6f, 0x3b, 0x0f, 0x65, 0x46, 0xbe, 0x7e, 0x2d, 0x7b, 0x82, 0xf9, 0x40, 0xb5,
    302             0x1d, 0x73, 0xf8, 0xeb, 0x26, 0xc7, 0x87, 0x97, 0x25, 0x54, 0xb1, 0x28, 0xaa, 0x98, 0x9d, 0xa5,
    303             0x64, 0x6d, 0x7a, 0xd4, 0x10, 0x81, 0x44, 0xef, 0x49, 0xd6, 0xae, 0x2e, 0xdd, 0x76, 0x5c, 0x2f,
    304             0xa7, 0x1c, 0xc9, 0x09, 0x69, 0x9a, 0x83, 0xcf, 0x29, 0x39, 0xb9, 0xe9, 0x4c, 0xff, 0x43, 0xab
    305         };
    306 
    307         private static final short[] ekb = {
    308             0x5d, 0xbe, 0x9b, 0x8b, 0x11, 0x99, 0x6e, 0x4d, 0x59, 0xf3, 0x85, 0xa6, 0x3f, 0xb7, 0x83, 0xc5,
    309             0xe4, 0x73, 0x6b, 0x3a, 0x68, 0x5a, 0xc0, 0x47, 0xa0, 0x64, 0x34, 0x0c, 0xf1, 0xd0, 0x52, 0xa5,
    310             0xb9, 0x1e, 0x96, 0x43, 0x41, 0xd8, 0xd4, 0x2c, 0xdb, 0xf8, 0x07, 0x77, 0x2a, 0xca, 0xeb, 0xef,
    311             0x10, 0x1c, 0x16, 0x0d, 0x38, 0x72, 0x2f, 0x89, 0xc1, 0xf9, 0x80, 0xc4, 0x6d, 0xae, 0x30, 0x3d,
    312             0xce, 0x20, 0x63, 0xfe, 0xe6, 0x1a, 0xc7, 0xb8, 0x50, 0xe8, 0x24, 0x17, 0xfc, 0x25, 0x6f, 0xbb,
    313             0x6a, 0xa3, 0x44, 0x53, 0xd9, 0xa2, 0x01, 0xab, 0xbc, 0xb6, 0x1f, 0x98, 0xee, 0x9a, 0xa7, 0x2d,
    314             0x4f, 0x9e, 0x8e, 0xac, 0xe0, 0xc6, 0x49, 0x46, 0x29, 0xf4, 0x94, 0x8a, 0xaf, 0xe1, 0x5b, 0xc3,
    315             0xb3, 0x7b, 0x57, 0xd1, 0x7c, 0x9c, 0xed, 0x87, 0x40, 0x8c, 0xe2, 0xcb, 0x93, 0x14, 0xc9, 0x61,
    316             0x2e, 0xe5, 0xcc, 0xf6, 0x5e, 0xa8, 0x5c, 0xd6, 0x75, 0x8d, 0x62, 0x95, 0x58, 0x69, 0x76, 0xa1,
    317             0x4a, 0xb5, 0x55, 0x09, 0x78, 0x33, 0x82, 0xd7, 0xdd, 0x79, 0xf5, 0x1b, 0x0b, 0xde, 0x26, 0x21,
    318             0x28, 0x74, 0x04, 0x97, 0x56, 0xdf, 0x3c, 0xf0, 0x37, 0x39, 0xdc, 0xff, 0x06, 0xa4, 0xea, 0x42,
    319             0x08, 0xda, 0xb4, 0x71, 0xb0, 0xcf, 0x12, 0x7a, 0x4e, 0xfa, 0x6c, 0x1d, 0x84, 0x00, 0xc8, 0x7f,
    320             0x91, 0x45, 0xaa, 0x2b, 0xc2, 0xb1, 0x8f, 0xd5, 0xba, 0xf2, 0xad, 0x19, 0xb2, 0x67, 0x36, 0xf7,
    321             0x0f, 0x0a, 0x92, 0x7d, 0xe3, 0x9d, 0xe9, 0x90, 0x3e, 0x23, 0x27, 0x66, 0x13, 0xec, 0x81, 0x15,
    322             0xbd, 0x22, 0xbf, 0x9f, 0x7e, 0xa9, 0x51, 0x4b, 0x4c, 0xfb, 0x02, 0xd3, 0x70, 0x86, 0x31, 0xe7,
    323             0x3b, 0x05, 0x03, 0x54, 0x60, 0x48, 0x65, 0x18, 0xd2, 0xcd, 0x5f, 0x32, 0x88, 0x0e, 0x35, 0xfd
    324         };
    325 
    326         private byte[] iv;
    327         private int parameterVersion = 58;
    328 
    329         protected byte[] engineGetEncoded()
    330         {
    331             return Arrays.clone(iv);
    332         }
    333 
    334         protected byte[] engineGetEncoded(
    335             String format)
    336             throws IOException
    337         {
    338             if (this.isASN1FormatString(format))
    339             {
    340                 if (parameterVersion == -1)
    341                 {
    342                     return new RC2CBCParameter(engineGetEncoded()).getEncoded();
    343                 }
    344                 else
    345                 {
    346                     return new RC2CBCParameter(parameterVersion, engineGetEncoded()).getEncoded();
    347                 }
    348             }
    349 
    350             if (format.equals("RAW"))
    351             {
    352                 return engineGetEncoded();
    353             }
    354 
    355             return null;
    356         }
    357 
    358         protected AlgorithmParameterSpec localEngineGetParameterSpec(
    359             Class paramSpec)
    360             throws InvalidParameterSpecException
    361         {
    362             if (paramSpec == RC2ParameterSpec.class || paramSpec == AlgorithmParameterSpec.class)
    363             {
    364                 if (parameterVersion != -1)
    365                 {
    366                     if (parameterVersion < 256)
    367                     {
    368                         return new RC2ParameterSpec(ekb[parameterVersion], iv);
    369                     }
    370                     else
    371                     {
    372                         return new RC2ParameterSpec(parameterVersion, iv);
    373                     }
    374                 }
    375             }
    376 
    377             if (paramSpec == IvParameterSpec.class || paramSpec == AlgorithmParameterSpec.class)
    378             {
    379                 return new IvParameterSpec(iv);
    380             }
    381 
    382             throw new InvalidParameterSpecException("unknown parameter spec passed to RC2 parameters object.");
    383         }
    384 
    385         protected void engineInit(
    386             AlgorithmParameterSpec paramSpec)
    387             throws InvalidParameterSpecException
    388         {
    389             if (paramSpec instanceof IvParameterSpec)
    390             {
    391                 this.iv = ((IvParameterSpec)paramSpec).getIV();
    392             }
    393             else if (paramSpec instanceof RC2ParameterSpec)
    394             {
    395                 int effKeyBits = ((RC2ParameterSpec)paramSpec).getEffectiveKeyBits();
    396                 if (effKeyBits != -1)
    397                 {
    398                     if (effKeyBits < 256)
    399                     {
    400                         parameterVersion = table[effKeyBits];
    401                     }
    402                     else
    403                     {
    404                         parameterVersion = effKeyBits;
    405                     }
    406                 }
    407 
    408                 this.iv = ((RC2ParameterSpec)paramSpec).getIV();
    409             }
    410             else
    411             {
    412                 throw new InvalidParameterSpecException("IvParameterSpec or RC2ParameterSpec required to initialise a RC2 parameters algorithm parameters object");
    413             }
    414         }
    415 
    416         protected void engineInit(
    417             byte[] params)
    418             throws IOException
    419         {
    420             this.iv = Arrays.clone(params);
    421         }
    422 
    423         protected void engineInit(
    424             byte[] params,
    425             String format)
    426             throws IOException
    427         {
    428             if (this.isASN1FormatString(format))
    429             {
    430                 RC2CBCParameter p = RC2CBCParameter.getInstance(ASN1Primitive.fromByteArray(params));
    431 
    432                 if (p.getRC2ParameterVersion() != null)
    433                 {
    434                     parameterVersion = p.getRC2ParameterVersion().intValue();
    435                 }
    436 
    437                 iv = p.getIV();
    438 
    439                 return;
    440             }
    441 
    442             if (format.equals("RAW"))
    443             {
    444                 engineInit(params);
    445                 return;
    446             }
    447 
    448             throw new IOException("Unknown parameters format in IV parameters object");
    449         }
    450 
    451         protected String engineToString()
    452         {
    453             return "RC2 Parameters";
    454         }
    455     }
    456     */
    457     // END Android-removed: Unsupported algorithms
    458 
    459     public static class Mappings
    460         extends AlgorithmProvider
    461     {
    462         private static final String PREFIX = RC2.class.getName();
    463 
    464         public Mappings()
    465         {
    466         }
    467 
    468         public void configure(ConfigurableProvider provider)
    469         {
    470 
    471             // BEGIN Android-removed: Unsupported algorithms
    472             /*
    473             provider.addAlgorithm("AlgorithmParameterGenerator.RC2", PREFIX + "$AlgParamGen");
    474             provider.addAlgorithm("AlgorithmParameterGenerator.1.2.840.113549.3.2", PREFIX + "$AlgParamGen");
    475 
    476             provider.addAlgorithm("KeyGenerator.RC2", PREFIX + "$KeyGenerator");
    477             provider.addAlgorithm("KeyGenerator.1.2.840.113549.3.2", PREFIX + "$KeyGenerator");
    478 
    479             provider.addAlgorithm("AlgorithmParameters.RC2", PREFIX + "$AlgParams");
    480             provider.addAlgorithm("AlgorithmParameters.1.2.840.113549.3.2", PREFIX + "$AlgParams");
    481 
    482             provider.addAlgorithm("Cipher.RC2", PREFIX + "$ECB");
    483             provider.addAlgorithm("Cipher.RC2WRAP", PREFIX + "$Wrap");
    484             provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.id_alg_CMSRC2wrap, "RC2WRAP");
    485             provider.addAlgorithm("Cipher", PKCSObjectIdentifiers.RC2_CBC, PREFIX + "$CBC");
    486 
    487             provider.addAlgorithm("Mac.RC2MAC", PREFIX + "$CBCMAC");
    488             provider.addAlgorithm("Alg.Alias.Mac.RC2", "RC2MAC");
    489             provider.addAlgorithm("Mac.RC2MAC/CFB8", PREFIX + "$CFB8MAC");
    490             provider.addAlgorithm("Alg.Alias.Mac.RC2/CFB8", "RC2MAC/CFB8");
    491 
    492             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD2ANDRC2-CBC", "PBEWITHMD2ANDRC2");
    493             */
    494             // END Android-removed: Unsupported algorithms
    495 
    496             // Android-note: All of the non-disabled algorithms in this class are necessary
    497             // for KeyStore.PKCS12
    498             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHMD5ANDRC2-CBC", "PBEWITHMD5ANDRC2");
    499 
    500             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.PBEWITHSHA1ANDRC2-CBC", "PBEWITHSHA1ANDRC2");
    501 
    502             // Android-removed: Unsupported algorithms
    503             // provider.addAlgorithm("Alg.Alias.SecretKeyFactory", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
    504 
    505             provider.addAlgorithm("Alg.Alias.SecretKeyFactory", PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2");
    506 
    507             provider.addAlgorithm("Alg.Alias.SecretKeyFactory", PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC, "PBEWITHSHA1ANDRC2");
    508             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.5", "PBEWITHSHAAND128BITRC2-CBC");
    509             provider.addAlgorithm("Alg.Alias.SecretKeyFactory.1.2.840.113549.1.12.1.6", "PBEWITHSHAAND40BITRC2-CBC");
    510 
    511             // Android-removed: Unsupported algorithms
    512             // provider.addAlgorithm("SecretKeyFactory.PBEWITHMD2ANDRC2", PREFIX + "$PBEWithMD2KeyFactory");
    513             provider.addAlgorithm("SecretKeyFactory.PBEWITHMD5ANDRC2", PREFIX + "$PBEWithMD5KeyFactory");
    514             provider.addAlgorithm("SecretKeyFactory.PBEWITHSHA1ANDRC2", PREFIX + "$PBEWithSHA1KeyFactory");
    515 
    516             provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND128BITRC2-CBC", PREFIX + "$PBEWithSHAAnd128BitKeyFactory");
    517             provider.addAlgorithm("SecretKeyFactory.PBEWITHSHAAND40BITRC2-CBC", PREFIX + "$PBEWithSHAAnd40BitKeyFactory");
    518 
    519             // Android-removed: Unsupported algorithms
    520             // provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.pbeWithMD2AndRC2_CBC, "PBEWITHMD2ANDRC2");
    521 
    522             provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.pbeWithMD5AndRC2_CBC, "PBEWITHMD5ANDRC2");
    523 
    524             provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.pbeWithSHA1AndRC2_CBC, "PBEWITHSHA1ANDRC2");
    525 
    526             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.5", "PKCS12PBE");
    527             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.1.2.840.113549.1.12.1.6", "PKCS12PBE");
    528             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWithSHAAnd3KeyTripleDES", "PKCS12PBE");
    529 
    530             provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.pbeWithSHAAnd128BitRC2_CBC, "PBEWITHSHAAND128BITRC2-CBC");
    531             provider.addAlgorithm("Alg.Alias.Cipher", PKCSObjectIdentifiers.pbeWithSHAAnd40BitRC2_CBC, "PBEWITHSHAAND40BITRC2-CBC");
    532             provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND128BITRC2-CBC", "PBEWITHSHAAND128BITRC2-CBC");
    533             provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1AND40BITRC2-CBC", "PBEWITHSHAAND40BITRC2-CBC");
    534             provider.addAlgorithm("Cipher.PBEWITHSHA1ANDRC2", PREFIX + "$PBEWithSHA1AndRC2");
    535             provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHAANDRC2-CBC", "PBEWITHSHA1ANDRC2");
    536             provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHSHA1ANDRC2-CBC", "PBEWITHSHA1ANDRC2");
    537 
    538             provider.addAlgorithm("Cipher.PBEWITHSHAAND128BITRC2-CBC", PREFIX + "$PBEWithSHAAnd128BitRC2");
    539             provider.addAlgorithm("Cipher.PBEWITHSHAAND40BITRC2-CBC", PREFIX + "$PBEWithSHAAnd40BitRC2");
    540             provider.addAlgorithm("Cipher.PBEWITHMD5ANDRC2", PREFIX + "$PBEWithMD5AndRC2");
    541             provider.addAlgorithm("Alg.Alias.Cipher.PBEWITHMD5ANDRC2-CBC", "PBEWITHMD5ANDRC2");
    542 
    543             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2", "PKCS12PBE");
    544             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAANDRC2", "PKCS12PBE");
    545             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHA1ANDRC2-CBC", "PKCS12PBE");
    546             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND40BITRC2-CBC", "PKCS12PBE");
    547             provider.addAlgorithm("Alg.Alias.AlgorithmParameters.PBEWITHSHAAND128BITRC2-CBC", "PKCS12PBE");
    548         }
    549     }
    550 }
    551