@@ -950,6 +950,7 @@ gboolean _crypto_luks_format (const gchar *device,
950950 gchar * msg = NULL ;
951951 const gchar * crypt_version = NULL ;
952952 GError * l_error = NULL ;
953+ struct crypt_pbkdf_type * pbkdf = NULL ;
953954
954955#ifdef LIBCRYPTSETUP_27
955956 struct crypt_params_hw_opal opal_params = {
@@ -1068,7 +1069,7 @@ gboolean _crypto_luks_format (const gchar *device,
10681069 if (extra ) {
10691070 if (luks_version == BD_CRYPTO_LUKS_VERSION_LUKS1 ) {
10701071
1071- if (extra -> integrity || extra -> sector_size || extra -> label || extra -> subsystem || extra -> pbkdf ) {
1072+ if (extra -> integrity || extra -> sector_size || extra -> label || extra -> subsystem ) {
10721073 g_set_error (& l_error , BD_CRYPTO_ERROR , BD_CRYPTO_ERROR_INVALID_PARAMS ,
10731074 "Invalid extra arguments specified. Only `data_alignment`"
10741075 "and `data_device` are valid for LUKS 1." );
@@ -1079,11 +1080,35 @@ gboolean _crypto_luks_format (const gchar *device,
10791080 return FALSE;
10801081 }
10811082
1083+ if (extra -> pbkdf ) {
1084+ if (g_strcmp0 (extra -> pbkdf -> type , "pbkdf2" ) != 0 ) {
1085+ g_set_error (& l_error , BD_CRYPTO_ERROR , BD_CRYPTO_ERROR_INVALID_PARAMS ,
1086+ "Invalid pbkdf specified. Only `pbkdf2` is valid for LUKS 1." );
1087+ crypt_free (cd );
1088+ g_strfreev (cipher_specs );
1089+ bd_utils_report_finished (progress_id , l_error -> message );
1090+ g_propagate_error (error , l_error );
1091+ return FALSE;
1092+ }
1093+
1094+ pbkdf = get_pbkdf_params (extra -> pbkdf , & l_error );
1095+ if (pbkdf == NULL && l_error != NULL ) {
1096+ crypt_free (cd );
1097+ g_strfreev (cipher_specs );
1098+ bd_utils_report_finished (progress_id , l_error -> message );
1099+ g_propagate_prefixed_error (error , l_error ,
1100+ "Failed to get PBKDF parameters for '%s'." , device );
1101+ return FALSE;
1102+ }
1103+ crypt_set_pbkdf_type (cd , pbkdf );
1104+ }
1105+
10821106 struct crypt_params_luks1 params = ZERO_INIT ;
10831107 params .data_alignment = extra -> data_alignment ;
10841108 params .data_device = extra -> data_device ;
10851109 ret = crypt_format (cd , crypt_version , cipher_specs [0 ], cipher_specs [1 ],
10861110 NULL , NULL , key_size , & params );
1111+ g_free (pbkdf );
10871112 }
10881113 else if (luks_version == BD_CRYPTO_LUKS_VERSION_LUKS2 ) {
10891114 struct crypt_params_luks2 params = ZERO_INIT ;
0 commit comments