Marino Faggiana 1 жил өмнө
parent
commit
a9da7f915d

+ 1 - 1
iOSClient/Data/NCManageDatabase+E2EE.swift

@@ -85,7 +85,7 @@ class tableE2eMetadataV2: Object {
     @Persisted var keyChecksums = List<String>()
     @Persisted var ocIdServerUrl: String = ""
     @Persisted var serverUrl: String = ""
-    @Persisted var version: String = "2.0"
+    @Persisted var version: String = NCGlobal.shared.e2eeVersion20
 
     convenience init(account: String, ocIdServerUrl: String) {
         self.init()

+ 3 - 1
iOSClient/NCGlobal.swift

@@ -121,7 +121,9 @@ class NCGlobal: NSObject {
     // E2EE
     //
     let e2eePassphraseTest                          = "more over television factory tendency independence international intellectual impress interest sentence pony"
-    @objc let e2eeReadVersions                      = ["1.1", "1.2", "2.0"]
+    @objc let e2eeVersions                          = ["1.1", "1.2", "2.0"]
+    let e2eeVersion12                               = "1.2"
+    let e2eeVersion20                               = "2.0"
 
     // CHUNK
     let chunkSizeMBCellular                         = 10000000

+ 2 - 2
iOSClient/Networking/E2EE/NCEndToEndMetadata.swift

@@ -146,9 +146,9 @@ class NCEndToEndMetadata: NSObject {
         }
 
         switch e2EEApiVersion {
-        case "1.2":
+        case NCGlobal.shared.e2eeVersion12:
             return encoderMetadataV12(account: account, serverUrl: serverUrl, ocIdServerUrl: directory.ocId)
-        case "2.0":
+        case NCGlobal.shared.e2eeVersion20:
             return encoderMetadataV20(account: account, serverUrl: serverUrl, ocIdServerUrl: directory.ocId, userId: userId, addUserId: addUserId, addCertificate: addCertificate)
         default:
             return (nil, nil)

+ 2 - 2
iOSClient/Networking/E2EE/NCEndToEndMetadataV1.swift

@@ -61,9 +61,9 @@ extension NCEndToEndMetadata {
         for e2eEncryption in e2eEncryptions {
 
             //
-            // files
+            // files & folders
             //
-            if e2eEncryption.blob == "files" {
+            if e2eEncryption.blob == "files" || e2eEncryption.blob == "folders" {
                 let encrypted = E2eeV12.Encrypted(key: e2eEncryption.key, filename: e2eEncryption.fileName, mimetype: e2eEncryption.mimeType)
                 do {
                     // Create "encrypted"

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

@@ -41,9 +41,9 @@ extension NCEndToEndMetadata {
         let isDirectoryTop = NCUtility.shared.isDirectoryE2EETop(serverUrl: serverUrl, account: account)
         var metadataKey: String?
         var keyChecksums: [String] = []
-
         var usersCodable: [E2eeV20.Users] = []
         var filedropCodable: [String: E2eeV20.Filedrop] = [:]
+        var folders: [String:String] = [:]
         var e2eeJson: String?
         var signature: String?
 
@@ -91,7 +91,7 @@ extension NCEndToEndMetadata {
         }
 
         // tableE2eMetadataV2
-        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, version: "2.0") else {
+        guard let e2eMetadataV2 = NCManageDatabase.shared.incrementCounterE2eMetadataV2(account: account, serverUrl: serverUrl, ocIdServerUrl: ocIdServerUrl, version: NCGlobal.shared.e2eeVersion20) else {
             return (nil, nil)
         }
 
@@ -103,10 +103,12 @@ extension NCEndToEndMetadata {
             if e2eEncryption.blob == "files" {
                 let file = E2eeV20.Files(authenticationTag: e2eEncryption.authenticationTag, filename: e2eEncryption.fileName, key: e2eEncryption.key, mimetype: e2eEncryption.mimeType, nonce: e2eEncryption.initializationVector)
                 filesCodable.updateValue(file, forKey: e2eEncryption.fileNameIdentifier)
+            } else if e2eEncryption.blob == "folders" {
+                folders[e2eEncryption.fileNameIdentifier] = e2eEncryption.fileName
             }
         }
 
-        let ciphertext = E2eeV20.ciphertext(counter: e2eMetadataV2.counter, deleted: false, keyChecksums: keyChecksums, files: filesCodable, folders: [:])
+        let ciphertext = E2eeV20.ciphertext(counter: e2eMetadataV2.counter, deleted: false, keyChecksums: keyChecksums, files: filesCodable, folders: folders)
         var authenticationTag: NSString?
         var initializationVector: NSString?
 
@@ -127,7 +129,7 @@ extension NCEndToEndMetadata {
 
             let metadataCodable = E2eeV20.Metadata(ciphertext: ciphertext, nonce: initializationVector, authenticationTag: authenticationTag)
 
-            let e2eeCodable = E2eeV20(metadata: metadataCodable, users: usersCodable, filedrop: filedropCodable, version: "2.0")
+            let e2eeCodable = E2eeV20(metadata: metadataCodable, users: usersCodable, filedrop: filedropCodable, version: NCGlobal.shared.e2eeVersion20)
             let e2eeData = try JSONEncoder().encode(e2eeCodable)
             e2eeData.printJson()
             e2eeJson = String(data: e2eeData, encoding: .utf8)
@@ -163,14 +165,14 @@ extension NCEndToEndMetadata {
             return NKError(errorCode: NCGlobal.shared.errorE2EE, errorDescription: "Error decoding JSON")
         }
 
-        func addE2eEncryption(fileNameIdentifier: String, filename: String, authenticationTag: String, key: String, initializationVector: String, metadataKey: String, mimetype: String) {
+        func addE2eEncryption(fileNameIdentifier: String, filename: String, authenticationTag: String, key: String, initializationVector: String, metadataKey: String, mimetype: String, blob: String) {
 
             if let metadata = NCManageDatabase.shared.getMetadata(predicate: NSPredicate(format: "account == %@ AND fileName == %@", account, fileNameIdentifier)) {
 
                 let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
 
                 object.authenticationTag = authenticationTag
-                object.blob = "files"
+                object.blob = blob
                 object.fileName = filename
                 object.key = key
                 object.initializationVector = initializationVector
@@ -284,13 +286,13 @@ extension NCEndToEndMetadata {
 
                             if let files = json.files {
                                 for file in files {
-                                    addE2eEncryption(fileNameIdentifier: file.key, filename: file.value.filename, authenticationTag: file.value.authenticationTag, key: file.value.key, initializationVector: file.value.nonce, metadataKey: metadataKey, mimetype: file.value.mimetype)
+                                    addE2eEncryption(fileNameIdentifier: file.key, filename: file.value.filename, authenticationTag: file.value.authenticationTag, key: file.value.key, initializationVector: file.value.nonce, metadataKey: metadataKey, mimetype: file.value.mimetype, blob: "files")
                                 }
                             }
 
                             if let folders = json.folders {
                                 for folder in folders {
-                                    addE2eEncryption(fileNameIdentifier: folder.key, filename: folder.value, authenticationTag: metadata.authenticationTag, key: metadataKey, initializationVector: metadata.nonce, metadataKey: metadataKey, mimetype: "httpd/unix-directory")
+                                    addE2eEncryption(fileNameIdentifier: folder.key, filename: folder.value, authenticationTag: metadata.authenticationTag, key: metadataKey, initializationVector: metadata.nonce, metadataKey: metadataKey, mimetype: "httpd/unix-directory", blob: "folders")
                                 }
                             }
 

+ 1 - 1
iOSClient/Networking/E2EE/NCNetworkingE2EE.swift

@@ -86,7 +86,7 @@ class NCNetworkingE2EE: NSObject {
             e2eToken = tableLock.e2eToken
         }
 
-        if e2EEApiVersion == "2.0", let result = NCManageDatabase.shared.getE2eMetadataV2(account: account, ocIdServerUrl: directory.ocId) {
+        if e2EEApiVersion == NCGlobal.shared.e2eeVersion20, let result = NCManageDatabase.shared.getE2eMetadataV2(account: account, ocIdServerUrl: directory.ocId) {
             e2eCounter = "\(result.counter)"
         }
 

+ 1 - 0
iOSClient/Networking/E2EE/NCNetworkingE2EECreateFolder.swift

@@ -139,6 +139,7 @@ class NCNetworkingE2EECreateFolder: NSObject {
         NCEndToEndEncryption.sharedManager()?.encodedkey(&key, initializationVector: &initializationVector)
 
         let object = tableE2eEncryption.init(account: account, ocIdServerUrl: ocIdServerUrl, fileNameIdentifier: fileNameIdentifier)
+        object.blob = "folders"
         object.authenticationTag = ""
         object.fileName = fileNameFolder
         object.key = key! as String

+ 1 - 1
iOSClient/Settings/NCSettings.m

@@ -124,7 +124,7 @@
     BOOL isE2EEEnabled = [[NCGlobal shared] capabilityE2EEEnabled];
     NSString *versionE2EE = [[NCGlobal shared] capabilityE2EEApiVersion];
 
-    if (isE2EEEnabled == YES && [NCGlobal.shared.e2eeReadVersions containsObject:versionE2EE]) {
+    if (isE2EEEnabled == YES && [NCGlobal.shared.e2eeVersions containsObject:versionE2EE]) {
 
         section = [XLFormSectionDescriptor formSectionWithTitle:NSLocalizedString(@"_e2e_settings_title_", nil)];
         [form addFormSection:section];

+ 1 - 1
iOSClient/Utility/CCUtility.m

@@ -372,7 +372,7 @@
     NSString *privateKey = [self getEndToEndPrivateKey:account];
     NSString *passphrase = [self getEndToEndPassphrase:account];
             
-    if (passphrase.length > 0 && privateKey.length > 0 && certificate.length > 0 && publicKey.length > 0 && isE2EEEnabled && [NCGlobal.shared.e2eeReadVersions containsObject:versionE2EE]) {
+    if (passphrase.length > 0 && privateKey.length > 0 && certificate.length > 0 && publicKey.length > 0 && isE2EEEnabled && [NCGlobal.shared.e2eeVersions containsObject:versionE2EE]) {
         return YES;
     } else {
         return NO;