Merge branch '2.7.x' into 3.0.x

This commit is contained in:
Phillip Webb
2023-05-12 13:13:58 -07:00
13 changed files with 151 additions and 69 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2012-2020 the original author or authors.
* Copyright 2012-2023 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.

View File

@@ -27,9 +27,7 @@ import java.security.PrivateKey;
import java.security.spec.InvalidKeySpecException;
import java.security.spec.PKCS8EncodedKeySpec;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Base64;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.function.Function;
@@ -66,12 +64,9 @@ final class PrivateKeyParser {
static {
List<PemParser> parsers = new ArrayList<>();
parsers.add(new PemParser(PKCS1_HEADER, PKCS1_FOOTER, Collections.singleton("RSA"),
PrivateKeyParser::createKeySpecForPkcs1));
parsers.add(
new PemParser(EC_HEADER, EC_FOOTER, Collections.singleton("EC"), PrivateKeyParser::createKeySpecForEc));
parsers.add(new PemParser(PKCS8_HEADER, PKCS8_FOOTER, Arrays.asList("RSA", "EC", "DSA", "Ed25519"),
PKCS8EncodedKeySpec::new));
parsers.add(new PemParser(PKCS1_HEADER, PKCS1_FOOTER, PrivateKeyParser::createKeySpecForPkcs1, "RSA"));
parsers.add(new PemParser(EC_HEADER, EC_FOOTER, PrivateKeyParser::createKeySpecForEc, "EC"));
parsers.add(new PemParser(PKCS8_HEADER, PKCS8_FOOTER, PKCS8EncodedKeySpec::new, "RSA", "EC", "DSA", "Ed25519"));
PEM_PARSERS = Collections.unmodifiableList(parsers);
}
@@ -153,12 +148,12 @@ final class PrivateKeyParser {
private final Pattern pattern;
private final Collection<String> algorithms;
private final Function<byte[], PKCS8EncodedKeySpec> keySpecFactory;
PemParser(String header, String footer, Collection<String> algorithms,
Function<byte[], PKCS8EncodedKeySpec> keySpecFactory) {
private final String[] algorithms;
PemParser(String header, String footer, Function<byte[], PKCS8EncodedKeySpec> keySpecFactory,
String... algorithms) {
this.pattern = Pattern.compile(header + BASE64_TEXT + footer, Pattern.CASE_INSENSITIVE);
this.algorithms = algorithms;
this.keySpecFactory = keySpecFactory;
@@ -182,7 +177,7 @@ final class PrivateKeyParser {
try {
return keyFactory.generatePrivate(keySpec);
}
catch (InvalidKeySpecException ignored) {
catch (InvalidKeySpecException ex) {
}
}
return null;