浏览代码

encryptEncryptedJson - decryptEncryptedJson

Marino Faggiana 7 年之前
父节点
当前提交
f36415c5f7

+ 2 - 1
iOSClient/Security/NCEndToEndEncryption.h

@@ -36,7 +36,8 @@
 - (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey;
 - (NSString *)decryptAsymmetricData:(NSData *)cipherData privateKey:(NSString *)privateKey;
 
-- (NSString *)decryptMetadata:(NSString *)encrypted key:(NSString *)key;
+- (NSString *)encryptEncryptedJson:(NSString *)encrypted key:(NSString *)key;
+- (NSString *)decryptEncryptedJson:(NSString *)encrypted key:(NSString *)key;
 
 - (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag;
 - (BOOL)decryptFileID:(NSString *)fileID directoryUser:(NSString *)directoryUser key:(NSString *)key initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag;

+ 32 - 7
iOSClient/Security/NCEndToEndEncryption.m

@@ -446,10 +446,37 @@ cleanup:
 
 
 #
-#pragma mark - Encrypt / Decrypt Metadata
+#pragma mark - Encrypt / Decrypt Encrypted Json
 #
 
-- (NSString *)decryptMetadata:(NSString *)encrypted key:(NSString *)key
+- (NSString *)encryptEncryptedJson:(NSString *)encrypted key:(NSString *)key
+{
+    NSMutableData *cipherData;
+    NSData *tagData;
+    
+    NSData *plainData = [[NSData alloc] initWithBase64EncodedString:encrypted options:0];
+
+    // Key
+    NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
+
+    //IV
+    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) {
+        
+        /* ENCODE 64                                                     */
+        NSString *metadata = [cipherData base64EncodedStringWithOptions:0];
+        /* --------------------------------------------------------------*/
+        
+        return metadata;
+    }
+    
+    return nil;
+}
+
+- (NSString *)decryptEncryptedJson:(NSString *)encrypted key:(NSString *)key
 {
     NSMutableData *plainData;
     NSRange range = [encrypted rangeOfString:IV_DELIMITER_ENCODED];
@@ -473,16 +500,14 @@ cleanup:
     
     if (plainData != nil && result) {
         
-        /* DENCODE 64 privateKey JAVA compatibility */
+        /* DENCODE 64 JAVA compatibility            */
         NSString *plain = [self base64DecodeData:plainData];
         /* ---------------------------------------- */
     
         return plain;
-        
-    } else {
-        
-        return nil;
     }
+        
+    return nil;
 }
 
 #

+ 9 - 3
iOSClient/Security/NCEndToEndMetadata.swift

@@ -75,7 +75,10 @@ class NCEndToEndMetadata : NSObject  {
         var version = 1
         
         // Create publicKey encrypted
-        //NCEndToEndEncryption.sharedManager().encryptAsymmetricString(<#T##plain: String!##String!#>, publicKey: <#T##String!#>)
+        guard let publicKeyEncryptedData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(publicKey, publicKey: nil, privateKey: privateKey) else {
+            return nil
+        }
+        let publicKeyBase64 = publicKeyEncryptedData.base64EncodedString()
         
         // Create "files"
         for recordE2eEncryption in recordsE2eEncryption {
@@ -88,6 +91,9 @@ class NCEndToEndMetadata : NSObject  {
                 let encryptedJsonData = try jsonEncoder.encode(encrypted)
                 let encryptedJsonString = String(data: encryptedJsonData, encoding: .utf8)
                 
+                //NCEndToEndEncryption.sharedManager().decryptmetadata
+                
+                
                 guard let encryptedEncryptionData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(encryptedJsonString, publicKey: nil, privateKey: privateKey) else {
                     print("Serious internal error in encoding metadata")
                     return nil
@@ -108,7 +114,7 @@ class NCEndToEndMetadata : NSObject  {
         }
         
         // Create "metadataKey" with encrypted publicKey
-        let e2eMetadataKey = e2eMetadata.metadataKeyCodable(metadataKeys: ["0":"dcccecfvdfvfvsfdvefvefvefvefvefv"], version: version)
+        let e2eMetadataKey = e2eMetadata.metadataKeyCodable(metadataKeys: ["0":publicKeyBase64], version: version)
         
         // Create final Json e2emetadata
         let e2emetadata = e2eMetadata(files: files, metadata: e2eMetadataKey, sharing: nil)
@@ -167,7 +173,7 @@ class NCEndToEndMetadata : NSObject  {
                 let encrypted = filesCodable.encrypted
                 let key = publicKeys["\(filesCodable.metadataKey)"]
                 
-                guard let encryptedFileAttributesJson = NCEndToEndEncryption.sharedManager().decryptMetadata(encrypted, key: key) else {
+                guard let encryptedFileAttributesJson = NCEndToEndEncryption.sharedManager().decryptEncryptedJson(encrypted, key: key) else {
                     return false
                 }