|
@@ -445,6 +445,114 @@ cleanup:
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+#
|
|
|
+#pragma mark - Encrypt / Decrypt Metadata
|
|
|
+#
|
|
|
+
|
|
|
+- (NSString *)decryptMetadata:(NSString *)encrypted privateKey:(NSString *)privateKey initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag
|
|
|
+{
|
|
|
+ NSMutableData *plainData;
|
|
|
+
|
|
|
+ NSData *keyData = [privateKey dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ NSData *ivData = [initializationVector dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ // Tag
|
|
|
+ NSRange range = [encrypted rangeOfString:IV_DELIMITER_ENCODED];
|
|
|
+ authenticationTag = [encrypted substringWithRange:NSMakeRange(range.location - AES_GCM_TAG_LENGTH, AES_GCM_TAG_LENGTH)];
|
|
|
+ NSData *tagData = [authenticationTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ // Cipher
|
|
|
+ NSString *cipher = [encrypted substringToIndex:(range.location)];
|
|
|
+ NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+ BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
+
|
|
|
+ if (plainData != nil && result) {
|
|
|
+ NSString *plain = [plainData base64EncodedStringWithOptions:0];
|
|
|
+ return plain;
|
|
|
+ } else {
|
|
|
+ return nil;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+#
|
|
|
+#pragma mark - Encrypt / Decrypt file
|
|
|
+#
|
|
|
+
|
|
|
+- (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
|
|
|
+{
|
|
|
+ NSMutableData *cipherData;
|
|
|
+ NSData *tagData;
|
|
|
+ NSData *plainData;
|
|
|
+
|
|
|
+ plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
|
|
|
+ if (plainData == nil)
|
|
|
+ return false;
|
|
|
+
|
|
|
+ NSData *keyData = [self generateKey:AES_KEY_128_LENGTH];
|
|
|
+ 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) {
|
|
|
+
|
|
|
+ [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameIdentifier] atomically:YES];
|
|
|
+
|
|
|
+ *key = [keyData base64EncodedStringWithOptions:0];
|
|
|
+ *initializationVector = [ivData base64EncodedStringWithOptions:0];
|
|
|
+ *authenticationTag = [tagData base64EncodedStringWithOptions:0];
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+- (void)decryptMetadata:(NSString *)metadata activeUrl:(NSString *)activeUrl
|
|
|
+{
|
|
|
+ NSMutableData *plainData;
|
|
|
+
|
|
|
+ NSData *cipherData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", activeUrl, metadata.fileID]];
|
|
|
+ NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
|
|
|
+ NSData *ivData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
|
|
|
+ NSData *tagData = [[NSData alloc] initWithBase64EncodedString:@"PboI9tqHHX3QeAA22PIu4w==" options:0];
|
|
|
+
|
|
|
+ BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
+
|
|
|
+ if (plainData != nil && result) {
|
|
|
+ [plainData writeToFile:[NSString stringWithFormat:@"%@/%@", activeUrl, @"decrypted"] atomically:YES];
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+- (NSString *)decryptMetadata:(NSString *)cipher key:(NSString *)key iv:(NSString *)iv tag:(NSString *)tag
|
|
|
+{
|
|
|
+ NSMutableData *plainData;
|
|
|
+
|
|
|
+ NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+ NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
+
|
|
|
+
|
|
|
+ BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
+
|
|
|
+ if (plainData != nil && result)
|
|
|
+ return [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];
|
|
|
+ else
|
|
|
+ return nil;
|
|
|
+}
|
|
|
+*/
|
|
|
+
|
|
|
+
|
|
|
+// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+// -----------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
+
|
|
|
+#
|
|
|
+#pragma mark - OPENSSL ENCRYPT/DECRYPT
|
|
|
+#
|
|
|
+
|
|
|
#
|
|
|
#pragma mark - Asymmetric Encrypt/Decrypt String
|
|
|
#
|
|
@@ -500,7 +608,7 @@ cleanup:
|
|
|
return nil;
|
|
|
|
|
|
NSData *outData = [[NSData alloc] initWithBytes:out length:outLen];
|
|
|
-
|
|
|
+
|
|
|
if (out)
|
|
|
free(out);
|
|
|
|
|
@@ -520,11 +628,11 @@ cleanup:
|
|
|
EVP_PKEY *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)
|
|
|
return nil;
|
|
|
-
|
|
|
+
|
|
|
status = EVP_PKEY_decrypt_init(ctx);
|
|
|
if (status <= 0)
|
|
|
return nil;
|
|
@@ -559,105 +667,6 @@ cleanup:
|
|
|
return outString;
|
|
|
}
|
|
|
|
|
|
-#
|
|
|
-#pragma mark - Encrypt / Decrypt Metadata
|
|
|
-#
|
|
|
-
|
|
|
-- (NSString *)decryptMetadata:(NSString *)encrypted privateKey:(NSString *)privateKey initializationVector:(NSString *)initializationVector authenticationTag:(NSString *)authenticationTag
|
|
|
-{
|
|
|
- NSMutableData *plainData;
|
|
|
-
|
|
|
- NSData *keyData = [privateKey dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
- NSData *ivData = [initializationVector dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
-
|
|
|
- // Tag
|
|
|
- NSRange range = [encrypted rangeOfString:IV_DELIMITER_ENCODED];
|
|
|
- authenticationTag = [encrypted substringWithRange:NSMakeRange(range.location - AES_GCM_TAG_LENGTH, AES_GCM_TAG_LENGTH)];
|
|
|
- NSData *tagData = [authenticationTag dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
-
|
|
|
- // Cipher
|
|
|
- NSString *cipher = [encrypted substringToIndex:(range.location)];
|
|
|
- NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
-
|
|
|
- BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
-
|
|
|
- if (plainData != nil && result) {
|
|
|
- NSString *plain = [plainData base64EncodedStringWithOptions:0];
|
|
|
- return plain;
|
|
|
- } else {
|
|
|
- return nil;
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-#
|
|
|
-#pragma mark - Encrypt / Decrypt file
|
|
|
-#
|
|
|
-
|
|
|
-- (BOOL)encryptFileName:(NSString *)fileName fileNameIdentifier:(NSString *)fileNameIdentifier directoryUser:(NSString *)directoryUser key:(NSString **)key initializationVector:(NSString **)initializationVector authenticationTag:(NSString **)authenticationTag
|
|
|
-{
|
|
|
- NSMutableData *cipherData;
|
|
|
- NSData *tagData;
|
|
|
- NSData *plainData;
|
|
|
-
|
|
|
- plainData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", directoryUser, fileName]];
|
|
|
- if (plainData == nil)
|
|
|
- return false;
|
|
|
-
|
|
|
- NSData *keyData = [self generateKey:AES_KEY_128_LENGTH];
|
|
|
- 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) {
|
|
|
-
|
|
|
- [cipherData writeToFile:[NSString stringWithFormat:@"%@/%@", directoryUser, fileNameIdentifier] atomically:YES];
|
|
|
-
|
|
|
- *key = [keyData base64EncodedStringWithOptions:0];
|
|
|
- *initializationVector = [ivData base64EncodedStringWithOptions:0];
|
|
|
- *authenticationTag = [tagData base64EncodedStringWithOptions:0];
|
|
|
-
|
|
|
- return true;
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
-- (void)decryptMetadata:(NSString *)metadata activeUrl:(NSString *)activeUrl
|
|
|
-{
|
|
|
- NSMutableData *plainData;
|
|
|
-
|
|
|
- NSData *cipherData = [[NSFileManager defaultManager] contentsAtPath:[NSString stringWithFormat:@"%@/%@", activeUrl, metadata.fileID]];
|
|
|
- NSData *keyData = [[NSData alloc] initWithBase64EncodedString:@"WANM0gRv+DhaexIsI0T3Lg==" options:0];
|
|
|
- NSData *ivData = [[NSData alloc] initWithBase64EncodedString:@"gKm3n+mJzeY26q4OfuZEqg==" options:0];
|
|
|
- NSData *tagData = [[NSData alloc] initWithBase64EncodedString:@"PboI9tqHHX3QeAA22PIu4w==" options:0];
|
|
|
-
|
|
|
- BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
-
|
|
|
- if (plainData != nil && result) {
|
|
|
- [plainData writeToFile:[NSString stringWithFormat:@"%@/%@", activeUrl, @"decrypted"] atomically:YES];
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-- (NSString *)decryptMetadata:(NSString *)cipher key:(NSString *)key iv:(NSString *)iv tag:(NSString *)tag
|
|
|
-{
|
|
|
- NSMutableData *plainData;
|
|
|
-
|
|
|
- NSData *cipherData = [cipher dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
- NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
- NSData *ivData = [iv dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
- NSData *tagData = [tag dataUsingEncoding:NSUTF8StringEncoding];
|
|
|
-
|
|
|
-
|
|
|
- BOOL result = [self decryptData:cipherData plainData:&plainData keyData:keyData keyLen:AES_KEY_128_LENGTH ivData:ivData tagData:tagData];
|
|
|
-
|
|
|
- if (plainData != nil && result)
|
|
|
- return [[NSString alloc] initWithData:plainData encoding:NSUTF8StringEncoding];
|
|
|
- else
|
|
|
- return nil;
|
|
|
-}
|
|
|
-*/
|
|
|
-
|
|
|
#
|
|
|
#pragma mark - AES/GCM/NoPadding
|
|
|
#
|