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%)

diff --git a/src/java.base/share/classes/sun/security/tools/keytool/Main.java b/src/java.base/share/classes/sun/security/tools/keytool/Main.java
index 268911c77..765dfa5a4 100644
--- a/src/java.base/share/classes/sun/security/tools/keytool/Main.java
+++ b/src/java.base/share/classes/sun/security/tools/keytool/Main.java
@@ -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))));
             }
         }
     }
diff --git a/src/java.base/share/classes/sun/security/util/KeyUtil.java b/src/java.base/share/classes/sun/security/util/KeyUtil.java
index f9e92c14c..deb5c0f12 100644
--- a/src/java.base/share/classes/sun/security/util/KeyUtil.java
+++ b/src/java.base/share/classes/sun/security/util/KeyUtil.java
@@ -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>
diff --git a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java
index 44ccf01e9..57c3b3f9c 100644
--- a/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java
+++ b/src/jdk.jartool/share/classes/sun/security/tools/jarsigner/Main.java
@@ -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);
             }
diff --git a/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java b/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java
index 398e3ea2a..1e5eb9680 100644
--- a/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java
+++ b/test/jdk/java/security/KeyAgreement/KeyAgreementTest.java
@@ -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":
diff --git a/test/jdk/java/security/Signature/SignatureGetInstance.java b/test/jdk/java/security/Signature/SignatureGetInstance.java
index 536c3ba67..cd373b6b2 100644
--- a/test/jdk/java/security/Signature/SignatureGetInstance.java
+++ b/test/jdk/java/security/Signature/SignatureGetInstance.java
@@ -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);
 
diff --git a/test/jdk/javax/crypto/KEM/GenLargeNumberOfKeys.java b/test/jdk/javax/crypto/KEM/GenLargeNumberOfKeys.java
index 6bcf4346c..4c9bc28e4 100644
--- a/test/jdk/javax/crypto/KEM/GenLargeNumberOfKeys.java
+++ b/test/jdk/javax/crypto/KEM/GenLargeNumberOfKeys.java
@@ -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 {
diff --git a/test/jdk/javax/crypto/KEM/KemTest.java b/test/jdk/javax/crypto/KEM/KemTest.java
index cc26871d3..c4bdc25d0 100644
--- a/test/jdk/javax/crypto/KEM/KemTest.java
+++ b/test/jdk/javax/crypto/KEM/KemTest.java
@@ -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);
diff --git a/test/jdk/org/openeuler/security/openssl/KAEGcmlvLenTest.java b/test/jdk/org/openeuler/security/openssl/KAEGcmIvLenTest.java
similarity index 100%
rename from test/jdk/org/openeuler/security/openssl/KAEGcmlvLenTest.java
rename to test/jdk/org/openeuler/security/openssl/KAEGcmIvLenTest.java
diff --git a/test/jdk/org/openeuler/security/openssl/KAEUseEngineTest.java b/test/jdk/org/openeuler/security/openssl/KAEUseEngineTest.java
index 8ebb7b7f6..a9d6cf25f 100644
--- a/test/jdk/org/openeuler/security/openssl/KAEUseEngineTest.java
+++ b/test/jdk/org/openeuler/security/openssl/KAEUseEngineTest.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
diff --git a/test/jdk/sun/security/jca/PreferredProviderNegativeTest.java b/test/jdk/sun/security/jca/PreferredProviderNegativeTest.java
index 3b5544ac2..31b3e9072 100644
--- a/test/jdk/sun/security/jca/PreferredProviderNegativeTest.java
+++ b/test/jdk/sun/security/jca/PreferredProviderNegativeTest.java
@@ -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) {
diff --git a/test/jdk/sun/security/provider/all/Deterministic.java b/test/jdk/sun/security/provider/all/Deterministic.java
index 2a2f5d888..63b42169d 100644
--- a/test/jdk/sun/security/provider/all/Deterministic.java
+++ b/test/jdk/sun/security/provider/all/Deterministic.java
@@ -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;
diff --git a/test/jdk/sun/security/util/InternalPrivateKey/Correctness.java b/test/jdk/sun/security/util/InternalPrivateKey/Correctness.java
index eb16c6056..809b50548 100644
--- a/test/jdk/sun/security/util/InternalPrivateKey/Correctness.java
+++ b/test/jdk/sun/security/util/InternalPrivateKey/Correctness.java
@@ -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