Marino Faggiana 1 year ago
parent
commit
ce3de1803c

+ 1 - 2
iOSClient/Networking/E2EE/NCEndToEndEncryption.h

@@ -48,8 +48,7 @@
 
 
 // Encrypt/Decrypt asymmetric
 // Encrypt/Decrypt asymmetric
 
 
-- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey;
-- (NSData *)encryptAsymmetricData:(NSData *)plainData publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey;
+- (NSData *)encryptAsymmetricData:(NSData *)plainData privateKey:(NSString *)privateKey;
 - (NSData *)decryptAsymmetricData:(NSData *)cipherData privateKey:(NSString *)privateKey;
 - (NSData *)decryptAsymmetricData:(NSData *)cipherData privateKey:(NSString *)privateKey;
 
 
 // Encrypt / Decrypt file
 // Encrypt / Decrypt file

+ 7 - 102
iOSClient/Networking/E2EE/NCEndToEndEncryption.m

@@ -584,116 +584,21 @@
 #pragma mark - Encrypt/Decrypt asymmetric
 #pragma mark - Encrypt/Decrypt asymmetric
 #
 #
 
 
-- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey
+- (NSData *)encryptAsymmetricData:(NSData *)plainData privateKey:(NSString *)privateKey
 {
 {
     EVP_PKEY *key = NULL;
     EVP_PKEY *key = NULL;
     int status = 0;
     int status = 0;
-    
-    if (publicKey != nil) {
-        
-        unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
 
 
-        // Extract real publicKey
-        BIO *bio = BIO_new_mem_buf(pKey, -1);
-        if (!bio)
-            return nil;
-        
-        X509 *x509 = PEM_read_bio_X509(bio, NULL, 0, NULL);
-        if (!x509)
-            return nil;
-        
-        key = X509_get_pubkey(x509);
-        if (!key)
-            return nil;
-    }
-    
-    if (privateKey != nil) {
-        
-        unsigned char *pKey = (unsigned char *)[privateKey UTF8String];
+    unsigned char *pKey = (unsigned char *)[privateKey UTF8String];
 
 
-        BIO *bio = BIO_new_mem_buf(pKey, -1);
-        if (!bio)
-            return nil;
-        
-        key = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
-        if (!key)
-            return nil;
-    }
-    
-    EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, NULL);
-    if (!ctx)
-        return nil;
-    
-    status = EVP_PKEY_encrypt_init(ctx);
-    if (status <= 0)
-        return nil;
-    
-    status = EVP_PKEY_CTX_set_rsa_padding(ctx, RSA_PKCS1_OAEP_PADDING);
-    if (status <= 0)
-        return nil;
-    
-    status = EVP_PKEY_CTX_set_rsa_oaep_md(ctx, EVP_sha256());
-    if (status <= 0)
-        return nil;
-    
-    status = EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, EVP_sha256());
-    if (status <= 0)
-        return nil;
-    
-    unsigned long outLen = 0;
-    NSData *plainData = [plain dataUsingEncoding:NSUTF8StringEncoding];
-    status = EVP_PKEY_encrypt(ctx, NULL, &outLen, [plainData bytes], (int)[plainData length]);
-    if (status <= 0 || outLen == 0)
-        return nil;
-    
-    unsigned char *out = (unsigned char *) malloc(outLen);
-    status = EVP_PKEY_encrypt(ctx, out, &outLen, [plainData bytes], (int)[plainData length]);
-    if (status <= 0)
+    BIO *bio = BIO_new_mem_buf(pKey, -1);
+    if (!bio)
         return nil;
         return nil;
-    
-    NSData *outData = [[NSData alloc] initWithBytes:out length:outLen];
-    
-    if (out)
-        free(out);
-    
-    return outData;
-}
 
 
-- (NSData *)encryptAsymmetricData:(NSData *)plainData publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey
-{
-    EVP_PKEY *key = NULL;
-    int status = 0;
-
-    if (publicKey != nil) {
-
-        unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
-
-        // Extract real publicKey
-        BIO *bio = BIO_new_mem_buf(pKey, -1);
-        if (!bio)
-            return nil;
-
-        X509 *x509 = PEM_read_bio_X509(bio, NULL, 0, NULL);
-        if (!x509)
-            return nil;
-
-        key = X509_get_pubkey(x509);
-        if (!key)
-            return nil;
-    }
-
-    if (privateKey != nil) {
-
-        unsigned char *pKey = (unsigned char *)[privateKey UTF8String];
-
-        BIO *bio = BIO_new_mem_buf(pKey, -1);
-        if (!bio)
-            return nil;
+    key = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
+    if (!key)
+        return nil;
 
 
-        key = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
-        if (!key)
-            return nil;
-    }
 
 
     EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, NULL);
     EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, NULL);
     if (!ctx)
     if (!ctx)

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

@@ -47,13 +47,13 @@ extension NCEndToEndMetadata {
         //
         //
         if e2eEncryptions.isEmpty, let key = NCEndToEndEncryption.sharedManager()?.generateKey() as? NSData {
         if e2eEncryptions.isEmpty, let key = NCEndToEndEncryption.sharedManager()?.generateKey() as? NSData {
 
 
-            if let key = key.base64EncodedString().data(using: .utf8)?.base64EncodedString(),
-               let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(key, publicKey: nil, privateKey: privateKey) {
+            if let key = key.base64EncodedString().data(using: .utf8)?.base64EncodedString().data(using: .utf8),
+               let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(key, privateKey: privateKey) {
                 metadataKey = metadataKeyEncrypted.base64EncodedString()
                 metadataKey = metadataKeyEncrypted.base64EncodedString()
             }
             }
 
 
-        } else if let metadatakey = (e2eEncryptions.first!.metadataKey.data(using: .utf8)?.base64EncodedString()),
-                  let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(metadatakey, publicKey: nil, privateKey: privateKey) {
+        } else if let metadatakey = (e2eEncryptions.first!.metadataKey.data(using: .utf8)?.base64EncodedString().data(using: .utf8)),
+                  let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(metadatakey, privateKey: privateKey) {
 
 
             metadataKey = metadataKeyEncrypted.base64EncodedString()
             metadataKey = metadataKeyEncrypted.base64EncodedString()
         }
         }
@@ -88,8 +88,8 @@ extension NCEndToEndMetadata {
                 var encryptedInitializationVector: NSString?
                 var encryptedInitializationVector: NSString?
                 var encryptedTag: NSString?
                 var encryptedTag: NSString?
 
 
-                if let metadataKeyFiledrop = (e2eEncryption.metadataKeyFiledrop.data(using: .utf8)?.base64EncodedString()),
-                   let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(metadataKeyFiledrop, publicKey: nil, privateKey: privateKey) {
+                if let metadataKeyFiledrop = (e2eEncryption.metadataKeyFiledrop.data(using: .utf8)?.base64EncodedString().data(using: .utf8)),
+                   let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(metadataKeyFiledrop, privateKey: privateKey) {
                     encryptedKey = metadataKeyEncrypted.base64EncodedString()
                     encryptedKey = metadataKeyEncrypted.base64EncodedString()
                 }
                 }
                 let encrypted = E2eeV12.Encrypted(key: e2eEncryption.key, filename: e2eEncryption.fileName, mimetype: e2eEncryption.mimeType)
                 let encrypted = E2eeV12.Encrypted(key: e2eEncryption.key, filename: e2eEncryption.fileName, mimetype: e2eEncryption.mimeType)

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

@@ -51,7 +51,7 @@ extension NCEndToEndMetadata {
         } else {
         } else {
             guard let keyGenerated = NCEndToEndEncryption.sharedManager()?.generateKey() as? Data else { return (nil, nil) }
             guard let keyGenerated = NCEndToEndEncryption.sharedManager()?.generateKey() as? Data else { return (nil, nil) }
             print(keyGenerated.base64EncodedString())
             print(keyGenerated.base64EncodedString())
-            guard let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(keyGenerated, publicKey: nil, privateKey: privateKey) else { return (nil, nil) }
+            guard let metadataKeyEncrypted = NCEndToEndEncryption.sharedManager().encryptAsymmetricData(keyGenerated, privateKey: privateKey) else { return (nil, nil) }
             encryptedMetadataKey = metadataKeyEncrypted.base64EncodedString()
             encryptedMetadataKey = metadataKeyEncrypted.base64EncodedString()
 
 
             NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: nil, filedropKey: nil, metadataKey: nil)
             NCManageDatabase.shared.addE2EUsersV2(account: account, serverUrl: serverUrl, userId: userId, certificate: certificate, encryptedFiledropKey: nil, encryptedMetadataKey: encryptedMetadataKey, decryptedFiledropKey: nil, decryptedMetadataKey: nil, filedropKey: nil, metadataKey: nil)