1
0
mirror of https://github.com/haiwen/seafile-server.git synced 2025-09-07 02:10:05 +00:00

Encrypted library version 3: use different salt for each library.

This commit is contained in:
Jonathan Xu
2019-03-19 17:42:36 +08:00
parent d4713418bb
commit 17ef884861
20 changed files with 243 additions and 88 deletions

View File

@@ -650,8 +650,10 @@ commit_to_json_object (SeafCommit *commit)
json_object_set_int_member (object, "enc_version", commit->enc_version);
if (commit->enc_version >= 1)
json_object_set_string_member (object, "magic", commit->magic);
if (commit->enc_version == 2)
if (commit->enc_version >= 2)
json_object_set_string_member (object, "key", commit->random_key);
if (commit->enc_version >= 3)
json_object_set_string_member (object, "salt", commit->salt);
}
if (commit->no_local_history)
json_object_set_int_member (object, "no_local_history", 1);
@@ -687,6 +689,7 @@ commit_from_json_object (const char *commit_id, json_t *object)
int enc_version = 0;
const char *magic = NULL;
const char *random_key = NULL;
const char *salt = NULL;
int no_local_history = 0;
int version = 0;
int conflict = 0, new_merge = 0;
@@ -723,8 +726,10 @@ commit_from_json_object (const char *commit_id, json_t *object)
magic = json_object_get_string_member (object, "magic");
}
if (enc_version == 2)
if (enc_version >= 2)
random_key = json_object_get_string_member (object, "key");
if (enc_version >= 3)
salt = json_object_get_string_member (object, "salt");
if (json_object_has_member (object, "no_local_history"))
no_local_history = json_object_get_int_member (object, "no_local_history");
@@ -762,6 +767,14 @@ commit_from_json_object (const char *commit_id, json_t *object)
if (!random_key || strlen(random_key) != 96)
return NULL;
break;
case 3:
if (!magic || strlen(magic) != 64)
return NULL;
if (!random_key || strlen(random_key) != 96)
return NULL;
if (!salt || strlen(salt) != 64)
return NULL;
break;
default:
seaf_warning ("Unknown encryption version %d.\n", enc_version);
return NULL;
@@ -790,8 +803,10 @@ commit_from_json_object (const char *commit_id, json_t *object)
commit->enc_version = enc_version;
if (enc_version >= 1)
commit->magic = g_strdup(magic);
if (enc_version == 2)
if (enc_version >= 2)
commit->random_key = g_strdup (random_key);
if (enc_version >= 3)
commit->salt = g_strdup(salt);
}
if (no_local_history)
commit->no_local_history = TRUE;