Skip to content

Commit 3efcafc

Browse files
authored
Merge pull request #255 from ibmruntimes/openj9
Merge jdk-17.0.9+6 and the latest OpenJ9 changes to 0.41
2 parents 7e7cdc3 + dd9eed6 commit 3efcafc

File tree

10 files changed

+521
-274
lines changed

10 files changed

+521
-274
lines changed

closed/openjdk-tag.gmk

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
OPENJDK_TAG := jdk-17.0.9+5
1+
OPENJDK_TAG := jdk-17.0.9+6

closed/src/java.base/share/classes/com/sun/crypto/provider/NativeCipherBlockChaining.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
*/
2525
/*
2626
* ===========================================================================
27-
* (c) Copyright IBM Corp. 2018, 2022 All Rights Reserved
27+
* (c) Copyright IBM Corp. 2018, 2023 All Rights Reserved
2828
* ===========================================================================
2929
*/
3030

@@ -56,6 +56,7 @@ class NativeCipherBlockChaining extends FeedbackCipher {
5656

5757
private static final NativeCrypto nativeCrypto;
5858
private static final Cleaner contextCleaner;
59+
private int previousKeyLength = -1;
5960

6061
/*
6162
* Initialize the CBC context.
@@ -184,7 +185,12 @@ void init(boolean decrypting, String algorithm, byte[] key, byte[] iv)
184185

185186
int ret;
186187
synchronized (this) {
187-
ret = nativeCrypto.CBCInit(nativeContext, mode, iv, iv.length, key, key.length);
188+
if (previousKeyLength == key.length) {
189+
ret = nativeCrypto.CBCInit(nativeContext, mode, iv, iv.length, key, key.length, true);
190+
} else {
191+
ret = nativeCrypto.CBCInit(nativeContext, mode, iv, iv.length, key, key.length, false);
192+
previousKeyLength = key.length;
193+
}
188194
}
189195
if (ret == -1) {
190196
throw new ProviderException("Error in Native CipherBlockChaining");
@@ -201,7 +207,7 @@ void reset() {
201207
System.arraycopy(iv, 0, r, 0, blockSize);
202208
int ret;
203209
synchronized (this) {
204-
ret = nativeCrypto.CBCInit(nativeContext, mode, iv, iv.length, key, key.length);
210+
ret = nativeCrypto.CBCInit(nativeContext, mode, iv, iv.length, key, key.length, true);
205211
}
206212
if (ret == -1) {
207213
throw new ProviderException("Error in Native CipherBlockChaining");
@@ -225,7 +231,7 @@ void restore() {
225231
System.arraycopy(rSave, 0, r, 0, blockSize);
226232
int ret;
227233
synchronized (this) {
228-
ret = nativeCrypto.CBCInit(nativeContext, mode, r, r.length, key, key.length);
234+
ret = nativeCrypto.CBCInit(nativeContext, mode, r, r.length, key, key.length, true);
229235
}
230236
if (ret == -1) {
231237
throw new ProviderException("Error in Native CipherBlockChaining");

closed/src/java.base/share/classes/jdk/crypto/jniprovider/NativeCrypto.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ public final native int DigestComputeAndReset(long context,
218218
int digestOffset,
219219
int digestLen);
220220

221-
public final native void DigestReset(long context);
221+
public final native int DigestReset(long context);
222222

223223
/* Native interfaces shared by CBC and ChaCha20 */
224224

@@ -233,7 +233,8 @@ public final native int CBCInit(long context,
233233
byte[] iv,
234234
int ivlen,
235235
byte[] key,
236-
int keylen);
236+
int keylen,
237+
boolean doReset);
237238

238239
public final native int CBCUpdate(long context,
239240
byte[] input,

closed/src/java.base/share/classes/sun/security/provider/NativeDigest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,10 @@
2424
*/
2525
/*
2626
* ===========================================================================
27-
* (c) Copyright IBM Corp. 2018, 2019 All Rights Reserved
27+
* (c) Copyright IBM Corp. 2018, 2023 All Rights Reserved
2828
* ===========================================================================
2929
*/
3030

31-
3231
package sun.security.provider;
3332

3433
import java.security.MessageDigestSpi;
@@ -136,7 +135,10 @@ synchronized protected final void engineReset() {
136135
return;
137136
}
138137

139-
nativeCrypto.DigestReset(context);
138+
int ret = nativeCrypto.DigestReset(context);
139+
if (ret == -1) {
140+
throw new ProviderException("Error in Native Digest Reset");
141+
}
140142
bytesProcessed = 0;
141143
}
142144

closed/src/java.base/share/native/libjncrypto/NativeCrypto.c

Lines changed: 93 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,7 @@ OSSL_PKCS12_key_gen_t* OSSL_PKCS12_key_gen;
298298
typedef struct OpenSSLMDContext {
299299
EVP_MD_CTX *ctx;
300300
const EVP_MD *digestAlg;
301+
EVP_MD_CTX *cachedInitializedDigestContext;
301302
} OpenSSLMDContext;
302303

303304
/* Handle errors from OpenSSL calls. */
@@ -901,22 +902,38 @@ JNIEXPORT jlong JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestCreateCon
901902
context->ctx = ctx;
902903
context->digestAlg = digestAlg;
903904

905+
/*
906+
* Create a second initialized openssl digest context. This is being done for performance reasons since
907+
* creating and or re-initializing digest contexts later during processing is found to be expensive.
908+
* This second context, context->cachedInitializedDigestContext, will be copied over the working context,
909+
* context->ctx, using the EVP_MD_CTX_copy_ex API whenever we wish to re-initalize this cipher. This occurs
910+
* during an explicit reset of the cipher or whenever a final digest is computed.
911+
*/
912+
context->cachedInitializedDigestContext = (*OSSL_MD_CTX_new)();
913+
if (NULL == context->cachedInitializedDigestContext) {
914+
goto releaseContexts;
915+
}
916+
917+
if (1 != (*OSSL_MD_CTX_copy_ex)(context->cachedInitializedDigestContext, context->ctx)) {
918+
goto releaseContexts;
919+
}
920+
904921
if (0 != copyContext) {
905922
EVP_MD_CTX *contextToCopy = ((OpenSSLMDContext*)(intptr_t)copyContext)->ctx;
906923
if (NULL == contextToCopy) {
907-
(*OSSL_MD_CTX_free)(ctx);
908-
free(context);
909-
return -1;
924+
goto releaseContexts;
910925
}
911926
if (0 == (*OSSL_MD_CTX_copy_ex)(ctx, contextToCopy)) {
912-
printErrors();
913-
(*OSSL_MD_CTX_free)(ctx);
914-
free(context);
915-
return -1;
927+
goto releaseContexts;
916928
}
917929
}
918930

919931
return (jlong)(intptr_t)context;
932+
933+
releaseContexts:
934+
printErrors();
935+
Java_jdk_crypto_jniprovider_NativeCrypto_DigestDestroyContext(env, thisObj, (jlong)(intptr_t)context);
936+
return -1;
920937
}
921938

922939
/*
@@ -928,11 +945,20 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestDestroyCon
928945
(JNIEnv *env, jclass thisObj, jlong c)
929946
{
930947
OpenSSLMDContext *context = (OpenSSLMDContext*)(intptr_t) c;
931-
if ((NULL == context) || (NULL == context->ctx)) {
948+
if (NULL == context) {
932949
return -1;
933950
}
934951

935-
(*OSSL_MD_CTX_free)(context->ctx);
952+
if (NULL != context->ctx) {
953+
(*OSSL_MD_CTX_free)(context->ctx);
954+
context->ctx = NULL;
955+
}
956+
957+
if (NULL != context->cachedInitializedDigestContext) {
958+
(*OSSL_MD_CTX_free)(context->cachedInitializedDigestContext);
959+
context->cachedInitializedDigestContext = NULL;
960+
}
961+
936962
free(context);
937963
return 0;
938964
}
@@ -989,7 +1015,7 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestComputeAnd
9891015
unsigned char* messageNative = NULL;
9901016
unsigned char* digestNative = NULL;
9911017

992-
if ((NULL == context) || (NULL == context->ctx)) {
1018+
if ((NULL == context) || (NULL == context->ctx) || (NULL == context->cachedInitializedDigestContext)) {
9931019
return -1;
9941020
}
9951021

@@ -1021,10 +1047,23 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestComputeAnd
10211047

10221048
(*env)->ReleasePrimitiveArrayCritical(env, digest, digestNative, 0);
10231049

1024-
(*OSSL_MD_CTX_reset)(context->ctx);
1025-
1026-
if (1 != (*OSSL_DigestInit_ex)(context->ctx, context->digestAlg, NULL)) {
1050+
/*
1051+
* Reset the message digest context to the original context. We are then ready to perform
1052+
* digest operations again using a copy of this cached context.
1053+
*/
1054+
if (1 != (*OSSL_MD_CTX_copy_ex)(context->ctx, context->cachedInitializedDigestContext)) {
10271055
printErrors();
1056+
1057+
if (NULL != context->ctx) {
1058+
(*OSSL_MD_CTX_free)(context->ctx);
1059+
context->ctx = NULL;
1060+
}
1061+
1062+
if (NULL != context->cachedInitializedDigestContext) {
1063+
(*OSSL_MD_CTX_free)(context->cachedInitializedDigestContext);
1064+
context->cachedInitializedDigestContext = NULL;
1065+
}
1066+
10281067
return -1;
10291068
}
10301069

@@ -1035,22 +1074,38 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestComputeAnd
10351074
*
10361075
* Class: jdk_crypto_jniprovider_NativeCrypto
10371076
* Method: DigestReset
1038-
* Signature: (J)V
1077+
* Signature: (J)I
10391078
*/
1040-
JNIEXPORT void JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestReset
1079+
JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestReset
10411080
(JNIEnv *env, jclass thisObj, jlong c)
10421081
{
10431082
OpenSSLMDContext *context = (OpenSSLMDContext*)(intptr_t) c;
10441083

1045-
if ((NULL == context) || (NULL == context->ctx)) {
1046-
return;
1084+
if ((NULL == context) || (NULL == context->ctx) || (NULL == context->cachedInitializedDigestContext)) {
1085+
return -1;
10471086
}
10481087

1049-
(*OSSL_MD_CTX_reset)(context->ctx);
1050-
1051-
if (1 != (*OSSL_DigestInit_ex)(context->ctx, context->digestAlg, NULL)) {
1088+
/*
1089+
* Reset the message digest context to the original context. We are then ready to perform
1090+
* digest operations again using a copy of this cached context.
1091+
*/
1092+
if (1 != (*OSSL_MD_CTX_copy_ex)(context->ctx, context->cachedInitializedDigestContext)) {
10521093
printErrors();
1094+
1095+
if (NULL != context->ctx) {
1096+
(*OSSL_MD_CTX_free)(context->ctx);
1097+
context->ctx = NULL;
1098+
}
1099+
1100+
if (NULL != context->cachedInitializedDigestContext) {
1101+
(*OSSL_MD_CTX_free)(context->cachedInitializedDigestContext);
1102+
context->cachedInitializedDigestContext = NULL;
1103+
}
1104+
1105+
return -1;
10531106
}
1107+
1108+
return 0;
10541109
}
10551110

10561111
/*
@@ -1097,7 +1152,7 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DestroyContext
10971152
*/
10981153
JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_CBCInit
10991154
(JNIEnv *env, jclass thisObj, jlong c, jint mode, jbyteArray iv, jint iv_len,
1100-
jbyteArray key, jint key_len)
1155+
jbyteArray key, jint key_len, jboolean doReset)
11011156
{
11021157
EVP_CIPHER_CTX *ctx = (EVP_CIPHER_CTX*)(intptr_t) c;
11031158
unsigned char* ivNative = NULL;
@@ -1108,18 +1163,20 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_CBCInit
11081163
return -1;
11091164
}
11101165

1111-
switch(key_len) {
1112-
case 16:
1113-
evp_cipher1 = (*OSSL_aes_128_cbc)();
1114-
break;
1115-
case 24:
1116-
evp_cipher1 = (*OSSL_aes_192_cbc)();
1117-
break;
1118-
case 32:
1119-
evp_cipher1 = (*OSSL_aes_256_cbc)();
1120-
break;
1121-
default:
1122-
break;
1166+
if (JNI_FALSE == doReset) {
1167+
switch (key_len) {
1168+
case 16:
1169+
evp_cipher1 = (*OSSL_aes_128_cbc)();
1170+
break;
1171+
case 24:
1172+
evp_cipher1 = (*OSSL_aes_192_cbc)();
1173+
break;
1174+
case 32:
1175+
evp_cipher1 = (*OSSL_aes_256_cbc)();
1176+
break;
1177+
default:
1178+
break;
1179+
}
11231180
}
11241181

11251182
ivNative = (unsigned char*)((*env)->GetByteArrayElements(env, iv, 0));
@@ -1140,7 +1197,9 @@ JNIEXPORT jint JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_CBCInit
11401197
return -1;
11411198
}
11421199

1143-
(*OSSL_CIPHER_CTX_set_padding)(ctx, 0);
1200+
if (JNI_FALSE == doReset) {
1201+
(*OSSL_CIPHER_CTX_set_padding)(ctx, 0);
1202+
}
11441203

11451204
(*env)->ReleaseByteArrayElements(env, iv, (jbyte*)ivNative, JNI_ABORT);
11461205
(*env)->ReleaseByteArrayElements(env, key, (jbyte*)keyNative, JNI_ABORT);

make/data/cacerts/certignarootca

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
Owner: CN=Certigna Root CA, OU=0002 48146308100036, O=Dhimyotis, C=FR
2+
Issuer: CN=Certigna Root CA, OU=0002 48146308100036, O=Dhimyotis, C=FR
3+
Serial number: cae91b89f155030da3e6416dc4e3a6e1
4+
Valid from: Tue Oct 01 08:32:27 GMT 2013 until: Sat Oct 01 08:32:27 GMT 2033
5+
Signature algorithm name: SHA256withRSA
6+
Subject Public Key Algorithm: 4096-bit RSA key
7+
Version: 3
8+
-----BEGIN CERTIFICATE-----
9+
MIIGWzCCBEOgAwIBAgIRAMrpG4nxVQMNo+ZBbcTjpuEwDQYJKoZIhvcNAQELBQAw
10+
WjELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczEcMBoGA1UECwwTMDAw
11+
MiA0ODE0NjMwODEwMDAzNjEZMBcGA1UEAwwQQ2VydGlnbmEgUm9vdCBDQTAeFw0x
12+
MzEwMDEwODMyMjdaFw0zMzEwMDEwODMyMjdaMFoxCzAJBgNVBAYTAkZSMRIwEAYD
13+
VQQKDAlEaGlteW90aXMxHDAaBgNVBAsMEzAwMDIgNDgxNDYzMDgxMDAwMzYxGTAX
14+
BgNVBAMMEENlcnRpZ25hIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
15+
ggIKAoICAQDNGDllGlmx6mQWDoyUJJV8g9PFOSbcDO8WV43X2KyjQn+Cyu3NW9sO
16+
ty3tRQgXstmzy9YXUnIo245Onoq2C/mehJpNdt4iKVzSs9IGPjA5qXSjklYcoW9M
17+
CiBtnyN6tMbaLOQdLNyzKNAT8kxOAkmhVECe5uUFoC2EyP+YbNDrihqECB63aCPu
18+
I9Vwzm1RaRDuoXrC0SIxwoKF0vJVdlB8JXrJhFwLrN1CTivngqIkicuQstDuI7pm
19+
TLtipPlTWmR7fJj6o0ieD5Wupxj0auwuA0Wv8HT4Ks16XdG+RCYyKfHx9WzMfgIh
20+
C59vpD++nVPiz32pLHxYGpfhPTc3GGYo0kDFUYqMwy3OU4gkWGQwFsWq4NYKpkDf
21+
ePb1BHxpE4S80dGnBs8B92jAqFe7OmGtBIyT46388NtEbVncSVmurJqZNjBBe3Yz
22+
IoejwpKGbvlw7q6Hh5UbxHq9MfPU0uWZ/75I7HX1eBYdpnDBfzwboZL7z8g81sWT
23+
Co/1VTp2lc5ZmIoJlXcymoO6LAQ6l73UL77XbJuiyn1tJslV1c/DeVIICZkHJC1k
24+
JWumIWmbat10TWuXekG9qxf5kBdIjzb5LdXF2+6qhUVB+s06RbFo5jZMm5BX7CO5
25+
hwjCxAnxl4YqKE3idMDaxIzb3+KhF1nOJFl0Mdp//TBt2dzhauH8XwIDAQABo4IB
26+
GjCCARYwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE
27+
FBiHVuBud+4kNTxOc5of1uHieX4rMB8GA1UdIwQYMBaAFBiHVuBud+4kNTxOc5of
28+
1uHieX4rMEQGA1UdIAQ9MDswOQYEVR0gADAxMC8GCCsGAQUFBwIBFiNodHRwczov
29+
L3d3d3cuY2VydGlnbmEuZnIvYXV0b3JpdGVzLzBtBgNVHR8EZjBkMC+gLaArhilo
30+
dHRwOi8vY3JsLmNlcnRpZ25hLmZyL2NlcnRpZ25hcm9vdGNhLmNybDAxoC+gLYYr
31+
aHR0cDovL2NybC5kaGlteW90aXMuY29tL2NlcnRpZ25hcm9vdGNhLmNybDANBgkq
32+
hkiG9w0BAQsFAAOCAgEAlLieT/DjlQgi581oQfccVdV8AOItOoldaDgvUSILSo3L
33+
6btdPrtcPbEo/uRTVRPPoZAbAh1fZkYJMyjhDSSXcNMQH+pkV5a7XdrnxIxPTGRG
34+
HVyH41neQtGbqH6mid2PHMkwgu07nM3A6RngatgCdTer9zQoKJHyBApPNeNgJgH6
35+
0BGM+RFq7q89w1DTj18zeTyGqHNFkIwgtnJzFyO+B2XleJINugHA64wcZr+shncB
36+
lA2c5uk5jR+mUYyZDDl34bSb+hxnV29qao6pK0xXeXpXIs/NX2NGjVxZOob4Mkdi
37+
o2cNGJHc+6Zr9UhhcyNZjgKnvETq9Emd8VRY+WCv2hikLyhF3HqgiIZd8zvn/yk1
38+
gPxkQ5Tm4xxvvq0OKmOZK8l+hfZx6AYDlf7ej0gcWtSS6Cvu5zHbugRqh5jnxV/v
39+
faci9wHYTfmJ0A6aBVmknpjZbyvKcL5kwlWj9Omvw5Ip3IgWJJk8jSaYtlu3zM63
40+
Nwf9JtmYhST/WSMDmu2dnajkXjjO11INb9I/bbEFa0nOipFGc/T2L/Coc3cOZayh
41+
jWZSaX5LaAzHHjcng6WMxwLkFM1JAbBzs/3GkDpv0mztO+7skb6iQ12LAEpmJURw
42+
3kAP+HwV96LOPNdeE4yBFxgX0b3xdxA61GU5wSesVywlVP+i2k+KYTlerj1KjL0=
43+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)