Skip to content

Commit 3d15b97

Browse files
FipsStatusTest handles AWS-LC built without FIPS_BREAK_TEST
1 parent f60a6e0 commit 3d15b97

File tree

4 files changed

+29
-16
lines changed

4 files changed

+29
-16
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -134,6 +134,7 @@ ACCP did not track a FIPS branch/release version of AWS-LC until ACCP v2.3.0. Be
134134
| 2.4.0 | 1.30.1 | 2.0.13 |
135135
| 2.4.1 | 1.30.1 | 2.0.13 |
136136
| 2.5.0 | 1.47.0 | 3.0.0 |
137+
| 2.6.0 | 1.48.2 | 3.0.0 |
137138

138139
Notable differences between ACCP and ACCP-FIPS:
139140
* ACCP uses [the latest release of AWS-LC](https://github.com/aws/aws-lc/releases), whereas, ACCP-FIPS uses [the fips-2022-11-02 branch of AWS-LC](https://github.com/aws/aws-lc/tree/fips-2022-11-02).

aws-lc

build.gradle

+6-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ plugins {
1414

1515
group = 'software.amazon.cryptools'
1616
version = '2.5.0'
17-
ext.awsLcMainTag = 'v1.47.0'
17+
ext.awsLcMainTag = 'v1.48.2'
1818
ext.awsLcFipsTag = 'AWS-LC-FIPS-3.0.0'
1919
ext.isExperimentalFips = Boolean.getBoolean('EXPERIMENTAL_FIPS')
2020
ext.isFips = ext.isExperimentalFips || Boolean.getBoolean('FIPS')
@@ -260,7 +260,7 @@ task buildAwsLc {
260260
args '-DCMAKE_BUILD_TYPE=RelWithDebInfo'
261261
args "-DCMAKE_INSTALL_PREFIX=${sharedObjectOutDir}"
262262
args "-DCMAKE_VERBOSE_MAKEFILE:BOOL=ON"
263-
263+
def cmakeCFlags = ""
264264

265265
if (isFips) {
266266
println "Building AWS-LC in FIPS mode"
@@ -269,14 +269,16 @@ task buildAwsLc {
269269

270270
if (allowFipsTestBreak) {
271271
println "Building AWS-LC with hooks to break FIPS tests"
272-
args '-DFIPS_BREAK_TEST=TESTS'
272+
cmakeCFlags += '-DBORINGSSL_FIPS_BREAK_TESTS '
273273
}
274274

275275
if (isFipsSelfTestFailureSkipAbort) {
276276
println "Building AWS-LC to call callback instead of aborting on self-test failure"
277-
args '-DCMAKE_C_FLAGS="-DAWSLC_FIPS_FAILURE_CALLBACK"'
277+
cmakeCFlags += '-DAWSLC_FIPS_FAILURE_CALLBACK '
278278
}
279279

280+
args "-DCMAKE_C_FLAGS='${cmakeCFlags}'"
281+
280282
args '.'
281283
}
282284
}

tst/com/amazon/corretto/crypto/provider/test/FipsStatusTest.java

+21-11
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
@ResourceLock(value = TestUtil.RESOURCE_GLOBAL, mode = ResourceAccessMode.READ_WRITE)
2929
public class FipsStatusTest {
3030

31-
private final AmazonCorrettoCryptoProvider provider = AmazonCorrettoCryptoProvider.INSTANCE;
31+
private static final AmazonCorrettoCryptoProvider provider = AmazonCorrettoCryptoProvider.INSTANCE;
3232
private static final String PWCT_BREAKAGE_ENV_VAR = "BORINGSSL_FIPS_BREAK_TEST";
3333

3434
@Test
@@ -55,18 +55,30 @@ public void givenAccpBuiltWithFips_whenAWS_LC_fips_failure_callback_expectExcept
5555
}
5656
}
5757

58-
private void testPwctBreakage(final String algo, String envVarValue) throws Exception {
58+
// Key generation should ~never fail under normal conditions, so consider a breakage to
59+
// indicate that AWS-LC was built with the FIPS_BREAK_TEST build flag set.
60+
private static boolean awsLcIsBuiltWitFipshBreakTest() throws Exception {
61+
final String algorithm = "RSA";
62+
KeyPairGenerator kpg = KeyPairGenerator.getInstance(algorithm, provider);
63+
TestUtil.setEnv(PWCT_BREAKAGE_ENV_VAR, String.format("%s_PWCT", algorithm));
64+
try {
65+
kpg.generateKeyPair();
66+
} catch (RuntimeCryptoException e) {
67+
return true;
68+
} finally {
69+
TestUtil.setEnv(PWCT_BREAKAGE_ENV_VAR, null);
70+
}
71+
return false;
72+
}
73+
74+
private static void testPwctBreakage(final String algo, String envVarValue) throws Exception {
5975
NativeTestHooks.resetFipsStatus();
6076
final KeyPairGenerator kpg = KeyPairGenerator.getInstance(algo, provider);
6177
assertTrue(provider.isFipsStatusOk());
6278
// Set PWCT_BREAKAGE_ENV_VAR for desired keygen test to break it
6379
TestUtil.setEnv(PWCT_BREAKAGE_ENV_VAR, envVarValue);
6480
// Key generation should now fail
65-
if ("Ed25519".equals(algo)) { // TODO: Remove after https://github.com/aws/aws-lc/pull/2256
66-
assertNotNull(kpg.generateKeyPair());
67-
} else {
68-
assertThrows(RuntimeCryptoException.class, () -> kpg.generateKeyPair());
69-
}
81+
assertThrows(RuntimeCryptoException.class, () -> kpg.generateKeyPair());
7082
// Global FIPS status should not be OK, and we shouldn't be able to get more KPG instances
7183
assertTrue(provider.getFipsSelfTestFailures().size() > 0);
7284
assertFalse(provider.isFipsStatusOk());
@@ -86,12 +98,10 @@ private void testPwctBreakage(final String algo, String envVarValue) throws Exce
8698
public void testPwctBreakageSkipAbort() throws Exception {
8799
assumeTrue(provider.isFips());
88100
assumeTrue(provider.isFipsSelfTestFailureSkipAbort());
101+
assumeTrue(awsLcIsBuiltWitFipshBreakTest());
89102
testPwctBreakage("RSA", "RSA_PWCT");
90103
testPwctBreakage("EC", "ECDSA_PWCT");
91-
// TODO: remove check after https://github.com/corretto/amazon-corretto-crypto-provider/pull/438
92-
if (TestUtil.getJavaVersion() >= 15) {
93-
testPwctBreakage("Ed25519", "EDDSA_PWCT");
94-
}
104+
testPwctBreakage("Ed25519", "EDDSA_PWCT");
95105
if (provider.isExperimentalFips()) { // can be removed when AWS-LC-FIPS supports ML-DSA
96106
testPwctBreakage("ML-DSA", "MLDSA_PWCT");
97107
}

0 commit comments

Comments
 (0)