Browse Source

fix enc/dec

Marino Faggiana 7 years ago
parent
commit
f0aab69090
2 changed files with 20 additions and 16 deletions
  1. 0 2
      iOSClient/Networking/OCNetworking.m
  2. 20 14
      iOSClient/Security/NCEndToEndEncryption.m

+ 0 - 2
iOSClient/Networking/OCNetworking.m

@@ -1752,8 +1752,6 @@
     
     [communication storeEndToEndPrivateKeyCipher:[_activeUrl stringByAppendingString:@"/"] privateKeyChiper:privateKeyChiper onCommunication:communication successRequest:^(NSHTTPURLResponse *response, NSString *privateKey, NSString *redirectedServer) {
         
-        _metadataNet.key = privateKey;
-
         if ([self.delegate respondsToSelector:@selector(storeEndToEndPrivateKeyCipherSuccess:)])
             [self.delegate storeEndToEndPrivateKeyCipherSuccess:_metadataNet];
         

+ 20 - 14
iOSClient/Security/NCEndToEndEncryption.m

@@ -353,8 +353,12 @@ cleanup:
     
     NSData *ivData = [self generateIV:AES_IVEC_LENGTH];
     NSData *tagData = [NSData new];
-
-    BOOL result = [self encryptData:_privateKeyData cipherData:&privateKeyCipherData keyData:keyData keyLen:AES_KEY_256_LENGTH ivData:ivData tagData:&tagData];
+    
+    /* ENCODE 64 privateKey JAVA compatibility */
+    NSString *string = [_privateKeyData base64EncodedStringWithOptions:0];
+    NSMutableData *strdata = (NSMutableData *)[string dataUsingEncoding:NSUTF8StringEncoding];
+    
+    BOOL result = [self encryptData:strdata cipherData:&privateKeyCipherData keyData:keyData keyLen:AES_KEY_256_LENGTH ivData:ivData tagData:&tagData];
     
     if (result && privateKeyCipherData) {
         
@@ -412,21 +416,22 @@ cleanup:
     BOOL result = [self decryptData:privateKeyCipherData plainData:&privateKeyData keyData:keyData keyLen:AES_KEY_256_LENGTH ivData:ivData tagData:tagData];
     
     if (result && privateKeyData)
+        
         privateKey = [self base64Decode:privateKeyData];
 
         if (privateKey) {
         
-        NSData *encryptData = [self encryptAsymmetricString:ASYMMETRIC_STRING_TEST publicKey:publicKey];
-        if (!encryptData)
-            return nil;
-        
-        NSString *decryptString = [self decryptAsymmetricData:encryptData privateKey:privateKey];
+            NSData *encryptData = [self encryptAsymmetricString:ASYMMETRIC_STRING_TEST publicKey:publicKey];
+            if (!encryptData)
+                return nil;
         
-        if (decryptString && [decryptString isEqualToString:ASYMMETRIC_STRING_TEST])
-            return privateKey;
-        else
-            return nil;
+            NSString *decryptString = [self decryptAsymmetricData:encryptData privateKey:privateKey];
         
+            if (decryptString && [decryptString isEqualToString:ASYMMETRIC_STRING_TEST])
+                return privateKey;
+            else
+                return nil;
+                    
     } else {
         
         return nil;
@@ -520,7 +525,7 @@ cleanup:
     NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
     NSData *ivData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
     
-    BOOL result = [self encryptData:plainData cipherData:&cipherData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:&tagData];
+    BOOL result = [self encryptData:(NSMutableData *)plainData cipherData:&cipherData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:&tagData];
     
     if (cipherData != nil && result) {
         [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", activeUrl, @"encrypted.dms"] atomically:YES];
@@ -565,7 +570,7 @@ cleanup:
 }
 
 // Encryption using GCM mode
-- (BOOL)encryptData:(NSData *)plainData cipherData:(NSMutableData **)cipherData keyData:(NSData *)keyData keyLen:(int)keyLen ivData:(NSData *)ivData tagData:(NSData **)tagData
+- (BOOL)encryptData:(NSMutableData *)plainData cipherData:(NSMutableData **)cipherData keyData:(NSData *)keyData keyLen:(int)keyLen ivData:(NSData *)ivData tagData:(NSData **)tagData
 {
     int status = 0;
     int len = 0;
@@ -621,10 +626,11 @@ cleanup:
         return NO;
     
     // Provide the message to be encrypted, and obtain the encrypted output
+    [plainData appendBytes:"\x0" length:16];
     *cipherData = [NSMutableData dataWithLength:[plainData length]];
     unsigned char * ctBytes = [*cipherData mutableBytes];
     int pCipherLen = 0;
-    status = EVP_EncryptUpdate (ctx, ctBytes, &pCipherLen, [plainData bytes], (int)[plainData length]);
+    status = EVP_EncryptUpdate(ctx, ctBytes, &pCipherLen, [plainData bytes], (int)[plainData length]);
     if (! status)
         return NO;