@@ -235,6 +235,13 @@ static int load_echkeys(SSL_CTX *ctx, const char *echdir, server_rec *s, apr_poo
235235 return -1 ;
236236 }
237237
238+ OSSL_ECHSTORE * const es = OSSL_ECHSTORE_new (NULL , NULL );
239+ if (es == NULL ) {
240+ ap_log_error (APLOG_MARK , APLOG_EMERG , 0 , s , APLOGNO (10507 )
241+ "load_echkeys: can't alloc store" );
242+ return -1 ;
243+ }
244+
238245 while ((apr_dir_read (& direntry , finfo_flags , dir )) == APR_SUCCESS ) {
239246 const char * fname ;
240247 if (direntry .filetype == APR_DIR ) {
@@ -262,26 +269,38 @@ static int load_echkeys(SSL_CTX *ctx, const char *echdir, server_rec *s, apr_poo
262269 apr_finfo_t theinfo ;
263270 if ( (apr_stat (& theinfo , fname , APR_FINFO_MIN , ptemp )== APR_SUCCESS ) ) {
264271 keystried ++ ;
265- if ( SSL_CTX_ech_server_enable_file ( ctx , fname ,
266- SSL_ECH_USE_FOR_RETRY ) != 1 ) {
267- ap_log_error ( APLOG_MARK , APLOG_INFO , 0 , s , APLOGNO ( 10508 )
268- "load_echkeys: failed for %s (could be non-fatal)" , fname );
269- } else {
272+
273+ BIO * in = BIO_new_file ( fname , "r" );
274+ const int is_retry_config = OSSL_ECH_FOR_RETRY ;
275+ if ( in != NULL
276+ && 1 == OSSL_ECHSTORE_read_pem ( es , in , is_retry_config )) {
270277 ap_log_error (APLOG_MARK , APLOG_TRACE4 , 0 , s , APLOGNO (10509 )
271278 "load_echkeys: worked for %s" ,fname );
272279 keysworked ++ ;
273280 }
281+ else {
282+ ap_log_error (APLOG_MARK , APLOG_INFO , 0 , s , APLOGNO (10508 )
283+ "load_echkeys: failed for %s (could be non-fatal)" ,fname );
284+ }
285+ BIO_free_all (in );
274286 }
275287
276288 }
277289 apr_dir_close (dir );
278290
279291 int keysloaded = 0 ;
280- if (!SSL_CTX_ech_server_get_key_status ( ctx , & keysloaded )) {
292+ if (!OSSL_ECHSTORE_num_keys ( es , & keysloaded )) {
281293 ap_log_error (APLOG_MARK , APLOG_EMERG , 0 , s , APLOGNO (10510 )
282294 "SSL_CTX_ech_server_key_status failed - exiting" );
283295 return -1 ;
284296 }
297+ if (1 != SSL_CTX_set1_echstore (ctx , es )) {
298+ ap_log_error (APLOG_MARK , APLOG_EMERG , 0 , s , APLOGNO (10510 )
299+ "load_echkeys: SSL_CTX_set1_echstore failed" );
300+ OSSL_ECHSTORE_free (es );
301+ return -1 ;
302+ }
303+ OSSL_ECHSTORE_free (es );
285304 if (keysworked == 0 ) {
286305 ap_log_error (APLOG_MARK , APLOG_DEBUG , 0 , s , APLOGNO (10511 )
287306 "load_echkeys: didn't load new keys (%d tried/failed) but we have already some (%d) - continuing" ,
0 commit comments