@@ -23,13 +23,16 @@ const FIPS_ENABLE_ERROR_STRING = 'OpenSSL error when trying to enable FIPS:';
2323const CNF_FIPS_ON = fixtures . path ( 'openssl_fips_enabled.cnf' ) ;
2424const CNF_FIPS_OFF = fixtures . path ( 'openssl_fips_disabled.cnf' ) ;
2525
26+ const kNoFailure = 0 ;
27+ const kGenericUserError = 1 ;
28+
2629let num_children_ok = 0 ;
2730
2831function sharedOpenSSL ( ) {
2932 return process . config . variables . node_shared_openssl ;
3033}
3134
32- function testHelper ( stream , args , expectedOutput , cmd , env ) {
35+ function testHelper ( stream , args , expectedStatus , expectedOutput , cmd , env ) {
3336 const fullArgs = args . concat ( [ '-e' , `console.log(${ cmd } )` ] ) ;
3437 const child = spawnSync ( process . execPath , fullArgs , {
3538 cwd : path . dirname ( process . execPath ) ,
@@ -56,6 +59,7 @@ function testHelper(stream, args, expectedOutput, cmd, env) {
5659 // Normal path where we expect either FIPS enabled or disabled.
5760 assert . strictEqual ( getFipsValue , expectedOutput ) ;
5861 }
62+ assert . strictEqual ( child . status , expectedStatus ) ;
5963 childOk ( child ) ;
6064 }
6165
@@ -66,6 +70,7 @@ function testHelper(stream, args, expectedOutput, cmd, env) {
6670testHelper (
6771 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
6872 [ '--enable-fips' ] ,
73+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
6974 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_ENABLE_ERROR_STRING ,
7075 'process.versions' ,
7176 process . env ) ;
@@ -74,6 +79,7 @@ testHelper(
7479testHelper (
7580 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
7681 [ '--force-fips' ] ,
82+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
7783 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_ENABLE_ERROR_STRING ,
7884 'process.versions' ,
7985 process . env ) ;
@@ -85,6 +91,7 @@ if (!sharedOpenSSL()) {
8591 testHelper (
8692 'stdout' ,
8793 [ ] ,
94+ kNoFailure ,
8895 FIPS_DISABLED ,
8996 'require("crypto").getFips()' ,
9097 { ...process . env , 'OPENSSL_CONF' : ' ' } ) ;
@@ -94,6 +101,7 @@ if (!sharedOpenSSL()) {
94101testHelper (
95102 'stderr' ,
96103 [ ] ,
104+ kGenericUserError ,
97105 'Calling crypto.setFips() is not supported in workers' ,
98106 'new worker_threads.Worker(\'require("crypto").setFips(true);\', { eval: true })' ,
99107 process . env ) ;
@@ -120,6 +128,7 @@ if (!sharedOpenSSL() && !hasOpenSSL3) {
120128 testHelper (
121129 'stdout' ,
122130 [ `--openssl-config=${ CNF_FIPS_ON } ` ] ,
131+ kNoFailure ,
123132 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_DISABLED ,
124133 'require("crypto").getFips()' ,
125134 process . env ) ;
@@ -128,6 +137,7 @@ if (!sharedOpenSSL() && !hasOpenSSL3) {
128137 testHelper (
129138 'stdout' ,
130139 [ ] ,
140+ kNoFailure ,
131141 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_DISABLED ,
132142 'require("crypto").getFips()' ,
133143 Object . assign ( { } , process . env , { 'OPENSSL_CONF' : CNF_FIPS_ON } ) ) ;
@@ -136,6 +146,7 @@ if (!sharedOpenSSL() && !hasOpenSSL3) {
136146 testHelper (
137147 'stdout' ,
138148 [ `--openssl-config=${ CNF_FIPS_ON } ` ] ,
149+ kNoFailure ,
139150 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_DISABLED ,
140151 'require("crypto").getFips()' ,
141152 Object . assign ( { } , process . env , { 'OPENSSL_CONF' : CNF_FIPS_OFF } ) ) ;
@@ -149,6 +160,7 @@ if (!hasOpenSSL3) {
149160 testHelper (
150161 'stdout' ,
151162 [ `--openssl-config=${ CNF_FIPS_OFF } ` ] ,
163+ kNoFailure ,
152164 FIPS_DISABLED ,
153165 'require("crypto").getFips()' ,
154166 Object . assign ( { } , process . env , { 'OPENSSL_CONF' : CNF_FIPS_ON } ) ) ;
@@ -157,20 +169,23 @@ if (!hasOpenSSL3) {
157169 testHelper (
158170 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
159171 [ '--enable-fips' , `--openssl-config=${ CNF_FIPS_OFF } ` ] ,
172+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
160173 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
161174 'require("crypto").getFips()' ,
162175 process . env ) ;
163176 // --force-fips should take precedence over OpenSSL config file
164177 testHelper (
165178 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
166179 [ '--force-fips' , `--openssl-config=${ CNF_FIPS_OFF } ` ] ,
180+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
167181 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
168182 'require("crypto").getFips()' ,
169183 process . env ) ;
170184 // --enable-fips should turn FIPS mode on
171185 testHelper (
172186 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
173187 [ '--enable-fips' ] ,
188+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
174189 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
175190 'require("crypto").getFips()' ,
176191 process . env ) ;
@@ -179,6 +194,7 @@ if (!hasOpenSSL3) {
179194 testHelper (
180195 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
181196 [ '--force-fips' ] ,
197+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
182198 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
183199 'require("crypto").getFips()' ,
184200 process . env ) ;
@@ -187,6 +203,7 @@ if (!hasOpenSSL3) {
187203 testHelper (
188204 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
189205 [ '--enable-fips' ] ,
206+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
190207 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
191208 'require("crypto").getFips()' ,
192209 Object . assign ( { } , process . env , { 'OPENSSL_CONF' : CNF_FIPS_OFF } ) ) ;
@@ -195,6 +212,7 @@ if (!hasOpenSSL3) {
195212 testHelper (
196213 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
197214 [ '--force-fips' ] ,
215+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
198216 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
199217 'require("crypto").getFips()' ,
200218 Object . assign ( { } , process . env , { 'OPENSSL_CONF' : CNF_FIPS_OFF } ) ) ;
@@ -203,6 +221,7 @@ if (!hasOpenSSL3) {
203221 testHelper (
204222 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
205223 [ ] ,
224+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
206225 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
207226 '(require("crypto").setFips(true),' +
208227 'require("crypto").getFips())' ,
@@ -212,6 +231,7 @@ if (!hasOpenSSL3) {
212231 testHelper (
213232 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
214233 [ ] ,
234+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
215235 testFipsCrypto ( ) ? FIPS_DISABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
216236 '(require("crypto").setFips(true),' +
217237 'require("crypto").setFips(false),' +
@@ -222,6 +242,7 @@ if (!hasOpenSSL3) {
222242 testHelper (
223243 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
224244 [ `--openssl-config=${ CNF_FIPS_OFF } ` ] ,
245+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
225246 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
226247 '(require("crypto").setFips(true),' +
227248 'require("crypto").getFips())' ,
@@ -231,6 +252,7 @@ if (!hasOpenSSL3) {
231252 testHelper (
232253 'stdout' ,
233254 [ `--openssl-config=${ CNF_FIPS_ON } ` ] ,
255+ kNoFailure ,
234256 FIPS_DISABLED ,
235257 '(require("crypto").setFips(false),' +
236258 'require("crypto").getFips())' ,
@@ -240,6 +262,7 @@ if (!hasOpenSSL3) {
240262 testHelper (
241263 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
242264 [ '--enable-fips' ] ,
265+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
243266 testFipsCrypto ( ) ? FIPS_DISABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
244267 '(require("crypto").setFips(false),' +
245268 'require("crypto").getFips())' ,
@@ -249,6 +272,7 @@ if (!hasOpenSSL3) {
249272 testHelper (
250273 'stderr' ,
251274 [ '--force-fips' ] ,
275+ kGenericUserError ,
252276 testFipsCrypto ( ) ? FIPS_ERROR_STRING2 : FIPS_UNSUPPORTED_ERROR_STRING ,
253277 'require("crypto").setFips(false)' ,
254278 process . env ) ;
@@ -257,6 +281,7 @@ if (!hasOpenSSL3) {
257281 testHelper (
258282 testFipsCrypto ( ) ? 'stdout' : 'stderr' ,
259283 [ '--force-fips' ] ,
284+ testFipsCrypto ( ) ? kNoFailure : kGenericUserError ,
260285 testFipsCrypto ( ) ? FIPS_ENABLED : FIPS_UNSUPPORTED_ERROR_STRING ,
261286 '(require("crypto").setFips(true),' +
262287 'require("crypto").getFips())' ,
@@ -266,6 +291,7 @@ if (!hasOpenSSL3) {
266291 testHelper (
267292 'stderr' ,
268293 [ '--force-fips' , '--enable-fips' ] ,
294+ kGenericUserError ,
269295 testFipsCrypto ( ) ? FIPS_ERROR_STRING2 : FIPS_UNSUPPORTED_ERROR_STRING ,
270296 'require("crypto").setFips(false)' ,
271297 process . env ) ;
@@ -274,6 +300,7 @@ if (!hasOpenSSL3) {
274300 testHelper (
275301 'stderr' ,
276302 [ '--enable-fips' , '--force-fips' ] ,
303+ kGenericUserError ,
277304 testFipsCrypto ( ) ? FIPS_ERROR_STRING2 : FIPS_UNSUPPORTED_ERROR_STRING ,
278305 'require("crypto").setFips(false)' ,
279306 process . env ) ;
0 commit comments