Skip to content

Comments

Add id_RSAES_OAEP to asymmetricWrapperAlgNames#953

Closed
jensthomassen wants to merge 1 commit intobcgit:masterfrom
jensthomassen:oaep-padding
Closed

Add id_RSAES_OAEP to asymmetricWrapperAlgNames#953
jensthomassen wants to merge 1 commit intobcgit:masterfrom
jensthomassen:oaep-padding

Conversation

@jensthomassen
Copy link

This makes it easier to decode SCEP requests from some Windows computers with OAEP Padding using the JSCEP library.
Without the patch, I see this Exception:

Caused by: org.bouncycastle.cms.CMSException: exception unwrapping key: cannot create cipher: Cannot find any provider supporting 1.2.840.113549.1.1.7
at org.bouncycastle.cms.jcajce.JceKeyTransRecipient.extractSecretKey(Unknown Source)
at org.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient.getRecipientOperator(Unknown Source)
at org.jscep.message.PkcsPkiEnvelopeDecoder$InternalKeyTransEnvelopedRecipient.getRecipientOperator(PkcsPkiEnvelopeDecoder.java:150)
at org.bouncycastle.cms.KeyTransRecipientInformation.getRecipientOperator(Unknown Source)
at org.bouncycastle.cms.RecipientInformation.getContentStream(Unknown Source)
at org.bouncycastle.cms.RecipientInformation.getContent(Unknown Source)
at org.jscep.message.PkcsPkiEnvelopeDecoder.decode(PkcsPkiEnvelopeDecoder.java:92)
... 67 more
Caused by: org.bouncycastle.operator.OperatorCreationException: cannot create cipher: Cannot find any provider supporting 1.2.840.113549.1.1.7
at org.bouncycastle.operator.jcajce.OperatorHelper.createAsymmetricWrapper(Unknown Source)
at org.bouncycastle.operator.jcajce.JceAsymmetricKeyUnwrapper.generateUnwrappedKey(Unknown Source)
... 74 more
Caused by: java.security.NoSuchAlgorithmException: Cannot find any provider supporting 1.2.840.113549.1.1.7
at javax.crypto.Cipher.getInstance(Unknown Source)
at org.bouncycastle.jcajce.util.DefaultJcaJceHelper.createCipher(Unknown Source)
... 76 more

@cubicrace
Copy link

We need this for the Microsoft Intune SCEP flow

@dghgit
Copy link
Contributor

dghgit commented May 18, 2021

Unfortunately this patch would almost completely break the use of OAEP in the CMS library (evidently it would work for the case specified). I think there's a way out of this though. If I understand correctly the system only recognizes the full name. Can you tell me what other OAEP algorithms the system can handle, or is it just one.

@jensthomassen
Copy link
Author

jensthomassen commented May 18, 2021 via email

@dghgit
Copy link
Contributor

dghgit commented May 18, 2021

OAEP also has an algorithm parameters block in the AlgorithmIdentifier - RSA/ECB/OAEPWithSHA-1AndMGF1Padding is what you would call the default setting. The question was more about what does the provider being used had available in it? Or are you saying you are using the BC provider?

@cubicrace
Copy link

https://docs.oracle.com/javase/7/docs/api/javax/crypto/Cipher.html

The above link lists all the possible ciphers that every java platform must implement.
We are interested in these 3:
RSA/ECB/PKCS1Padding (1024, 2048)
RSA/ECB/OAEPWithSHA-1AndMGF1Padding (1024, 2048) - OID mapping missing in BC based on the current PR
RSA/ECB/OAEPWithSHA-256AndMGF1Padding (1024, 2048) - OID mapping missing in BC based on the current PR

@jensthomassen
Copy link
Author

jensthomassen commented May 18, 2021 via email

@dghgit
Copy link
Contributor

dghgit commented May 18, 2021

I'll look into it - it'll need to map to the algorithm name based on the parameters though the OID is for OAEP, not for OAEP with SHA1 or SHA256, so what's required is to recognise the oid explicitly and then generate an algorithm name from the combination of the OID and the parameters block.

@adams-y-chen
Copy link

adams-y-chen commented Nov 15, 2022

@dghgit @cubicrace @jensthomassen

I also need this for my project. My Java application throws similar exception when unwrapping PKCS7 CMS envelope created by ASP.NET.

I don't have the answer for the algorithm naming yet. But I find this OID to name mapping in AllTests.java.

        assertEquals(nameFinder.getAlgorithmName(PKCSObjectIdentifiers.id_RSAES_OAEP), "RSAOAEP");

So we might need this mapping in PR

        asymmetricWrapperAlgNames.put(PKCSObjectIdentifiers.id_RSAES_OAEP, "RSAOAEP");

instead of

        asymmetricWrapperAlgNames.put(PKCSObjectIdentifiers.id_RSAES_OAEP, "RSA/ECB/OAEPWithSHA-1AndMGF1Padding");

Any thought on that?

ASP.NET PKCS7 CMS code link for reference:
https://referencesource.microsoft.com/#System.Security/system/security/cryptography/pkcs/envelopedpkcs7.cs

@adams-y-chen
Copy link

adams-y-chen commented Nov 19, 2022

I have tested and can confirm "RSA/ECB/OAEPWithSHA-1AndMGF1Padding" is the right name. I'm able to unwrap PKCS7 CMS envelope created using ASP .NET.

@dghgit
Copy link
Contributor

dghgit commented Nov 19, 2022

Can you send me an example which we can try and work with?

@dghgit
Copy link
Contributor

dghgit commented Aug 12, 2025

I finally got a sample message. I believe this is now fixed. It was a bit more complicated than the PR suggested so this was not merged, however the corrected version is now available at https://www.bouncycastle.org/betas and will ship in 1.82.

@dghgit dghgit closed this Aug 12, 2025
hubot pushed a commit that referenced this pull request Aug 13, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants