Skip to content

Commit 2c861ee

Browse files
authored
Merge pull request ibmruntimes#458 from JinhangZhang/supportMD512slash
Support native MessageDigest SHA512-224/256
2 parents 3dbb95c + 47d4838 commit 2c861ee

File tree

3 files changed

+56
-4
lines changed

3 files changed

+56
-4
lines changed

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

Lines changed: 21 additions & 1 deletion
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, 2025 All Rights Reserved
2828
* ===========================================================================
2929
*/
3030

@@ -34,6 +34,26 @@
3434

3535
abstract class NativeSHA5 {
3636

37+
/**
38+
* Native SHA-512-224 implementation class.
39+
*/
40+
public static final class SHA512_224 extends NativeDigest {
41+
42+
public SHA512_224() {
43+
super("SHA-512-224", 28, NativeCrypto.SHA5_512_224);
44+
}
45+
}
46+
47+
/**
48+
* Native SHA-512-256 implementation class.
49+
*/
50+
public static final class SHA512_256 extends NativeDigest {
51+
52+
public SHA512_256() {
53+
super("SHA-512-256", 32, NativeCrypto.SHA5_512_256);
54+
}
55+
}
56+
3757
/**
3858
* Native SHA-512 implementation class.
3959
*/

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1342,6 +1342,12 @@ JNIEXPORT jlong JNICALL Java_jdk_crypto_jniprovider_NativeCrypto_DigestCreateCon
13421342
case jdk_crypto_jniprovider_NativeCrypto_SHA5_512:
13431343
digestAlg = (*OSSL_sha512)();
13441344
break;
1345+
case jdk_crypto_jniprovider_NativeCrypto_SHA5_512_224:
1346+
digestAlg = (*OSSL_sha512_224)();
1347+
break;
1348+
case jdk_crypto_jniprovider_NativeCrypto_SHA5_512_256:
1349+
digestAlg = (*OSSL_sha512_256)();
1350+
break;
13451351
default:
13461352
return -1;
13471353
}

src/java.base/share/classes/sun/security/provider/SunEntries.java

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

@@ -95,6 +95,8 @@ public final class SunEntries {
9595
private static final boolean useNativeSHA256;
9696
private static final boolean useNativeSHA384;
9797
private static final boolean useNativeSHA512;
98+
private static final boolean useNativeSHA512_224;
99+
private static final boolean useNativeSHA512_256;
98100

99101
static {
100102
/* The property 'jdk.nativeDigest' is used to control enablement of all native
@@ -131,6 +133,16 @@ public final class SunEntries {
131133
* SHA-512 implementation.
132134
*/
133135
useNativeSHA512 = useNativeDigest && NativeCrypto.isAlgorithmEnabled("jdk.nativeSHA512", "SHA-512");
136+
137+
/* The property 'jdk.nativeSHA512_224' is used to control enablement of the native
138+
* SHA-512-224 implementation.
139+
*/
140+
useNativeSHA512_224 = useNativeDigest && NativeCrypto.isAlgorithmEnabled("jdk.nativeSHA512_224", "SHA-512-224");
141+
142+
/* The property 'jdk.nativeSHA512_256' is used to control enablement of the native
143+
* SHA-512-256 implementation.
144+
*/
145+
useNativeSHA512_256 = useNativeDigest && NativeCrypto.isAlgorithmEnabled("jdk.nativeSHA512_256", "SHA-512-256");
134146
}
135147

136148
// Flag indicating whether the operating system is AIX.
@@ -311,6 +323,8 @@ public final class SunEntries {
311323
String providerSHA256;
312324
String providerSHA384;
313325
String providerSHA512;
326+
String providerSHA512_224;
327+
String providerSHA512_256;
314328
/*
315329
* Set the digest provider based on whether native crypto is
316330
* enabled or not.
@@ -355,6 +369,18 @@ public final class SunEntries {
355369
providerSHA512 = "sun.security.provider.SHA5$SHA512";
356370
}
357371

372+
if (useNativeSHA512_224 && NativeCrypto.isAllowedAndLoaded()) {
373+
providerSHA512_224 = "sun.security.provider.NativeSHA5$SHA512_224";
374+
} else {
375+
providerSHA512_224 = "sun.security.provider.SHA5$SHA512_224";
376+
}
377+
378+
if (useNativeSHA512_256 && NativeCrypto.isAllowedAndLoaded()) {
379+
providerSHA512_256 = "sun.security.provider.NativeSHA5$SHA512_256";
380+
} else {
381+
providerSHA512_256 = "sun.security.provider.SHA5$SHA512_256";
382+
}
383+
358384
add(p, "MessageDigest", "MD2", "sun.security.provider.MD2", attrs);
359385
add(p, "MessageDigest", "MD5", providerMD5, attrs);
360386
addWithAlias(p, "MessageDigest", "SHA-1", providerSHA,
@@ -369,9 +395,9 @@ public final class SunEntries {
369395
addWithAlias(p, "MessageDigest", "SHA-512",
370396
providerSHA512, attrs);
371397
addWithAlias(p, "MessageDigest", "SHA-512/224",
372-
"sun.security.provider.SHA5$SHA512_224", attrs);
398+
providerSHA512_224, attrs);
373399
addWithAlias(p, "MessageDigest", "SHA-512/256",
374-
"sun.security.provider.SHA5$SHA512_256", attrs);
400+
providerSHA512_256, attrs);
375401
addWithAlias(p, "MessageDigest", "SHA3-224",
376402
"sun.security.provider.SHA3$SHA224", attrs);
377403
addWithAlias(p, "MessageDigest", "SHA3-256",

0 commit comments

Comments
 (0)