14c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompackage org.bouncycastle.jcajce.provider.asymmetric.rsa;
2b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
3b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.interfaces.RSAPrivateCrtKey;
4b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.interfaces.RSAPrivateKey;
5b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport java.security.interfaces.RSAPublicKey;
6b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
74c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstromimport org.bouncycastle.asn1.ASN1ObjectIdentifier;
8b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;
9b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.asn1.x509.X509ObjectIdentifiers;
10b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.params.RSAKeyParameters;
11b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallamimport org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters;
12b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
13b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam/**
14b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * utility class for converting java.security RSA objects into their
15b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam * org.bouncycastle.crypto counterparts.
16b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam */
174c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrompublic class RSAUtil
18b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam{
194c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static final ASN1ObjectIdentifier[] rsaOids =
20b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
214c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        PKCSObjectIdentifiers.rsaEncryption,
224c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        X509ObjectIdentifiers.id_ea_rsa,
234c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        PKCSObjectIdentifiers.id_RSAES_OAEP,
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        PKCSObjectIdentifiers.id_RSASSA_PSS
254c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    };
264c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
274c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public static boolean isRsaOid(
284c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        ASN1ObjectIdentifier algOid)
294c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    {
304c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        for (int i = 0; i != rsaOids.length; i++)
314c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        {
324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            if (algOid.equals(rsaOids[i]))
334c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            {
344c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                return true;
354c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            }
364c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        }
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
384c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        return false;
39b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
404c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom
41b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    static RSAKeyParameters generatePublicKeyParameter(
424c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        RSAPublicKey key)
43b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
44b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        return new RSAKeyParameters(false, key.getModulus(), key.getPublicExponent());
45b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
46b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
47b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
48b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    static RSAKeyParameters generatePrivateKeyParameter(
494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom        RSAPrivateKey key)
50b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    {
51b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        if (key instanceof RSAPrivateCrtKey)
52b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
534c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            RSAPrivateCrtKey k = (RSAPrivateCrtKey)key;
54b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
55b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return new RSAPrivateCrtKeyParameters(k.getModulus(),
56b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam                k.getPublicExponent(), k.getPrivateExponent(),
574c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom                k.getPrimeP(), k.getPrimeQ(), k.getPrimeExponentP(), k.getPrimeExponentQ(), k.getCrtCoefficient());
58b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
59b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        else
60b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        {
614c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom            RSAPrivateKey k = key;
62b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam
63b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam            return new RSAKeyParameters(true, k.getModulus(), k.getPrivateExponent());
64b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam        }
65b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam    }
66b61a96e7ef1a78acf013bbf08fe537e5b5f129caPeter Hallam}
67