577 lines
25 KiB
Diff
577 lines
25 KiB
Diff
|
|
diff --git a/jdk/make/CopyFiles.gmk b/jdk/make/CopyFiles.gmk
|
||
|
|
index ad8db6e5..10d37b9e 100644
|
||
|
|
--- a/jdk/make/CopyFiles.gmk
|
||
|
|
+++ b/jdk/make/CopyFiles.gmk
|
||
|
|
@@ -609,14 +609,16 @@ endif
|
||
|
|
|
||
|
|
##########################################################################################
|
||
|
|
|
||
|
|
-ifeq ($(OPENJDK_TARGET_CPU_ARCH), aarch64)
|
||
|
|
+ifeq ($(ENABLE_KAE), true)
|
||
|
|
+ ifeq ($(OPENJDK_TARGET_CPU_ARCH), aarch64)
|
||
|
|
|
||
|
|
- KAE_CONF_PATH= $(JDK_OUTPUTDIR)/lib/ext
|
||
|
|
- $(KAE_CONF_PATH)/kaeprovider.conf: $(JDK_TOPDIR)/src/share/lib/security/kaeprovider.conf
|
||
|
|
+ KAE_CONF_PATH= $(JDK_OUTPUTDIR)/lib/ext
|
||
|
|
+ $(KAE_CONF_PATH)/kaeprovider.conf: $(JDK_TOPDIR)/src/share/lib/security/kaeprovider.conf
|
||
|
|
$(call install-file)
|
||
|
|
|
||
|
|
- COPY_FILES += $(KAE_CONF_PATH)/kaeprovider.conf
|
||
|
|
+ COPY_FILES += $(KAE_CONF_PATH)/kaeprovider.conf
|
||
|
|
|
||
|
|
+ endif
|
||
|
|
endif
|
||
|
|
|
||
|
|
##########################################################################################
|
||
|
|
diff --git a/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEECDHKeyAgreement.java b/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEECDHKeyAgreement.java
|
||
|
|
index ac05e6d5..7a9cc5cc 100644
|
||
|
|
--- a/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEECDHKeyAgreement.java
|
||
|
|
+++ b/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEECDHKeyAgreement.java
|
||
|
|
@@ -97,7 +97,7 @@ public class KAEECDHKeyAgreement extends KeyAgreementSpi {
|
||
|
|
|
||
|
|
curveName = KAEUtils.getCurveBySize(keyLenBits);
|
||
|
|
if (curveName == null) {
|
||
|
|
- throw new InvalidParameterException("unknown keyLenBits" + keyLenBits);
|
||
|
|
+ throw new InvalidParameterException("unknown keyLenBits " + keyLenBits);
|
||
|
|
}
|
||
|
|
if (KAEUtils.getCurveByAlias(curveName) != null) {
|
||
|
|
curveName = KAEUtils.getCurveByAlias(curveName);
|
||
|
|
diff --git a/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEProvider.java b/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEProvider.java
|
||
|
|
index 83ed8649..8ba70200 100644
|
||
|
|
--- a/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEProvider.java
|
||
|
|
+++ b/jdk/src/solaris/classes/org/openeuler/security/openssl/KAEProvider.java
|
||
|
|
@@ -104,6 +104,8 @@ public class KAEProvider extends Provider {
|
||
|
|
if (needLog && "true".equalsIgnoreCase(props.getProperty("kae.log"))) {
|
||
|
|
logStart(excp);
|
||
|
|
needLog = false; // Log only once
|
||
|
|
+ } else {
|
||
|
|
+ KAEProvider.excp = null; // Ignore exception.
|
||
|
|
}
|
||
|
|
if (!"false".equalsIgnoreCase(props.getProperty("kae.md5"))) {
|
||
|
|
putMD5();
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_cipher_rsa.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_cipher_rsa.c
|
||
|
|
index d1aedf5f..bad16fb7 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_cipher_rsa.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_cipher_rsa.c
|
||
|
|
@@ -47,7 +47,7 @@ static int RSACryptNotOAEPPadding(JNIEnv* env, jlong keyAddress, jint inLen, jby
|
||
|
|
int resultSize = 0;
|
||
|
|
|
||
|
|
// get RSA
|
||
|
|
- EVP_PKEY* pkey = (EVP_PKEY*)keyAddress;
|
||
|
|
+ EVP_PKEY* pkey = (EVP_PKEY*) keyAddress;
|
||
|
|
|
||
|
|
// rsa = pkey->rsa
|
||
|
|
RSA* rsa = EVP_PKEY_get1_RSA(pkey);
|
||
|
|
@@ -198,8 +198,8 @@ static int RSACryptOAEPPadding(JNIEnv* env, jlong keyAddress, jint inLen, jbyteA
|
||
|
|
* set rsa mgf1 md
|
||
|
|
* set rsa oaep md
|
||
|
|
*/
|
||
|
|
- if(!SetRSAPadding(env, pkeyCtx, paddingType) || !SetRSAMgf1Md(env, pkeyCtx, mgf1MdAlgoUTF) ||
|
||
|
|
- !SetRSAOaepMd(env, pkeyCtx, oaepMdAlgoUTF)) {
|
||
|
|
+ if (!SetRSAPadding(env, pkeyCtx, paddingType) || !SetRSAMgf1Md(env, pkeyCtx, mgf1MdAlgoUTF) ||
|
||
|
|
+ !SetRSAOaepMd(env, pkeyCtx, oaepMdAlgoUTF)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -213,7 +213,7 @@ static int RSACryptOAEPPadding(JNIEnv* env, jlong keyAddress, jint inLen, jbyteA
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
(*env)->GetByteArrayRegion(env, label, 0, labelSize, labelBytes);
|
||
|
|
- if(!SetRSAOaepLabel(env, pkeyCtx, labelBytes, labelSize)) {
|
||
|
|
+ if (!SetRSAOaepLabel(env, pkeyCtx, labelBytes, labelSize)) {
|
||
|
|
free(labelBytes);
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
@@ -434,7 +434,7 @@ JNIEXPORT jint JNICALL Java_org_openeuler_security_openssl_KAERSACipher_nativeRS
|
||
|
|
*/
|
||
|
|
JNIEXPORT jint JNICALL Java_org_openeuler_security_openssl_KAERSACipher_nativeRSAEncryptOAEPPadding(JNIEnv* env,
|
||
|
|
jclass cls, jlong keyAddress, jint inLen, jbyteArray in, jbyteArray out,
|
||
|
|
- jint paddingType,jstring oaepMdAlgo, jstring mgf1MdAlgo, jbyteArray label) {
|
||
|
|
+ jint paddingType, jstring oaepMdAlgo, jstring mgf1MdAlgo, jbyteArray label) {
|
||
|
|
return RSACryptOAEPPadding(env, keyAddress, inLen, in, out, paddingType, oaepMdAlgo, mgf1MdAlgo, label,
|
||
|
|
EVP_PKEY_encrypt_init, "EVP_PKEY_encrypt_init",
|
||
|
|
EVP_PKEY_encrypt, "EVP_PKEY_encrypt");
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_exception.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_exception.c
|
||
|
|
index 1d1736f5..9ccc617c 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_exception.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_exception.c
|
||
|
|
@@ -23,7 +23,6 @@
|
||
|
|
|
||
|
|
#include <openssl/evp.h>
|
||
|
|
#include <openssl/err.h>
|
||
|
|
-#include "kae_util.h"
|
||
|
|
#include "kae_log.h"
|
||
|
|
#include "kae_exception.h"
|
||
|
|
|
||
|
|
@@ -58,6 +57,8 @@ void KAE_ThrowEvpException(JNIEnv* env, int reason, const char* msg, void (* def
|
||
|
|
case EVP_R_BAD_DECRYPT:
|
||
|
|
case EVP_R_DATA_NOT_MULTIPLE_OF_BLOCK_LENGTH:
|
||
|
|
case EVP_F_EVP_PKEY_DECRYPT:
|
||
|
|
+ case EVP_R_PUBLIC_KEY_NOT_RSA:
|
||
|
|
+ case EVP_R_CTRL_NOT_IMPLEMENTED:
|
||
|
|
KAE_ThrowByName(env, "javax/crypto/BadPaddingException", msg);
|
||
|
|
break;
|
||
|
|
default:
|
||
|
|
@@ -128,4 +129,4 @@ void KAE_ThrowSignatureException(JNIEnv* env, const char* msg) {
|
||
|
|
|
||
|
|
void KAE_ThrowClassNotFoundException(JNIEnv* env, const char* msg) {
|
||
|
|
KAE_ThrowByName(env, "java/lang/ClassNotFoundException", msg);
|
||
|
|
-}
|
||
|
|
\ No newline at end of file
|
||
|
|
+}
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keyagreement_dh.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keyagreement_dh.c
|
||
|
|
index 26ce9a8e..b1c27241 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keyagreement_dh.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keyagreement_dh.c
|
||
|
|
@@ -112,7 +112,7 @@ JNIEXPORT jbyteArray JNICALL Java_org_openeuler_security_openssl_KAEDHKeyAgreeme
|
||
|
|
|
||
|
|
BN_bin2bn(secret, computekeyLength, computeKeyRetBn);
|
||
|
|
|
||
|
|
- retByteArray = KAE_GetByteArrayFromBigNum(env, computeKeyRetBn, NULL);
|
||
|
|
+ retByteArray = KAE_GetByteArrayFromBigNum(env, computeKeyRetBn);
|
||
|
|
if (retByteArray == NULL) {
|
||
|
|
KAE_ThrowRuntimeException(env, "GetByteArrayFromBigNum failed in nativeComputeKey.");
|
||
|
|
goto cleanup;
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_dh.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_dh.c
|
||
|
|
index 808a2626..54dc07ed 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_dh.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_dh.c
|
||
|
|
@@ -97,13 +97,13 @@ JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAEDHKeyPairG
|
||
|
|
pri_key_bn = DH_get0_priv_key(dh);
|
||
|
|
pub_key_bn = DH_get0_pub_key(dh);
|
||
|
|
|
||
|
|
- pub_key = KAE_GetByteArrayFromBigNum(env, pub_key_bn, NULL);
|
||
|
|
+ pub_key = KAE_GetByteArrayFromBigNum(env, pub_key_bn);
|
||
|
|
if (pub_key == NULL) {
|
||
|
|
KAE_ThrowOOMException(env, "PublicKey allocate failed in nativeGenerateKeyPair.");
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
- pri_key = KAE_GetByteArrayFromBigNum(env, pri_key_bn, NULL);
|
||
|
|
+ pri_key = KAE_GetByteArrayFromBigNum(env, pri_key_bn);
|
||
|
|
if (pri_key == NULL) {
|
||
|
|
KAE_ThrowRuntimeException(env, "GetByteArrayFromBigNum failed in nativeGenerateKeyPair.");
|
||
|
|
goto cleanup;
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_ec.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_ec.c
|
||
|
|
index 0f32674c..fbd16841 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_ec.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_ec.c
|
||
|
|
@@ -43,7 +43,12 @@ typedef enum ECDHParamIndex {
|
||
|
|
ecdhCofactor
|
||
|
|
} ECDHParamIndex;
|
||
|
|
|
||
|
|
-static const char* ecdhParamNames[] = {"p", "a", "b", "x", "y", "order", "cofactor"};
|
||
|
|
+// ECDH Key index.
|
||
|
|
+typedef enum ECDHKeyIndex {
|
||
|
|
+ ecdhWX = 0,
|
||
|
|
+ ecdhWY,
|
||
|
|
+ ecdhS
|
||
|
|
+} ECDHKeyIndex;
|
||
|
|
|
||
|
|
static void FreeECDHCurveParam(JNIEnv* env, BIGNUM* p, BIGNUM* a, BIGNUM* b, jbyteArray paramP,
|
||
|
|
jbyteArray paramA, jbyteArray paramB)
|
||
|
|
@@ -69,7 +74,7 @@ static void FreeECDHCurveParam(JNIEnv* env, BIGNUM* p, BIGNUM* a, BIGNUM* b, jby
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set p, a, b in group to params.
|
||
|
|
-static bool SetECDHCurve(JNIEnv* env, EC_GROUP* group, jobjectArray params, ECDHParamIndex ecdhParamIndex)
|
||
|
|
+static bool SetECDHCurve(JNIEnv* env, EC_GROUP* group, jobjectArray params)
|
||
|
|
{
|
||
|
|
BIGNUM* p = NULL;
|
||
|
|
BIGNUM* a = NULL;
|
||
|
|
@@ -86,25 +91,22 @@ static bool SetECDHCurve(JNIEnv* env, EC_GROUP* group, jobjectArray params, ECDH
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set p.
|
||
|
|
- const char* ecdhParamName = ecdhParamNames[ecdhParamIndex];
|
||
|
|
- if ((paramP = KAE_GetByteArrayFromBigNum(env, p, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramP = KAE_GetByteArrayFromBigNum(env, p)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramP);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhP, paramP);
|
||
|
|
|
||
|
|
// Set a.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhParamIndex];
|
||
|
|
- if ((paramA = KAE_GetByteArrayFromBigNum(env, a, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramA = KAE_GetByteArrayFromBigNum(env, a)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramA);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhA, paramA);
|
||
|
|
|
||
|
|
// Set b.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhParamIndex];
|
||
|
|
- if ((paramB = KAE_GetByteArrayFromBigNum(env, b, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramB = KAE_GetByteArrayFromBigNum(env, b)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramB);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhB, paramB);
|
||
|
|
FreeECDHCurveParam(env, p, a, b, paramP, paramA, paramB);
|
||
|
|
return true;
|
||
|
|
|
||
|
|
@@ -114,7 +116,7 @@ cleanup:
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set generator(x, y) in group to params.
|
||
|
|
-static bool SetECDHPoint(JNIEnv* env, EC_GROUP* group, jobjectArray params, ECDHParamIndex ecdhParamIndex)
|
||
|
|
+static bool SetECDHPoint(JNIEnv* env, EC_GROUP* group, jobjectArray params)
|
||
|
|
{
|
||
|
|
BIGNUM* x = NULL;
|
||
|
|
BIGNUM* y = NULL;
|
||
|
|
@@ -135,18 +137,16 @@ static bool SetECDHPoint(JNIEnv* env, EC_GROUP* group, jobjectArray params, ECDH
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set x.
|
||
|
|
- const char* ecdhParamName = ecdhParamNames[ecdhParamIndex];
|
||
|
|
- if ((paramX = KAE_GetByteArrayFromBigNum(env, x, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramX = KAE_GetByteArrayFromBigNum(env, x)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramX);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhX, paramX);
|
||
|
|
|
||
|
|
// Set y.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhParamIndex];
|
||
|
|
- if ((paramY = KAE_GetByteArrayFromBigNum(env, y, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramY = KAE_GetByteArrayFromBigNum(env, y)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramY);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhY, paramY);
|
||
|
|
BN_free(x);
|
||
|
|
BN_free(y);
|
||
|
|
(*env)->DeleteLocalRef(env, paramX);
|
||
|
|
@@ -170,7 +170,7 @@ cleanup:
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set order, cofactor in group to params.
|
||
|
|
-static bool SetECDHOrderAndCofactor(JNIEnv* env, EC_GROUP* group, jobjectArray params, ECDHParamIndex ecdhParamIndex)
|
||
|
|
+static bool SetECDHOrderAndCofactor(JNIEnv* env, EC_GROUP* group, jobjectArray params)
|
||
|
|
{
|
||
|
|
BIGNUM* order = NULL;
|
||
|
|
BIGNUM* cofactor = NULL;
|
||
|
|
@@ -184,21 +184,19 @@ static bool SetECDHOrderAndCofactor(JNIEnv* env, EC_GROUP* group, jobjectArray p
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set order.
|
||
|
|
- const char* ecdhParamName = ecdhParamNames[ecdhParamIndex];
|
||
|
|
- if ((paramOrder = KAE_GetByteArrayFromBigNum(env, order, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramOrder = KAE_GetByteArrayFromBigNum(env, order)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramOrder);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhOrder, paramOrder);
|
||
|
|
if (!EC_GROUP_get_cofactor(group, cofactor, NULL)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set cofactor.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhParamIndex];
|
||
|
|
- if ((paramCofactor = KAE_GetByteArrayFromBigNum(env, cofactor, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((paramCofactor = KAE_GetByteArrayFromBigNum(env, cofactor)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhParamIndex, paramCofactor);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhCofactor, paramCofactor);
|
||
|
|
BN_free(order);
|
||
|
|
BN_free(cofactor);
|
||
|
|
(*env)->DeleteLocalRef(env, paramOrder);
|
||
|
|
@@ -222,7 +220,7 @@ cleanup:
|
||
|
|
}
|
||
|
|
|
||
|
|
static void FreeECDHKeyParam(JNIEnv* env,
|
||
|
|
- BIGNUM* wX, BIGNUM* wY, jbyteArray paramWX, jbyteArray paramWY, jbyteArray paramS)
|
||
|
|
+ BIGNUM* wX, BIGNUM* wY, jbyteArray keyWX, jbyteArray keyWY, jbyteArray keyS)
|
||
|
|
{
|
||
|
|
if (wX != NULL) {
|
||
|
|
BN_free(wX);
|
||
|
|
@@ -230,28 +228,28 @@ static void FreeECDHKeyParam(JNIEnv* env,
|
||
|
|
if (wY != NULL) {
|
||
|
|
BN_free(wY);
|
||
|
|
}
|
||
|
|
- if (paramWX != NULL) {
|
||
|
|
- (*env)->DeleteLocalRef(env, paramWX);
|
||
|
|
+ if (keyWX != NULL) {
|
||
|
|
+ (*env)->DeleteLocalRef(env, keyWX);
|
||
|
|
}
|
||
|
|
- if (paramWY != NULL) {
|
||
|
|
- (*env)->DeleteLocalRef(env, paramWY);
|
||
|
|
+ if (keyWY != NULL) {
|
||
|
|
+ (*env)->DeleteLocalRef(env, keyWY);
|
||
|
|
}
|
||
|
|
- if (paramS != NULL) {
|
||
|
|
- (*env)->DeleteLocalRef(env, paramS);
|
||
|
|
+ if (keyS != NULL) {
|
||
|
|
+ (*env)->DeleteLocalRef(env, keyS);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set publicKey(wX, wY) and privateKey(s) in eckey to params.
|
||
|
|
static bool SetECDHKey(JNIEnv* env, const EC_GROUP* group, jobjectArray params,
|
||
|
|
- ECDHParamIndex ecdhKeyIndex, const EC_KEY* eckey)
|
||
|
|
+ const EC_KEY* eckey)
|
||
|
|
{
|
||
|
|
BIGNUM* wX = NULL;
|
||
|
|
BIGNUM* wY = NULL;
|
||
|
|
const EC_POINT* pub = NULL;
|
||
|
|
const BIGNUM* s = NULL;
|
||
|
|
- jbyteArray paramWX = NULL;
|
||
|
|
- jbyteArray paramWY = NULL;
|
||
|
|
- jbyteArray paramS = NULL;
|
||
|
|
+ jbyteArray keyWX = NULL;
|
||
|
|
+ jbyteArray keyWY = NULL;
|
||
|
|
+ jbyteArray keyS = NULL;
|
||
|
|
if ((wX = BN_new()) == NULL || (wY = BN_new()) == NULL) {
|
||
|
|
KAE_ThrowOOMException(env, "failed to allocate array");
|
||
|
|
goto cleanup;
|
||
|
|
@@ -266,53 +264,47 @@ static bool SetECDHKey(JNIEnv* env, const EC_GROUP* group, jobjectArray params,
|
||
|
|
}
|
||
|
|
|
||
|
|
// Set wX.
|
||
|
|
- const char* ecdhParamName = ecdhParamNames[ecdhKeyIndex];
|
||
|
|
- if ((paramWX = KAE_GetByteArrayFromBigNum(env, wX, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((keyWX = KAE_GetByteArrayFromBigNum(env, wX)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhKeyIndex, paramWX);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhWX, keyWX);
|
||
|
|
|
||
|
|
// Set wY.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhKeyIndex];
|
||
|
|
- if ((paramWY = KAE_GetByteArrayFromBigNum(env, wY, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((keyWY = KAE_GetByteArrayFromBigNum(env, wY)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhKeyIndex, paramWY);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhWY, keyWY);
|
||
|
|
|
||
|
|
// Set s.
|
||
|
|
- ecdhParamName = ecdhParamNames[++ecdhKeyIndex];
|
||
|
|
- if ((paramS = KAE_GetByteArrayFromBigNum(env, s, ecdhParamName)) == NULL) {
|
||
|
|
+ if ((keyS = KAE_GetByteArrayFromBigNum(env, s)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- (*env)->SetObjectArrayElement(env, params, ecdhKeyIndex, paramS);
|
||
|
|
- FreeECDHKeyParam(env, wX, wY, paramWX, paramWY, paramS);
|
||
|
|
+ (*env)->SetObjectArrayElement(env, params, ecdhS, keyS);
|
||
|
|
+ FreeECDHKeyParam(env, wX, wY, keyWX, keyWY, keyS);
|
||
|
|
return true;
|
||
|
|
|
||
|
|
cleanup:
|
||
|
|
- FreeECDHKeyParam(env, wX, wY, paramWX, paramWY, paramS);
|
||
|
|
+ FreeECDHKeyParam(env, wX, wY, keyWX, keyWY, keyS);
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
// Convert EC_GROUP in openssl to byte[][] in java
|
||
|
|
static jobjectArray NewECDHParam(JNIEnv* env, EC_GROUP* group)
|
||
|
|
{
|
||
|
|
- jclass byteArrayClass = NULL;
|
||
|
|
- jobjectArray params = NULL;
|
||
|
|
-
|
||
|
|
- byteArrayClass = (*env)->FindClass(env, "[B");
|
||
|
|
- params = (*env)->NewObjectArray(env, KAE_EC_PARAM_NUM_SIZE, byteArrayClass, NULL);
|
||
|
|
+ jclass byteArrayClass = (*env)->FindClass(env, "[B");
|
||
|
|
+ jobjectArray params = (*env)->NewObjectArray(env, KAE_EC_PARAM_NUM_SIZE, byteArrayClass, NULL);
|
||
|
|
if (params == NULL) {
|
||
|
|
KAE_ThrowOOMException(env, "failed to allocate array");
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
- if (!SetECDHCurve(env, group, params, ecdhP)) {
|
||
|
|
+ if (!SetECDHCurve(env, group, params)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- if (!SetECDHPoint(env, group, params, ecdhX)) {
|
||
|
|
+ if (!SetECDHPoint(env, group, params)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- if (!SetECDHOrderAndCofactor(env, group, params, ecdhOrder)) {
|
||
|
|
+ if (!SetECDHOrderAndCofactor(env, group, params)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -332,16 +324,13 @@ cleanup:
|
||
|
|
// Convert EC_KEY in openssl to byte[][] in java
|
||
|
|
static jobjectArray NewECDHKey(JNIEnv* env, const EC_GROUP* group, const EC_KEY* eckey)
|
||
|
|
{
|
||
|
|
- jclass byteArrayClass = NULL;
|
||
|
|
- jobjectArray params = NULL;
|
||
|
|
-
|
||
|
|
- byteArrayClass = (*env)->FindClass(env, "[B");
|
||
|
|
- params = (*env)->NewObjectArray(env, KAE_EC_KEY_NUM_SIZE, byteArrayClass, NULL);
|
||
|
|
+ jclass byteArrayClass = (*env)->FindClass(env, "[B");
|
||
|
|
+ jobjectArray params = (*env)->NewObjectArray(env, KAE_EC_KEY_NUM_SIZE, byteArrayClass, NULL);
|
||
|
|
if (params == NULL) {
|
||
|
|
KAE_ThrowOOMException(env, "failed to allocate array");
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- if (!SetECDHKey(env, group, params, 0, eckey)) {
|
||
|
|
+ if (!SetECDHKey(env, group, params, eckey)) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
@@ -435,6 +424,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAEECKeyPairG
|
||
|
|
JNIEnv* env, jclass cls, jstring curveName)
|
||
|
|
{
|
||
|
|
EC_GROUP* group = NULL;
|
||
|
|
+ jobjectArray ecdhParam = NULL;
|
||
|
|
|
||
|
|
const char *curve = (*env)->GetStringUTFChars(env, curveName, 0);
|
||
|
|
KAE_TRACE("KAEECKeyPairGenerator_nativeGenerateParam(curveName = %s)", curve);
|
||
|
|
@@ -447,7 +437,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAEECKeyPairG
|
||
|
|
if ((group = EC_GROUP_new_by_curve_name(nid)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
- jobjectArray ecdhParam = NewECDHParam(env, group);
|
||
|
|
+ ecdhParam = NewECDHParam(env, group);
|
||
|
|
|
||
|
|
if (group != NULL) {
|
||
|
|
EC_GROUP_free(group);
|
||
|
|
@@ -476,6 +466,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAEECKeyPairG
|
||
|
|
{
|
||
|
|
EC_GROUP* group = NULL;
|
||
|
|
EC_KEY* eckey = NULL;
|
||
|
|
+ jobjectArray ecdhKey = NULL;
|
||
|
|
|
||
|
|
if ((group = GetGroupByParam(env, pArr, aArr, bArr, xArr, yArr, orderArr, cofactorInt)) == NULL) {
|
||
|
|
goto cleanup;
|
||
|
|
@@ -492,7 +483,7 @@ JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAEECKeyPairG
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
|
||
|
|
- jobjectArray ecdhKey = NewECDHKey(env, group, eckey);
|
||
|
|
+ ecdhKey = NewECDHKey(env, group, eckey);
|
||
|
|
|
||
|
|
EC_KEY_free(eckey);
|
||
|
|
EC_GROUP_free(group);
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_rsa.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_rsa.c
|
||
|
|
index de724593..0b23aa7d 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_rsa.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_keypairgenerator_rsa.c
|
||
|
|
@@ -27,9 +27,6 @@
|
||
|
|
#include "kae_exception.h"
|
||
|
|
#include "org_openeuler_security_openssl_KAERSAKeyPairGenerator.h"
|
||
|
|
#define KAE_RSA_PARAM_SIZE 8
|
||
|
|
-#define SUCCESS 1
|
||
|
|
-#define FAILED -1
|
||
|
|
-
|
||
|
|
|
||
|
|
// rsa param index
|
||
|
|
typedef enum RSAParamIndex {
|
||
|
|
@@ -102,15 +99,11 @@ static void ReleaseRSA(RSA* rsa) {
|
||
|
|
|
||
|
|
/*
|
||
|
|
* Set rsa key param, follow the steps below
|
||
|
|
- * step 1. Get rsa param name
|
||
|
|
- * step 2. Get rsa param value
|
||
|
|
- * step 3. Convert paramValue (BIGNUM) to jbyteArray
|
||
|
|
- * step 4. Set the rsa param to the param array
|
||
|
|
+ * step 1. Get rsa param value
|
||
|
|
+ * step 2. Convert paramValue (BIGNUM) to jbyteArray
|
||
|
|
+ * step 3. Set the rsa param to the param array
|
||
|
|
*/
|
||
|
|
static bool SetRSAKeyParam(JNIEnv* env, RSA* rsa, jobjectArray params, RSAParamIndex rsaParamIndex) {
|
||
|
|
- // get rsa param name
|
||
|
|
- const char* rsaParamName = rsaParamNames[rsaParamIndex];
|
||
|
|
-
|
||
|
|
// get rsa param value
|
||
|
|
const BIGNUM* rsaParamValue = GetRSAParamFunctionList[rsaParamIndex](rsa);
|
||
|
|
if (rsaParamValue == NULL) {
|
||
|
|
@@ -118,7 +111,7 @@ static bool SetRSAKeyParam(JNIEnv* env, RSA* rsa, jobjectArray params, RSAParamI
|
||
|
|
}
|
||
|
|
|
||
|
|
// Convert paramValue to jbyteArray
|
||
|
|
- jbyteArray param = KAE_GetByteArrayFromBigNum(env, rsaParamValue, rsaParamName);
|
||
|
|
+ jbyteArray param = KAE_GetByteArrayFromBigNum(env, rsaParamValue);
|
||
|
|
if (param == NULL) {
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
@@ -156,8 +149,8 @@ static jobjectArray NewRSAKeyParams(JNIEnv* env, RSA* rsa) {
|
||
|
|
* Method: nativeGenerateKeyPair
|
||
|
|
* Signature: (I[B)[[B
|
||
|
|
*/
|
||
|
|
-JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAERSAKeyPairGenerator_nativeGenerateKeyPair
|
||
|
|
- (JNIEnv* env, jclass cls, jint keySize, jbyteArray publicExponent) {
|
||
|
|
+JNIEXPORT jobjectArray JNICALL Java_org_openeuler_security_openssl_KAERSAKeyPairGenerator_nativeGenerateKeyPair (
|
||
|
|
+ JNIEnv* env, jclass cls, jint keySize, jbyteArray publicExponent) {
|
||
|
|
if (publicExponent == NULL) {
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_symmetric_cipher.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_symmetric_cipher.c
|
||
|
|
index 81c7b3ef..71c28bde 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_symmetric_cipher.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_symmetric_cipher.c
|
||
|
|
@@ -170,7 +170,7 @@ Java_org_openeuler_security_openssl_KAESymmetricCipherBase_nativeInit(JNIEnv* en
|
||
|
|
}
|
||
|
|
|
||
|
|
if (!EVP_CipherInit_ex(ctx, cipher, kaeEngine, (const unsigned char*)keyBytes,
|
||
|
|
- (const unsigned char*)ivBytes, encrypt ? 1 : 0)) {
|
||
|
|
+ (const unsigned char*)ivBytes, encrypt ? 1 : 0)) {
|
||
|
|
KAE_ThrowFromOpenssl(env, "EVP_CipherInit_ex failed", KAE_ThrowRuntimeException);
|
||
|
|
goto cleanup;
|
||
|
|
}
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.c b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.c
|
||
|
|
index a92ba406..0e656a83 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.c
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.c
|
||
|
|
@@ -77,7 +77,7 @@ void KAE_ReleaseBigNumFromByteArray(BIGNUM* bn) {
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
-jbyteArray KAE_GetByteArrayFromBigNum(JNIEnv* env, const BIGNUM* bn, const char* sourceName) {
|
||
|
|
+jbyteArray KAE_GetByteArrayFromBigNum(JNIEnv* env, const BIGNUM* bn) {
|
||
|
|
if (bn == NULL) {
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
@@ -89,12 +89,12 @@ jbyteArray KAE_GetByteArrayFromBigNum(JNIEnv* env, const BIGNUM* bn, const char*
|
||
|
|
bnSize += 1;
|
||
|
|
jbyteArray javaBytes = (*env)->NewByteArray(env, bnSize);
|
||
|
|
if (javaBytes == NULL) {
|
||
|
|
- KAE_ThrowOOMException(env, "new byte array failed");
|
||
|
|
+ KAE_ThrowOOMException(env, "New byte array failed.");
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
jbyte* bytes = (*env)->GetByteArrayElements(env, javaBytes, NULL);
|
||
|
|
if (bytes == NULL) {
|
||
|
|
- KAE_ThrowNullPointerException(env,"GetByteArrayElements failed");
|
||
|
|
+ KAE_ThrowNullPointerException(env, "GetByteArrayElements failed.");
|
||
|
|
return NULL;
|
||
|
|
}
|
||
|
|
unsigned char* tmp = (unsigned char*) bytes;
|
||
|
|
diff --git a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.h b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.h
|
||
|
|
index fee81627..13bd5976 100644
|
||
|
|
--- a/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.h
|
||
|
|
+++ b/jdk/src/solaris/native/org/openeuler/security/openssl/kae_util.h
|
||
|
|
@@ -34,7 +34,7 @@ BIGNUM* KAE_GetBigNumFromByteArray(JNIEnv* env, jbyteArray byteArray);
|
||
|
|
void KAE_ReleaseBigNumFromByteArray(BIGNUM* bn);
|
||
|
|
|
||
|
|
/* BIGNUM convert to jbyteArray */
|
||
|
|
-jbyteArray KAE_GetByteArrayFromBigNum(JNIEnv* env, const BIGNUM* bn, const char* sourceName);
|
||
|
|
+jbyteArray KAE_GetByteArrayFromBigNum(JNIEnv* env, const BIGNUM* bn);
|
||
|
|
|
||
|
|
void SetKaeEngine(ENGINE* engine);
|
||
|
|
|
||
|
|
diff --git a/jdk/test/micro/org/openeuler/bench/security/openssl/DHKeyAgreementBenchMark.java b/jdk/test/micro/org/openeuler/bench/security/openssl/DHKeyAgreementBenchMark.java
|
||
|
|
index 8a9a2d5d..c204f4ce 100644
|
||
|
|
--- a/jdk/test/micro/org/openeuler/bench/security/openssl/DHKeyAgreementBenchMark.java
|
||
|
|
+++ b/jdk/test/micro/org/openeuler/bench/security/openssl/DHKeyAgreementBenchMark.java
|
||
|
|
@@ -43,9 +43,13 @@ public class DHKeyAgreementBenchMark extends BenchmarkBase {
|
||
|
|
@Param({"512", "1024", "2048", "3072", "4096"})
|
||
|
|
private int keySize;
|
||
|
|
|
||
|
|
- private KeyPairGenerator aliceKpairGen, bobKpairGen, carolKpairGen;
|
||
|
|
+ private KeyPairGenerator aliceKpairGen;
|
||
|
|
+ private KeyPairGenerator bobKpairGen;
|
||
|
|
+ private KeyPairGenerator carolKpairGen;
|
||
|
|
|
||
|
|
- private KeyPair aliceKpair, bobKpair, carolKpair;
|
||
|
|
+ private KeyPair aliceKpair;
|
||
|
|
+ private KeyPair bobKpair;
|
||
|
|
+ private KeyPair carolKpair;
|
||
|
|
|
||
|
|
private DHParameterSpec dhSkipParamSpec;
|
||
|
|
|