3636#define DEFAULT_OUTPUT_P12_PATH "output.p12"
3737#define DEFAULT_CFG_FILENAME "libcertifier.cfg"
3838#define DEFAULT_USER_CFG_FILENAME "/usr/local/etc/certifier/libcertifier.cfg"
39+
40+ // Helper function to validate Sectigo key type
41+ int is_valid_sectigo_key_type (const char * key_type )
42+ {
43+ if (!key_type ) {
44+ return 0 ;
45+ }
46+
47+ const char * valid_key_types [] = {
48+ "RSA-2048" , "RSA-3072" , "RSA-4096" , "RSA-8192" ,
49+ "ECC-PRIME256V1" , "ECC-SECP384R1"
50+ };
51+
52+ for (int i = 0 ; i < sizeof (valid_key_types ) / sizeof (valid_key_types [0 ]); i ++ ) {
53+ if (strcmp (key_type , valid_key_types [i ]) == 0 ) {
54+ return 1 ;
55+ }
56+ }
57+
58+ return 0 ;
59+ }
3960#define DEFAULT_GLOBAL_CFG_FILENAME "/etc/certifier/libcertifier.cfg"
4061#define DEFAULT_AUTH_TYPE "X509"
4162#define DEFAULT_CA_INFO "libcertifier-cert.crt"
@@ -202,7 +223,7 @@ struct _PropMap
202223 char * mtls_filename ;
203224 char * mtls_p12_filename ;
204225
205- //Sectigo properties (common properties like auth_token, source, etc. are above)
226+ //Sectigo properties (common properties like auth_token, validity days, source, etc. are above)
206227 char * common_name ;
207228 char * group_name ;
208229 char * group_email ;
@@ -214,6 +235,8 @@ struct _PropMap
214235 char * subject_alt_names ;
215236 char * owner_email ;
216237 char * sectigo_url ;
238+ char * devhub_id ;
239+ char * key_type ;
217240};
218241
219242static void free_prop_map_values (CertifierPropMap * prop_map );
@@ -398,6 +421,15 @@ int sectigo_property_set(CertifierPropMap * prop_map, int name, const void * val
398421 case CERTIFIER_OPT_SECTIGO_URL :
399422 prop_map -> sectigo_url = XSTRDUP ((const char * )value );
400423 break ;
424+ case CERTIFIER_OPT_SECTIGO_DEVHUB_ID :
425+ prop_map -> devhub_id = XSTRDUP ((const char * )value );
426+ break ;
427+ case CERTIFIER_OPT_SECTIGO_VALIDITY_DAYS :
428+ prop_map -> validity_days = (int )(size_t )value ;
429+ break ;
430+ case CERTIFIER_OPT_SECTIGO_KEY_TYPE :
431+ prop_map -> key_type = XSTRDUP ((const char * )value );
432+ break ;
401433 default :
402434 log_warn ("sectigo_property_set: unrecognized property [%d]" , name );
403435 retval = CERTIFIER_ERR_PROPERTY_SET_10 ;
@@ -901,7 +933,15 @@ void * property_get(CertifierPropMap * prop_map, CERTIFIER_OPT name)
901933 case CERTIFIER_OPT_SECTIGO_URL :
902934 retval = (void * ) prop_map -> sectigo_url ;
903935 break ;
904-
936+ case CERTIFIER_OPT_SECTIGO_DEVHUB_ID :
937+ retval = (void * ) prop_map -> devhub_id ;
938+ break ;
939+ case CERTIFIER_OPT_SECTIGO_VALIDITY_DAYS :
940+ retval = (void * ) (size_t ) prop_map -> validity_days ;
941+ break ;
942+ case CERTIFIER_OPT_SECTIGO_KEY_TYPE :
943+ retval = (void * ) prop_map -> key_type ;
944+ break ;
905945 default :
906946 log_warn ("property_get: unrecognized property [%d]" , name );
907947 retval = NULL ;
@@ -1370,6 +1410,12 @@ static int load_sectigo_fields_from_json(CertifierPropMap *propMap, JSON_Object
13701410 continue ;
13711411 }
13721412
1413+ if (strcmp (key , "libcertifier.sectigo.validity.days" ) == 0 ) {
1414+ int validity_days = json_object_get_number (root , key );
1415+ log_info ("Loaded sectigo validity days: %d from config file." , validity_days );
1416+ sectigo_property_set (propMap , CERTIFIER_OPT_SECTIGO_VALIDITY_DAYS , (void * ) (size_t ) validity_days );
1417+ }
1418+
13731419 const char * value_str = json_object_get_string (root , key );
13741420 if (value_str && strlen (value_str ) > 0 ) { // Only process non-empty values
13751421 // Map config key to property enum
@@ -1417,6 +1463,18 @@ static int load_sectigo_fields_from_json(CertifierPropMap *propMap, JSON_Object
14171463 log_info ("Loaded sectigo URL: %s from config file." , value_str );
14181464 sectigo_property_set (propMap , CERTIFIER_OPT_SECTIGO_URL , value_str );
14191465 }
1466+ else if (strcmp (key , "libcertifier.sectigo.devhub.id" ) == 0 ) {
1467+ log_info ("Loaded sectigo devhub id: %s from config file." , value_str );
1468+ sectigo_property_set (propMap , CERTIFIER_OPT_SECTIGO_DEVHUB_ID , value_str );
1469+ }
1470+ else if (strcmp (key , "libcertifier.sectigo.key.type" ) == 0 ) {
1471+ if (!is_valid_sectigo_key_type (value_str )) {
1472+ log_error ("Invalid key type '%s' in config file. Supported: [RSA-2048, RSA-3072, RSA-4096, RSA-8192, ECC-PRIME256V1, ECC-SECP384R1]" , value_str );
1473+ exit (0 );
1474+ }
1475+ log_info ("Loaded sectigo key type: %s from config file." , value_str );
1476+ sectigo_property_set (propMap , CERTIFIER_OPT_SECTIGO_KEY_TYPE , value_str );
1477+ }
14201478 // Add more mappings as needed
14211479 }
14221480 }
@@ -1598,6 +1656,8 @@ static void free_prop_map_values(CertifierPropMap * prop_map)
15981656 FV (prop_map -> subject_alt_names );
15991657 FV (prop_map -> owner_email );
16001658 FV (prop_map -> sectigo_url );
1659+ FV (prop_map -> devhub_id );
1660+ FV (prop_map -> key_type );
16011661}
16021662
16031663CertifierPropMap * property_new_sectigo (void )
0 commit comments