RFR: 8002277: Refactor two PBE classes to simplify maintenance [v2]

Weijun Wang weijun at openjdk.java.net
Mon May 9 14:12:59 UTC 2022


On Thu, 5 May 2022 19:38:06 GMT, Valerie Peng <valeriep at openjdk.org> wrote:

>> This change refactors the PBES2Core and PKCS12PBECipherCore classes in SunJCE provider as requested in the bug record. Functionality should remain the same with a clearer and simplified code/control flow with less lines of code.  This should improve readability and maintenance. I enhanced one existing regression test to test more scenarios. This test would pass before the proposed change and continues to pass with the proposed changes.
>
> Valerie Peng has updated the pull request incrementally with one additional commit since the last revision:
> 
>   update copyright year for PBES2Core.java

Is it possible to rewrite `PKCS12PBECipherCore.java` so that the implementation inside is `CipherCore` instead of `CipherSpi`? I'd rather create a `CipherSpi` child inside this package as the base for all implementations that does nothing more but simply is able to expose all those `engineXYZ` methods to other classes in the same package. Sigh.

src/java.base/share/classes/com/sun/crypto/provider/PBES2Core.java line 229:

> 227:                 if (key instanceof javax.crypto.interfaces.PBEKey pbeKey) {
> 228:                     salt = check(pbeKey.getSalt()); // may be null
> 229:                     iCount = check(pbeKey.getIterationCount()); // may be 0

It seems the return value is never 0.

src/java.base/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java line 183:

> 181:                        "for PBEWithSHA1And" + algo);
> 182:             }
> 183:         }

How about using switch/case or at least put the `if` in same indentation level?

src/java.base/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java line 214:

> 212: 
> 213:     void implInit(int opmode, Key key, AlgorithmParameterSpec params,
> 214:                   SecureRandom random, CipherSpi cipher)

Why rename `cipherImpl` to `cipher`? I think `cipher` is usually a `Cipher` object and `cipherImpl` is a good name for a `CipherSpi` object.

src/java.base/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java line 215:

> 213:     void implInit(int opmode, Key key, AlgorithmParameterSpec params,
> 214:                   SecureRandom random, CipherSpi cipher)
> 215:         throws InvalidKeyException, InvalidAlgorithmParameterException {

Indent the line above.

src/java.base/share/classes/com/sun/crypto/provider/PKCS12PBECipherCore.java line 314:

> 312:                     } else if (cipher instanceof DESedeCipher tripleDes) {
> 313:                         tripleDes.engineInit(opmode, cipherKey, ivSpec, random);
> 314:                     } else {

Can we combine the 2 if above? What else type can it be?

-------------

PR: https://git.openjdk.java.net/jdk/pull/8521



More information about the security-dev mailing list