Re-registering, generating new server passwords

pull/1/head
Frederic Jacobs 10 years ago
parent 021da47a99
commit cfbcdc5a51

@ -75,7 +75,7 @@
+(PhoneManager*) phoneManager; +(PhoneManager*) phoneManager;
+(BOOL)isRegistered; +(BOOL)isRegistered;
-(void)setRegistered; +(void)setRegistered:(BOOL)status;
+(void)resetAppData; +(void)resetAppData;
@end @end

@ -152,7 +152,7 @@ static Environment* environment = nil;
NSData *macKey = [SGNKeychainUtil signalingMacKey]; NSData *macKey = [SGNKeychainUtil signalingMacKey];
NSData *extra = [SGNKeychainUtil signalingExtraKey]; NSData *extra = [SGNKeychainUtil signalingExtraKey];
NSString *serverAuth = [SGNKeychainUtil serverAuthPassword]; NSString *serverAuth = [SGNKeychainUtil serverAuthPassword];
BOOL registered = [[NSUserDefaults standardUserDefaults] objectForKey:isRegisteredUserDefaultString]; BOOL registered = [NSNumber numberWithBool:[[[NSUserDefaults standardUserDefaults] objectForKey:isRegisteredUserDefaultString] boolValue]];
if (signalingKey && macKey && extra && serverAuth && registered) { if (signalingKey && macKey && extra && serverAuth && registered) {
return YES; return YES;
@ -161,7 +161,7 @@ static Environment* environment = nil;
} }
} }
-(void)setRegistered:(BOOL)status{ +(void)setRegistered:(BOOL)status{
[[NSUserDefaults standardUserDefaults] setObject:status?@YES:@NO forKey:isRegisteredUserDefaultString]; [[NSUserDefaults standardUserDefaults] setObject:status?@YES:@NO forKey:isRegisteredUserDefaultString];
} }

@ -12,7 +12,9 @@
@interface SGNKeychainUtil : NSObject @interface SGNKeychainUtil : NSObject
+(void)generateKeyingMaterial; +(void)generateSignaling;
+(void)generateServerAuthPassword;
+(void)wipeKeychain; +(void)wipeKeychain;
#pragma mark Registered Phone Number #pragma mark Registered Phone Number

@ -27,13 +27,17 @@
@implementation SGNKeychainUtil @implementation SGNKeychainUtil
+ (void)generateKeyingMaterial{ + (void)generateServerAuthPassword{
[self storeString:[[CryptoTools generateSecureRandomData:SAVED_PASSWORD_LENGTH] encodedAsBase64] forKey:SAVED_PASSWORD_KEY];
}
+ (void)generateSignaling{
[self storeData:[CryptoTools generateSecureRandomData:SIGNALING_MAC_KEY_LENGTH] forKey:SIGNALING_MAC_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_MAC_KEY_LENGTH] forKey:SIGNALING_MAC_KEY];
[self storeData:[CryptoTools generateSecureRandomData:SIGNALING_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY];
[self storeData:[CryptoTools generateSecureRandomData:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY];
[self storeData:[CryptoTools generateSecureRandomData:ZID_LENGTH] forKey:ZID_KEY]; [self storeData:[CryptoTools generateSecureRandomData:ZID_LENGTH] forKey:ZID_KEY];
[self storeString:[[CryptoTools generateSecureRandomData:SAVED_PASSWORD_LENGTH] encodedAsBase64] forKey:SAVED_PASSWORD_KEY];
} }
+(void)wipeKeychain{ +(void)wipeKeychain{

@ -82,6 +82,7 @@
PhoneNumber* localPhoneNumber = [SGNKeychainUtil localNumber]; PhoneNumber* localPhoneNumber = [SGNKeychainUtil localNumber];
NSString* query = [NSString stringWithFormat:@"/users/verification/%@", [localPhoneNumber toE164]]; NSString* query = [NSString stringWithFormat:@"/users/verification/%@", [localPhoneNumber toE164]];
[SGNKeychainUtil generateSignaling];
NSData* signalingCipherKey = [SGNKeychainUtil signalingCipherKey]; NSData* signalingCipherKey = [SGNKeychainUtil signalingCipherKey];
NSData* signalingMacKey = [SGNKeychainUtil signalingMacKey]; NSData* signalingMacKey = [SGNKeychainUtil signalingMacKey];

@ -117,10 +117,8 @@
} }
-(Future*) asyncRegister:(PhoneNumber*)phoneNumber untilCancelled:(id<CancelToken>)cancelToken { -(Future*) asyncRegister:(PhoneNumber*)phoneNumber untilCancelled:(id<CancelToken>)cancelToken {
// @todo: clear current registered status before making a new one, to avoid splinching issues? [SGNKeychainUtil generateServerAuthPassword];
[SGNKeychainUtil setLocalNumberTo:phoneNumber]; [SGNKeychainUtil setLocalNumberTo:phoneNumber];
[SGNKeychainUtil generateKeyingMaterial];
CancellableOperationStarter regStarter = ^Future *(id<CancelToken> internalUntilCancelledToken) { CancellableOperationStarter regStarter = ^Future *(id<CancelToken> internalUntilCancelledToken) {
HttpRequest *registerRequest = [HttpRequest httpRequestToStartRegistrationOfPhoneNumber]; HttpRequest *registerRequest = [HttpRequest httpRequestToStartRegistrationOfPhoneNumber];
@ -135,7 +133,7 @@
Future *futurePhoneRegistrationVerified = [futurePhoneRegistrationStarted then:^(id _) { Future *futurePhoneRegistrationVerified = [futurePhoneRegistrationStarted then:^(id _) {
[self showViewNumber:CHALLENGE_VIEW_NUMBER]; [self showViewNumber:CHALLENGE_VIEW_NUMBER];
[[Environment preferences] setIsRegistered:NO]; [Environment setRegistered:YES];
[self.challengeNumberLabel setText:[phoneNumber description]]; [self.challengeNumberLabel setText:[phoneNumber description]];
[_registerCancelButton removeFromSuperview]; [_registerCancelButton removeFromSuperview];
[self startVoiceVerificationCountdownTimer]; [self startVoiceVerificationCountdownTimer];
@ -214,7 +212,7 @@
}]; }];
[futureDone thenDo:^(id result) { [futureDone thenDo:^(id result) {
[[Environment preferences] setIsRegistered:YES]; [Environment setRegistered:YES];
[[[Environment getCurrent] phoneDirectoryManager] forceUpdate]; [[[Environment getCurrent] phoneDirectoryManager] forceUpdate];
[registered trySetResult:@YES]; [registered trySetResult:@YES];
[self dismissView]; [self dismissView];
@ -229,7 +227,6 @@
- (void)showViewNumber:(NSInteger)viewNumber { - (void)showViewNumber:(NSInteger)viewNumber {
if (viewNumber == REGISTER_VIEW_NUMBER) { if (viewNumber == REGISTER_VIEW_NUMBER) {
[_registerActivityIndicator stopAnimating]; [_registerActivityIndicator stopAnimating];
_registerButton.enabled = YES; _registerButton.enabled = YES;
@ -274,7 +271,7 @@
NSCalendar *sysCalendar = [NSCalendar currentCalendar]; NSCalendar *sysCalendar = [NSCalendar currentCalendar];
unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:now toDate:timeoutDate options:0]; NSDateComponents *conversionInfo = [sysCalendar components:unitFlags fromDate:now toDate:timeoutDate options:0];
NSString* timeLeft = [NSString stringWithFormat:@"%d:%02d",[conversionInfo minute],[conversionInfo second]]; NSString* timeLeft = [NSString stringWithFormat:@"%ld:%02ld",(long)[conversionInfo minute],(long)[conversionInfo second]];
[self.voiceChallengeTextLabel setText:timeLeft]; [self.voiceChallengeTextLabel setText:timeLeft];

Loading…
Cancel
Save