Re-registering, generating new server passwords

This commit is contained in:
Frederic Jacobs 2014-07-11 19:41:16 +02:00
parent 021da47a99
commit cfbcdc5a51
6 changed files with 17 additions and 13 deletions

View file

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

View file

@ -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];
}

View file

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

View file

@ -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{

View file

@ -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];

View file

@ -117,10 +117,8 @@
}
-(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 generateKeyingMaterial];
CancellableOperationStarter regStarter = ^Future *(id<CancelToken> 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];