Marino Faggiana 7 years ago
parent
commit
361d63032c

+ 1 - 12
iOSClient/Security/NCEndToEndEncryption.m

@@ -432,18 +432,7 @@ cleanup:
 
 - (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey
 {
-    //unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
-    
-    char *pKey = "-----BEGIN PUBLIC KEY-----\n"
-    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwMu7BZF451FjUXYNr323\n"
-    "aeeaCW2a7s6eHHs8Gz5qgQ/zDegub6is3jwdTZJyGcRcN1DxKQsLcOa3F18KSiCk\n"
-    "yzIWjNV4YH7GdV7Ke2qLjcQUs7wktGUKyPYJmDWGYv/QN0Sbbol9IbeLjSBHUt16\n"
-    "xBex5IIpQqDtBy0RZvAMdUUB1rezKka0bC+b5CmE4ysIRFyFiweSlGsSdkaS9q1l\n"
-    "d+c/V4LMxljNbhdpfpiniWAD3lm9+mDJzToOiqz+nH9SHs4ClEThBAScI00xJH36\n"
-    "3mDvY0x6HVDyCsueC9jtfZKnI2uwM2tbUU4iDkCaIYm6VE6h1qs5AkrxH1o6K2lC\n"
-    "kQIDAQAB\n"
-    "-----END PUBLIC KEY-----\n";
-
+    unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
     
     BIO *bio = BIO_new_mem_buf(pKey, -1);
     RSA *rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, 0, NULL);

+ 6 - 4
iOSClient/Security/NCEntoToEndInterface.swift

@@ -44,14 +44,14 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
         
         let metadataNet: CCMetadataNet = CCMetadataNet.init(account: appDelegate.activeAccount)
         
+        metadataNet.action = actionGetEndToEndServerPublicKey;
+        appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
+        
         metadataNet.action = actionGetEndToEndPublicKeys;
         appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
 
         metadataNet.action = actionGetEndToEndPrivateKeyCipher;
         appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
-        
-        metadataNet.action = actionGetEndToEndServerPublicKey;
-        appDelegate.addNetworkingOperationQueue(appDelegate.netQueue, delegate: self, metadataNet: metadataNet)
     }
     
     // --------------------------------------------------------------------------------------------
@@ -166,7 +166,7 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
         let ok = UIAlertAction(title: "OK", style: .default, handler: { (action) -> Void in
             
             let passphrase = passphraseTextField?.text
-            let publicKey = CCUtility.getEndToEndPublicKey(self.appDelegate.activeAccount)
+            let publicKey = CCUtility.getEndToEndPublicKeyServer(self.appDelegate.activeAccount)
             
             guard (NCEndToEndEncryption.sharedManager().decryptPrivateKey(metadataNet.key, passphrase: passphrase, publicKey: publicKey)) != nil else {
                 
@@ -305,6 +305,8 @@ class NCEntoToEndInterface : NSObject, OCNetworkingDelegate  {
     
     func getEndToEndServerPublicKeySuccess(_ metadataNet: CCMetadataNet!) {
         
+        CCUtility.setEndToEndPublicKeyServer(appDelegate.activeAccount, publicKey: metadataNet.key)
+        
         NCManageDatabase.sharedInstance.addActivityClient("", fileID: "", action: k_activityDebugActionEndToEndEncryption, selector: actionGetEndToEndServerPublicKey, note: "E2E Server PublicKey present on Server and stored to keychain", type: k_activityTypeSuccess, verbose: false, activeUrl: "")
     }
     

+ 2 - 0
iOSClient/Utility/CCUtility.h

@@ -94,6 +94,7 @@
 + (void)setEndToEndPublicKey:(NSString *)account publicKey:(NSString *)publicKey;
 + (void)setEndToEndPrivateKeyCipher:(NSString *)account privateKeyCipher:(NSString *)privateKeyCipher;
 + (void)setEndToEndPassphrase:(NSString *)account passphrase:(NSString *)passphrase;
++ (void)setEndToEndPublicKeyServer:(NSString *)account publicKey:(NSString *)publicKey;
 + (void)initEndToEnd:(NSString *)account;
 
 // GET
@@ -144,6 +145,7 @@
 + (NSString *)getEndToEndPublicKey:(NSString *)account;
 + (NSString *)getEndToEndPrivateKeyCipher:(NSString *)account;
 + (NSString *)getEndToEndPassphrase:(NSString *)account;
++ (NSString *)getEndToEndPublicKeyServer:(NSString *)account;
 + (BOOL)isEndToEndEnabled:(NSString *)account;
 
 // ===== Varius =====

+ 16 - 2
iOSClient/Utility/CCUtility.m

@@ -36,7 +36,7 @@
 #define E2E_PublicKey           @"EndToEndPublicKey_"
 #define E2E_PrivateKeyCipher    @"EndToEndPrivateKeyCipher_"
 #define E2E_Passphrase          @"EndToEndPassphrase_"
-
+#define E2E_PublicKeyServer     @"EndToEndPublicKeyServer_"
 
 @implementation CCUtility
 
@@ -249,11 +249,18 @@
     [UICKeyChainStore setString:passphrase forKey:key service:k_serviceShareKeyChain];
 }
 
++ (void)setEndToEndPublicKeyServer:(NSString *)account publicKey:(NSString *)publicKey
+{
+    NSString *key = [E2E_PublicKeyServer stringByAppendingString:account];
+    [UICKeyChainStore setString:publicKey forKey:key service:k_serviceShareKeyChain];
+}
+
 + (void)initEndToEnd:(NSString *)account
 {
     [self setEndToEndPublicKey:account publicKey:nil];
     [self setEndToEndPrivateKeyCipher:account privateKeyCipher:nil];
     [self setEndToEndPassphrase:account passphrase:nil];
+    [self setEndToEndPublicKeyServer:account publicKey:nil];
 }
 
 #pragma ------------------------------ GET
@@ -470,13 +477,20 @@
     return [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
 }
 
++ (NSString *)getEndToEndPublicKeyServer:(NSString *)account
+{
+    NSString *key = [E2E_PublicKeyServer stringByAppendingString:account];
+    return [UICKeyChainStore stringForKey:key service:k_serviceShareKeyChain];
+}
+
 + (BOOL)isEndToEndEnabled:(NSString *)account
 {
     NSString *publicKey = [self getEndToEndPublicKey:account];
     NSString *privateKey = [self getEndToEndPrivateKeyCipher:account];
     NSString *passphrase = [self getEndToEndPassphrase:account];
+    NSString *publicKeyServer = [self getEndToEndPublicKeyServer:account];
     
-    if (passphrase.length > 0 && privateKey.length > 0 && publicKey.length > 0) {
+    if (passphrase.length > 0 && privateKey.length > 0 && publicKey.length > 0 && publicKeyServer.length > 0) {
         
         return YES;