Allow setting custom initialization vector for FileAccessEncrypted. Add export setting to set static seed for PCK encryption initialization vectors.

This commit is contained in:
bruvzg
2024-11-07 12:32:02 +02:00
committed by Pāvels Nadtočajevs
parent cb411fa960
commit 45593d45b3
18 changed files with 200 additions and 52 deletions

View File

@ -382,10 +382,16 @@ void ProjectExportDialog::_edit_preset(int p_index) {
bool enc_pck_mode = current->get_enc_pck();
enc_pck->set_pressed(enc_pck_mode);
uint64_t seed = current->get_seed();
if (!updating_seed) {
seed_input->set_text(itos(seed));
}
enc_directory->set_disabled(!enc_pck_mode);
enc_in_filters->set_editable(enc_pck_mode);
enc_ex_filters->set_editable(enc_pck_mode);
script_key->set_editable(enc_pck_mode);
seed_input->set_editable(enc_pck_mode);
bool enc_directory_mode = current->get_enc_directory();
enc_directory->set_pressed(enc_directory_mode);
@ -591,6 +597,21 @@ void ProjectExportDialog::_enc_pck_changed(bool p_pressed) {
_update_current_preset();
}
void ProjectExportDialog::_seed_input_changed(const String &p_text) {
if (updating) {
return;
}
Ref<EditorExportPreset> current = get_current_preset();
ERR_FAIL_COND(current.is_null());
current->set_seed(seed_input->get_text().to_int());
updating_seed = true;
_update_current_preset();
updating_seed = false;
}
void ProjectExportDialog::_enc_directory_changed(bool p_pressed) {
if (updating) {
return;
@ -1623,6 +1644,10 @@ ProjectExportDialog::ProjectExportDialog() {
sec_vb->add_child(script_key_error);
sections->add_child(sec_scroll_container);
seed_input = memnew(LineEdit);
seed_input->connect(SceneStringName(text_changed), callable_mp(this, &ProjectExportDialog::_seed_input_changed));
sec_vb->add_margin_child(TTR("Initialization vector seed"), seed_input);
Label *sec_info = memnew(Label);
sec_info->set_text(TTR("Note: Encryption key needs to be stored in the binary,\nyou need to build the export templates from source."));
sec_vb->add_child(sec_info);