1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpackage org.bouncycastle.crypto.params;
2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.math.BigInteger;
4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport java.security.SecureRandom;
5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectimport org.bouncycastle.crypto.KeyGenerationParameters;
7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectpublic class RSAKeyGenerationParameters
9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    extends KeyGenerationParameters
10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{
11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private BigInteger publicExponent;
12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    private int certainty;
13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public RSAKeyGenerationParameters(
15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        BigInteger      publicExponent,
16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        SecureRandom    random,
17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int             strength,
18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        int             certainty)
19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        super(random, strength);
21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (strength < 12)
23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project            throw new IllegalArgumentException("key strength too small");
25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //
28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        // public exponent cannot be even
29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        //
30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        if (!publicExponent.testBit(0))
31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        {
32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project                throw new IllegalArgumentException("public exponent cannot be even");
33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        }
34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.publicExponent = publicExponent;
36f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        this.certainty = certainty;
37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public BigInteger getPublicExponent()
40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return publicExponent;
42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project
44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    public int getCertainty()
45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    {
46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project        return certainty;
47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project    }
48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}
49