Răsfoiți Sursa

getEndToEndPrivateKey

Marino Faggiana 1 an în urmă
părinte
comite
3cc6a0641a

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

@@ -95,7 +95,7 @@ extension NCEndToEndMetadata {
         var filesCodable: [String: E2eeV12.Files]?
         var filesCodable: [String: E2eeV12.Files]?
         var filedrop: [String: E2eeV12.Filedrop] = [:]
         var filedrop: [String: E2eeV12.Filedrop] = [:]
         var filedropCodable: [String: E2eeV12.Filedrop]?
         var filedropCodable: [String: E2eeV12.Filedrop]?
-        let privateKey = CCUtility.getEndToEndPrivateKey(account)
+        let privateKey = NCKeychain().getEndToEndPrivateKey(account: account)
         var fileNameIdentifiers: [String] = []
         var fileNameIdentifiers: [String] = []
 
 
         let e2eEncryptions = NCManageDatabase.shared.getE2eEncryptions(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl))
         let e2eEncryptions = NCManageDatabase.shared.getE2eEncryptions(predicate: NSPredicate(format: "account == %@ AND serverUrl == %@", account, serverUrl))
@@ -200,7 +200,7 @@ extension NCEndToEndMetadata {
         }
         }
 
 
         let decoder = JSONDecoder()
         let decoder = JSONDecoder()
-        let privateKey = CCUtility.getEndToEndPrivateKey(account)
+        let privateKey = NCKeychain().getEndToEndPrivateKey(account: account)
         var metadataVersion: Double = 0
         var metadataVersion: Double = 0
         var metadataKey = ""
         var metadataKey = ""
 
 
@@ -369,7 +369,7 @@ extension NCEndToEndMetadata {
         }
         }
 
 
         let decoder = JSONDecoder()
         let decoder = JSONDecoder()
-        let privateKey = CCUtility.getEndToEndPrivateKey(account)
+        let privateKey = NCKeychain().getEndToEndPrivateKey(account: account)
         var metadataVersion: Double = 0
         var metadataVersion: Double = 0
 
 
         do {
         do {

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

@@ -303,7 +303,7 @@ extension NCEndToEndMetadata {
                     var metadataKey: Data?
                     var metadataKey: Data?
                     if let encryptedMetadataKey = user.encryptedMetadataKey {
                     if let encryptedMetadataKey = user.encryptedMetadataKey {
                         let data = Data(base64Encoded: encryptedMetadataKey)
                         let data = Data(base64Encoded: encryptedMetadataKey)
-                        if let decrypted = NCEndToEndEncryption.sharedManager().decryptAsymmetricData(data, privateKey: CCUtility.getEndToEndPrivateKey(account)) {
+                        if let decrypted = NCEndToEndEncryption.sharedManager().decryptAsymmetricData(data, privateKey: NCKeychain().getEndToEndPrivateKey(account: account)) {
                             metadataKey = decrypted
                             metadataKey = decrypted
                         }
                         }
                     }
                     }
@@ -447,7 +447,7 @@ extension NCEndToEndMetadata {
             let decoded = try? JSONSerialization.data(withJSONObject: dataSerialization, options: [.sortedKeys, .withoutEscapingSlashes])
             let decoded = try? JSONSerialization.data(withJSONObject: dataSerialization, options: [.sortedKeys, .withoutEscapingSlashes])
             let base64 = decoded!.base64EncodedString()
             let base64 = decoded!.base64EncodedString()
             if let base64Data = base64.data(using: .utf8),
             if let base64Data = base64.data(using: .utf8),
-               let signatureData = NCEndToEndEncryption.sharedManager().generateSignatureCMS(base64Data, certificate: certificate, privateKey: CCUtility.getEndToEndPrivateKey(account), userId: userId) {
+               let signatureData = NCEndToEndEncryption.sharedManager().generateSignatureCMS(base64Data, certificate: certificate, privateKey: NCKeychain().getEndToEndPrivateKey(account: account), userId: userId) {
                 return signatureData.base64EncodedString()
                 return signatureData.base64EncodedString()
             }
             }
         } catch {
         } catch {

+ 5 - 5
iOSClient/Settings/NCEndToEndInitialize.swift

@@ -153,9 +153,9 @@ class NCEndToEndInitialize: NSObject {
                     let publicKey = NCKeychain().getEndToEndCertificate(account: self.appDelegate.account)
                     let publicKey = NCKeychain().getEndToEndCertificate(account: self.appDelegate.account)
 
 
                     if let privateKeyData = (NCEndToEndEncryption.sharedManager().decryptPrivateKey(privateKeyChiper, passphrase: passphrase, publicKey: publicKey, iterationCount: 1024)),
                     if let privateKeyData = (NCEndToEndEncryption.sharedManager().decryptPrivateKey(privateKeyChiper, passphrase: passphrase, publicKey: publicKey, iterationCount: 1024)),
-                       let keyData = Data(base64Encoded: privateKeyData) {
-                        let privateKey = String(data: keyData, encoding: .utf8)
-                        CCUtility.setEndToEndPrivateKey(self.appDelegate.account, privateKey: privateKey)
+                       let keyData = Data(base64Encoded: privateKeyData), 
+                       let privateKey = String(data: keyData, encoding: .utf8) {
+                        NCKeychain().setEndToEndPrivateKey(account: self.appDelegate.account, privateKey: privateKey)
                     } else {
                     } else {
 
 
                         let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Serious internal error to decrypt Private Key")
                         let error = NKError(errorCode: NCGlobal.shared.errorInternalError, errorDescription: "Serious internal error to decrypt Private Key")
@@ -266,9 +266,9 @@ class NCEndToEndInitialize: NSObject {
 
 
         NextcloudKit.shared.storeE2EEPrivateKey(privateKey: privateKeyChiper) { account, _, _, error in
         NextcloudKit.shared.storeE2EEPrivateKey(privateKey: privateKeyChiper) { account, _, _, error in
 
 
-            if error == .success && account == self.appDelegate.account {
+            if error == .success, account == self.appDelegate.account, let privateKey = privateKeyString {
 
 
-                CCUtility.setEndToEndPrivateKey(account, privateKey: privateKeyString! as String)
+                NCKeychain().setEndToEndPrivateKey(account: account, privateKey: String(privateKey))
                 CCUtility.setEndToEndPassphrase(account, passphrase: e2ePassphrase)
                 CCUtility.setEndToEndPassphrase(account, passphrase: e2ePassphrase)
 
 
                 // request server publicKey
                 // request server publicKey

+ 0 - 3
iOSClient/Utility/CCUtility.h

@@ -43,9 +43,6 @@
 
 
 // E2EE -------------------------------------------
 // E2EE -------------------------------------------
 
 
-+ (NSString *)getEndToEndPrivateKey:(NSString *)account;
-+ (void)setEndToEndPrivateKey:(NSString *)account privateKey:(NSString *)privateKey;
-
 + (NSString *)getEndToEndPublicKey:(NSString *)account;
 + (NSString *)getEndToEndPublicKey:(NSString *)account;
 + (void)setEndToEndPublicKey:(NSString *)account publicKey:(NSString *)publicKey;
 + (void)setEndToEndPublicKey:(NSString *)account publicKey:(NSString *)publicKey;
 
 

+ 13 - 5
iOSClient/Utility/NCKeychain.swift

@@ -198,17 +198,25 @@ import KeychainAccess
     }
     }
 
 
     func getEndToEndCertificate(account: String) -> String? {
     func getEndToEndCertificate(account: String) -> String? {
-
         let key = E2E_certificate + account
         let key = E2E_certificate + account
         migrate(key: key)
         migrate(key: key)
-
-        let certificate = try? keychain.get(key)
-        return certificate
+        return try? keychain.get(key)
     }
     }
 
 
     func setEndToEndCertificate(account: String, certificate: String) {
     func setEndToEndCertificate(account: String, certificate: String) {
-
         let key = E2E_certificate + account
         let key = E2E_certificate + account
         keychain[key] = certificate
         keychain[key] = certificate
     }
     }
+
+    func getEndToEndPrivateKey(account: String) -> String? {
+        let key = E2E_PrivateKey + account
+        migrate(key: key)
+        return try? keychain.get(key)
+    }
+
+    func setEndToEndPrivateKey(account: String, privateKey: String) {
+        let key = E2E_PrivateKey + account
+        migrate(key: key)
+        keychain[key] = privateKey
+    }
 }
 }