ffang commented on code in PR #1645:
URL: https://github.com/apache/cxf/pull/1645#discussion_r1453523233


##########
rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwa/AlgorithmUtils.java:
##########
@@ -65,7 +65,7 @@ public final class AlgorithmUtils {
     public static final String A256GCM_ALGO = "A256GCM";
     // Java
     public static final String AES_GCM_ALGO_JAVA = AES + "/GCM/NoPadding";
-    public static final String AES_CBC_ALGO_JAVA = AES + "/CBC/PKCS7Padding";
+    public static final String AES_CBC_ALGO_JAVA = AES + "/CBC/PKCS5Padding";

Review Comment:
   IIUC, "PKCS7Padding" is only available from BouncyCastle provider, in JDK 
default security provider, we need to use the name "PKCS5Padding" instead, but 
this doesn't mean that JDK default provider doesn't support "PKCS7Padding" 
since AES which is supported by JDK default provider actually requires 
"PKCS7Padding".  So in JDK default security provider, "PKCS5Padding" is a 
legacy name convention which also covers "PKCS7Padding" if I read a few related 
discussions correctly.
   
   For example, this one here
   
https://crypto.stackexchange.com/questions/9043/what-is-the-difference-between-pkcs5-padding-and-pkcs7-padding
   ```
   Many cryptographic libraries use an identifier indicating PKCS#5 or PKCS#7 
to define the same padding 
   mechanism. The identifier should indicate PKCS#7 if block sizes other than 8 
are used within the calculation. 
   Some cryptographic libraries such as the [SUN provider in 
Java](http://docs.oracle.com/javase/7/docs
   /technotes/guides/security/StandardNames.html#Cipher) indicate PKCS#5 where 
PKCS#7 should be used - 
   "PKCS5Padding" should have been "PKCS7Padding". This is - with high 
probability - a legacy from the time 
   that only 8 byte block ciphers such as (triple) DES symmetric cipher were 
available.
   ```
   
   And this one here
   
https://copyprogramming.com/howto/java-security-nosuchalgorithmexception-cannot-find-any-provider-supporting-aes-ecb-pkcs7padding
   ```
    The Sun JCE provider, which is Java's implementation, required a padding 
method for block size of 16 bytes.
    To fulfill this requirement, PKCS#7 specifies a padding method that is 
similar to PKCS#5 padding. The only 
   difference is that PKCS#7 padding is defined for block sizes ranging from 2 
to 255 bytes, which is the 
   maximum value of a byte if it encodes a zero-based unsigned integer. 
However, the padding method was 
   already available with the name "PKCS5Padding" . Instead of introducing a 
new name, the existing name 
   "PKCS5Padding" was utilized.
   
   
   At this point, it is crucial that the Sun provider offers support for 
"PKCS7Padding" since PKCS#5 padding is 
   not appropriate. This is not only a problem for Java Naming issue , but it 
affects all developers who are 
   attempting to implement cryptographic protocols or transfer other software 
to Java. While waiting for the Sun 
   provider to offer support, it is recommended to use "PKCS5Padding" instead 
of "PKCS7Padding" . 
   
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to