aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWeijun Wang <weijun@openjdk.org>2019-12-25 07:17:25 +0800
committerWeijun Wang <weijun@openjdk.org>2019-12-25 07:17:25 +0800
commite7a07ea2f3dcc45b276bc55583aff11a7d005eea (patch)
treece6adc3ba3f8b9863849d8e2a64664e62c5e2cd4
parent45e4c4c4dc6677ce6724bad3bd6ee032558a8b47 (diff)
downloadlibcore-jdk21u/jdk-14+30.tar.gz
8236470: Deal with ECDSA using ecdsa-with-SHA2 plus hash algorithm as AlgorithmIdjdk21u/jdk-14+30jdk17u/jdk-14+30jdk/jdk-14+30
Reviewed-by: xuelei
-rw-r--r--src/java.base/share/classes/sun/security/x509/AlgorithmId.java15
-rw-r--r--test/jdk/sun/security/pkcs11/PKCS11Test.java8
2 files changed, 16 insertions, 7 deletions
diff --git a/src/java.base/share/classes/sun/security/x509/AlgorithmId.java b/src/java.base/share/classes/sun/security/x509/AlgorithmId.java
index d502b118263..06c905a9d05 100644
--- a/src/java.base/share/classes/sun/security/x509/AlgorithmId.java
+++ b/src/java.base/share/classes/sun/security/x509/AlgorithmId.java
@@ -239,6 +239,9 @@ public class AlgorithmId implements Serializable, DerEncoder {
* return a name such as "MD5withRSA" for a signature algorithm on
* some systems. It also returns names like "OID.1.2.3.4", when
* no particular name for the algorithm is known.
+ *
+ * Note: for ecdsa-with-SHA2 plus hash algorithm (Ex: SHA-256), this method
+ * returns the "full" signature algorithm (Ex: SHA256withECDSA) directly.
*/
public String getName() {
String algName = nameTable.get(algid);
@@ -248,7 +251,7 @@ public class AlgorithmId implements Serializable, DerEncoder {
if ((params != null) && algid.equals((Object)specifiedWithECDSA_oid)) {
try {
AlgorithmId paramsId =
- AlgorithmId.parse(new DerValue(getEncodedParams()));
+ AlgorithmId.parse(new DerValue(params.toByteArray()));
String paramsName = paramsId.getName();
algName = makeSigAlg(paramsName, "EC");
} catch (IOException e) {
@@ -264,12 +267,18 @@ public class AlgorithmId implements Serializable, DerEncoder {
/**
* Returns the DER encoded parameter, which can then be
- * used to initialize java.security.AlgorithmParamters.
+ * used to initialize java.security.AlgorithmParameters.
+ *
+ * Note: for ecdsa-with-SHA2 plus hash algorithm (Ex: SHA-256), this method
+ * returns null because {@link #getName()} has already returned the "full"
+ * signature algorithm (Ex: SHA256withECDSA).
*
* @return DER encoded parameters, or null not present.
*/
public byte[] getEncodedParams() throws IOException {
- return (params == null) ? null : params.toByteArray();
+ return (params == null || algid.equals(specifiedWithECDSA_oid))
+ ? null
+ : params.toByteArray();
}
/**
diff --git a/test/jdk/sun/security/pkcs11/PKCS11Test.java b/test/jdk/sun/security/pkcs11/PKCS11Test.java
index fefc263a91b..7a70e38e0cb 100644
--- a/test/jdk/sun/security/pkcs11/PKCS11Test.java
+++ b/test/jdk/sun/security/pkcs11/PKCS11Test.java
@@ -83,11 +83,11 @@ public abstract class PKCS11Test {
static {
// hack
String absBase = new File(BASE).getAbsolutePath();
- int k = absBase.indexOf(SEP + "test" + SEP + "sun" + SEP);
+ int k = absBase.indexOf(SEP + "test" + SEP + "jdk" + SEP);
if (k < 0) k = 0;
- String p1 = absBase.substring(0, k + 6);
- String p2 = absBase.substring(k + 5);
- CLOSED_BASE = p1 + "closed" + p2;
+ String p1 = absBase.substring(0, k);
+ String p2 = absBase.substring(k);
+ CLOSED_BASE = p1 + "/../closed" + p2;
// set it as a system property to make it available in policy file
System.setProperty("closed.base", CLOSED_BASE);