Page MenuHomePhabricator

D4384.id14272.diff
No OneTemporary

D4384.id14272.diff

diff --git a/native/ios/Comm/TemporaryMessageStorage/EncryptedFileUtils.mm b/native/ios/Comm/TemporaryMessageStorage/EncryptedFileUtils.mm
--- a/native/ios/Comm/TemporaryMessageStorage/EncryptedFileUtils.mm
+++ b/native/ios/Comm/TemporaryMessageStorage/EncryptedFileUtils.mm
@@ -10,3 +10,79 @@
+ (NSData *)_encryptData:(NSString *)data error:(NSError **)error;
+ (NSString *)_decryptData:(NSString *)data error:(NSError **)error;
@end
+
+@implementation EncryptedFileUtils
++ (NSData *)_encryptData:(NSString *)data error:(NSError **)error {
+ NSData *encryptedData = [EncryptedFileUtils
+ _runCryptor:[data dataUsingEncoding:NSUTF8StringEncoding]
+ operation:kCCEncrypt
+ error:error];
+ if (!encryptedData) {
+ return nil;
+ }
+ return [encryptedData base64EncodedDataWithOptions:0];
+}
+
++ (NSString *)_decryptData:(NSString *)data error:(NSError **)error {
+ NSData *base64DecodedData = [[NSData alloc] initWithBase64EncodedString:data
+ options:0];
+ NSString *decryptedData = [[NSString alloc]
+ initWithData:[EncryptedFileUtils _runCryptor:base64DecodedData
+ operation:kCCDecrypt
+ error:error]
+ encoding:NSUTF8StringEncoding];
+ if (!decryptedData) {
+ return nil;
+ }
+ return decryptedData;
+}
+
++ (NSData *)_runCryptor:(NSData *)binary
+ operation:(CCOperation)operation
+ error:(NSError **)err {
+ NSString *keyString =
+ [[CommSecureStoreIOSWrapper sharedInstance] get:@"comm.encryptionKey"];
+ if (!keyString) {
+ *err = [NSError
+ errorWithDomain:@"app.comm"
+ code:NSCoderValueNotFoundError
+ userInfo:@{
+ NSLocalizedDescriptionKey : @"Encryption key not created yet"
+ }];
+ return nil;
+ }
+
+ NSUInteger AES256KeyByteCount = 32;
+ NSData *key = [[keyString substringToIndex:AES256KeyByteCount]
+ dataUsingEncoding:NSUTF8StringEncoding];
+ NSMutableData *resultBinary =
+ [NSMutableData dataWithLength:binary.length + kCCBlockSizeAES128];
+
+ size_t processedBytes = 0;
+ CCCryptorStatus ccStatus = CCCrypt(
+ operation,
+ kCCAlgorithmAES,
+ kCCOptionPKCS7Padding,
+ key.bytes,
+ key.length,
+ nil,
+ binary.bytes,
+ binary.length,
+ resultBinary.mutableBytes,
+ resultBinary.length,
+ &processedBytes);
+
+ resultBinary.length = processedBytes;
+ if (ccStatus != kCCSuccess) {
+ *err = [NSError
+ errorWithDomain:@"app.comm"
+ code:ccStatus
+ userInfo:@{
+ NSLocalizedDescriptionKey : @"Cryptographic operation failed"
+ }];
+ return nil;
+ }
+ return resultBinary;
+}
+
+@end

File Metadata

Mime Type
text/plain
Expires
Wed, Nov 6, 2:47 AM (20 h, 42 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2426994
Default Alt Text
D4384.id14272.diff (2 KB)

Event Timeline