diff --git a/PNObject.podspec b/PNObject.podspec index 36a6153..17bc334 100644 --- a/PNObject.podspec +++ b/PNObject.podspec @@ -8,7 +8,7 @@ Pod::Spec.new do |s| s.name = "PNObject" -s.version = "0.4.0" +s.version = "0.4.5" s.summary = "PNObject is a simple replica of the more complex ParseObject" # This description is used to generate tags and improve search results. diff --git a/Pod/Classes/PNObjectConfig.h b/Pod/Classes/PNObjectConfig.h index 47a57d1..e6973a1 100644 --- a/Pod/Classes/PNObjectConfig.h +++ b/Pod/Classes/PNObjectConfig.h @@ -14,6 +14,9 @@ #import "AFHTTPRequestSerializer+OAuth2.h" #import "AFOAuthCredential.h" +extern NSString* _Nonnull const PNObjectEncryptionKey; +extern NSString* _Nonnull const PNObjectEncryptionNonce; + #pragma mark LocalNotification Keys extern NSString* _Nonnull const PNObjectLocalNotificationRefreshTokenClientCredentialSuccess; @@ -209,11 +212,5 @@ extern NSString* _Nonnull const Client_Secret; * <#Description#> */ @property (nonatomic) NSInteger minPasswordLenght; -/** - * <#Description#> - */ -@property (nonatomic, strong, nonnull, readonly) NSString *encrypKey; - -@property (nonatomic, strong, nonnull, readonly) NSString *nonce; @end \ No newline at end of file diff --git a/Pod/Classes/PNObjectConfig.m b/Pod/Classes/PNObjectConfig.m index b80bd04..23af295 100644 --- a/Pod/Classes/PNObjectConfig.m +++ b/Pod/Classes/PNObjectConfig.m @@ -13,8 +13,8 @@ #import "NSString+Helper.h" #import "PNObject+Protected.h" #import "NSUserDefaults+AESEncryptor.h" - -NSString * const PNObjectNSUserDefaultsAESKey = @"feiGuP5iYZB8cSwHnmCtAWomLcarVoxDe3L8jVSxv6f6dOUtSF"; +#import "NASecRandom.h" +#import "NAKeychain.h" NSString * const PNObjectLocalNotificationRefreshTokenClientCredentialSuccess = @"PNObjectLocalNotificationRefreshTokenClientCredentialSuccess"; NSString * const PNObjectLocalNotificationRefreshTokenClientCredentialFail = @"PNObjectLocalNotificationRefreshTokenClientCredentialFail"; @@ -165,20 +165,18 @@ static bool isFirstAccess = YES; _headerFields = [[NSMutableDictionary alloc] init]; - [[NSUserDefaults standardUserDefaults] setAESKey:PNObjectNSUserDefaultsAESKey]; + NSLog(@"%@",[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey]); + + if (![NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey]) { + NSError *error; + + NSData *key = [NASecRandom randomData:32 error:&error]; + [NAKeychain addSymmetricKey:key applicationLabel:PNObjectEncryptionKey tag:nil label:nil]; + + NSData *nonce = [NASecRandom randomData:16 error:&error]; + [NAKeychain addSymmetricKey:nonce applicationLabel:PNObjectEncryptionNonce tag:nil label:nil]; - if ([[NSUserDefaults standardUserDefaults] objectForKey:PNObjectEncryptionKey]) { - _encrypKey = [[NSUserDefaults standardUserDefaults] decryptedValueForKey:PNObjectEncryptionKey]; - _nonce = [[NSUserDefaults standardUserDefaults] decryptedValueForKey:PNObjectEncryptionNonce]; } - else { - _encrypKey = [[NSProcessInfo processInfo] globallyUniqueString]; - _nonce = [[NSProcessInfo processInfo] globallyUniqueString]; - - [[NSUserDefaults standardUserDefaults] encryptValue:_encrypKey withKey:PNObjectEncryptionKey]; - [[NSUserDefaults standardUserDefaults] encryptValue:_nonce withKey:PNObjectEncryptionNonce]; - } - } return self; } diff --git a/Pod/Classes/PNObjectModel.m b/Pod/Classes/PNObjectModel.m index fa950c2..f8fe759 100644 --- a/Pod/Classes/PNObjectModel.m +++ b/Pod/Classes/PNObjectModel.m @@ -148,7 +148,7 @@ static bool isFirstAccess = YES; NSError *error = nil; - NSData *data = [_AES decrypt:[_fileManager fetchFileDataWithPath:className] nonce:[[[PNObjectConfig sharedInstance] nonce] dataUsingEncoding:NSUTF8StringEncoding] key:[[[PNObjectConfig sharedInstance] encrypKey] dataUsingEncoding:NSUTF8StringEncoding] error:&error]; // password:[[PNObjectConfig sharedInstance] encrypKey] error:&error]; + NSData *data = [_AES decrypt:[_fileManager fetchFileDataWithPath:className] nonce:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionNonce] key:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey] error:&error]; // password:[[PNObjectConfig sharedInstance] encrypKey] error:&error]; return [NSKeyedUnarchiver unarchiveObjectWithData:data]; } @@ -173,7 +173,7 @@ static bool isFirstAccess = YES; NSDictionary *objectDict = [(PNObject*) object reverseMapping]; - NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objectDict] nonce:[[[PNObjectConfig sharedInstance] nonce] dataUsingEncoding:NSUTF8StringEncoding] key:[[[PNObjectConfig sharedInstance] encrypKey] dataUsingEncoding:NSUTF8StringEncoding] error:&error];//[RNCryptor encryptData:[NSKeyedArchiver archivedDataWithRootObject:objectDict] password:[[PNObjectConfig sharedInstance] encrypKey]]; + NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objectDict] nonce:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionNonce] key:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey] error:&error];//[RNCryptor encryptData:[NSKeyedArchiver archivedDataWithRootObject:objectDict] password:[[PNObjectConfig sharedInstance] encrypKey]]; if ([self issetPNObjectModelForObject:object]) { if ([_fileManager updateFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]) { @@ -199,7 +199,7 @@ static bool isFirstAccess = YES; - NSData *data = [_AES decrypt:[_fileManager fetchFileDataWithPath:[self objectName:object]] nonce:[[[PNObjectConfig sharedInstance] nonce] dataUsingEncoding:NSUTF8StringEncoding] key:[[[PNObjectConfig sharedInstance] encrypKey] dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + NSData *data = [_AES decrypt:[_fileManager fetchFileDataWithPath:[self objectName:object]] nonce:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionNonce] key:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey] error:&error]; //[RNCryptor decryptData:[_fileManager fetchFileDataWithPath:[self objectName:object]] password:[[PNObjectConfig sharedInstance] encrypKey] error:&error]; NSMutableArray *objects = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData:data]]; @@ -208,7 +208,7 @@ static bool isFirstAccess = YES; [objects addObject:objectDict]; - NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objects] nonce:[[[PNObjectConfig sharedInstance] nonce] dataUsingEncoding:NSUTF8StringEncoding] key:[[[PNObjectConfig sharedInstance] encrypKey] dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objects] nonce:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionNonce] key:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey] error:&error]; //[RNCryptor encryptData:[NSKeyedArchiver archivedDataWithRootObject:objects] password:[[PNObjectConfig sharedInstance] encrypKey]]; if ([_fileManager updateFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]) { @@ -227,7 +227,7 @@ static bool isFirstAccess = YES; [objects addObject:objectDict]; - NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objects] nonce:[[[PNObjectConfig sharedInstance] nonce] dataUsingEncoding:NSUTF8StringEncoding] key:[[[PNObjectConfig sharedInstance] encrypKey] dataUsingEncoding:NSUTF8StringEncoding] error:&error]; + NSData *objectData = [_AES encrypt:[NSKeyedArchiver archivedDataWithRootObject:objects] nonce:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionNonce] key:[NAKeychain symmetricKeyWithApplicationLabel:PNObjectEncryptionKey] error:&error]; //[RNCryptor encryptData:[NSKeyedArchiver archivedDataWithRootObject:objects] password:[[PNObjectConfig sharedInstance] encrypKey]]; if ([_fileManager createFileWithData:objectData filePath:[self objectName:object] permisson:@(0755)]) {