瀏覽代碼

decrypt file

Marino Faggiana 7 年之前
父節點
當前提交
7bedfe17d4

+ 0 - 1
iOSClient/CCGlobal.h

@@ -148,7 +148,6 @@ extern NSString *const dav;
 #define selectorGetUserAndGroup                         @"getUserAndGroup"
 #define selectorLoadFileView                            @"loadFileView"
 #define selectorLoadModelView                           @"loadModelView"
-#define selectorLoadPlist                               @"loadPlist"
 #define selectorLoadViewImage                           @"loadViewImage"
 #define selectorLoadCopy                                @"loadCopy"
 #define selectorMove                                    @"move"

+ 8 - 26
iOSClient/Main/CCMain.m

@@ -1295,11 +1295,17 @@
 
 - (void)downloadFileSuccess:(NSString *)fileID serverUrl:(NSString *)serverUrl selector:(NSString *)selector selectorPost:(NSString *)selectorPost
 {
-    __block tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", fileID]];
-    
+    tableMetadata *metadata = [[NCManageDatabase sharedInstance] getMetadataWithPredicate:[NSPredicate predicateWithFormat:@"fileID = %@", fileID]];
     if (metadata == nil)
         return;
     
+    tableE2eEncryption *e2eEncryption = [[NCManageDatabase sharedInstance] getE2eEncryptionWithPredicate:[NSPredicate predicateWithFormat:@"fileNameIdentifier = %@ AND serverUrl = %@", metadata.fileName, serverUrl]];
+    if (e2eEncryption) {
+        metadata.encrypted = true;
+        metadata.fileName = e2eEncryption.fileName;
+        [CCUtility insertTypeFileIconName:metadata.fileName metadata:metadata];
+    }
+    
     // Download
     if ([selector isEqualToString:selectorDownloadFile]) {
         [self reloadDatasource:serverUrl];
@@ -1401,30 +1407,6 @@
         [self copyFileToPasteboard:metadata];
     }
     
-    //download file plist
-    if ([selector isEqualToString:selectorLoadPlist]) {
-        
-        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
-        
-            long countSelectorLoadPlist = 0;
-        
-            for (NSOperation *operation in [app.netQueue operations]) {
-            
-                if ([((OCnetworking *)operation).metadataNet.selector isEqualToString:selectorLoadPlist])
-                    countSelectorLoadPlist++;
-            }
-            
-            NSString *directoryID = [[NCManageDatabase sharedInstance] getDirectoryID:_serverUrl];
-            
-            if ((countSelectorLoadPlist == 0 || countSelectorLoadPlist % k_maxConcurrentOperation == 0) && [metadata.directoryID isEqualToString:directoryID] && directoryID) {
-            
-                dispatch_async(dispatch_get_main_queue(), ^{
-                    [self reloadDatasource:serverUrl];
-                });
-            }
-        });
-    }
-    
     //selectorLoadViewImage
     if ([selector isEqualToString:selectorLoadViewImage]) {
         

+ 12 - 2
iOSClient/Networking/CCNetworking.m

@@ -722,8 +722,18 @@
         // Decrypted
         tableE2eEncryption *object = [[NCManageDatabase sharedInstance] getE2eEncryptionWithPredicate:[NSPredicate predicateWithFormat:@"fileNameIdentifier = %@ AND serverUrl = %@", fileName, serverUrl]];
         if (object) {
-            
-            NSLog(@"x");
+            BOOL result = [[NCEndToEndEncryption sharedManager] decryptFileID:fileID directoryUser:_directoryUser key:object.key initializationVector:object.initializationVector authenticationTag:object.authenticationTag];
+            if (!result) {
+                
+                [[NCManageDatabase sharedInstance] addActivityClient:fileName fileID:fileID action:k_activityDebugActionUpload selector:@"" note:[NSString stringWithFormat:@"Serious error internal download : decrypt error %@", fileName] type:k_activityTypeFailure verbose:k_activityVerboseDefault activeUrl:_activeUrl];
+                
+                dispatch_async(dispatch_get_main_queue(), ^{
+                    if ([self.delegate respondsToSelector:@selector(downloadFileFailure:serverUrl:selector:message:errorCode:)])
+                        [self.delegate downloadFileFailure:fileID serverUrl:serverUrl selector:selector message:[NSString stringWithFormat:@"Serious error internal download : decrypt error %@", fileName] errorCode:k_CCErrorInternalError];
+                });
+                
+                return;
+            }
         }
         
         // Icon

+ 1 - 0
iOSClient/Security/NCEndToEndEncryption.h

@@ -39,6 +39,7 @@
 - (NSString *)decryptMetadata:(NSString *)encrypted key:(NSString *)key;
 
 - (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag;
+- (BOOL)decryptFileID:(NSString *)fileID directoryUser:(NSString *)directoryUser key:(NSString *)key initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag;
 
 - (NSString *)createSHA512:(NSString *)string;
 

+ 23 - 3
iOSClient/Security/NCEndToEndEncryption.m

@@ -493,9 +493,8 @@ cleanup:
 {
     NSMutableData *cipherData;
     NSData *tagData;
-    NSData *plainData;
-    
-    plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
+   
+    NSData *plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
     if (plainData == nil)
         return false;
     
@@ -518,6 +517,27 @@ cleanup:
     return false;
 }
 
+- (BOOL)decryptFileID:(NSString *)fileID directoryUser:(NSString *)directoryUser key:(NSString *)key initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag
+{
+    NSMutableData *plainData;
+
+    NSData *cipherData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileID]];
+    if (cipherData == nil)
+        return false;
+    
+    NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
+    NSData *ivData = [[NSData alloc] initWithBase64EncodedString:initializationVector options:0];
+    NSData *tagData = [[NSData alloc] initWithBase64EncodedString:authenticationTag options:0];
+
+    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
+    if (plainData != nil && result) {
+        [plainData writeToFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileID] atomically:YES];
+        return true;
+    }
+    
+    return false;
+}
+
 /*
 - (void)decryptMetadata:(NSString *)metadata activeUrl:(NSString *)activeUrl
 {