Skip to content

Commit 0bd8f13

Browse files
iigoninbennygoerzigKarstenSchnitterKai Sternad
committed
Add FIPS build tooling
Signed-off-by: Igonin <[email protected]> Co-authored-by: Benny Goerzig <[email protected]> Co-authored-by: Karsten Schnitter <[email protected]> Co-authored-by: Kai Sternad <[email protected]>
1 parent cec8fb9 commit 0bd8f13

File tree

35 files changed

+433
-546
lines changed

35 files changed

+433
-546
lines changed

build.gradle

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ apply from: 'gradle/ide.gradle'
6565
apply from: 'gradle/forbidden-dependencies.gradle'
6666
apply from: 'gradle/formatting.gradle'
6767
apply from: 'gradle/local-distribution.gradle'
68-
apply from: 'gradle/fips.gradle'
6968
apply from: 'gradle/run.gradle'
7069
apply from: 'gradle/missing-javadoc.gradle'
7170
apply from: 'gradle/code-coverage.gradle'
@@ -439,6 +438,9 @@ gradle.projectsEvaluated {
439438
if (BuildParams.runtimeJavaVersion >= JavaVersion.VERSION_20) {
440439
task.jvmArgs += ["--add-modules=jdk.incubator.vector"]
441440
}
441+
if (BuildParams.inFipsJvm) {
442+
task.jvmArgs += ["-Dorg.bouncycastle.fips.approved_only=true"]
443+
}
442444
}
443445
}
444446

@@ -708,6 +710,14 @@ allprojects {
708710
plugins.withId('lifecycle-base') {
709711
checkPart1.configure { dependsOn 'check' }
710712
}
713+
714+
plugins.withId('opensearch.testclusters') {
715+
testClusters.configureEach {
716+
if (BuildParams.inFipsJvm) {
717+
keystorePassword 'notarealpasswordphrase'
718+
}
719+
}
720+
}
711721
}
712722

713723
subprojects {

buildSrc/src/main/java/org/opensearch/gradle/OpenSearchTestBasePlugin.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -164,11 +164,12 @@ public void execute(Task t) {
164164
test.systemProperty("tests.seed", BuildParams.getTestSeed());
165165
}
166166

167-
var securityFile = "java.security";
168-
test.systemProperty(
169-
"java.security.properties",
170-
project.getRootProject().getLayout().getProjectDirectory() + "/distribution/src/config/" + securityFile
171-
);
167+
if (BuildParams.isInFipsJvm()) {
168+
test.systemProperty(
169+
"java.security.properties",
170+
project.getRootProject().getLayout().getProjectDirectory() + "/distribution/src/config/fips_java.security"
171+
);
172+
}
172173

173174
// don't track these as inputs since they contain absolute paths and break cache relocatability
174175
File gradleHome = project.getGradle().getGradleUserHomeDir();
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* SPDX-License-Identifier: Apache-2.0
3+
*
4+
* The OpenSearch Contributors require contributions made to
5+
* this file be licensed under the Apache-2.0 license or a
6+
* compatible open source license.
7+
*/
8+
9+
package org.opensearch.gradle.info;
10+
11+
import java.util.function.Function;
12+
13+
public class FipsBuildParams {
14+
15+
public static final String FIPS_BUILD_PARAM = "crypto.standard";
16+
17+
private static String fipsMode;
18+
19+
public static void init(Function<String, Object> fipsValue) {
20+
fipsMode = (String) fipsValue.apply(FIPS_BUILD_PARAM);
21+
}
22+
23+
private FipsBuildParams() {}
24+
25+
public static boolean isInFipsMode() {
26+
return "FIPS-140-3".equals(fipsMode);
27+
}
28+
29+
public static String getFipsMode() {
30+
return fipsMode;
31+
}
32+
33+
}

buildSrc/src/main/java/org/opensearch/gradle/info/GlobalBuildInfoPlugin.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,8 @@ public void apply(Project project) {
109109
File rootDir = project.getRootDir();
110110
GitInfo gitInfo = gitInfo(rootDir);
111111

112+
FipsBuildParams.init(project::findProperty);
113+
112114
BuildParams.init(params -> {
113115
// Initialize global build parameters
114116
boolean isInternal = GlobalBuildInfoPlugin.class.getResource("/buildSrc.marker") != null;
@@ -129,7 +131,7 @@ public void apply(Project project) {
129131
params.setIsCi(System.getenv("JENKINS_URL") != null);
130132
params.setIsInternal(isInternal);
131133
params.setDefaultParallel(findDefaultParallel(project));
132-
params.setInFipsJvm(Util.getBooleanProperty("tests.fips.enabled", false));
134+
params.setInFipsJvm(FipsBuildParams.isInFipsMode());
133135
params.setIsSnapshotBuild(Util.getBooleanProperty("build.snapshot", true));
134136
if (isInternal) {
135137
params.setBwcVersions(resolveBwcVersions(rootDir));
@@ -179,7 +181,11 @@ private void logGlobalBuildInfo() {
179181
LOGGER.quiet(" JAVA_HOME : " + gradleJvm.getJavaHome());
180182
}
181183
LOGGER.quiet(" Random Testing Seed : " + BuildParams.getTestSeed());
182-
LOGGER.quiet(" In FIPS 140 mode : " + BuildParams.isInFipsJvm());
184+
if (FipsBuildParams.isInFipsMode()) {
185+
LOGGER.quiet(" Crypto Standard : " + FipsBuildParams.getFipsMode());
186+
} else {
187+
LOGGER.quiet(" Crypto Standard : any-supported");
188+
}
183189
LOGGER.quiet("=======================================");
184190
}
185191

buildSrc/src/main/java/org/opensearch/gradle/testclusters/OpenSearchNode.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646
import org.opensearch.gradle.Version;
4747
import org.opensearch.gradle.VersionProperties;
4848
import org.opensearch.gradle.info.BuildParams;
49+
import org.opensearch.gradle.info.FipsBuildParams;
4950
import org.gradle.api.Action;
5051
import org.gradle.api.Named;
5152
import org.gradle.api.NamedDomainObjectContainer;
@@ -546,6 +547,10 @@ public synchronized void start() {
546547
logToProcessStdout("installed plugins");
547548
}
548549

550+
if (FipsBuildParams.isInFipsMode() && keystorePassword.isEmpty()) {
551+
throw new TestClustersException("Can not start " + this + " in FIPS JVM, missing keystore password");
552+
}
553+
549554
logToProcessStdout("Creating opensearch keystore with password set to [" + keystorePassword + "]");
550555
if (keystorePassword.length() > 0) {
551556
runOpenSearchBinScriptWithInput(keystorePassword + "\n" + keystorePassword + "\n", "opensearch-keystore", "create", "-p");
-101 KB
Binary file not shown.

buildSrc/src/main/resources/fips_java_bcjsse_11.policy

Lines changed: 0 additions & 29 deletions
This file was deleted.

buildSrc/src/main/resources/fips_java_bcjsse_11.security

Lines changed: 0 additions & 53 deletions
This file was deleted.

buildSrc/src/main/resources/fips_java_bcjsse_8.policy

Lines changed: 0 additions & 34 deletions
This file was deleted.

buildSrc/src/main/resources/fips_java_bcjsse_8.security

Lines changed: 0 additions & 134 deletions
This file was deleted.

0 commit comments

Comments
 (0)