Marino Faggiana 7 gadi atpakaļ
vecāks
revīzija
6d565773b2
1 mainītis faili ar 111 papildinājumiem un 102 dzēšanām
  1. 111 102
      iOSClient/Security/NCEndToEndEncryption.m

+ 111 - 102
iOSClient/Security/NCEndToEndEncryption.m

@@ -445,6 +445,114 @@ cleanup:
     }
 }
 
+
+#
+#pragma mark - Encrypt / Decrypt Metadata
+#
+
+- (NSString *)decryptMetadata:(NSString *)encrypted privateKey:(NSString *)privateKey initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag
+{
+    NSMutableData *plainData;
+    
+    NSData *keyData = [privateKey dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *ivData = [initializationVector dataUsingEncoding:NSUTF8StringEncoding];
+    
+    // Tag
+    NSRange range = [encrypted rangeOfString:IV_DELIMITER_ENCODED];
+    authenticationTag = [encrypted substringWithRange:NSMakeRange(range.location - AES_GCM_TAG_LENGTH, AES_GCM_TAG_LENGTH)];
+    NSData *tagData = [authenticationTag dataUsingEncoding:NSUTF8StringEncoding];
+    
+    // Cipher
+    NSString *cipher = [encrypted substringToIndex:(range.location)];
+    NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
+    
+    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
+    
+    if (plainData != nil && result) {
+        NSString *plain = [plainData base64EncodedStringWithOptions:0];
+        return plain;
+    } else {
+        return nil;
+    }
+}
+
+#
+#pragma mark - Encrypt / Decrypt file
+#
+
+- (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
+{
+    NSMutableData *cipherData;
+    NSData *tagData;
+    NSData *plainData;
+    
+    plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
+    if (plainData == nil)
+        return false;
+    
+    NSData *keyData = [self generateKey:AES_KEY_128_LENGTH];
+    NSData *ivData = [self generateIV:AES_IVEC_LENGTH];
+    
+    BOOL result = [self encryptData:plainData cipherData:&cipherData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:&tagData];
+    
+    if (cipherData != nil && result) {
+        
+        [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameIdentifier] atomically:YES];
+        
+        *key = [keyData base64EncodedStringWithOptions:0];
+        *initializationVector = [ivData base64EncodedStringWithOptions:0];
+        *authenticationTag = [tagData base64EncodedStringWithOptions:0];
+
+        return true;
+    }
+    
+    return false;
+}
+
+/*
+- (void)decryptMetadata:(NSString *)metadata activeUrl:(NSString *)activeUrl
+{
+    NSMutableData *plainData;
+    
+    NSData *cipherData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", activeUrl, metadata.fileID]];
+    NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
+    NSData *ivData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
+    NSData *tagData = [[NSData alloc] initWithBase64EncodedString:@"PboI9tqHHX3QeAA22PIu4w==" 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:@"%@/%@", activeUrl, @"decrypted"] atomically:YES];
+    }
+}
+
+- (NSString *)decryptMetadata:(NSString *)cipher key:(NSString *)key iv:(NSString *)iv tag:(NSString *)tag
+{
+    NSMutableData *plainData;
+    
+    NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
+    NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding];
+
+    
+    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
+    
+    if (plainData != nil && result)
+        return [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];
+    else
+        return nil;
+}
+*/
+
+
+// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
+// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
+
+#
+#pragma mark - OPENSSL ENCRYPT/DECRYPT
+#
+
 #
 #pragma mark - Asymmetric Encrypt/Decrypt String
 #
@@ -500,7 +608,7 @@ cleanup:
         return nil;
     
     NSData *outData = [[NSData alloc] initWithBytes:out length:outLen];
-
+    
     if (out)
         free(out);
     
@@ -520,11 +628,11 @@ cleanup:
     EVP_PKEY *key = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
     if (!key)
         return nil;
-
+    
     EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, eng);
     if (!ctx)
         return nil;
-
+    
     status = EVP_PKEY_decrypt_init(ctx);
     if (status <= 0)
         return nil;
@@ -559,105 +667,6 @@ cleanup:
     return outString;
 }
 
-#
-#pragma mark - Encrypt / Decrypt Metadata
-#
-
-- (NSString *)decryptMetadata:(NSString *)encrypted privateKey:(NSString *)privateKey initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag
-{
-    NSMutableData *plainData;
-    
-    NSData *keyData = [privateKey dataUsingEncoding:NSUTF8StringEncoding];
-    NSData *ivData = [initializationVector dataUsingEncoding:NSUTF8StringEncoding];
-    
-    // Tag
-    NSRange range = [encrypted rangeOfString:IV_DELIMITER_ENCODED];
-    authenticationTag = [encrypted substringWithRange:NSMakeRange(range.location - AES_GCM_TAG_LENGTH, AES_GCM_TAG_LENGTH)];
-    NSData *tagData = [authenticationTag dataUsingEncoding:NSUTF8StringEncoding];
-    
-    // Cipher
-    NSString *cipher = [encrypted substringToIndex:(range.location)];
-    NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
-    
-    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
-    
-    if (plainData != nil && result) {
-        NSString *plain = [plainData base64EncodedStringWithOptions:0];
-        return plain;
-    } else {
-        return nil;
-    }
-}
-
-#
-#pragma mark - Encrypt / Decrypt file
-#
-
-- (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
-{
-    NSMutableData *cipherData;
-    NSData *tagData;
-    NSData *plainData;
-    
-    plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
-    if (plainData == nil)
-        return false;
-    
-    NSData *keyData = [self generateKey:AES_KEY_128_LENGTH];
-    NSData *ivData = [self generateIV:AES_IVEC_LENGTH];
-    
-    BOOL result = [self encryptData:plainData cipherData:&cipherData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:&tagData];
-    
-    if (cipherData != nil && result) {
-        
-        [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameIdentifier] atomically:YES];
-        
-        *key = [keyData base64EncodedStringWithOptions:0];
-        *initializationVector = [ivData base64EncodedStringWithOptions:0];
-        *authenticationTag = [tagData base64EncodedStringWithOptions:0];
-
-        return true;
-    }
-    
-    return false;
-}
-
-/*
-- (void)decryptMetadata:(NSString *)metadata activeUrl:(NSString *)activeUrl
-{
-    NSMutableData *plainData;
-    
-    NSData *cipherData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", activeUrl, metadata.fileID]];
-    NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
-    NSData *ivData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
-    NSData *tagData = [[NSData alloc] initWithBase64EncodedString:@"PboI9tqHHX3QeAA22PIu4w==" 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:@"%@/%@", activeUrl, @"decrypted"] atomically:YES];
-    }
-}
-
-- (NSString *)decryptMetadata:(NSString *)cipher key:(NSString *)key iv:(NSString *)iv tag:(NSString *)tag
-{
-    NSMutableData *plainData;
-    
-    NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
-    NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
-    NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
-    NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding];
-
-    
-    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
-    
-    if (plainData != nil && result)
-        return [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];
-    else
-        return nil;
-}
-*/
-
 #
 #pragma mark - AES/GCM/NoPadding
 #