Marino Faggiana 7 жил өмнө
parent
commit
a886c8785e

+ 70 - 9
iOSClient/Security/NCEndToEndEncryption.m

@@ -407,6 +407,7 @@ cleanup:
         NSString *privateKey = [[NSString alloc] initWithData:privateKeyData encoding:NSUTF8StringEncoding];
         
         NSData *encryptData = [self encryptAsymmetricString:TEST_KEY publicKey:publicKey];
+        NSString *decryptString = [self decryptAsymmetricData:encryptData privateKey:privateKey];
         
         //unsigned char cPrivateKey[privateKeyData.length];
         //bzero(cPrivateKey, sizeof(cPrivateKey));
@@ -432,28 +433,88 @@ cleanup:
 
 - (NSData *)encryptAsymmetricString:(NSString *)plain publicKey:(NSString *)publicKey
 {
-    unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
+    //unsigned char *pKey = (unsigned char *)[publicKey UTF8String];
+    
+    char *pKey = "-----BEGIN PUBLIC KEY-----\n"
+    "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwMu7BZF451FjUXYNr323\n"
+    "aeeaCW2a7s6eHHs8Gz5qgQ/zDegub6is3jwdTZJyGcRcN1DxKQsLcOa3F18KSiCk\n"
+    "yzIWjNV4YH7GdV7Ke2qLjcQUs7wktGUKyPYJmDWGYv/QN0Sbbol9IbeLjSBHUt16\n"
+    "xBex5IIpQqDtBy0RZvAMdUUB1rezKka0bC+b5CmE4ysIRFyFiweSlGsSdkaS9q1l\n"
+    "d+c/V4LMxljNbhdpfpiniWAD3lm9+mDJzToOiqz+nH9SHs4ClEThBAScI00xJH36\n"
+    "3mDvY0x6HVDyCsueC9jtfZKnI2uwM2tbUU4iDkCaIYm6VE6h1qs5AkrxH1o6K2lC\n"
+    "kQIDAQAB\n"
+    "-----END PUBLIC KEY-----\n";
+
     
     BIO *bio = BIO_new_mem_buf(pKey, -1);
     RSA *rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, 0, NULL);
     BIO_free(bio);
 
     NSData *plainData = [plain dataUsingEncoding:NSUTF8StringEncoding];
-    
-    int maxSize = RSA_size(rsa);
-    unsigned char *output = (unsigned char *) malloc(maxSize * sizeof(char));
-    
-    int encrypted_length = RSA_public_encrypt((int)[plainData length], [plainData bytes], output, rsa, RSA_PKCS1_PADDING);
+    NSMutableData *cipherData = [NSMutableData dataWithLength:[plainData length]];
+    unsigned char *pCipherData = [cipherData mutableBytes];
+
+    int encrypted_length = RSA_public_encrypt((int)[plainData length], [plainData bytes], pCipherData, rsa, RSA_PKCS1_PADDING);
     if(encrypted_length == -1) {
+        char buffer[500];
+        ERR_error_string(ERR_get_error(), buffer);
+        NSLog(@"%@",[NSString stringWithUTF8String:buffer]);
         return nil;
     }
    
-    return [NSData dataWithBytes:output length:encrypted_length];
+    return [NSData dataWithBytes:pCipherData length:[plainData length]];
 }
 
-- (NSString *)decryptStringAsymmetric:(NSString *)string privateKey:(NSString *)privateKey
+- (NSString *)decryptAsymmetricData:(NSData *)chiperData privateKey:(NSString *)privateKey
 {
-    return nil;
+    //unsigned char *pKey = (unsigned char *)[privateKey UTF8String];
+
+    char *pKey = "-----BEGIN RSA PRIVATE KEY-----\n"
+    "MIIEowIBAAKCAQEAwMu7BZF451FjUXYNr323aeeaCW2a7s6eHHs8Gz5qgQ/zDegu\n"
+    "b6is3jwdTZJyGcRcN1DxKQsLcOa3F18KSiCkyzIWjNV4YH7GdV7Ke2qLjcQUs7wk\n"
+    "tGUKyPYJmDWGYv/QN0Sbbol9IbeLjSBHUt16xBex5IIpQqDtBy0RZvAMdUUB1rez\n"
+    "Kka0bC+b5CmE4ysIRFyFiweSlGsSdkaS9q1ld+c/V4LMxljNbhdpfpiniWAD3lm9\n"
+    "+mDJzToOiqz+nH9SHs4ClEThBAScI00xJH363mDvY0x6HVDyCsueC9jtfZKnI2uw\n"
+    "M2tbUU4iDkCaIYm6VE6h1qs5AkrxH1o6K2lCkQIDAQABAoIBAChqzWNGcu0zb7nF\n"
+    "IOtYVJocFnvBgYhswlLANwKTHCrAWDjjItD/sHXKbm4ztD3Yn2htTJFJInXhuCJr\n"
+    "JzIRE9sRPg76NYktKpeybope9LCcmaZwW9WBlTg59Br3pZude14KwPb0Vco6u0Oz\n"
+    "r6AclD8FpKJ98v5n1Cj79rj4u/PdTXZP+Fmz8y0KAgM1s39rtiaAHKGCcyfb1awf\n"
+    "pCsYL0IvmU1Z00sPe5dzSqLY4HcIyT2kIMqnC0c0HTPtU6A5GI7dPMQsJy+ZEsWo\n"
+    "kR4YdymmN3C11gdd8kTpExdm1Ick5GfgUfc5hYYTBUO4n8bWJFJLxY6MtjdRfWHc\n"
+    "SBg4hw0CgYEA3vYaOzk8gUgUVkhnAsyoRNPkMKOH+EbOWuAssK3lQ2U8gvryJngz\n"
+    "KaQEGnluHvwK69BkJQQ5+PTMKhvhDZ4Ur9t6K7iZ3io3XLafH+jZk8alxYtZen00\n"
+    "Z38z2VQ8gjYHjfXGKNs1YGcfb+uJ5a8YMGbNjYTdGkIeWL0DLdrYH78CgYEA3V1R\n"
+    "fTPCY93kxOfYEnRvsO7HY6/4aESAMthROABd9IbYzmsA2Jkcs9Cns3MvWoLpbUY5\n"
+    "c36WDn9pZOg8vF0dday9Gr/ZrisEv7MgFl0FloyNsnGviHHFfoLPbOjEPUGXcRy2\n"
+    "1350nFJ2L0e9XcHgvPSjkmwcLbGgkrtWgjJoMa8CgYB0URPSPcPw9jeV4+PJtBc9\n"
+    "AQYU0duHjPjus/Dco3vtswzkkCJwK1kVqjlxzlPC2l6gM3FrVk8gMCWq+ixovEWy\n"
+    "kN+lm4K6Qm/rcGKHdSS9UW7+JfqiSltiexwDj0yZ6bH7P3MHsYShLGtcKhcguj32\n"
+    "Ukt+PwhSQJgwVzsnWvpRZQKBgQCDFrIdLLufHFZPbOR9+UnzQ1P8asb2KCqq8YMX\n"
+    "YNBC8GAPzToRCor+yT+mez29oezN81ouVPZT24v0X7sn6RR7DTJnVtl31K3ZQCBu\n"
+    "XePjRZTb6YsDiCxmQNzJKAaeJ+ug5lo4vwAbWpH2actwbFHEVDNRkIgXXysx+ZK/\n"
+    "Q06ErQKBgHzXwrSRWppsQGdxSrU1Ynwg0bIirfi2N8zyHgFutQzdkDXY5N0gRG7a\n"
+    "Xz8GFJecE8Goz8Mw2NigtBC4EystXievCwR3EztDyU5PgvEQV7d+0GLKtCG6QFqC\n"
+    "gZKlwzSf9rLhfXYCrWgqg7ZXsiaADQePw+fU2dudERxmg3gokBFL\n"
+    "-----END RSA PRIVATE KEY-----\n";
+    
+    BIO *bio = BIO_new_mem_buf(pKey, -1);
+    RSA *rsa = PEM_read_bio_RSAPrivateKey(bio, NULL, 0, NULL);
+    BIO_free(bio);
+    
+    NSMutableData *plainData = [NSMutableData dataWithLength:[chiperData length]];
+    unsigned char *pPlainData = [plainData mutableBytes];
+
+    int decrypted_length = RSA_private_decrypt((int)[chiperData length], [chiperData bytes], pPlainData, rsa, RSA_PKCS1_PADDING);
+    if(decrypted_length == -1) {
+        char buffer[500];
+        ERR_error_string(ERR_get_error(), buffer);
+        NSLog(@"%@",[NSString stringWithUTF8String:buffer]);
+        return nil;
+    }
+    
+    NSString *plain = [[NSString alloc] initWithBytes:pPlainData length:sizeof(pPlainData) encoding:NSUTF8StringEncoding];
+    
+    return plain;
 }
 
 #