Marino Faggiana 1 year ago
parent
commit
1167b4ae89

+ 1 - 1
Brand/Database.swift

@@ -26,4 +26,4 @@ import Foundation
 // Database Realm
 //
 let databaseName                    = "nextcloud.realm"
-let databaseSchemaVersion: UInt64   = 311
+let databaseSchemaVersion: UInt64   = 312

+ 8 - 2
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -87,6 +87,7 @@ class tableE2eMetadataV2: Object {
 class tableE2eUsersV2: Object {
 
     @Persisted(primaryKey: true) var accountServerUrlUserId = ""
+    @Persisted var account = ""
     @Persisted var certificate = ""
     @Persisted var encryptedFiledropKey: String?
     @Persisted var encryptedMetadataKey: String?
@@ -295,6 +296,7 @@ extension NCManageDatabase {
             try realm.write {
                 let addObject = tableE2eUsersV2()
                 addObject.accountServerUrlUserId = account + serverUrl + userId
+                addObject.account = account
                 addObject.certificate = certificate
                 addObject.encryptedFiledropKey = encryptedFiledropKey
                 addObject.encryptedMetadataKey = encryptedMetadataKey
@@ -311,12 +313,16 @@ extension NCManageDatabase {
         }
     }
 
-    func getE2EUsersV2(account: String, serverUrl: String, userId: String) -> tableE2eUsersV2? {
+    func getE2EUsersV2(account: String, serverUrl: String, userId: String?) -> Results<tableE2eUsersV2>? {
 
         do {
             let realm = try Realm()
             realm.refresh()
-            return realm.objects(tableE2eUsersV2.self).filter("accountServerUrlUserId == %@", account + serverUrl + userId).first
+            if let userId {
+                return realm.objects(tableE2eUsersV2.self).filter("accountServerUrlUserId == %@", account + serverUrl + userId)
+            } else {
+                return realm.objects(tableE2eUsersV2.self).filter("account == %@ AND serverUrl == %@", account, serverUrl)
+            }
         } catch let error as NSError {
             NextcloudKit.shared.nkCommonInstance.writeLog("Could not access database: \(error)")
         }

+ 8 - 3
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -34,6 +34,9 @@ extension NCEndToEndMetadata {
     func encoderMetadataV20(account: String, serverUrl: String, userId: String) -> (metadata: String?, signature: String?) {
 
         var signature: String?
+        let e2eEncryptions = NCManageDatabase.shared.getE2eEncryptions(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl))
+        let e2eMetadataV2 = NCManageDatabase.shared.getE2eMetadataV2(account: account, serverUrl: serverUrl)
+        let e2eUsers = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId)
 
         // Signature
 
@@ -139,8 +142,10 @@ extension NCEndToEndMetadata {
             // metadata
             //
 
-            if let tableE2eUsersV2 = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId), let metadataKey = tableE2eUsersV2.metadataKey {
-                if let decrypted = NCEndToEndEncryption.sharedManager().decryptPayloadFile(metadata.ciphertext, key: tableE2eUsersV2.metadataKey, initializationVector: metadata.nonce, authenticationTag: metadata.authenticationTag) {
+            if let tableE2eUsersV2 = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId),
+               let metadataKey = tableE2eUsersV2.first?.metadataKey,
+               let decryptedMetadataKey = tableE2eUsersV2.first?.decryptedMetadataKey {
+                if let decrypted = NCEndToEndEncryption.sharedManager().decryptPayloadFile(metadata.ciphertext, key: metadataKey, initializationVector: metadata.nonce, authenticationTag: metadata.authenticationTag) {
                     if decrypted.isGzipped {
                         do {
                             let data = try decrypted.gunzipped()
@@ -155,7 +160,7 @@ extension NCEndToEndMetadata {
 
                                 // Checksums
                                 if let keyChecksums,
-                                   let hash = NCEndToEndEncryption.sharedManager().createSHA256(from: tableE2eUsersV2.decryptedMetadataKey),
+                                   let hash = NCEndToEndEncryption.sharedManager().createSHA256(from: decryptedMetadataKey),
                                    !keyChecksums.contains(hash) {
                                     return NKError(errorCode: NCGlobal.shared.errorE2EEKeyChecksums, errorDescription: NSLocalizedString("_e2ee_checksums_error_", comment: ""))
                                 }