RFR: 8297519: Improve expressions and modernise code

ExE Boss duke at openjdk.org
Sun Nov 27 14:40:58 UTC 2022


On Thu, 24 Nov 2022 08:24:37 GMT, Per Minborg <pminborg at openjdk.org> wrote:

> During the work of another PR (https://github.com/openjdk/jdk/pull/11260), several improvement areas were identified. These are now adressed in this separate PR proposing the use of more modern Java constructs as well as simplifying a large number of logical expressions that were previously non-normative. 
> 
> 
> This branch has been tested and passed tier1-4 tests.

These can all be `switch` expressions:

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java line 487:

> 485:                     case "noDb" -> nssDbMode = Secmod.DbMode.NO_DB;
> 486:                     default -> throw excToken("nssDbMode must be one of readWrite, readOnly, and noDb:");
> 487:                 }

Suggestion:

                nssDbMode = switch (mode) {
                    case "readWrite" -> Secmod.DbMode.READ_WRITE;
                    case "readOnly" -> Secmod.DbMode.READ_ONLY;
                    case "noDb" -> Secmod.DbMode.NO_DB;
                    default -> throw excToken("nssDbMode must be one of readWrite, readOnly, and noDb:");
                };

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/Config.java line 1042:

> 1040:             case "halt" -> handleStartupErrors = ERR_HALT;
> 1041:             default -> throw excToken("Invalid value for handleStartupErrors:");
> 1042:         }

Suggestion:

        handleStartupErrors = switch (val) {
            case "ignoreAll" -> ERR_IGNORE_ALL;
            case "ignoreMissingLibrary" -> ERR_IGNORE_LIB;
            case "halt" -> ERR_HALT;
            default -> throw excToken("Invalid value for handleStartupErrors:");
        };

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Cipher.java line 241:

> 239:             default -> throw new NoSuchAlgorithmException("Unsupported mode " + mode);
> 240:         }
> 241:         return result;

Suggestion:

        return switch (mode) {
            case "ECB" -> MODE_ECB;
            case "CBC" -> {
                if (blockSize == 0) {
                    throw new NoSuchAlgorithmException
                            ("CBC mode not supported with stream ciphers");
                }
                yield MODE_CBC;
            }
            case "CTR" -> MODE_CTR;
            default -> throw new NoSuchAlgorithmException("Unsupported mode " + mode);
        };

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11Cipher.java line 373:

> 371:                 // should never happen; checked by Cipher.init()
> 372:                     throw new AssertionError("Unknown mode: " + opmode);
> 373:         }

Suggestion:

        encrypt = switch (opmode) {
            case Cipher.ENCRYPT_MODE -> true;
            case Cipher.DECRYPT_MODE -> false;
            case Cipher.WRAP_MODE, Cipher.UNWRAP_MODE -> throw new UnsupportedOperationException
                    ("Unsupported mode: " + opmode);
            default ->
                // should never happen; checked by Cipher.init()
                    throw new AssertionError("Unknown mode: " + opmode);
        };

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11KeyWrapCipher.java line 756:

> 754:                     throw new AssertionError();
> 755:         }
> 756:         ;

Empty statement:
Suggestion:

src/jdk.crypto.cryptoki/share/classes/sun/security/pkcs11/P11RSACipher.java line 392:

> 390:                 default -> throw new ProviderException("internal error");
> 391:             }
> 392:             return n;

Suggestion:

            return switch (mode) {
                case MODE_ENCRYPT -> p11.C_Encrypt
                        (session.id(), 0, buffer, 0, bufOfs, 0, out, outOfs, outLen);
                case MODE_DECRYPT -> p11.C_Decrypt
                        (session.id(), 0, buffer, 0, bufOfs, 0, out, outOfs, outLen);
                case MODE_SIGN -> {
                    byte[] tmpBuffer = new byte[bufOfs];
                    System.arraycopy(buffer, 0, tmpBuffer, 0, bufOfs);
                    tmpBuffer = p11.C_Sign(session.id(), tmpBuffer);
                    if (tmpBuffer.length > outLen) {
                        throw new BadPaddingException(
                                "Output buffer (" + outLen + ") is too small to " +
                                        "hold the produced data (" + tmpBuffer.length + ")");
                    }
                    System.arraycopy(tmpBuffer, 0, out, outOfs, tmpBuffer.length);
                    yield tmpBuffer.length;
                }
                case MODE_VERIFY -> p11.C_VerifyRecover
                        (session.id(), buffer, 0, bufOfs, out, outOfs, outLen);
                default -> throw new ProviderException("internal error");
            };

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

PR: https://git.openjdk.org/jdk/pull/11348


More information about the security-dev mailing list