Take crypto interfaces into use in logger, to encrypt ulog data

- Generate a symmetric encryption key and a nonce value
- Use a public key in keystore to encrypt the symmteric key
- Write the encrypted key and the nonce value to disk into .ulgk, name matching with the encrypted log file
- use quick stream encryption to crypt the .ulg file contents

Signed-off-by: Jukka Laitinen <jukkax@ssrc.tii.ae>
This commit is contained in:
Jukka Laitinen
2021-06-04 16:22:48 +03:00
committed by Beat Küng
parent 6b22fe99b7
commit 9472f79307
3 changed files with 180 additions and 4 deletions
+10 -2
View File
@@ -1269,6 +1269,12 @@ int Logger::get_log_file_name(LogType type, char *file_name, size_t file_name_si
replay_suffix = "_replayed";
}
const char *crypto_suffix = "";
#if defined(PX4_CRYPTO)
// TODO: use parameter to check if logfile crypto is enabled
crypto_suffix = "c";
#endif
char *log_file_name = _file_name[(int)type].log_file_name;
if (time_ok) {
@@ -1280,7 +1286,8 @@ int Logger::get_log_file_name(LogType type, char *file_name, size_t file_name_si
char log_file_name_time[16] = "";
strftime(log_file_name_time, sizeof(log_file_name_time), "%H_%M_%S", &tt);
snprintf(log_file_name, sizeof(LogFileName::log_file_name), "%s%s.ulg", log_file_name_time, replay_suffix);
snprintf(log_file_name, sizeof(LogFileName::log_file_name), "%s%s.ulg%s", log_file_name_time, replay_suffix,
crypto_suffix);
snprintf(file_name + n, file_name_size - n, "/%s", log_file_name);
if (notify) {
@@ -1310,7 +1317,8 @@ int Logger::get_log_file_name(LogType type, char *file_name, size_t file_name_si
/* look for the next file that does not exist */
while (file_number <= MAX_NO_LOGFILE) {
/* format log file path: e.g. /fs/microsd/log/sess001/log001.ulg */
snprintf(log_file_name, sizeof(LogFileName::log_file_name), "log%03" PRIu16 "%s.ulg", file_number, replay_suffix);
snprintf(log_file_name, sizeof(LogFileName::log_file_name), "log%03" PRIu16 "%s.ulg%s", file_number, replay_suffix,
crypto_suffix);
snprintf(file_name + n, file_name_size - n, "/%s", log_file_name);
if (!util::file_exist(file_name)) {