diff --git a/Signal/src/environment/Environment.h b/Signal/src/environment/Environment.h index 28629639e..125ea46a0 100644 --- a/Signal/src/environment/Environment.h +++ b/Signal/src/environment/Environment.h @@ -75,7 +75,7 @@ +(PhoneManager*) phoneManager; +(BOOL)isRegistered; --(void)setRegistered; ++(void)setRegistered:(BOOL)status; +(void)resetAppData; @end diff --git a/Signal/src/environment/Environment.m b/Signal/src/environment/Environment.m index c6caa926d..1e6085996 100644 --- a/Signal/src/environment/Environment.m +++ b/Signal/src/environment/Environment.m @@ -152,7 +152,7 @@ static Environment* environment = nil; NSData *macKey = [SGNKeychainUtil signalingMacKey]; NSData *extra = [SGNKeychainUtil signalingExtraKey]; 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) { 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]; } diff --git a/Signal/src/environment/SGNKeychainUtil.h b/Signal/src/environment/SGNKeychainUtil.h index e7b63e468..ede876c41 100644 --- a/Signal/src/environment/SGNKeychainUtil.h +++ b/Signal/src/environment/SGNKeychainUtil.h @@ -12,7 +12,9 @@ @interface SGNKeychainUtil : NSObject -+(void)generateKeyingMaterial; ++(void)generateSignaling; ++(void)generateServerAuthPassword; + +(void)wipeKeychain; #pragma mark Registered Phone Number diff --git a/Signal/src/environment/SGNKeychainUtil.m b/Signal/src/environment/SGNKeychainUtil.m index ecfe0fa91..e7d49e0a8 100644 --- a/Signal/src/environment/SGNKeychainUtil.m +++ b/Signal/src/environment/SGNKeychainUtil.m @@ -27,13 +27,17 @@ @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_CIPHER_KEY_LENGTH] forKey:SIGNALING_CIPHER_KEY]; [self storeData:[CryptoTools generateSecureRandomData:SIGNALING_EXTRA_KEY_LENGTH] forKey:SIGNALING_EXTRA_KEY]; [self storeData:[CryptoTools generateSecureRandomData:ZID_LENGTH] forKey:ZID_KEY]; - [self storeString:[[CryptoTools generateSecureRandomData:SAVED_PASSWORD_LENGTH] encodedAsBase64] forKey:SAVED_PASSWORD_KEY]; + } +(void)wipeKeychain{ diff --git a/Signal/src/phone/signaling/SignalUtil.m b/Signal/src/phone/signaling/SignalUtil.m index 2f671d69b..79c9fb458 100644 --- a/Signal/src/phone/signaling/SignalUtil.m +++ b/Signal/src/phone/signaling/SignalUtil.m @@ -82,6 +82,7 @@ PhoneNumber* localPhoneNumber = [SGNKeychainUtil localNumber]; NSString* query = [NSString stringWithFormat:@"/users/verification/%@", [localPhoneNumber toE164]]; + [SGNKeychainUtil generateSignaling]; NSData* signalingCipherKey = [SGNKeychainUtil signalingCipherKey]; NSData* signalingMacKey = [SGNKeychainUtil signalingMacKey]; diff --git a/Signal/src/view controllers/RegisterViewController.m b/Signal/src/view controllers/RegisterViewController.m index a2b01e03d..804792d41 100644 --- a/Signal/src/view controllers/RegisterViewController.m +++ b/Signal/src/view controllers/RegisterViewController.m @@ -117,10 +117,8 @@ } -(Future*) asyncRegister:(PhoneNumber*)phoneNumber untilCancelled:(id)cancelToken { - // @todo: clear current registered status before making a new one, to avoid splinching issues? + [SGNKeychainUtil generateServerAuthPassword]; [SGNKeychainUtil setLocalNumberTo:phoneNumber]; - - [SGNKeychainUtil generateKeyingMaterial]; CancellableOperationStarter regStarter = ^Future *(id internalUntilCancelledToken) { HttpRequest *registerRequest = [HttpRequest httpRequestToStartRegistrationOfPhoneNumber]; @@ -135,7 +133,7 @@ Future *futurePhoneRegistrationVerified = [futurePhoneRegistrationStarted then:^(id _) { [self showViewNumber:CHALLENGE_VIEW_NUMBER]; - [[Environment preferences] setIsRegistered:NO]; + [Environment setRegistered:YES]; [self.challengeNumberLabel setText:[phoneNumber description]]; [_registerCancelButton removeFromSuperview]; [self startVoiceVerificationCountdownTimer]; @@ -214,7 +212,7 @@ }]; [futureDone thenDo:^(id result) { - [[Environment preferences] setIsRegistered:YES]; + [Environment setRegistered:YES]; [[[Environment getCurrent] phoneDirectoryManager] forceUpdate]; [registered trySetResult:@YES]; [self dismissView]; @@ -229,7 +227,6 @@ - (void)showViewNumber:(NSInteger)viewNumber { - if (viewNumber == REGISTER_VIEW_NUMBER) { [_registerActivityIndicator stopAnimating]; _registerButton.enabled = YES; @@ -274,7 +271,7 @@ NSCalendar *sysCalendar = [NSCalendar currentCalendar]; unsigned int unitFlags = NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit; 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];