@@ -86,12 +86,22 @@ void print_OSSL_errors(void)
86
86
}
87
87
}
88
88
89
- /* Enclave ECALL */
89
+ OSSL_PROVIDER *g_prov = NULL ;
90
+
91
+ /* Enclave ECALLs */
90
92
int enclave_fips_test ()
93
+ {
94
+ enclave_fips_provider_load ();
95
+ enclave_fips_provider_test ();
96
+ enclave_fips_provider_unload ();
97
+
98
+ return 0 ;
99
+ }
100
+
101
+ int enclave_fips_provider_load (void )
91
102
{
92
103
int ret = -1 ;
93
104
void *entry = NULL ;
94
- OSSL_PROVIDER *prov = NULL ;
95
105
96
106
printf (ANSI_COLOR_YELLOW " %s started\n " ANSI_COLOR_RESET, __FUNCTION__);
97
107
@@ -120,20 +130,20 @@ int enclave_fips_test()
120
130
PRINT_PASS (" FIPS provider added to the OSSL_PROVIDER store\n " );
121
131
}
122
132
123
- /* Check if the "fips" provider is available */
124
- if (1 == OSSL_PROVIDER_available (NULL , " fips" ))
133
+ /* Verify the "fips" provider is available before attempting to load it */
134
+ if (0 == OSSL_PROVIDER_available (NULL , " fips" ))
125
135
{
126
- PRINT_PASS (" FIPS provider is available\n " );
136
+ PRINT_ERROR (" FIPS provider is not available\n " );
137
+ print_OSSL_errors ();
127
138
}
128
139
else
129
140
{
130
- PRINT_ERROR (" FIPS provider is not available\n " );
131
- print_OSSL_errors ();
141
+ PRINT_PASS (" FIPS provider is available\n " );
132
142
}
133
143
134
144
/* Load the FIPS provider */
135
- prov = OSSL_PROVIDER_load (NULL , " fips" );
136
- if (NULL == prov )
145
+ g_prov = OSSL_PROVIDER_load (NULL , " fips" );
146
+ if (NULL == g_prov )
137
147
{
138
148
PRINT_ERROR (" FIPS provider failed to load\n " );
139
149
print_OSSL_errors ();
@@ -145,8 +155,8 @@ int enclave_fips_test()
145
155
}
146
156
#else
147
157
/* Load the default provider */
148
- prov = OSSL_PROVIDER_load (NULL , " default" );
149
- if (NULL == prov )
158
+ g_prov = OSSL_PROVIDER_load (NULL , " default" );
159
+ if (NULL == g_prov )
150
160
{
151
161
printf (" Default provider failed to load\n " );
152
162
print_OSSL_errors ();
@@ -157,17 +167,17 @@ int enclave_fips_test()
157
167
printf (" Default provider loaded\n " );
158
168
}
159
169
#endif
160
- if (1 == OSSL_PROVIDER_self_test (prov ))
170
+ if (1 == OSSL_PROVIDER_self_test (g_prov ))
161
171
{
162
172
PRINT_PASS (" OSSL_PROVIDER_self_test passed\n " );
163
- printf (" Provider name: %s\n " , OSSL_PROVIDER_get0_name (prov ));
173
+ printf (" Provider name: %s\n " , OSSL_PROVIDER_get0_name (g_prov ));
164
174
const char *build = NULL ;
165
175
OSSL_PARAM request[] = {
166
176
{ " buildinfo" , OSSL_PARAM_UTF8_PTR, &build, 0 , 0 },
167
177
{ NULL , 0 , NULL , 0 , 0 }
168
178
};
169
179
170
- OSSL_PROVIDER_get_params (prov , request);
180
+ OSSL_PROVIDER_get_params (g_prov , request);
171
181
printf (" Provider buildinfo: %s\n " , build);
172
182
}
173
183
else
@@ -180,7 +190,19 @@ int enclave_fips_test()
180
190
// Initialize SGXSSL crypto
181
191
OPENSSL_init_crypto (0 , NULL );
182
192
183
- /* Perform some crypto tests */
193
+ end:
194
+ printf (ANSI_COLOR_YELLOW " %s completed\n " ANSI_COLOR_RESET, __FUNCTION__);
195
+
196
+ return 0 ;
197
+ }
198
+
199
+ /*
200
+ * Perform some crypto tests
201
+ */
202
+ int enclave_fips_provider_test (void )
203
+ {
204
+ int ret = -1 ;
205
+
184
206
ret = aesgcm_test ();
185
207
if (0 != ret)
186
208
{
@@ -206,7 +228,14 @@ int enclave_fips_test()
206
228
PRINT_PASS (" HMAC test completed\n " );
207
229
208
230
end:
209
- OSSL_PROVIDER_unload (prov);
231
+ printf (ANSI_COLOR_YELLOW " %s completed\n " ANSI_COLOR_RESET, __FUNCTION__);
232
+
233
+ return 0 ;
234
+ }
235
+
236
+ int enclave_fips_provider_unload (void )
237
+ {
238
+ OSSL_PROVIDER_unload (g_prov);
210
239
211
240
printf (ANSI_COLOR_YELLOW " %s completed\n " ANSI_COLOR_RESET, __FUNCTION__);
212
241
0 commit comments