Marino Faggiana 1 yıl önce
ebeveyn
işleme
5677462035

+ 2 - 2
iOSClient/Networking/E2EE/NCEndToEndEncryption.h

@@ -41,8 +41,8 @@
 
 // Encrypt / Decrypt file material
 
-- (NSString *)encryptPayloadFile:(NSString *)encrypted key:(NSString *)key;
-- (NSString *)encryptPayloadFile:(NSString *)encrypted key:(NSString *)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag;
+- (NSString *)encryptPayloadFile:(NSData *)encrypted key:(NSString *)key;
+- (NSString *)encryptPayloadFile:(NSData *)encrypted key:(NSString *)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag;
 - (NSData *)decryptPayloadFile:(NSString *)encrypted key:(NSString *)key;
 - (NSData *)decryptPayloadFile:(NSString *)encrypted key:(NSString *)key initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag;
 

+ 12 - 13
iOSClient/Networking/E2EE/NCEndToEndEncryption.m

@@ -415,41 +415,40 @@
 #pragma mark - Encrypt / Decrypt file material
 #
 
-- (NSString *)encryptPayloadFile:(NSString *)encrypted key:(NSString *)key
+- (NSString *)encryptPayloadFile:(NSData *)encrypted key:(NSString *)key
 {
     NSMutableData *cipher;
     NSData *authenticationTag = [NSData new];
 
-    NSData *encryptedData = [encrypted dataUsingEncoding:NSUTF8StringEncoding];
-    encryptedData = [[encryptedData base64EncodedStringWithOptions:0] dataUsingEncoding:NSUTF8StringEncoding];
+    encrypted = [[encrypted base64EncodedStringWithOptions:0] dataUsingEncoding:NSUTF8StringEncoding];
 
     // Key
     NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
 
     // Initialization Vector
     NSData *initializationVector = [self generateIV:AES_IVEC_LENGTH];
-    
-    BOOL result = [self encryptData:encryptedData cipher:&cipher key:keyData keyLen:AES_KEY_128_LENGTH initializationVector:initializationVector authenticationTag:&authenticationTag];
-    
+
+    BOOL result = [self encryptData:encrypted cipher:&cipher key:keyData keyLen:AES_KEY_128_LENGTH initializationVector:initializationVector authenticationTag:&authenticationTag];
+
     if (cipher != nil && result) {
-        
+
         NSString *cipherString = [cipher base64EncodedStringWithOptions:0];
         NSString *initializationVectorString = [initializationVector base64EncodedStringWithOptions:0];
         NSString *payload = [NSString stringWithFormat:@"%@%@%@", cipherString, IV_DELIMITER_ENCODED, initializationVectorString];
-        
+
         return payload;
     }
-    
+
     return nil;
 }
 
-- (NSString *)encryptPayloadFile:(NSString *)encrypted key:(NSString *)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
+
+- (NSString *)encryptPayloadFile:(NSData *)encrypted key:(NSString *)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
 {
     NSMutableData *cipher;
     NSData *authenticationTagData = [NSData new];
 
-    NSData *encryptedData = [encrypted dataUsingEncoding:NSUTF8StringEncoding];
-    encryptedData = [[encryptedData base64EncodedStringWithOptions:0] dataUsingEncoding:NSUTF8StringEncoding];
+    encrypted = [[encrypted base64EncodedStringWithOptions:0] dataUsingEncoding:NSUTF8StringEncoding];
 
     // Key
     NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
@@ -457,7 +456,7 @@
     // Initialization Vector
     NSData *initializationVectorData = [self generateIV:AES_IVEC_LENGTH];
 
-    BOOL result = [self encryptData:encryptedData cipher:&cipher key:keyData keyLen:AES_KEY_128_LENGTH initializationVector:initializationVectorData authenticationTag:&authenticationTagData];
+    BOOL result = [self encryptData:encrypted cipher:&cipher key:keyData keyLen:AES_KEY_128_LENGTH initializationVector:initializationVectorData authenticationTag:&authenticationTagData];
 
     if (cipher != nil && result) {
 

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

@@ -68,7 +68,7 @@ extension NCEndToEndMetadata {
                 do {
                     // Create "encrypted"
                     let json = try encoder.encode(encrypted)
-                    if let encrypted = NCEndToEndEncryption.sharedManager().encryptPayloadFile(String(data: json, encoding: .utf8), key: e2eEncryption.metadataKey) {
+                    if let encrypted = NCEndToEndEncryption.sharedManager().encryptPayloadFile(json, key: e2eEncryption.metadataKey) {
                         let record = E2eeV12.Files(initializationVector: e2eEncryption.initializationVector, authenticationTag: e2eEncryption.authenticationTag, encrypted: encrypted)
                         files.updateValue(record, forKey: e2eEncryption.fileNameIdentifier)
                     }
@@ -96,7 +96,7 @@ extension NCEndToEndMetadata {
                 do {
                     // Create "encrypted"
                     let json = try encoder.encode(encrypted)
-                    if let encrypted = NCEndToEndEncryption.sharedManager().encryptPayloadFile(String(data: json, encoding: .utf8), key: e2eEncryption.metadataKeyFiledrop, initializationVector: &encryptedInitializationVector, authenticationTag: &encryptedTag) {
+                    if let encrypted = NCEndToEndEncryption.sharedManager().encryptPayloadFile(json, key: e2eEncryption.metadataKeyFiledrop, initializationVector: &encryptedInitializationVector, authenticationTag: &encryptedTag) {
                         let record = E2eeV12.Filedrop(initializationVector: e2eEncryption.initializationVector, authenticationTag: e2eEncryption.authenticationTag, encrypted: encrypted, encryptedKey: encryptedKey, encryptedTag: encryptedTag as? String, encryptedInitializationVector: encryptedInitializationVector as? String)
                         filedrop.updateValue(record, forKey: e2eEncryption.fileNameIdentifier)
                     }

+ 7 - 9
iOSClient/Networking/E2EE/NCEndToEndMetadataV20.swift

@@ -43,6 +43,7 @@ extension NCEndToEndMetadata {
         var filedropCodable: [String: E2eeV20.Filedrop] = [:]
 
         var encryptedMetadataKey: String?
+        var metadataKey: String?
         var e2eeJson: String?
         var signature: String?
 
@@ -50,14 +51,14 @@ extension NCEndToEndMetadata {
             encryptedMetadataKey = user.encryptedMetadataKey
         } else {
             guard let keyGenerated = NCEndToEndEncryption.sharedManager()?.generateKey() as? Data else { return (nil, nil) }
-            print(keyGenerated.base64EncodedString())
+            metadataKey = keyGenerated.base64EncodedString()
             guard let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(keyGenerated, privateKey: privateKey) else { return (nil, nil) }
             encryptedMetadataKey = metadataKeyEncrypted.base64EncodedString()
 
-            NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: nil, filedropKey: nil, metadataKey: nil)
+            NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: nil, filedropKey: nil, metadataKey: metadataKey)
         }
 
-        guard let encryptedMetadataKey else { return (nil, nil) }
+        guard let encryptedMetadataKey, let metadataKey else { return (nil, nil) }
 
         // Create E2eeV20.Users
         if let e2eUsers = NCManageDatabase.shared.getE2EUsersV2(account: account, serverUrl: serverUrl) {
@@ -98,12 +99,8 @@ extension NCEndToEndMetadata {
 
         do {
             let json = try JSONEncoder().encode(ciphertext)
-
-            let dataCiphertext = try json.gzipped()
-
-            let base64Ciphertext = dataCiphertext.base64EncodedString()
-
-            let ciphertext = NCEndToEndEncryption.sharedManager().encryptPayloadFile(base64Ciphertext, key: encryptedMetadataKey, initializationVector: &initializationVector, authenticationTag: &authenticationTag)
+            let jsonZip = try json.gzipped()
+            let ciphertext = NCEndToEndEncryption.sharedManager().encryptPayloadFile(jsonZip, key: metadataKey, initializationVector: &initializationVector, authenticationTag: &authenticationTag)
 
             guard let ciphertext, let initializationVector = initializationVector as? String, let authenticationTag = authenticationTag as? String else {
                 return (nil, nil)
@@ -116,6 +113,7 @@ extension NCEndToEndMetadata {
             e2eeData.printJson()
             e2eeJson = String(data: e2eeData, encoding: .utf8)
             print("")
+
         } catch let error {
             print("Serious internal error in encoding e2ee (" + error.localizedDescription + ")")
             return (nil, nil)