Marino Faggiana 7 years ago
parent
commit
ee0e06edfc
1 changed files with 13 additions and 12 deletions
  1. 13 12
      iOSClient/Security/NCEndToEndEncryption.m

+ 13 - 12
iOSClient/Security/NCEndToEndEncryption.m

@@ -54,7 +54,8 @@
 #define fileNamePrivateKey          @"privateKey.pem"
 #define fileNamePubliceKey          @"publicKey.pem"
 
-#define AES_KEY_LENGTH              16
+#define AES_KEY_128_LENGTH          16
+#define AES_KEY_256_LENGTH          32
 #define AES_IVEC_LENGTH             16
 #define AES_GCM_TAG_LENGTH          16
 
@@ -352,7 +353,7 @@ cleanup:
     
     NSData *initVectorData = [self generateIV:AES_IVEC_LENGTH];
 
-    BOOL result = [self encryptData:_privateKeyData cipherData:&privateKeyCipherData keyData:keyData initVectorData:initVectorData tagData:nil];
+    BOOL result = [self encryptData:_privateKeyData cipherData:&privateKeyCipherData keyData:keyData keyLen:AES_KEY_256_LENGTH initVectorData:initVectorData tagData:nil];
     
     if (result && privateKeyCipherData) {
         
@@ -401,7 +402,7 @@ cleanup:
     NSString *initVectorBase64 = [privateKeyCipher substringFromIndex:idx];
     NSData *initVectorData = [[NSData alloc] initWithBase64EncodedString:initVectorBase64 options:0];
     
-    BOOL result = [self decryptData:privateKeyCipherData plainData:&privateKeyData keyData:keyData initVectorData:initVectorData tag:nil];
+    BOOL result = [self decryptData:privateKeyCipherData plainData:&privateKeyData keyData:keyData keyLen:AES_KEY_256_LENGTH initVectorData:initVectorData tag:nil];
     
     if (result && privateKeyData) {
         
@@ -511,7 +512,7 @@ cleanup:
     NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
     NSData *initVectorData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
     
-    BOOL result = [self encryptData:plainData cipherData:&cipherData keyData:keyData initVectorData:initVectorData tagData:&tagData];
+    BOOL result = [self encryptData:plainData cipherData:&cipherData keyData:keyData keyLen:AES_KEY_128_LENGTH initVectorData:initVectorData tagData:&tagData];
     
     if (cipherData != nil && result) {
         [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", activeUrl, @"encrypted.dms"] atomically:YES];
@@ -528,7 +529,7 @@ cleanup:
     NSData *initVectorData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
     NSString *tag = @"PboI9tqHHX3QeAA22PIu4w==";
     
-    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData initVectorData:initVectorData tag:tag];
+    BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH initVectorData:initVectorData tag:tag];
     
     if (plainData != nil && result) {
         [plainData writeToFile:[NSString stringWithFormat:@"%@/%@", activeUrl, @"decrypted"] atomically:YES];
@@ -536,15 +537,15 @@ cleanup:
 }
 
 // encrypt data AES 256 GCM NOPADING
-- (BOOL)encryptData:(NSData *)plainData cipherData:(NSMutableData **)cipherData keyData:(NSData *)keyData initVectorData:(NSData *)initVectorData tagData:(NSData **)tagData
+- (BOOL)encryptData:(NSData *)plainData cipherData:(NSMutableData **)cipherData keyData:(NSData *)keyData keyLen:(int)keyLen initVectorData:(NSData *)initVectorData tagData:(NSData **)tagData
 {
     int status = 0;
     *cipherData = [NSMutableData dataWithLength:[plainData length]];
     
     // set up key
-    unsigned char cKey[AES_KEY_LENGTH];
+    unsigned char cKey[keyLen];
     bzero(cKey, sizeof(cKey));
-    [keyData getBytes:cKey length:AES_KEY_LENGTH];
+    [keyData getBytes:cKey length:keyLen];
     
     // set up ivec
     unsigned char cIv[AES_IVEC_LENGTH];
@@ -578,7 +579,7 @@ cleanup:
 }
 
 // decrypt data AES 256 GCM NOPADING
-- (BOOL)decryptData:(NSData *)cipherData plainData:(NSMutableData **)plainData keyData:(NSData *)keyData initVectorData:(NSData *)initVectorData tag:(NSString *)tag
+- (BOOL)decryptData:(NSData *)cipherData plainData:(NSMutableData **)plainData keyData:(NSData *)keyData keyLen:(int)keyLen initVectorData:(NSData *)initVectorData tag:(NSString *)tag
 {    
     int status = 0;
     int numberOfBytes = 0;
@@ -586,12 +587,12 @@ cleanup:
     *plainData = [NSMutableData dataWithLength:[cipherData length]];
     
     // set up key
-    unsigned char cKey[AES_KEY_LENGTH];
+    unsigned char cKey[keyLen];
     bzero(cKey, sizeof(cKey));
-    [keyData getBytes:cKey length:AES_KEY_LENGTH];
+    [keyData getBytes:cKey length:keyLen];
     
     // ----- DEBUG Print -----
-    printData = [NSData dataWithBytes:cKey length:AES_KEY_LENGTH];
+    printData = [NSData dataWithBytes:cKey length:keyLen];
     NSLog(@"Key %@", [printData base64EncodedStringWithOptions:0]);
     // -----------------------