From ce186aed8e9077c81c5cf11f2b5a3579aa15b0f2 Mon Sep 17 00:00:00 2001
From: XingyuWu <wuxingyu13@huawei.com>
Date: Fri, 16 Jan 2026 16:01:12 +0800
Subject: [PATCH] Fix KAE Provider SM2 code
.../sun/security/tools/keytool/Main.java | 14 +--
.../classes/sun/security/util/KeyUtil.java | 53 ++++++++++
.../sun/security/tools/jarsigner/Main.java | 14 +--
.../KeyAgreement/KeyAgreementTest.java | 11 +--
.../Signature/SignatureGetInstance.java | 6 +-
.../crypto/KEM/GenLargeNumberOfKeys.java | 12 ++-
test/jdk/javax/crypto/KEM/KemTest.java | 98 ++++++++++---------
...GcmlvLenTest.java => KAEGcmIvLenTest.java} | 0
.../security/openssl/KAEUseEngineTest.java | 1 +
.../jca/PreferredProviderNegativeTest.java | 2 +-
.../security/provider/all/Deterministic.java | 4 +
.../util/InternalPrivateKey/Correctness.java | 18 ++--
12 files changed, 145 insertions(+), 88 deletions(-)
rename test/jdk/org/openeuler/security/openssl/{KAEGcmlvLenTest.java => KAEGcmIvLenTest.java} (100%)
@@ -2021,7 +2021,7 @@ public final class Main {
("Generating.keysize.bit.keyAlgName.key.pair.and.a.certificate.sigAlgName.issued.by.signerAlias.with.a.validity.of.validality.days.for"));
source = new Object[]{
groupName == null ? keysize : KeyUtil.getKeySize(privKey),
- KeyUtil.fullDisplayAlgName(privKey),
+ KeyUtil.fullDisplayAlgName(privKey, rb),
newCert.getSigAlgName(),
signerAlias,
validity,
@@ -2031,7 +2031,7 @@ public final class Main {
("Generating.keysize.bit.keyAlgName.key.pair.and.self.signed.certificate.sigAlgName.with.a.validity.of.validality.days.for"));
source = new Object[]{
groupName == null ? keysize : KeyUtil.getKeySize(privKey),
- KeyUtil.fullDisplayAlgName(privKey),
+ KeyUtil.fullDisplayAlgName(privKey, rb),
newCert.getSigAlgName(),
validity,
x500Name};
@@ -3579,7 +3579,7 @@ public final class Main {
private String withWeakConstraint(Key key,
CertPathConstraintsParameters cpcp) {
int kLen = KeyUtil.getKeySize(key);
- String displayAlg = KeyUtil.fullDisplayAlgName(key);
+ String displayAlg = KeyUtil.fullDisplayAlgName(key, rb);
try {
DISABLED_CHECK.permits(key.getAlgorithm(), cpcp, true);
} catch (CertPathValidatorException e) {
@@ -4955,13 +4955,13 @@ public final class Main {
weakWarnings.add(String.format(
rb.getString("whose.key.weak"), label,
String.format(rb.getString("key.bit"),
- KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key))));
+ KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key, rb))));
}
} catch (CertPathValidatorException e) {
weakWarnings.add(String.format(
rb.getString("whose.key.disabled"), label,
String.format(rb.getString("key.bit"),
- KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key))));
+ KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key, rb))));
}
}
}
@@ -4982,12 +4982,12 @@ public final class Main {
weakWarnings.add(String.format(
rb.getString("whose.key.disabled"), label,
String.format(rb.getString("key.bit"),
- KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key))));
+ KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key, rb))));
} else if (!LEGACY_CHECK.permits(SIG_PRIMITIVE_SET, key)) {
weakWarnings.add(String.format(
rb.getString("whose.key.weak"), label,
String.format(rb.getString("key.bit"),
- KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key))));
+ KeyUtil.getKeySize(key), KeyUtil.fullDisplayAlgName(key, rb))));
}
}
}
@@ -25,6 +25,8 @@
package sun.security.util;
+import java.lang.reflect.Field;
+import java.lang.reflect.Array;
import java.math.BigInteger;
import java.security.AlgorithmParameters;
import java.security.InvalidKeyException;
@@ -32,6 +34,7 @@ import java.security.Key;
import java.security.SecureRandom;
import java.security.interfaces.*;
import java.security.spec.*;
+import java.text.MessageFormat;
import java.util.Arrays;
import javax.crypto.SecretKey;
import javax.crypto.interfaces.DHKey;
@@ -197,6 +200,56 @@ public final class KeyUtil {
return result;
}
+ /**
+ * Returns the algorithm name of the given key object. If an EC key is
+ * specified, returns the algorithm name and its named curve.
+ *
+ * @param key the key object, cannot be null
+ * @param rb the resource bundle
+ * @return the algorithm name of the given key object, or return in the
+ * form of "EC (named curve)" if the given key object is an EC key
+ */
+ public static final String fullDisplayAlgName(Key key, java.util.ResourceBundle rb) {
+ String result = key.getAlgorithm();
+ if (key instanceof ECKey) {
+ ECParameterSpec paramSpec = ((ECKey) key).getParams();
+ if (paramSpec instanceof NamedCurve nc) {
+ result += " (" + nc.getNameAndAliases()[0] + ")";
+ } else if (paramSpec.getClass().getSimpleName().equals("KAENamedCurve")) {
+ try {
+ Field na = paramSpec.getClass().getDeclaredField("nameAndAliases");
+ na.setAccessible(true);
+ result += " (" + (String)Array.get(na.get(paramSpec), 0) + ")";
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ MessageFormat form = new MessageFormat(rb.getString
+ ("can.not.get.field"));
+ Object[] source = {"KAENamedCurveException"};
+ System.out.println(form.format(source));
+ }
+ } else if (paramSpec instanceof ECParameterSpec && key.getClass().getSimpleName().equals(
+ "KAEECPrivateKeyImpl")) {
+ if (getKeySize(key) == -1) {
+ result += " (secp256r1)";
+ } else {
+ try {
+ AlgorithmParameters ap = AlgorithmParameters.getInstance("EC");
+ ap.init(new ECKeySizeParameterSpec(getKeySize(key)));
+ // The following line assumes the toString value is "name (oid)"
+ result += " (" + ap.toString().split(" ")[0] + ")";
+ } catch (Exception e) {
+ MessageFormat form = new MessageFormat(rb.getString
+ ("can.not.get.param"));
+ Object[] source = {"KAEECPrivateKeyImplException"};
+ System.out.println(form.format(source));
+ }
+ }
+ }
+ } else if (key instanceof EdECKey) {
+ result = ((EdECKey) key).getParams().getName();
+ }
+ return result;
+ }
+
/**
* Returns whether the key is valid or not.
* <P>
@@ -1249,13 +1249,13 @@ public class Main {
if ((legacyAlg & 8) == 8) {
warnings.add(String.format(
rb.getString("The.1.signing.key.has.a.keysize.of.2.which.is.considered.a.security.risk..This.key.size.will.be.disabled.in.a.future.update."),
- KeyUtil.fullDisplayAlgName(privateKey), KeyUtil.getKeySize(privateKey)));
+ KeyUtil.fullDisplayAlgName(privateKey, rb), KeyUtil.getKeySize(privateKey)));
}
if ((disabledAlg & 8) == 8) {
errors.add(String.format(
rb.getString("The.1.signing.key.has.a.keysize.of.2.which.is.considered.a.security.risk.and.is.disabled."),
- KeyUtil.fullDisplayAlgName(privateKey), KeyUtil.getKeySize(privateKey)));
+ KeyUtil.fullDisplayAlgName(privateKey, rb), KeyUtil.getKeySize(privateKey)));
}
} else {
if ((legacyAlg & 1) != 0) {
@@ -1279,7 +1279,7 @@ public class Main {
if ((legacyAlg & 8) == 8) {
warnings.add(String.format(
rb.getString("The.1.signing.key.has.a.keysize.of.2.which.is.considered.a.security.risk..This.key.size.will.be.disabled.in.a.future.update."),
- KeyUtil.fullDisplayAlgName(weakPublicKey), KeyUtil.getKeySize(weakPublicKey)));
+ KeyUtil.fullDisplayAlgName(weakPublicKey, rb), KeyUtil.getKeySize(weakPublicKey)));
}
}
@@ -1461,7 +1461,7 @@ public class Main {
disabledAlgFound = true;
if (key instanceof ECKey) {
return String.format(rb.getString("key.bit.eccurve.disabled"), kLen,
- KeyUtil.fullDisplayAlgName(key));
+ KeyUtil.fullDisplayAlgName(key, rb));
} else {
return String.format(rb.getString("key.bit.disabled"), kLen);
}
@@ -1478,7 +1478,7 @@ public class Main {
legacyAlg |= 8;
if (key instanceof ECKey) {
return String.format(rb.getString("key.bit.eccurve.weak"), kLen,
- KeyUtil.fullDisplayAlgName(key));
+ KeyUtil.fullDisplayAlgName(key, rb));
} else {
return String.format(rb.getString("key.bit.weak"), kLen);
}
@@ -1536,7 +1536,7 @@ public class Main {
} catch (CertPathValidatorException e) {
if (key instanceof ECKey) {
return String.format(rb.getString("key.bit.eccurve.disabled"), kLen,
- KeyUtil.fullDisplayAlgName(key));
+ KeyUtil.fullDisplayAlgName(key, rb));
} else {
return String.format(rb.getString("key.bit.disabled"), kLen);
}
@@ -1551,7 +1551,7 @@ public class Main {
} catch (CertPathValidatorException e) {
if (key instanceof ECKey) {
return String.format(rb.getString("key.bit.eccurve.weak"), kLen,
- KeyUtil.fullDisplayAlgName(key));
+ KeyUtil.fullDisplayAlgName(key, rb));
} else {
return String.format(rb.getString("key.bit.weak"), kLen);
}
@@ -39,7 +39,6 @@ import java.security.KeyPairGenerator;
import java.security.spec.NamedParameterSpec;
import java.security.spec.AlgorithmParameterSpec;
import java.security.spec.ECGenParameterSpec;
-import java.security.Security;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -54,13 +53,7 @@ public class KeyAgreementTest {
String kpgAlgo = args[1];
String provider = System.getProperty("test.provider.name", args[2]);
System.out.println("Testing " + kaAlgo);
- AlgoSpec aSpec;
- if (Security.getProperty("security.provider.1").equals("KAEProvider") &&
- kaAlgo.equals("ECDH")) {
- aSpec = AlgoSpec.valueOf(AlgoSpec.class, "KAEECDH");
- } else {
- aSpec = AlgoSpec.valueOf(AlgoSpec.class, kaAlgo);
- }
+ AlgoSpec aSpec = AlgoSpec.valueOf(AlgoSpec.class, kaAlgo);
List<AlgorithmParameterSpec> specs = aSpec.getAlgorithmParameterSpecs();
for (AlgorithmParameterSpec spec : specs) {
testKeyAgreement(provider, kaAlgo, kpgAlgo, spec);
@@ -77,7 +70,6 @@ public class KeyAgreementTest {
// "java.base/share/classes/sun/security/util/CurveDB.java"
ECDH("secp256r1", "secp384r1", "secp521r1"),
- KAEECDH("secp224r1", "secp256r1", "secp384r1", "secp521r1"),
XDH("X25519", "X448", "x25519"),
// There is no curve for DiffieHellman
DiffieHellman(new String[]{});
@@ -89,7 +81,6 @@ public class KeyAgreementTest {
for (String crv : curves) {
switch (this.name()) {
case "ECDH":
- case "KAEECDH":
specs.add(new ECGenParameterSpec(crv));
break;
case "XDH":
@@ -55,12 +55,10 @@ public class SignatureGetInstance {
MyPubKey testPub = new MyPubKey();
Provider kaeProvider = Security.getProvider("KAEProvider");
- String expectedProvName = kaeProvider != null ? "KAEProvider" : "SunRsaSign";
-
+ String expectedProvName = kaeProvider != null ? "KAEProvider" : System.getProperty("test.provider.name", "SunRsaSign");
testDblInit(testPriv, testPub, true, "TestProvider");
- testDblInit(kp.getPrivate(), kp.getPublic(), true,
- System.getProperty("test.provider.name", expectedProName));
+ testDblInit(kp.getPrivate(), kp.getPublic(), true, expectedProvName);
testDblInit(testPriv, kp.getPublic(), false, null);
testDblInit(kp.getPrivate(), testPub, false, null);
@@ -49,12 +49,14 @@ public class GenLargeNumberOfKeys {
private static void testAlgo(KEM kem, String algo, String curveId) throws Exception {
KeyPair kp = genKeyPair(algo, curveId);
- KEM.Encapsulator e = kem.newEncapsulator(kp.getPublic());
- KEM.Decapsulator d = kem.newDecapsulator(kp.getPrivate());
- for (int i = 0; i < COUNT; i++) {
- test(e, d);
+ if (!kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) {
+ KEM.Encapsulator e = kem.newEncapsulator(kp.getPublic());
+ KEM.Decapsulator d = kem.newDecapsulator(kp.getPrivate());
+ for (int i = 0; i < COUNT; i++) {
+ test(e, d);
+ }
+ System.out.println(algo + ": test Successful");
}
- System.out.println(algo + ": test Successful");
}
private static KeyPair genKeyPair(String algo, String curveId) throws Exception {
@@ -97,62 +97,64 @@ public class KemTest {
try {
KeyPair kp = keyPair.gen(algo, curveId);
KEM.Encapsulator encT = kem.newEncapsulator(kp.getPublic());
- Asserts.assertEQ(encT.providerName(), PROVIDER);
- KEM.Encapsulated enc = encT.encapsulate();
- KEM.Encapsulated enc1 = encT.encapsulate();
+ if (!kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) {
+ Asserts.assertEQ(encT.providerName(), PROVIDER);
+ KEM.Encapsulated enc = encT.encapsulate();
+ KEM.Encapsulated enc1 = encT.encapsulate();
- KEM kem1 = KEM.getInstance(ALGO, PROVIDER);
- KEM.Encapsulator encT2 = kem1.newEncapsulator(kp.getPublic());
- KEM.Encapsulated enc2 = encT2.encapsulate();
+ KEM kem1 = KEM.getInstance(ALGO, PROVIDER);
+ KEM.Encapsulator encT2 = kem1.newEncapsulator(kp.getPublic());
+ KEM.Encapsulated enc2 = encT2.encapsulate();
- Asserts.assertEQ(enc.key().getEncoded().length, nSecret);
- Asserts.assertEQ(enc.encapsulation().length, nEnc);
+ Asserts.assertEQ(enc.key().getEncoded().length, nSecret);
+ Asserts.assertEQ(enc.encapsulation().length, nEnc);
- Asserts.assertTrue(Arrays.equals(enc.key().getEncoded(), enc.key().getEncoded()));
- Asserts.assertTrue(Arrays.equals(enc.encapsulation(), enc.encapsulation()));
+ Asserts.assertTrue(Arrays.equals(enc.key().getEncoded(), enc.key().getEncoded()));
+ Asserts.assertTrue(Arrays.equals(enc.encapsulation(), enc.encapsulation()));
- Asserts.assertFalse(Arrays.equals(enc.key().getEncoded(), enc1.key().getEncoded()));
- Asserts.assertFalse(Arrays.equals(enc.encapsulation(), enc1.encapsulation()));
+ Asserts.assertFalse(Arrays.equals(enc.key().getEncoded(), enc1.key().getEncoded()));
+ Asserts.assertFalse(Arrays.equals(enc.encapsulation(), enc1.encapsulation()));
- Asserts.assertFalse(Arrays.equals(enc.key().getEncoded(), enc2.key().getEncoded()));
- Asserts.assertFalse(Arrays.equals(enc.encapsulation(), enc2.encapsulation()));
+ Asserts.assertFalse(Arrays.equals(enc.key().getEncoded(), enc2.key().getEncoded()));
+ Asserts.assertFalse(Arrays.equals(enc.encapsulation(), enc2.encapsulation()));
- SecretKey sk = enc.key();
- KEM.Decapsulator decT = kem.newDecapsulator(kp.getPrivate());
- SecretKey dsk = decT.decapsulate(enc.encapsulation());
- Asserts.assertEQ(decT.providerName(), PROVIDER);
- Asserts.assertTrue(Arrays.equals(sk.getEncoded(), dsk.getEncoded()));
- Asserts.assertTrue(Arrays.equals(sk.getEncoded(),
- decT.decapsulate(enc.encapsulation()).getEncoded()));
- Asserts.assertTrue(Arrays.equals(enc.key().getEncoded(),
- decT.decapsulate(enc.encapsulation()).getEncoded()));
+ SecretKey sk = enc.key();
+ KEM.Decapsulator decT = kem.newDecapsulator(kp.getPrivate());
+ SecretKey dsk = decT.decapsulate(enc.encapsulation());
+ Asserts.assertEQ(decT.providerName(), PROVIDER);
+ Asserts.assertTrue(Arrays.equals(sk.getEncoded(), dsk.getEncoded()));
+ Asserts.assertTrue(Arrays.equals(sk.getEncoded(),
+ decT.decapsulate(enc.encapsulation()).getEncoded()));
+ Asserts.assertTrue(Arrays.equals(enc.key().getEncoded(),
+ decT.decapsulate(enc.encapsulation()).getEncoded()));
- Asserts.assertEQ(encT.encapsulationSize(), enc.encapsulation().length);
- Asserts.assertEQ(encT.encapsulationSize(), decT.encapsulationSize());
- Asserts.assertEQ(encT.secretSize(), enc.key().getEncoded().length);
- Asserts.assertEQ(encT.secretSize(), decT.secretSize());
- Asserts.assertEQ(decT.secretSize(), dsk.getEncoded().length);
- Asserts.assertEQ(decT.secretSize(),
- decT.decapsulate(enc.encapsulation()).getEncoded().length);
- Asserts.assertEQ(decT.decapsulate(enc.encapsulation()).getEncoded().length,
- enc.key().getEncoded().length);
+ Asserts.assertEQ(encT.encapsulationSize(), enc.encapsulation().length);
+ Asserts.assertEQ(encT.encapsulationSize(), decT.encapsulationSize());
+ Asserts.assertEQ(encT.secretSize(), enc.key().getEncoded().length);
+ Asserts.assertEQ(encT.secretSize(), decT.secretSize());
+ Asserts.assertEQ(decT.secretSize(), dsk.getEncoded().length);
+ Asserts.assertEQ(decT.secretSize(),
+ decT.decapsulate(enc.encapsulation()).getEncoded().length);
+ Asserts.assertEQ(decT.decapsulate(enc.encapsulation()).getEncoded().length,
+ enc.key().getEncoded().length);
- KEM.Encapsulated enc3 = encT.encapsulate(0, encT.secretSize(), "AES");
- KEM.Decapsulator decT1 = kem.newDecapsulator(kp.getPrivate());
- SecretKey dsk1 = decT1.decapsulate(
- enc3.encapsulation(), 0, decT1.secretSize(), "AES");
- Asserts.assertTrue(Arrays.equals(dsk1.getEncoded(), enc3.key().getEncoded()));
+ KEM.Encapsulated enc3 = encT.encapsulate(0, encT.secretSize(), "AES");
+ KEM.Decapsulator decT1 = kem.newDecapsulator(kp.getPrivate());
+ SecretKey dsk1 = decT1.decapsulate(
+ enc3.encapsulation(), 0, decT1.secretSize(), "AES");
+ Asserts.assertTrue(Arrays.equals(dsk1.getEncoded(), enc3.key().getEncoded()));
- try {
- decT.decapsulate(new byte[enc.encapsulation().length]);
- throw new RuntimeException("Shouldn't reach here");
- } catch (DecapsulateException de) {
- //de.printStackTrace();
- System.out.println("Expected Failure: mismatched encapsulation");
- }
+ try {
+ decT.decapsulate(new byte[enc.encapsulation().length]);
+ throw new RuntimeException("Shouldn't reach here");
+ } catch (DecapsulateException de) {
+ //de.printStackTrace();
+ System.out.println("Expected Failure: mismatched encapsulation");
+ }
- System.out.println("KEM Secret length:" + algo + ":" + curveId
- + ":nSecret:" + nSecret + ":nEnc:" + nEnc);
+ System.out.println("KEM Secret length:" + algo + ":" + curveId
+ + ":nSecret:" + nSecret + ":nEnc:" + nEnc);
+ }
} catch (Exception e) {
throw new RuntimeException(e);
}
@@ -190,6 +192,7 @@ public class KemTest {
private static void testParallelEncapsulator(KEM kem, String algo, String curveId)
throws Exception {
KeyPair kp = keyPair.gen(algo, curveId);
+ if (kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) { return; }
ExecutorService executor = null;
try {
executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
@@ -225,6 +228,7 @@ public class KemTest {
private static void testParallelEncapsulate(KEM kem, String algo, String curveId)
throws Exception {
KeyPair kp = keyPair.gen(algo, curveId);
+ if (kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) { return; }
ExecutorService executor = null;
try {
executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
@@ -258,6 +262,7 @@ public class KemTest {
private static void testParallelDecapsulator(KEM kem, String algo, String curveId)
throws Exception {
KeyPair kp = keyPair.gen(algo, curveId);
+ if (kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) { return; }
ExecutorService executor = null;
try {
executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
@@ -291,6 +296,7 @@ public class KemTest {
private static void testParallelDecapsulate(KEM kem, String algo, String curveId)
throws Exception {
KeyPair kp = keyPair.gen(algo, curveId);
+ if (kp.getPrivate().getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) { return; }
ExecutorService executor = null;
try {
executor = Executors.newFixedThreadPool(THREAD_POOL_SIZE);
similarity index 100%
rename from test/jdk/org/openeuler/security/openssl/KAEGcmlvLenTest.java
rename to test/jdk/org/openeuler/security/openssl/KAEGcmIvLenTest.java
@@ -55,6 +55,7 @@ import java.util.Map;
* @run main/othervm -Dkae.log=true -Dkae.ec.useKaeEngine=true KAEUseEngineTest
* @run main/othervm -Dkae.log=true -Dkae.sm2.useKaeEngine=true KAEUseEngineTest
* @run main/othervm -Dkae.log=true -Dall.test=disable -Dkae.digest.useKaeEngine=false -Dkae.aes.useKaeEngine=false -Dkae.sm4.useKaeEngine=false -Dkae.hmac.useKaeEngine=false -Dkae.rsa.useKaeEngine=false -Dkae.dh.useKaeEngine=false -Dkae.ec.useKaeEngine=false -Dkae.sm2.useKaeEngine=true KAEUseEngineTest
+ * @run main/othervm -Dkae.log=true -Dall.test=default -Dkae.engine.id=uadk_engine -Dkae.libcrypto.useGlobalMode=true KAEUseEngineTest
* @run main/othervm -Dkae.log=true -Dkae.engine.id=uadk_engine -Dkae.libcrypto.useGlobalMode=true -Dkae.digest.useKaeEngine=true KAEUseEngineTest
* @run main/othervm -Dkae.log=true -Dkae.engine.id=uadk_engine -Dkae.libcrypto.useGlobalMode=true -Dkae.aes.useKaeEngine=true KAEUseEngineTest
* @run main/othervm -Dkae.log=true -Dkae.engine.id=uadk_engine -Dkae.libcrypto.useGlobalMode=true -Dkae.sm4.useKaeEngine=true KAEUseEngineTest
@@ -111,7 +111,7 @@ public class PreferredProviderNegativeTest {
if (Security.getProperty("security.provider.1").equals("org.openeuler.security.openssl.KAEProvider")) {
expected = "KAEProvider";
} else {
- expected = "SunJCE";
+ expected = System.getProperty("test.provider.name", "SunJCE");
}
if (args.length >= 2) {
@@ -62,6 +62,10 @@ public class Deterministic {
for (var p : Security.getProviders()) {
var name = p.getName();
+ if (name.equals("KAEProvider")) {
+ System.out.println("Skip testcase if using KAEProvider");
+ break;
+ }
if (name.equals("SunMSCAPI") || name.startsWith("SunPKCS11")) {
System.out.println("Skipped native provider " + name);
continue;
@@ -51,14 +51,16 @@ public class Correctness {
PublicKey p1 = kp.getPublic();
PrivateKey s1 = kp.getPrivate();
- if (s1 instanceof InternalPrivateKey ipk) {
- PublicKey p2 = ipk.calculatePublicKey();
- Asserts.assertTrue(Arrays.equals(p2.getEncoded(), p1.getEncoded()));
- Asserts.assertEQ(p2.getAlgorithm(), p1.getAlgorithm());
- Asserts.assertEQ(p2.getFormat(), p1.getFormat());
- } else {
- throw new RuntimeException("Not an InternalPrivateKey: "
- + s1.getClass());
+ if (!s1.getClass().getSimpleName().equals("KAEECPrivateKeyImpl")) {
+ if (s1 instanceof InternalPrivateKey ipk) {
+ PublicKey p2 = ipk.calculatePublicKey();
+ Asserts.assertTrue(Arrays.equals(p2.getEncoded(), p1.getEncoded()));
+ Asserts.assertEQ(p2.getAlgorithm(), p1.getAlgorithm());
+ Asserts.assertEQ(p2.getFormat(), p1.getFormat());
+ } else {
+ throw new RuntimeException("Not an InternalPrivateKey: "
+ + s1.getClass());
+ }
}
}
}
--
2.34.1