Преглед изворни кода

change encryptAsymmetricString

Marino Faggiana пре 7 година
родитељ
комит
27f365a921

+ 1 - 1
iOSClient/Security/NCEndToEndEncryption.h

@@ -33,7 +33,7 @@
 - (NSString *)encryptPrivateKey:(NSString *)userID directoryUser: (NSString *)directoryUser passphrase:(NSString *)passphrase privateKey:(NSString **)privateKey;
 - (NSString *)decryptPrivateKey:(NSString *)privateKeyCipher passphrase:(NSString *)passphrase publicKey:(NSString *)publicKey;
 
-- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey;
+- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey;
 - (NSString *)decryptAsymmetricData:(NSData *)cipherData privateKey:(NSString *)privateKey;
 
 - (NSString *)decryptMetadata:(NSString *)encrypted key:(NSString *)key;

+ 32 - 14
iOSClient/Security/NCEndToEndEncryption.m

@@ -425,7 +425,7 @@ cleanup:
     
         if (privateKey) {
         
-            NSData *encryptData = [self encryptAsymmetricString:ASYMMETRIC_STRING_TEST publicKey:publicKey];
+            NSData *encryptData = [self encryptAsymmetricString:ASYMMETRIC_STRING_TEST publicKey:publicKey privateKey:nil];
             if (!encryptData)
                 return nil;
         
@@ -550,24 +550,42 @@ cleanup:
 #pragma mark - Asymmetric Encrypt/Decrypt String
 #
 
-- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey
+- (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey privateKey:(NSString *)privateKey
 {
-    unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
     ENGINE *eng = NULL;
+    EVP_PKEY *key = NULL;
     int status = 0;
     
-    // 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;
+    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;
+    }
     
-    EVP_PKEY *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;
+    }
     
     EVP_PKEY_CTX *ctx = EVP_PKEY_CTX_new(key, eng);
     if (!ctx)

+ 1 - 1
iOSClient/Security/NCEndToEndMetadata.swift

@@ -88,7 +88,7 @@ class NCEndToEndMetadata : NSObject  {
                 let encryptedJsonData = try jsonEncoder.encode(encrypted)
                 let encryptedJsonString = String(data: encryptedJsonData, encoding: .utf8)
                 
-                guard let encryptedEncryptionData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(encryptedJsonString, publicKey: publicKey) else {
+                guard let encryptedEncryptionData = NCEndToEndEncryption.sharedManager().encryptAsymmetricString(encryptedJsonString, publicKey: nil, privateKey: privateKey) else {
                     print("Serious internal error in encoding metadata")
                     return nil
                 }