2
0

Added time-to-crack.

[ADDED]     Compute time-to-crack for all passwords, including personal ones.
This commit is contained in:
Maarten Billemont 2014-07-26 01:26:33 -04:00
parent 7ce8df664c
commit 2d4e26e009
13 changed files with 314 additions and 383 deletions

2
External/Pearl vendored

@ -1 +1 @@
Subproject commit c5bf46ad1f7e6f3117a4f48a643e277705c67de3 Subproject commit 6c9ea6ad1fab826da7d71aa88391020dc16252bc

View File

@ -22,6 +22,23 @@
#define MPAlgorithmDefaultVersion 1 #define MPAlgorithmDefaultVersion 1
#define MPAlgorithmDefault MPAlgorithmForVersion(MPAlgorithmDefaultVersion) #define MPAlgorithmDefault MPAlgorithmForVersion(MPAlgorithmDefaultVersion)
id<MPAlgorithm> MPAlgorithmForVersion(NSUInteger version);
id<MPAlgorithm> MPAlgorithmDefaultForBundleVersion(NSString *bundleVersion);
PearlEnum( MPAttacker,
MPAttacker5K, MPAttacker20M, MPAttacker5B );
typedef struct TimeToCrack {
unsigned long long hours;
unsigned long long days;
unsigned long long weeks;
unsigned long long months;
unsigned long long years;
unsigned long long universes;
} TimeToCrack;
NSString *NSStringFromTimeToCrack(TimeToCrack timeToCrack);
@protocol MPAlgorithm<NSObject> @protocol MPAlgorithm<NSObject>
@required @required
@ -56,7 +73,7 @@
usingKey:(MPKey *)elementKey; usingKey:(MPKey *)elementKey;
- (NSString *)exportContentForElement:(MPElementEntity *)element usingKey:(MPKey *)elementKey; - (NSString *)exportContentForElement:(MPElementEntity *)element usingKey:(MPKey *)elementKey;
@end - (BOOL)timeToCrack:(out TimeToCrack *)timeToCrack passwordOfType:(MPElementType)type byAttacker:(MPAttacker)attacker;
- (BOOL)timeToCrack:(out TimeToCrack *)timeToCrack passwordString:(NSString *)password byAttacker:(MPAttacker)attacker;
id<MPAlgorithm> MPAlgorithmForVersion(NSUInteger version); @end
id<MPAlgorithm> MPAlgorithmDefaultForBundleVersion(NSString *bundleVersion);

View File

@ -38,3 +38,21 @@ id<MPAlgorithm> MPAlgorithmDefaultForBundleVersion(NSString *bundleVersion) {
return MPAlgorithmDefault; return MPAlgorithmDefault;
} }
NSString *NSStringFromTimeToCrack(TimeToCrack timeToCrack) {
if (timeToCrack.universes > 1)
return strl( @"> age of the universe" );
else if (timeToCrack.years > 1)
return strl( @"%d years", timeToCrack.years );
else if (timeToCrack.months > 1)
return strl( @"%d months", timeToCrack.months );
else if (timeToCrack.weeks > 1)
return strl( @"%d weeks", timeToCrack.weeks );
else if (timeToCrack.days > 1)
return strl( @"%d days", timeToCrack.days );
else if (timeToCrack.hours > 1)
return strl( @"%d hours", timeToCrack.hours );
else
return strl( @"trivial" );
}

View File

@ -18,4 +18,11 @@
#import "MPAlgorithm.h" #import "MPAlgorithm.h"
@interface MPAlgorithmV0 : NSObject<MPAlgorithm> @interface MPAlgorithmV0 : NSObject<MPAlgorithm>
- (NSDictionary *)allCiphers;
- (NSArray *)ciphersForType:(MPElementType)type;
- (NSArray *)cipherClasses;
- (NSArray *)cipherClassCharacters;
- (NSString *)charactersForCipherClass:(NSString *)cipherClass;
@end @end

View File

@ -17,6 +17,8 @@
#import "MPAlgorithmV0.h" #import "MPAlgorithmV0.h"
#import "MPEntities.h" #import "MPEntities.h"
#include <openssl/bn.h>
#include <openssl/err.h>
#define MP_N 32768 #define MP_N 32768
#define MP_r 8 #define MP_r 8
@ -24,7 +26,29 @@
#define MP_dkLen 64 #define MP_dkLen 64
#define MP_hash PearlHashSHA256 #define MP_hash PearlHashSHA256
@implementation MPAlgorithmV0 /* An AMD HD 6990 calculates 3833M SHA-1 hashes per second at a cost of ~350$ per GPU */
#define CRACKING_BCRYPTS_PER_SECOND 3833000000
#define CRACKING_PRICE 350
@implementation MPAlgorithmV0 {
BN_CTX *ctx;
}
- (id)init {
if (!(self = [super init]))
return nil;
ctx = BN_CTX_new();
return self;
}
- (void)dealloc {
BN_CTX_free( ctx );
ctx = NULL;
}
- (NSUInteger)version { - (NSUInteger)version {
@ -268,12 +292,41 @@
return previousType; return previousType;
} }
- (NSString *)generateContentNamed:(NSString *)name ofType:(MPElementType)type withCounter:(NSUInteger)counter usingKey:(MPKey *)key { - (NSDictionary *)allCiphers {
static NSDictionary *MPTypes_ciphers = nil; static NSDictionary *ciphers = nil;
if (MPTypes_ciphers == nil) static dispatch_once_t once = 0;
MPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL: dispatch_once( &once, ^{
ciphers = [NSDictionary dictionaryWithContentsOfURL:
[[NSBundle mainBundle] URLForResource:@"ciphers" withExtension:@"plist"]]; [[NSBundle mainBundle] URLForResource:@"ciphers" withExtension:@"plist"]];
} );
return ciphers;
}
- (NSArray *)ciphersForType:(MPElementType)type {
NSString *typeClass = [self classNameOfType:type];
NSString *typeName = [self nameOfType:type];
return [[[self allCiphers] valueForKey:typeClass] valueForKey:typeName];
}
- (NSArray *)cipherClasses {
return [[[self allCiphers] valueForKey:@"MPCharacterClasses"] allKeys];
}
- (NSArray *)cipherClassCharacters {
return [[[self allCiphers] valueForKey:@"MPCharacterClasses"] allValues];
}
- (NSString *)charactersForCipherClass:(NSString *)cipherClass {
return [NSNullToNil( [NSNullToNil( [[self allCiphers] valueForKey:@"MPCharacterClasses"] ) valueForKey:cipherClass] ) copy];
}
- (NSString *)generateContentNamed:(NSString *)name ofType:(MPElementType)type withCounter:(NSUInteger)counter usingKey:(MPKey *)key {
// Determine the seed whose bytes will be used for calculating a password // Determine the seed whose bytes will be used for calculating a password
uint32_t ncounter = htonl( counter ), nnameLength = htonl( name.length ); uint32_t ncounter = htonl( counter ), nnameLength = htonl( name.length );
@ -291,12 +344,9 @@
// Determine the cipher from the first seed byte. // Determine the cipher from the first seed byte.
NSAssert( [seed length], @"Missing seed." ); NSAssert( [seed length], @"Missing seed." );
NSString *typeClass = [self classNameOfType:type]; NSArray *typeCiphers = [self ciphersForType:type];
NSString *typeName = [self nameOfType:type];
id classCiphers = [MPTypes_ciphers valueForKey:typeClass];
NSArray *typeCiphers = [classCiphers valueForKey:typeName];
NSString *cipher = typeCiphers[htons( seedBytes[0] ) % [typeCiphers count]]; NSString *cipher = typeCiphers[htons( seedBytes[0] ) % [typeCiphers count]];
trc( @"type %@, ciphers: %@, selected: %@", typeName, typeCiphers, cipher ); trc( @"type %@, ciphers: %@, selected: %@", [self nameOfType:type], typeCiphers, cipher );
// Encode the content, character by character, using subsequent seed bytes and the cipher. // Encode the content, character by character, using subsequent seed bytes and the cipher.
NSAssert( [seed length] >= [cipher length] + 1, @"Insufficient seed bytes to encode cipher." ); NSAssert( [seed length] >= [cipher length] + 1, @"Insufficient seed bytes to encode cipher." );
@ -304,7 +354,7 @@
for (NSUInteger c = 0; c < [cipher length]; ++c) { for (NSUInteger c = 0; c < [cipher length]; ++c) {
uint16_t keyByte = htons( seedBytes[c + 1] ); uint16_t keyByte = htons( seedBytes[c + 1] );
NSString *cipherClass = [cipher substringWithRange:NSMakeRange( c, 1 )]; NSString *cipherClass = [cipher substringWithRange:NSMakeRange( c, 1 )];
NSString *cipherClassCharacters = [[MPTypes_ciphers valueForKey:@"MPCharacterClasses"] valueForKey:cipherClass]; NSString *cipherClassCharacters = [self charactersForCipherClass:cipherClass];
NSString *character = [cipherClassCharacters substringWithRange:NSMakeRange( keyByte % [cipherClassCharacters length], 1 )]; NSString *character = [cipherClassCharacters substringWithRange:NSMakeRange( keyByte % [cipherClassCharacters length], 1 )];
trc( @"class %@ has characters: %@, index: %u, selected: %@", cipherClass, cipherClassCharacters, keyByte, character ); trc( @"class %@ has characters: %@, index: %u, selected: %@", cipherClass, cipherClassCharacters, keyByte, character );
@ -355,7 +405,7 @@
[PearlKeyChain deleteItemForQuery:elementQuery]; [PearlKeyChain deleteItemForQuery:elementQuery];
else else
[PearlKeyChain addOrUpdateItemForQuery:elementQuery withAttributes:@{ [PearlKeyChain addOrUpdateItemForQuery:elementQuery withAttributes:@{
(__bridge id)kSecValueData : encryptedContent, (__bridge id)kSecValueData : encryptedContent,
#if TARGET_OS_IPHONE #if TARGET_OS_IPHONE
(__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly, (__bridge id)kSecAttrAccessible : (__bridge id)kSecAttrAccessibleWhenUnlockedThisDeviceOnly,
#endif #endif
@ -557,4 +607,134 @@
return [[NSString alloc] initWithBytes:decryptedContent.bytes length:decryptedContent.length encoding:NSUTF8StringEncoding]; return [[NSString alloc] initWithBytes:decryptedContent.bytes length:decryptedContent.length encoding:NSUTF8StringEncoding];
} }
- (BOOL)timeToCrack:(out TimeToCrack *)timeToCrack passwordOfType:(MPElementType)type byAttacker:(MPAttacker)attacker {
if (!type)
return NO;
NSArray *ciphers = [self ciphersForType:type];
if (!ciphers)
return NO;
BIGNUM *permutations = BN_new(), *cipherPermutations = BN_new();
for (NSString *cipher in ciphers) {
BN_one( cipherPermutations );
for (NSUInteger c = 0; c < [cipher length]; ++c)
BN_mul_word( cipherPermutations,
(BN_ULONG)[[self charactersForCipherClass:[cipher substringWithRange:NSMakeRange( c, 1 )]] length] );
BN_add( permutations, permutations, cipherPermutations );
}
BN_free( cipherPermutations );
return [self timeToCrack:timeToCrack permutations:permutations forAttacker:attacker];
}
- (BOOL)timeToCrack:(out TimeToCrack *)timeToCrack passwordString:(NSString *)password byAttacker:(MPAttacker)attacker {
BIGNUM *permutations = BN_new();
BN_one( permutations );
NSMutableString *cipher = [NSMutableString new];
for (NSUInteger c = 0; c < [password length]; ++c) {
NSString *passwordCharacter = [password substringWithRange:NSMakeRange( c, 1 )];
NSUInteger characterEntropy = 0;
for (NSString *cipherClass in @[ @"v", @"c", @"a", @"x" ]) {
NSString *charactersForClass = [self charactersForCipherClass:cipherClass];
if ([charactersForClass rangeOfString:passwordCharacter].location != NSNotFound) {
// Found class for password character.
characterEntropy = [charactersForClass length];
[cipher appendString:cipherClass];
break;
}
}
if (!characterEntropy) {
[cipher appendString:@"b"];
characterEntropy = 256 /* a byte */;
}
BN_mul_word( permutations, (BN_ULONG)characterEntropy );
}
return [self timeToCrack:timeToCrack permutations:permutations forAttacker:attacker];
}
- (BOOL)timeToCrack:(out TimeToCrack *)timeToCrack permutations:(BIGNUM *)permutations forAttacker:(MPAttacker)attacker {
BN_div_word( permutations, CRACKING_BCRYPTS_PER_SECOND );
switch (attacker) {
case MPAttacker5K:
BN_mul_word( permutations, (BN_ULONG)5000LLU );
break;
case MPAttacker20M:
BN_mul_word( permutations, (BN_ULONG)20000000LLU );
break;
case MPAttacker5B:
BN_mul_word( permutations, (BN_ULONG)5000000000LLU );
break;
}
BN_div_word( permutations, CRACKING_PRICE );
BIGNUM *max = BN_new();
BN_set_word( max, (BN_ULONG)-1 );
BIGNUM *hoursToCrack = BN_dup( permutations );
BN_div_word( hoursToCrack, 3600 );
if (BN_cmp( hoursToCrack, max ) < 0)
timeToCrack->hours = BN_get_word( hoursToCrack );
else
timeToCrack->hours = (BN_ULONG)-1;
BIGNUM *daysToCrack = BN_dup( hoursToCrack );
BN_div_word( daysToCrack, 24 );
if (BN_cmp( daysToCrack, max ) < 0)
timeToCrack->days = BN_get_word( daysToCrack );
else
timeToCrack->days = (BN_ULONG)-1;
BIGNUM *weeksToCrack = BN_dup( daysToCrack );
BN_div_word( weeksToCrack, 7 );
if (BN_cmp( weeksToCrack, max ) < 0)
timeToCrack->weeks = BN_get_word( weeksToCrack );
else
timeToCrack->weeks = (BN_ULONG)-1;
BIGNUM *monthsToCrack = BN_dup( daysToCrack );
BN_div_word( monthsToCrack, 31 );
if (BN_cmp( monthsToCrack, max ) < 0)
timeToCrack->months = BN_get_word( monthsToCrack );
else
timeToCrack->months = (BN_ULONG)-1;
BIGNUM *yearsToCrack = BN_dup( daysToCrack );
BN_div_word( yearsToCrack, 356 );
if (BN_cmp( yearsToCrack, max ) < 0)
timeToCrack->years = BN_get_word( yearsToCrack );
else
timeToCrack->years = (BN_ULONG)-1;
BIGNUM *universesToCrack = BN_dup( yearsToCrack );
BN_div_word( universesToCrack, (BN_ULONG)14000000000LLU );
if (BN_cmp( universesToCrack, max ) < 0)
timeToCrack->universes = BN_get_word( universesToCrack );
else
timeToCrack->universes = (BN_ULONG)-1;
for (unsigned long error = ERR_get_error(); error; error = ERR_get_error())
err( @"bignum error: %lu", error );
BN_free( max );
BN_free( permutations );
BN_free( hoursToCrack );
BN_free( daysToCrack );
BN_free( weeksToCrack );
BN_free( monthsToCrack );
BN_free( yearsToCrack );
BN_free( universesToCrack );
return YES;
}
@end @end

View File

@ -47,13 +47,6 @@
- (NSString *)generateContentNamed:(NSString *)name ofType:(MPElementType)type withCounter:(NSUInteger)counter usingKey:(MPKey *)key { - (NSString *)generateContentNamed:(NSString *)name ofType:(MPElementType)type withCounter:(NSUInteger)counter usingKey:(MPKey *)key {
static __strong NSDictionary *MPTypes_ciphers = nil;
static dispatch_once_t once = 0;
dispatch_once( &once, ^{
MPTypes_ciphers = [NSDictionary dictionaryWithContentsOfURL:
[[NSBundle mainBundle] URLForResource:@"ciphers" withExtension:@"plist"]];
} );
// Determine the seed whose bytes will be used for calculating a password // Determine the seed whose bytes will be used for calculating a password
uint32_t ncounter = htonl( counter ), nnameLength = htonl( name.length ); uint32_t ncounter = htonl( counter ), nnameLength = htonl( name.length );
NSData *counterBytes = [NSData dataWithBytes:&ncounter length:sizeof( ncounter )]; NSData *counterBytes = [NSData dataWithBytes:&ncounter length:sizeof( ncounter )];
@ -72,7 +65,7 @@
// Determine the cipher from the first seed byte. // Determine the cipher from the first seed byte.
NSAssert( [seed length], @"Missing seed." ); NSAssert( [seed length], @"Missing seed." );
NSArray *typeCiphers = [[MPTypes_ciphers valueForKey:[self classNameOfType:type]] valueForKey:[self nameOfType:type]]; NSArray *typeCiphers = [self ciphersForType:type];
NSString *cipher = typeCiphers[seedBytes[0] % [typeCiphers count]]; NSString *cipher = typeCiphers[seedBytes[0] % [typeCiphers count]];
trc( @"type %@, ciphers: %@, selected: %@", [self nameOfType:type], typeCiphers, cipher ); trc( @"type %@, ciphers: %@, selected: %@", [self nameOfType:type], typeCiphers, cipher );
@ -82,7 +75,7 @@
for (NSUInteger c = 0; c < [cipher length]; ++c) { for (NSUInteger c = 0; c < [cipher length]; ++c) {
uint16_t keyByte = seedBytes[c + 1]; uint16_t keyByte = seedBytes[c + 1];
NSString *cipherClass = [cipher substringWithRange:NSMakeRange( c, 1 )]; NSString *cipherClass = [cipher substringWithRange:NSMakeRange( c, 1 )];
NSString *cipherClassCharacters = [[MPTypes_ciphers valueForKey:@"MPCharacterClasses"] valueForKey:cipherClass]; NSString *cipherClassCharacters = [self charactersForCipherClass:cipherClass];
NSString *character = [cipherClassCharacters substringWithRange:NSMakeRange( keyByte % [cipherClassCharacters length], 1 )]; NSString *character = [cipherClassCharacters substringWithRange:NSMakeRange( keyByte % [cipherClassCharacters length], 1 )];
trc( @"class %@ has characters: %@, index: %u, selected: %@", cipherClass, cipherClassCharacters, keyByte, character ); trc( @"class %@ has characters: %@, index: %u, selected: %@", cipherClass, cipherClassCharacters, keyByte, character );

View File

@ -17,4 +17,6 @@
@property(nonatomic, retain) NSNumber *iCloudDecided; @property(nonatomic, retain) NSNumber *iCloudDecided;
@property(nonatomic, retain) NSNumber *checkInconsistency; @property(nonatomic, retain) NSNumber *checkInconsistency;
@property(nonatomic, strong) NSNumber *attackHardware;
@end @end

View File

@ -10,7 +10,7 @@
@implementation MPConfig @implementation MPConfig
@dynamic sendInfo, rememberLogin, iCloudDecided, checkInconsistency, hidePasswords; @dynamic sendInfo, rememberLogin, iCloudDecided, checkInconsistency, hidePasswords, attackHardware;
- (id)init { - (id)init {
@ -24,7 +24,8 @@
NSStringFromSelector( @selector( rememberLogin ) ) : @NO, NSStringFromSelector( @selector( rememberLogin ) ) : @NO,
NSStringFromSelector( @selector( hidePasswords ) ) : @NO, NSStringFromSelector( @selector( hidePasswords ) ) : @NO,
NSStringFromSelector( @selector( iCloudDecided ) ) : @NO, NSStringFromSelector( @selector( iCloudDecided ) ) : @NO,
NSStringFromSelector( @selector( checkInconsistency ) ) : @NO NSStringFromSelector( @selector( checkInconsistency ) ) : @NO,
NSStringFromSelector( @selector( attackHardware ) ) : @(MPAttacker5K),
}]; }];
self.delegate = [MPAppDelegate_Shared get]; self.delegate = [MPAppDelegate_Shared get];

View File

@ -26,8 +26,8 @@ static EventHotKeyID MPLockHotKey = { .signature = 'lock', .id = 1 };
+ (void)initialize { + (void)initialize {
static dispatch_once_t initialize = 0; static dispatch_once_t once = 0;
dispatch_once( &initialize, ^{ dispatch_once( &once, ^{
[MPMacConfig get]; [MPMacConfig get];
#ifdef DEBUG #ifdef DEBUG

View File

@ -25,7 +25,7 @@ typedef NS_ENUM ( NSUInteger, MPPasswordCellMode ) {
MPPasswordCellModeSettings, MPPasswordCellModeSettings,
}; };
@interface MPPasswordCell : MPCell <UIScrollViewDelegate> @interface MPPasswordCell : MPCell <UIScrollViewDelegate, UITextFieldDelegate>
- (void)setElement:(MPElementEntity *)element animated:(BOOL)animated; - (void)setElement:(MPElementEntity *)element animated:(BOOL)animated;
- (void)setTransientSite:(NSString *)siteName animated:(BOOL)animated; - (void)setTransientSite:(NSString *)siteName animated:(BOOL)animated;

View File

@ -80,7 +80,8 @@
_elementOID = nil; _elementOID = nil;
self.loginModeButton.selected = NO; self.loginModeButton.selected = NO;
[self setMode:MPPasswordCellModePassword animated:NO]; self.mode = MPPasswordCellModePassword;
[self updateAnimated:NO];
} }
#pragma mark - State #pragma mark - State
@ -121,6 +122,24 @@
atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES]; atScrollPosition:UICollectionViewScrollPositionCenteredVertically animated:YES];
} }
- (IBAction)textFieldDidChange:(UITextField *)textField {
if (textField == self.passwordField) {
NSString *password = self.passwordField.text;
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
TimeToCrack timeToCrack;
MPElementEntity *element = [self elementInContext:context];
id<MPAlgorithm> algorithm = element.algorithm?: MPAlgorithmDefault;
MPAttacker attackHardware = [[MPConfig get].attackHardware unsignedIntegerValue];
if ([algorithm timeToCrack:&timeToCrack passwordOfType:[self elementInContext:context].type byAttacker:attackHardware] ||
[algorithm timeToCrack:&timeToCrack passwordString:password byAttacker:attackHardware])
PearlMainQueue( ^{
self.strengthLabel.text = NSStringFromTimeToCrack( timeToCrack );
} );
}];
}
}
- (void)textFieldDidEndEditing:(UITextField *)textField { - (void)textFieldDidEndEditing:(UITextField *)textField {
if (textField == self.passwordField || textField == self.loginNameField) { if (textField == self.passwordField || textField == self.loginNameField) {
@ -207,7 +226,8 @@
if (self.loginModeButton.selected) { if (self.loginModeButton.selected) {
self.loginNameField.enabled = YES; self.loginNameField.enabled = YES;
[self.loginNameField becomeFirstResponder]; [self.loginNameField becomeFirstResponder];
} else if ([self elementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]].type & MPElementTypeClassStored) { }
else if ([self elementInContext:[MPiOSAppDelegate managedObjectContextForMainThreadIfReady]].type & MPElementTypeClassStored) {
self.passwordField.enabled = YES; self.passwordField.enabled = YES;
[self.passwordField becomeFirstResponder]; [self.passwordField becomeFirstResponder];
} }
@ -326,7 +346,7 @@
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
if (roundf( scrollView.contentOffset.x / self.bounds.size.width ) == 0.0f) if (roundf( (float)(scrollView.contentOffset.x / self.bounds.size.width) ) == 0.0f)
[self setMode:MPPasswordCellModePassword animated:YES]; [self setMode:MPPasswordCellModePassword animated:YES];
else else
[self setMode:MPPasswordCellModeSettings animated:YES]; [self setMode:MPPasswordCellModeSettings animated:YES];
@ -367,8 +387,8 @@
self.passwordField.enabled = NO; self.passwordField.enabled = NO;
self.passwordField.secureTextEntry = [[MPiOSConfig get].hidePasswords boolValue]; self.passwordField.secureTextEntry = [[MPiOSConfig get].hidePasswords boolValue];
self.passwordField.attributedPlaceholder = stra( self.passwordField.attributedPlaceholder = stra(
mainElement.type & MPElementTypeClassStored? strl( @"Set custom password" ): mainElement.type & MPElementTypeClassStored? strl( @"No password" ):
mainElement.type & MPElementTypeClassGenerated? strl( @"Generating..." ): @"", @{ mainElement.type & MPElementTypeClassGenerated? strl( @"..." ): @"", @{
NSForegroundColorAttributeName : [UIColor whiteColor] NSForegroundColorAttributeName : [UIColor whiteColor]
} ); } );
[MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) { [MPiOSAppDelegate managedObjectContextPerformBlock:^(NSManagedObjectContext *context) {
@ -380,8 +400,17 @@
else else
password = [[self elementInContext:context] resolveContentUsingKey:[MPiOSAppDelegate get].key]; password = [[self elementInContext:context] resolveContentUsingKey:[MPiOSAppDelegate get].key];
MPAttacker attackHardware = [[MPConfig get].attackHardware unsignedIntegerValue];
TimeToCrack timeToCrack;
NSString *timeToCrackString = nil;
id<MPAlgorithm> algorithm = mainElement.algorithm?: MPAlgorithmDefault;
if ([algorithm timeToCrack:&timeToCrack passwordOfType:[self elementInContext:context].type byAttacker:attackHardware] ||
[algorithm timeToCrack:&timeToCrack passwordString:password byAttacker:attackHardware])
timeToCrackString = NSStringFromTimeToCrack( timeToCrack );
PearlMainQueue( ^{ PearlMainQueue( ^{
self.passwordField.text = password; self.passwordField.text = password;
self.strengthLabel.text = timeToCrackString;
} ); } );
}]; }];
@ -395,9 +424,6 @@
self.loginNameField.attributedPlaceholder = stra( strl( @"Set login name" ), @{ self.loginNameField.attributedPlaceholder = stra( strl( @"Set login name" ), @{
NSForegroundColorAttributeName : [UIColor whiteColor] NSForegroundColorAttributeName : [UIColor whiteColor]
} ); } );
// Strength Label
//#warning TODO
}]; }];
} }

View File

@ -89,6 +89,8 @@
DA25C5FF197DBF200046CDCF /* icon_thumbs-up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD384B1711E29700CF925C /* icon_thumbs-up@2x.png */; }; DA25C5FF197DBF200046CDCF /* icon_thumbs-up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD384B1711E29700CF925C /* icon_thumbs-up@2x.png */; };
DA25C600197DBF260046CDCF /* icon_trash.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38501711E29700CF925C /* icon_trash.png */; }; DA25C600197DBF260046CDCF /* icon_trash.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38501711E29700CF925C /* icon_trash.png */; };
DA25C601197DBF260046CDCF /* icon_trash@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38511711E29700CF925C /* icon_trash@2x.png */; }; DA25C601197DBF260046CDCF /* icon_trash@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = DABD38511711E29700CF925C /* icon_trash@2x.png */; };
DA25C6B41980D3C50046CDCF /* openssl in Headers */ = {isa = PBXBuildFile; fileRef = DA25C6B31980D3C10046CDCF /* openssl */; settings = {ATTRIBUTES = (Public, ); }; };
DA25C6B61980D3DF0046CDCF /* scrypt in Headers */ = {isa = PBXBuildFile; fileRef = DA25C6B51980D3DD0046CDCF /* scrypt */; settings = {ATTRIBUTES = (Public, ); }; };
DA2CA4DD18D28859007798F8 /* NSArray+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */; }; DA2CA4DD18D28859007798F8 /* NSArray+Pearl.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */; };
DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */; }; DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */ = {isa = PBXBuildFile; fileRef = DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */; };
DA2CA4DF18D28859007798F8 /* NSTimer+PearlBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */; }; DA2CA4DF18D28859007798F8 /* NSTimer+PearlBlock.m in Sources */ = {isa = PBXBuildFile; fileRef = DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */; };
@ -269,87 +271,6 @@
DACA29BF1705E2DE002C6C22 /* UIColor+HSV.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */; }; DACA29BF1705E2DE002C6C22 /* UIColor+HSV.m in Sources */ = {isa = PBXBuildFile; fileRef = DACA29BB1705E2DE002C6C22 /* UIColor+HSV.m */; };
DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; }; DAD312C21552A22700A3F9ED /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = DAD312C01552A20800A3F9ED /* libsqlite3.dylib */; };
DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; }; DAE1EF2217E942DE00BC0086 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = DAE1EF2417E942DE00BC0086 /* Localizable.strings */; };
DAEB933318AA537D000490CC /* crypto_aesctr.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E118AA537D000490CC /* crypto_aesctr.h */; };
DAEB933418AA537D000490CC /* crypto_scrypt.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E218AA537D000490CC /* crypto_scrypt.h */; };
DAEB933518AA537D000490CC /* memlimit.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E318AA537D000490CC /* memlimit.h */; };
DAEB933618AA537D000490CC /* readpass.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E418AA537D000490CC /* readpass.h */; };
DAEB933718AA537D000490CC /* scryptenc.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E518AA537D000490CC /* scryptenc.h */; };
DAEB933818AA537D000490CC /* scryptenc_cpuperf.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E618AA537D000490CC /* scryptenc_cpuperf.h */; };
DAEB933918AA537D000490CC /* sha256.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E718AA537D000490CC /* sha256.h */; };
DAEB933A18AA537D000490CC /* sysendian.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E818AA537D000490CC /* sysendian.h */; };
DAEB933B18AA537D000490CC /* warn.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92E918AA537D000490CC /* warn.h */; };
DAEB933C18AA537D000490CC /* aes.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92EB18AA537D000490CC /* aes.h */; };
DAEB933D18AA537D000490CC /* asn1.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92EC18AA537D000490CC /* asn1.h */; };
DAEB933E18AA537D000490CC /* asn1_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92ED18AA537D000490CC /* asn1_mac.h */; };
DAEB933F18AA537D000490CC /* asn1t.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92EE18AA537D000490CC /* asn1t.h */; };
DAEB934018AA537D000490CC /* bio.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92EF18AA537D000490CC /* bio.h */; };
DAEB934118AA537D000490CC /* blowfish.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F018AA537D000490CC /* blowfish.h */; };
DAEB934218AA537D000490CC /* bn.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F118AA537D000490CC /* bn.h */; };
DAEB934318AA537D000490CC /* buffer.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F218AA537D000490CC /* buffer.h */; };
DAEB934418AA537D000490CC /* camellia.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F318AA537D000490CC /* camellia.h */; };
DAEB934518AA537D000490CC /* cast.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F418AA537D000490CC /* cast.h */; };
DAEB934618AA537D000490CC /* cms.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F518AA537D000490CC /* cms.h */; };
DAEB934718AA537D000490CC /* comp.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F618AA537D000490CC /* comp.h */; };
DAEB934818AA537D000490CC /* conf.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F718AA537D000490CC /* conf.h */; };
DAEB934918AA537D000490CC /* conf_api.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F818AA537D000490CC /* conf_api.h */; };
DAEB934A18AA537D000490CC /* crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92F918AA537D000490CC /* crypto.h */; };
DAEB934B18AA537D000490CC /* des.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FA18AA537D000490CC /* des.h */; };
DAEB934C18AA537D000490CC /* des_old.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FB18AA537D000490CC /* des_old.h */; };
DAEB934D18AA537D000490CC /* dh.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FC18AA537D000490CC /* dh.h */; };
DAEB934E18AA537D000490CC /* dsa.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FD18AA537D000490CC /* dsa.h */; };
DAEB934F18AA537D000490CC /* dso.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FE18AA537D000490CC /* dso.h */; };
DAEB935018AA537D000490CC /* dtls1.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB92FF18AA537D000490CC /* dtls1.h */; };
DAEB935118AA537D000490CC /* e_os2.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930018AA537D000490CC /* e_os2.h */; };
DAEB935218AA537D000490CC /* ebcdic.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930118AA537D000490CC /* ebcdic.h */; };
DAEB935318AA537D000490CC /* ec.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930218AA537D000490CC /* ec.h */; };
DAEB935418AA537D000490CC /* ecdh.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930318AA537D000490CC /* ecdh.h */; };
DAEB935518AA537D000490CC /* ecdsa.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930418AA537D000490CC /* ecdsa.h */; };
DAEB935618AA537D000490CC /* engine.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930518AA537D000490CC /* engine.h */; };
DAEB935718AA537D000490CC /* err.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930618AA537D000490CC /* err.h */; };
DAEB935818AA537D000490CC /* evp.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930718AA537D000490CC /* evp.h */; };
DAEB935918AA537D000490CC /* hmac.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930818AA537D000490CC /* hmac.h */; };
DAEB935A18AA537D000490CC /* idea.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930918AA537D000490CC /* idea.h */; };
DAEB935B18AA537D000490CC /* krb5_asn.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930A18AA537D000490CC /* krb5_asn.h */; };
DAEB935C18AA537D000490CC /* kssl.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930B18AA537D000490CC /* kssl.h */; };
DAEB935D18AA537D000490CC /* lhash.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930C18AA537D000490CC /* lhash.h */; };
DAEB935E18AA537D000490CC /* md4.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930D18AA537D000490CC /* md4.h */; };
DAEB935F18AA537D000490CC /* md5.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930E18AA537D000490CC /* md5.h */; };
DAEB936018AA537D000490CC /* mdc2.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB930F18AA537D000490CC /* mdc2.h */; };
DAEB936118AA537D000490CC /* modes.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931018AA537D000490CC /* modes.h */; };
DAEB936218AA537D000490CC /* obj_mac.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931118AA537D000490CC /* obj_mac.h */; };
DAEB936318AA537D000490CC /* objects.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931218AA537D000490CC /* objects.h */; };
DAEB936418AA537D000490CC /* ocsp.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931318AA537D000490CC /* ocsp.h */; };
DAEB936518AA537D000490CC /* opensslconf.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931418AA537D000490CC /* opensslconf.h */; };
DAEB936618AA537D000490CC /* opensslv.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931518AA537D000490CC /* opensslv.h */; };
DAEB936718AA537D000490CC /* ossl_typ.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931618AA537D000490CC /* ossl_typ.h */; };
DAEB936818AA537D000490CC /* pem.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931718AA537D000490CC /* pem.h */; };
DAEB936918AA537D000490CC /* pem2.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931818AA537D000490CC /* pem2.h */; };
DAEB936A18AA537D000490CC /* pkcs12.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931918AA537D000490CC /* pkcs12.h */; };
DAEB936B18AA537D000490CC /* pkcs7.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931A18AA537D000490CC /* pkcs7.h */; };
DAEB936C18AA537D000490CC /* pqueue.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931B18AA537D000490CC /* pqueue.h */; };
DAEB936D18AA537D000490CC /* rand.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931C18AA537D000490CC /* rand.h */; };
DAEB936E18AA537D000490CC /* rc2.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931D18AA537D000490CC /* rc2.h */; };
DAEB936F18AA537D000490CC /* rc4.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931E18AA537D000490CC /* rc4.h */; };
DAEB937018AA537D000490CC /* ripemd.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB931F18AA537D000490CC /* ripemd.h */; };
DAEB937118AA537D000490CC /* rsa.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932018AA537D000490CC /* rsa.h */; };
DAEB937218AA537D000490CC /* safestack.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932118AA537D000490CC /* safestack.h */; };
DAEB937318AA537D000490CC /* seed.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932218AA537D000490CC /* seed.h */; };
DAEB937418AA537D000490CC /* sha.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932318AA537D000490CC /* sha.h */; };
DAEB937518AA537D000490CC /* ssl.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932418AA537D000490CC /* ssl.h */; };
DAEB937618AA537D000490CC /* ssl2.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932518AA537D000490CC /* ssl2.h */; };
DAEB937718AA537D000490CC /* ssl23.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932618AA537D000490CC /* ssl23.h */; };
DAEB937818AA537D000490CC /* ssl3.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932718AA537D000490CC /* ssl3.h */; };
DAEB937918AA537D000490CC /* stack.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932818AA537D000490CC /* stack.h */; };
DAEB937A18AA537D000490CC /* symhacks.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932918AA537D000490CC /* symhacks.h */; };
DAEB937B18AA537D000490CC /* tls1.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932A18AA537D000490CC /* tls1.h */; };
DAEB937C18AA537D000490CC /* ts.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932B18AA537D000490CC /* ts.h */; };
DAEB937D18AA537D000490CC /* txt_db.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932C18AA537D000490CC /* txt_db.h */; };
DAEB937E18AA537D000490CC /* ui.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932D18AA537D000490CC /* ui.h */; };
DAEB937F18AA537D000490CC /* ui_compat.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932E18AA537D000490CC /* ui_compat.h */; };
DAEB938018AA537D000490CC /* whrlpool.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB932F18AA537D000490CC /* whrlpool.h */; };
DAEB938118AA537D000490CC /* x509.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB933018AA537D000490CC /* x509.h */; };
DAEB938218AA537D000490CC /* x509_vfy.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB933118AA537D000490CC /* x509_vfy.h */; };
DAEB938318AA537D000490CC /* x509v3.h in Headers */ = {isa = PBXBuildFile; fileRef = DAEB933218AA537D000490CC /* x509v3.h */; };
DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; }; DAEBC45314F6364500987BF6 /* QuartzCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DAEBC45214F6364500987BF6 /* QuartzCore.framework */; };
DAEC85B518E3DD9A007FC0DF /* UIView+Touches.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */; }; DAEC85B518E3DD9A007FC0DF /* UIView+Touches.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */; };
DAEC85B618E3DD9A007FC0DF /* PearlUINavigationBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */; }; DAEC85B618E3DD9A007FC0DF /* PearlUINavigationBar.m in Sources */ = {isa = PBXBuildFile; fileRef = DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */; };
@ -545,6 +466,8 @@
DA250A14195665A100AC23F1 /* UITableView+PearlReloadFromArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+PearlReloadFromArray.h"; sourceTree = "<group>"; }; DA250A14195665A100AC23F1 /* UITableView+PearlReloadFromArray.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UITableView+PearlReloadFromArray.h"; sourceTree = "<group>"; };
DA250A15195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UICollectionReusableView+PearlDequeue.m"; sourceTree = "<group>"; }; DA250A15195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UICollectionReusableView+PearlDequeue.m"; sourceTree = "<group>"; };
DA250A16195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UICollectionReusableView+PearlDequeue.h"; sourceTree = "<group>"; }; DA250A16195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UICollectionReusableView+PearlDequeue.h"; sourceTree = "<group>"; };
DA25C6B31980D3C10046CDCF /* openssl */ = {isa = PBXFileReference; lastKnownFileType = folder; path = openssl; sourceTree = "<group>"; };
DA25C6B51980D3DD0046CDCF /* scrypt */ = {isa = PBXFileReference; lastKnownFileType = folder; path = scrypt; sourceTree = "<group>"; };
DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Pearl.m"; sourceTree = "<group>"; }; DA2CA4D918D28859007798F8 /* NSArray+Pearl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSArray+Pearl.m"; sourceTree = "<group>"; };
DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Pearl.h"; sourceTree = "<group>"; }; DA2CA4DA18D28859007798F8 /* NSArray+Pearl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSArray+Pearl.h"; sourceTree = "<group>"; };
DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+PearlBlock.m"; sourceTree = "<group>"; }; DA2CA4DB18D28859007798F8 /* NSTimer+PearlBlock.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSTimer+PearlBlock.m"; sourceTree = "<group>"; };
@ -1290,87 +1213,6 @@
DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; DAD312C01552A20800A3F9ED /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; };
DADBB55918DB0CFC00D099FE /* keyboard-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-dark@2x.png"; sourceTree = "<group>"; }; DADBB55918DB0CFC00D099FE /* keyboard-dark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard-dark@2x.png"; sourceTree = "<group>"; };
DAE1EF2317E942DE00BC0086 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; }; DAE1EF2317E942DE00BC0086 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
DAEB92E118AA537D000490CC /* crypto_aesctr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_aesctr.h; sourceTree = "<group>"; };
DAEB92E218AA537D000490CC /* crypto_scrypt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto_scrypt.h; sourceTree = "<group>"; };
DAEB92E318AA537D000490CC /* memlimit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = memlimit.h; sourceTree = "<group>"; };
DAEB92E418AA537D000490CC /* readpass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = readpass.h; sourceTree = "<group>"; };
DAEB92E518AA537D000490CC /* scryptenc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scryptenc.h; sourceTree = "<group>"; };
DAEB92E618AA537D000490CC /* scryptenc_cpuperf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = scryptenc_cpuperf.h; sourceTree = "<group>"; };
DAEB92E718AA537D000490CC /* sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha256.h; sourceTree = "<group>"; };
DAEB92E818AA537D000490CC /* sysendian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sysendian.h; sourceTree = "<group>"; };
DAEB92E918AA537D000490CC /* warn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = warn.h; sourceTree = "<group>"; };
DAEB92EB18AA537D000490CC /* aes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = aes.h; sourceTree = "<group>"; };
DAEB92EC18AA537D000490CC /* asn1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1.h; sourceTree = "<group>"; };
DAEB92ED18AA537D000490CC /* asn1_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1_mac.h; sourceTree = "<group>"; };
DAEB92EE18AA537D000490CC /* asn1t.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = asn1t.h; sourceTree = "<group>"; };
DAEB92EF18AA537D000490CC /* bio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bio.h; sourceTree = "<group>"; };
DAEB92F018AA537D000490CC /* blowfish.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = blowfish.h; sourceTree = "<group>"; };
DAEB92F118AA537D000490CC /* bn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bn.h; sourceTree = "<group>"; };
DAEB92F218AA537D000490CC /* buffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = buffer.h; sourceTree = "<group>"; };
DAEB92F318AA537D000490CC /* camellia.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = camellia.h; sourceTree = "<group>"; };
DAEB92F418AA537D000490CC /* cast.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cast.h; sourceTree = "<group>"; };
DAEB92F518AA537D000490CC /* cms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cms.h; sourceTree = "<group>"; };
DAEB92F618AA537D000490CC /* comp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = comp.h; sourceTree = "<group>"; };
DAEB92F718AA537D000490CC /* conf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = "<group>"; };
DAEB92F818AA537D000490CC /* conf_api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = conf_api.h; sourceTree = "<group>"; };
DAEB92F918AA537D000490CC /* crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = crypto.h; sourceTree = "<group>"; };
DAEB92FA18AA537D000490CC /* des.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des.h; sourceTree = "<group>"; };
DAEB92FB18AA537D000490CC /* des_old.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = des_old.h; sourceTree = "<group>"; };
DAEB92FC18AA537D000490CC /* dh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dh.h; sourceTree = "<group>"; };
DAEB92FD18AA537D000490CC /* dsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsa.h; sourceTree = "<group>"; };
DAEB92FE18AA537D000490CC /* dso.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dso.h; sourceTree = "<group>"; };
DAEB92FF18AA537D000490CC /* dtls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtls1.h; sourceTree = "<group>"; };
DAEB930018AA537D000490CC /* e_os2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = e_os2.h; sourceTree = "<group>"; };
DAEB930118AA537D000490CC /* ebcdic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ebcdic.h; sourceTree = "<group>"; };
DAEB930218AA537D000490CC /* ec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ec.h; sourceTree = "<group>"; };
DAEB930318AA537D000490CC /* ecdh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdh.h; sourceTree = "<group>"; };
DAEB930418AA537D000490CC /* ecdsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ecdsa.h; sourceTree = "<group>"; };
DAEB930518AA537D000490CC /* engine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = engine.h; sourceTree = "<group>"; };
DAEB930618AA537D000490CC /* err.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = err.h; sourceTree = "<group>"; };
DAEB930718AA537D000490CC /* evp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = evp.h; sourceTree = "<group>"; };
DAEB930818AA537D000490CC /* hmac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = hmac.h; sourceTree = "<group>"; };
DAEB930918AA537D000490CC /* idea.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = idea.h; sourceTree = "<group>"; };
DAEB930A18AA537D000490CC /* krb5_asn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = krb5_asn.h; sourceTree = "<group>"; };
DAEB930B18AA537D000490CC /* kssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = kssl.h; sourceTree = "<group>"; };
DAEB930C18AA537D000490CC /* lhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lhash.h; sourceTree = "<group>"; };
DAEB930D18AA537D000490CC /* md4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md4.h; sourceTree = "<group>"; };
DAEB930E18AA537D000490CC /* md5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = md5.h; sourceTree = "<group>"; };
DAEB930F18AA537D000490CC /* mdc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mdc2.h; sourceTree = "<group>"; };
DAEB931018AA537D000490CC /* modes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modes.h; sourceTree = "<group>"; };
DAEB931118AA537D000490CC /* obj_mac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = obj_mac.h; sourceTree = "<group>"; };
DAEB931218AA537D000490CC /* objects.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = objects.h; sourceTree = "<group>"; };
DAEB931318AA537D000490CC /* ocsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ocsp.h; sourceTree = "<group>"; };
DAEB931418AA537D000490CC /* opensslconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslconf.h; sourceTree = "<group>"; };
DAEB931518AA537D000490CC /* opensslv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = opensslv.h; sourceTree = "<group>"; };
DAEB931618AA537D000490CC /* ossl_typ.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ossl_typ.h; sourceTree = "<group>"; };
DAEB931718AA537D000490CC /* pem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem.h; sourceTree = "<group>"; };
DAEB931818AA537D000490CC /* pem2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pem2.h; sourceTree = "<group>"; };
DAEB931918AA537D000490CC /* pkcs12.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs12.h; sourceTree = "<group>"; };
DAEB931A18AA537D000490CC /* pkcs7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pkcs7.h; sourceTree = "<group>"; };
DAEB931B18AA537D000490CC /* pqueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = pqueue.h; sourceTree = "<group>"; };
DAEB931C18AA537D000490CC /* rand.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rand.h; sourceTree = "<group>"; };
DAEB931D18AA537D000490CC /* rc2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc2.h; sourceTree = "<group>"; };
DAEB931E18AA537D000490CC /* rc4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rc4.h; sourceTree = "<group>"; };
DAEB931F18AA537D000490CC /* ripemd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ripemd.h; sourceTree = "<group>"; };
DAEB932018AA537D000490CC /* rsa.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rsa.h; sourceTree = "<group>"; };
DAEB932118AA537D000490CC /* safestack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = safestack.h; sourceTree = "<group>"; };
DAEB932218AA537D000490CC /* seed.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seed.h; sourceTree = "<group>"; };
DAEB932318AA537D000490CC /* sha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sha.h; sourceTree = "<group>"; };
DAEB932418AA537D000490CC /* ssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl.h; sourceTree = "<group>"; };
DAEB932518AA537D000490CC /* ssl2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl2.h; sourceTree = "<group>"; };
DAEB932618AA537D000490CC /* ssl23.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl23.h; sourceTree = "<group>"; };
DAEB932718AA537D000490CC /* ssl3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ssl3.h; sourceTree = "<group>"; };
DAEB932818AA537D000490CC /* stack.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stack.h; sourceTree = "<group>"; };
DAEB932918AA537D000490CC /* symhacks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = symhacks.h; sourceTree = "<group>"; };
DAEB932A18AA537D000490CC /* tls1.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = tls1.h; sourceTree = "<group>"; };
DAEB932B18AA537D000490CC /* ts.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ts.h; sourceTree = "<group>"; };
DAEB932C18AA537D000490CC /* txt_db.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = txt_db.h; sourceTree = "<group>"; };
DAEB932D18AA537D000490CC /* ui.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui.h; sourceTree = "<group>"; };
DAEB932E18AA537D000490CC /* ui_compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ui_compat.h; sourceTree = "<group>"; };
DAEB932F18AA537D000490CC /* whrlpool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = whrlpool.h; sourceTree = "<group>"; };
DAEB933018AA537D000490CC /* x509.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509.h; sourceTree = "<group>"; };
DAEB933118AA537D000490CC /* x509_vfy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509_vfy.h; sourceTree = "<group>"; };
DAEB933218AA537D000490CC /* x509v3.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = x509v3.h; sourceTree = "<group>"; };
DAEBC45214F6364500987BF6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; DAEBC45214F6364500987BF6 /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; };
DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Touches.m"; sourceTree = "<group>"; }; DAEC85B118E3DD9A007FC0DF /* UIView+Touches.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Touches.m"; sourceTree = "<group>"; };
DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlUINavigationBar.m; sourceTree = "<group>"; }; DAEC85B218E3DD9A007FC0DF /* PearlUINavigationBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PearlUINavigationBar.m; sourceTree = "<group>"; };
@ -1660,8 +1502,8 @@
DA5E5C6417248959003798D8 /* include */ = { DA5E5C6417248959003798D8 /* include */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
DAEB92E018AA537D000490CC /* scrypt */, DA25C6B51980D3DD0046CDCF /* scrypt */,
DAEB92EA18AA537D000490CC /* openssl */, DA25C6B31980D3C10046CDCF /* openssl */,
); );
path = include; path = include;
sourceTree = "<group>"; sourceTree = "<group>";
@ -2573,101 +2415,6 @@
path = "External/uicolor-utilities"; path = "External/uicolor-utilities";
sourceTree = "<group>"; sourceTree = "<group>";
}; };
DAEB92E018AA537D000490CC /* scrypt */ = {
isa = PBXGroup;
children = (
DAEB92E118AA537D000490CC /* crypto_aesctr.h */,
DAEB92E218AA537D000490CC /* crypto_scrypt.h */,
DAEB92E318AA537D000490CC /* memlimit.h */,
DAEB92E418AA537D000490CC /* readpass.h */,
DAEB92E518AA537D000490CC /* scryptenc.h */,
DAEB92E618AA537D000490CC /* scryptenc_cpuperf.h */,
DAEB92E718AA537D000490CC /* sha256.h */,
DAEB92E818AA537D000490CC /* sysendian.h */,
DAEB92E918AA537D000490CC /* warn.h */,
);
path = scrypt;
sourceTree = "<group>";
};
DAEB92EA18AA537D000490CC /* openssl */ = {
isa = PBXGroup;
children = (
DAEB92EB18AA537D000490CC /* aes.h */,
DAEB92EC18AA537D000490CC /* asn1.h */,
DAEB92ED18AA537D000490CC /* asn1_mac.h */,
DAEB92EE18AA537D000490CC /* asn1t.h */,
DAEB92EF18AA537D000490CC /* bio.h */,
DAEB92F018AA537D000490CC /* blowfish.h */,
DAEB92F118AA537D000490CC /* bn.h */,
DAEB92F218AA537D000490CC /* buffer.h */,
DAEB92F318AA537D000490CC /* camellia.h */,
DAEB92F418AA537D000490CC /* cast.h */,
DAEB92F518AA537D000490CC /* cms.h */,
DAEB92F618AA537D000490CC /* comp.h */,
DAEB92F718AA537D000490CC /* conf.h */,
DAEB92F818AA537D000490CC /* conf_api.h */,
DAEB92F918AA537D000490CC /* crypto.h */,
DAEB92FA18AA537D000490CC /* des.h */,
DAEB92FB18AA537D000490CC /* des_old.h */,
DAEB92FC18AA537D000490CC /* dh.h */,
DAEB92FD18AA537D000490CC /* dsa.h */,
DAEB92FE18AA537D000490CC /* dso.h */,
DAEB92FF18AA537D000490CC /* dtls1.h */,
DAEB930018AA537D000490CC /* e_os2.h */,
DAEB930118AA537D000490CC /* ebcdic.h */,
DAEB930218AA537D000490CC /* ec.h */,
DAEB930318AA537D000490CC /* ecdh.h */,
DAEB930418AA537D000490CC /* ecdsa.h */,
DAEB930518AA537D000490CC /* engine.h */,
DAEB930618AA537D000490CC /* err.h */,
DAEB930718AA537D000490CC /* evp.h */,
DAEB930818AA537D000490CC /* hmac.h */,
DAEB930918AA537D000490CC /* idea.h */,
DAEB930A18AA537D000490CC /* krb5_asn.h */,
DAEB930B18AA537D000490CC /* kssl.h */,
DAEB930C18AA537D000490CC /* lhash.h */,
DAEB930D18AA537D000490CC /* md4.h */,
DAEB930E18AA537D000490CC /* md5.h */,
DAEB930F18AA537D000490CC /* mdc2.h */,
DAEB931018AA537D000490CC /* modes.h */,
DAEB931118AA537D000490CC /* obj_mac.h */,
DAEB931218AA537D000490CC /* objects.h */,
DAEB931318AA537D000490CC /* ocsp.h */,
DAEB931418AA537D000490CC /* opensslconf.h */,
DAEB931518AA537D000490CC /* opensslv.h */,
DAEB931618AA537D000490CC /* ossl_typ.h */,
DAEB931718AA537D000490CC /* pem.h */,
DAEB931818AA537D000490CC /* pem2.h */,
DAEB931918AA537D000490CC /* pkcs12.h */,
DAEB931A18AA537D000490CC /* pkcs7.h */,
DAEB931B18AA537D000490CC /* pqueue.h */,
DAEB931C18AA537D000490CC /* rand.h */,
DAEB931D18AA537D000490CC /* rc2.h */,
DAEB931E18AA537D000490CC /* rc4.h */,
DAEB931F18AA537D000490CC /* ripemd.h */,
DAEB932018AA537D000490CC /* rsa.h */,
DAEB932118AA537D000490CC /* safestack.h */,
DAEB932218AA537D000490CC /* seed.h */,
DAEB932318AA537D000490CC /* sha.h */,
DAEB932418AA537D000490CC /* ssl.h */,
DAEB932518AA537D000490CC /* ssl2.h */,
DAEB932618AA537D000490CC /* ssl23.h */,
DAEB932718AA537D000490CC /* ssl3.h */,
DAEB932818AA537D000490CC /* stack.h */,
DAEB932918AA537D000490CC /* symhacks.h */,
DAEB932A18AA537D000490CC /* tls1.h */,
DAEB932B18AA537D000490CC /* ts.h */,
DAEB932C18AA537D000490CC /* txt_db.h */,
DAEB932D18AA537D000490CC /* ui.h */,
DAEB932E18AA537D000490CC /* ui_compat.h */,
DAEB932F18AA537D000490CC /* whrlpool.h */,
DAEB933018AA537D000490CC /* x509.h */,
DAEB933118AA537D000490CC /* x509_vfy.h */,
DAEB933218AA537D000490CC /* x509v3.h */,
);
path = openssl;
sourceTree = "<group>";
};
DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */ = { DAFC5662172C57EC00CB5CC5 /* InAppSettingsKit */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
@ -2934,146 +2681,67 @@
isa = PBXHeadersBuildPhase; isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
DAEB938118AA537D000490CC /* x509.h in Headers */, DA25C6B61980D3DF0046CDCF /* scrypt in Headers */,
DA25C6B41980D3C50046CDCF /* openssl in Headers */,
DAFE4A1315039824003ABA7C /* NSObject+PearlExport.h in Headers */, DAFE4A1315039824003ABA7C /* NSObject+PearlExport.h in Headers */,
DAEB936118AA537D000490CC /* modes.h in Headers */,
DAFE4A1515039824003ABA7C /* NSString+PearlNSArrayFormat.h in Headers */, DAFE4A1515039824003ABA7C /* NSString+PearlNSArrayFormat.h in Headers */,
DAFE4A1715039824003ABA7C /* NSString+PearlSEL.h in Headers */, DAFE4A1715039824003ABA7C /* NSString+PearlSEL.h in Headers */,
DAEB936F18AA537D000490CC /* rc4.h in Headers */,
DAEB933318AA537D000490CC /* crypto_aesctr.h in Headers */,
DAEB936718AA537D000490CC /* ossl_typ.h in Headers */,
DA250A1A195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h in Headers */, DA250A1A195665A100AC23F1 /* UICollectionReusableView+PearlDequeue.h in Headers */,
DAEB937018AA537D000490CC /* ripemd.h in Headers */,
DAEB933F18AA537D000490CC /* asn1t.h in Headers */,
DAEB936418AA537D000490CC /* ocsp.h in Headers */,
DAEB934518AA537D000490CC /* cast.h in Headers */,
DAEB936E18AA537D000490CC /* rc2.h in Headers */,
DAEB937718AA537D000490CC /* ssl23.h in Headers */,
DAEB937918AA537D000490CC /* stack.h in Headers */,
DAEB936B18AA537D000490CC /* pkcs7.h in Headers */,
DAFE4A1915039824003ABA7C /* Pearl.h in Headers */, DAFE4A1915039824003ABA7C /* Pearl.h in Headers */,
DAFE4A1A15039824003ABA7C /* PearlAbstractStrings.h in Headers */, DAFE4A1A15039824003ABA7C /* PearlAbstractStrings.h in Headers */,
DAEB938218AA537D000490CC /* x509_vfy.h in Headers */,
DAEB937118AA537D000490CC /* rsa.h in Headers */,
DAEB936318AA537D000490CC /* objects.h in Headers */,
DAFE4A1E15039824003ABA7C /* PearlCodeUtils.h in Headers */, DAFE4A1E15039824003ABA7C /* PearlCodeUtils.h in Headers */,
DAEB935018AA537D000490CC /* dtls1.h in Headers */,
DAFE4A2015039824003ABA7C /* PearlConfig.h in Headers */, DAFE4A2015039824003ABA7C /* PearlConfig.h in Headers */,
DAFE4A2215039824003ABA7C /* PearlDeviceUtils.h in Headers */, DAFE4A2215039824003ABA7C /* PearlDeviceUtils.h in Headers */,
DAEB934E18AA537D000490CC /* dsa.h in Headers */,
DAEB935A18AA537D000490CC /* idea.h in Headers */,
DAEB933A18AA537D000490CC /* sysendian.h in Headers */,
DAFE4A2415039824003ABA7C /* PearlInfoPlist.h in Headers */, DAFE4A2415039824003ABA7C /* PearlInfoPlist.h in Headers */,
DA2CA4E418D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h in Headers */, DA2CA4E418D28866007798F8 /* NSLayoutConstraint+PearlUIKit.h in Headers */,
DAFE4A2615039824003ABA7C /* PearlLogger.h in Headers */, DAFE4A2615039824003ABA7C /* PearlLogger.h in Headers */,
DAFE4A2815039824003ABA7C /* PearlMathUtils.h in Headers */, DAFE4A2815039824003ABA7C /* PearlMathUtils.h in Headers */,
DAEB934418AA537D000490CC /* camellia.h in Headers */,
DAFE4A2A15039824003ABA7C /* PearlObjectUtils.h in Headers */, DAFE4A2A15039824003ABA7C /* PearlObjectUtils.h in Headers */,
DA250A18195665A100AC23F1 /* UITableView+PearlReloadFromArray.h in Headers */, DA250A18195665A100AC23F1 /* UITableView+PearlReloadFromArray.h in Headers */,
DAEB936D18AA537D000490CC /* rand.h in Headers */,
DAFE4A2C15039824003ABA7C /* PearlResettable.h in Headers */, DAFE4A2C15039824003ABA7C /* PearlResettable.h in Headers */,
DAFE4A2D15039824003ABA7C /* PearlStrings.h in Headers */, DAFE4A2D15039824003ABA7C /* PearlStrings.h in Headers */,
DAFE4A2F15039824003ABA7C /* PearlStringUtils.h in Headers */, DAFE4A2F15039824003ABA7C /* PearlStringUtils.h in Headers */,
DAEB935318AA537D000490CC /* ec.h in Headers */,
DAEB937818AA537D000490CC /* ssl3.h in Headers */,
DAEB935E18AA537D000490CC /* md4.h in Headers */,
DA2CA4E018D28859007798F8 /* NSTimer+PearlBlock.h in Headers */, DA2CA4E018D28859007798F8 /* NSTimer+PearlBlock.h in Headers */,
DAEB933518AA537D000490CC /* memlimit.h in Headers */,
DAFE4A3315039824003ABA7C /* Pearl-Crypto.h in Headers */, DAFE4A3315039824003ABA7C /* Pearl-Crypto.h in Headers */,
DAEB937318AA537D000490CC /* seed.h in Headers */,
DAEB935918AA537D000490CC /* hmac.h in Headers */,
DAEB936018AA537D000490CC /* mdc2.h in Headers */,
DAFE4A3415039824003ABA7C /* PearlCryptUtils.h in Headers */, DAFE4A3415039824003ABA7C /* PearlCryptUtils.h in Headers */,
DAEB933918AA537D000490CC /* sha256.h in Headers */,
DAFE4A3615039824003ABA7C /* PearlKeyChain.h in Headers */, DAFE4A3615039824003ABA7C /* PearlKeyChain.h in Headers */,
DAEB936818AA537D000490CC /* pem.h in Headers */,
DAFE4A3815039824003ABA7C /* PearlRSAKey.h in Headers */, DAFE4A3815039824003ABA7C /* PearlRSAKey.h in Headers */,
DAEB934618AA537D000490CC /* cms.h in Headers */,
DAEB935F18AA537D000490CC /* md5.h in Headers */,
DAEB934B18AA537D000490CC /* des.h in Headers */,
DAEB934018AA537D000490CC /* bio.h in Headers */,
DAFE4A3A15039824003ABA7C /* PearlSCrypt.h in Headers */, DAFE4A3A15039824003ABA7C /* PearlSCrypt.h in Headers */,
DAEB933C18AA537D000490CC /* aes.h in Headers */,
DAEB937618AA537D000490CC /* ssl2.h in Headers */,
DAFE4A3C15039824003ABA7C /* Pearl-UIKit-Dependencies.h in Headers */, DAFE4A3C15039824003ABA7C /* Pearl-UIKit-Dependencies.h in Headers */,
DAEC85B818E3DD9A007FC0DF /* UIView+Touches.h in Headers */, DAEC85B818E3DD9A007FC0DF /* UIView+Touches.h in Headers */,
DAEB935B18AA537D000490CC /* krb5_asn.h in Headers */,
DAEB935818AA537D000490CC /* evp.h in Headers */,
DAEB934118AA537D000490CC /* blowfish.h in Headers */,
DAEB935218AA537D000490CC /* ebcdic.h in Headers */,
DAEB937218AA537D000490CC /* safestack.h in Headers */,
DAFE4A3D15039824003ABA7C /* Pearl-UIKit.h in Headers */, DAFE4A3D15039824003ABA7C /* Pearl-UIKit.h in Headers */,
DAFE4A3E15039824003ABA7C /* PearlAlert.h in Headers */, DAFE4A3E15039824003ABA7C /* PearlAlert.h in Headers */,
DAFE4A4015039824003ABA7C /* PearlArrayTVC.h in Headers */, DAFE4A4015039824003ABA7C /* PearlArrayTVC.h in Headers */,
DAEB934718AA537D000490CC /* comp.h in Headers */,
DAEB933E18AA537D000490CC /* asn1_mac.h in Headers */,
DAFE4A4215039824003ABA7C /* PearlBoxView.h in Headers */, DAFE4A4215039824003ABA7C /* PearlBoxView.h in Headers */,
DAEB936618AA537D000490CC /* opensslv.h in Headers */,
DAEB936518AA537D000490CC /* opensslconf.h in Headers */,
DAEB935D18AA537D000490CC /* lhash.h in Headers */,
DAEB937E18AA537D000490CC /* ui.h in Headers */,
DAEB935518AA537D000490CC /* ecdsa.h in Headers */,
DAEB935718AA537D000490CC /* err.h in Headers */,
DAFE4A4415039824003ABA7C /* PearlGradientView.h in Headers */, DAFE4A4415039824003ABA7C /* PearlGradientView.h in Headers */,
DAEB937C18AA537D000490CC /* ts.h in Headers */,
DAFE4A4615039824003ABA7C /* PearlLayout.h in Headers */, DAFE4A4615039824003ABA7C /* PearlLayout.h in Headers */,
DAEB937A18AA537D000490CC /* symhacks.h in Headers */,
DAFE4A4815039824003ABA7C /* PearlLayoutView.h in Headers */, DAFE4A4815039824003ABA7C /* PearlLayoutView.h in Headers */,
DAEB933618AA537D000490CC /* readpass.h in Headers */,
DAFE4A4A15039824003ABA7C /* PearlMessageView.h in Headers */, DAFE4A4A15039824003ABA7C /* PearlMessageView.h in Headers */,
DAEB934818AA537D000490CC /* conf.h in Headers */,
DAFE4A4C15039824003ABA7C /* PearlRootViewController.h in Headers */, DAFE4A4C15039824003ABA7C /* PearlRootViewController.h in Headers */,
DAFE4A4E15039824003ABA7C /* PearlSheet.h in Headers */, DAFE4A4E15039824003ABA7C /* PearlSheet.h in Headers */,
DAFE4A5015039824003ABA7C /* PearlUIDebug.h in Headers */, DAFE4A5015039824003ABA7C /* PearlUIDebug.h in Headers */,
DAFE4A5215039824003ABA7C /* PearlUIUtils.h in Headers */, DAFE4A5215039824003ABA7C /* PearlUIUtils.h in Headers */,
DAEB937418AA537D000490CC /* sha.h in Headers */,
DAEB938018AA537D000490CC /* whrlpool.h in Headers */,
DAEB933718AA537D000490CC /* scryptenc.h in Headers */,
DAFE4A5415039824003ABA7C /* PearlValidatingTextField.h in Headers */, DAFE4A5415039824003ABA7C /* PearlValidatingTextField.h in Headers */,
DAEB933D18AA537D000490CC /* asn1.h in Headers */,
DAEB933B18AA537D000490CC /* warn.h in Headers */,
DAFE4A5615039824003ABA7C /* PearlWebViewController.h in Headers */, DAFE4A5615039824003ABA7C /* PearlWebViewController.h in Headers */,
DAEB934318AA537D000490CC /* buffer.h in Headers */,
DAEB936A18AA537D000490CC /* pkcs12.h in Headers */,
DAFE4A5815039824003ABA7C /* UIImage+PearlScaling.h in Headers */, DAFE4A5815039824003ABA7C /* UIImage+PearlScaling.h in Headers */,
DAFE4A63150399FF003ABA7C /* PearlAppDelegate.h in Headers */, DAFE4A63150399FF003ABA7C /* PearlAppDelegate.h in Headers */,
DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */, DA30E9CE15722ECA00A68B4C /* NSBundle+PearlMutableInfo.h in Headers */,
DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */, DA30E9D715723E6900A68B4C /* PearlLazy.h in Headers */,
DAEB936918AA537D000490CC /* pem2.h in Headers */,
DAEB937F18AA537D000490CC /* ui_compat.h in Headers */,
DAA141211922FF020032B392 /* PearlTween.h in Headers */, DAA141211922FF020032B392 /* PearlTween.h in Headers */,
DAFE4A63150399FF003ABA84 /* UIControl+PearlBlocks.h in Headers */, DAFE4A63150399FF003ABA84 /* UIControl+PearlBlocks.h in Headers */,
DAEB934A18AA537D000490CC /* crypto.h in Headers */,
DAEB935618AA537D000490CC /* engine.h in Headers */,
DAEB935118AA537D000490CC /* e_os2.h in Headers */,
DAFE4A63150399FF003ABA88 /* NSObject+PearlKVO.h in Headers */, DAFE4A63150399FF003ABA88 /* NSObject+PearlKVO.h in Headers */,
DAFE4A63150399FF003ABA8C /* UIControl+PearlSelect.h in Headers */, DAFE4A63150399FF003ABA8C /* UIControl+PearlSelect.h in Headers */,
DAFE4A63150399FF003ABA90 /* UIScrollView+PearlFlashingIndicators.h in Headers */, DAFE4A63150399FF003ABA90 /* UIScrollView+PearlFlashingIndicators.h in Headers */,
DAEB934F18AA537D000490CC /* dso.h in Headers */,
DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */, DAFE4A63150399FF003ABA94 /* NSDateFormatter+RFC3339.h in Headers */,
DAEB934C18AA537D000490CC /* des_old.h in Headers */,
93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */, 93D39C34FE35830EF5BE1D2A /* NSArray+Indexing.h in Headers */,
DAEB936C18AA537D000490CC /* pqueue.h in Headers */,
DAEB937B18AA537D000490CC /* tls1.h in Headers */,
DAEB933818AA537D000490CC /* scryptenc_cpuperf.h in Headers */,
DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */, DA2CA4DE18D28859007798F8 /* NSArray+Pearl.h in Headers */,
93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */, 93D392EC39DA43C46C692C12 /* NSDictionary+Indexing.h in Headers */,
DAEB935418AA537D000490CC /* ecdh.h in Headers */,
DAEB937D18AA537D000490CC /* txt_db.h in Headers */,
93D3932889B6B4206E66A6D6 /* PearlEMail.h in Headers */, 93D3932889B6B4206E66A6D6 /* PearlEMail.h in Headers */,
DAEB934D18AA537D000490CC /* dh.h in Headers */,
DAEB938318AA537D000490CC /* x509v3.h in Headers */,
DAEB935C18AA537D000490CC /* kssl.h in Headers */,
DAEB933418AA537D000490CC /* crypto_scrypt.h in Headers */,
DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */, DA3509FE15F101A500C14A8E /* PearlQueue.h in Headers */,
DAEC85B718E3DD9A007FC0DF /* PearlUINavigationBar.h in Headers */, DAEC85B718E3DD9A007FC0DF /* PearlUINavigationBar.h in Headers */,
DAEB934918AA537D000490CC /* conf_api.h in Headers */,
93D396BA1C74C4A06FD86437 /* PearlOverlay.h in Headers */, 93D396BA1C74C4A06FD86437 /* PearlOverlay.h in Headers */,
DAEB937518AA537D000490CC /* ssl.h in Headers */,
93D3992FA1546E01F498F665 /* PearlNavigationController.h in Headers */, 93D3992FA1546E01F498F665 /* PearlNavigationController.h in Headers */,
93D39B842AB9A5D072810D76 /* NSError+PearlFullDescription.h in Headers */, 93D39B842AB9A5D072810D76 /* NSError+PearlFullDescription.h in Headers */,
DAEB936218AA537D000490CC /* obj_mac.h in Headers */,
DAEB934218AA537D000490CC /* bn.h in Headers */,
DAF4EF51190A81E400023C90 /* NSManagedObject+Pearl.h in Headers */, DAF4EF51190A81E400023C90 /* NSManagedObject+Pearl.h in Headers */,
DAA141221922FF020032B392 /* map-macro.h in Headers */, DAA141221922FF020032B392 /* map-macro.h in Headers */,
93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */, 93D39B76DD5AB108BA8928E8 /* UIScrollView+PearlAdjustInsets.h in Headers */,
@ -3161,9 +2829,10 @@
isa = PBXNativeTarget; isa = PBXNativeTarget;
buildConfigurationList = DAC77CB7148291A600BCF976 /* Build configuration list for PBXNativeTarget "Pearl" */; buildConfigurationList = DAC77CB7148291A600BCF976 /* Build configuration list for PBXNativeTarget "Pearl" */;
buildPhases = ( buildPhases = (
DA25C6C91983702E0046CDCF /* ShellScript */,
DAC77CAB148291A600BCF976 /* Headers */,
DAC77CA9148291A600BCF976 /* Sources */, DAC77CA9148291A600BCF976 /* Sources */,
DAC77CAA148291A600BCF976 /* Frameworks */, DAC77CAA148291A600BCF976 /* Frameworks */,
DAC77CAB148291A600BCF976 /* Headers */,
); );
buildRules = ( buildRules = (
); );
@ -3479,6 +3148,19 @@
/* End PBXResourcesBuildPhase section */ /* End PBXResourcesBuildPhase section */
/* Begin PBXShellScriptBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */
DA25C6C91983702E0046CDCF /* ShellScript */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = ":";
};
DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = { DA6556E314D55F3000841C99 /* Run Script: GIT version -> Info.plist */ = {
isa = PBXShellScriptBuildPhase; isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
@ -4065,6 +3747,7 @@
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch"; GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
OTHER_LDFLAGS = "-ObjC"; OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PUBLIC_HEADERS_FOLDER_PATH = "../../BuildProductsPath/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/include";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = "AppStore-iOS"; name = "AppStore-iOS";
@ -4149,6 +3832,7 @@
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch"; GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
OTHER_LDFLAGS = "-ObjC"; OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PUBLIC_HEADERS_FOLDER_PATH = "../../BuildProductsPath/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/include";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = "Debug-iOS"; name = "Debug-iOS";
@ -4161,6 +3845,7 @@
GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch"; GCC_PREFIX_HEADER = "../Pearl/Pearl-Prefix.pch";
OTHER_LDFLAGS = "-ObjC"; OTHER_LDFLAGS = "-ObjC";
PRODUCT_NAME = "$(TARGET_NAME)"; PRODUCT_NAME = "$(TARGET_NAME)";
PUBLIC_HEADERS_FOLDER_PATH = "../../BuildProductsPath/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/include";
SKIP_INSTALL = YES; SKIP_INSTALL = YES;
}; };
name = "AdHoc-iOS"; name = "AdHoc-iOS";

View File

@ -1034,19 +1034,21 @@
<color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/> <color key="textColor" white="0.66666666666666663" alpha="1" colorSpace="calibratedWhite"/>
<nil key="highlightedColor"/> <nil key="highlightedColor"/>
</label> </label>
<textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="CuzaSasy3*Rimo" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="blw-Ou-8I8" userLabel="Password"> <textField opaque="NO" clipsSubviews="YES" alpha="0.0" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="CuzaSasy3*Rimo" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="blw-Ou-8I8" userLabel="Password">
<rect key="frame" x="8" y="20" width="284" height="31"/> <rect key="frame" x="8" y="20" width="284" height="31"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/> <fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="done"/> <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="done"/>
<connections> <connections>
<action selector="textFieldDidChange:" destination="W2g-yv-V3V" eventType="editingChanged" id="gTE-0d-r2l"/>
<outlet property="delegate" destination="W2g-yv-V3V" id="YKp-IE-zEQ"/> <outlet property="delegate" destination="W2g-yv-V3V" id="YKp-IE-zEQ"/>
</connections> </connections>
</textField> </textField>
<textField opaque="NO" clipsSubviews="YES" alpha="0.0" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="lhunath" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3I9-vf-IZK" userLabel="Login"> <textField opaque="NO" clipsSubviews="YES" contentMode="scaleToFill" enabled="NO" contentHorizontalAlignment="left" contentVerticalAlignment="center" text="lhunath" borderStyle="roundedRect" textAlignment="center" minimumFontSize="17" translatesAutoresizingMaskIntoConstraints="NO" id="3I9-vf-IZK" userLabel="Login">
<rect key="frame" x="8" y="20" width="284" height="31"/> <rect key="frame" x="8" y="20" width="284" height="30"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/> <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<color key="backgroundColor" red="0.37254901959999998" green="0.3921568627" blue="0.42745098040000001" alpha="0.10000000000000001" colorSpace="calibratedRGB"/>
<color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/> <color key="textColor" red="0.40000000600000002" green="0.80000001190000003" blue="1" alpha="1" colorSpace="calibratedRGB"/>
<fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/> <fontDescription key="fontDescription" name="SourceCodePro-Black" family="Source Code Pro" pointSize="24"/>
<textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="done"/> <textInputTraits key="textInputTraits" autocorrectionType="no" keyboardType="alphabet" keyboardAppearance="alert" returnKeyType="done"/>
@ -1334,6 +1336,7 @@
<connections> <connections>
<outlet property="counterButton" destination="uZi-FT-Fe8" id="oaF-bB-Sgc"/> <outlet property="counterButton" destination="uZi-FT-Fe8" id="oaF-bB-Sgc"/>
<outlet property="counterLabel" destination="PKP-M9-T8E" id="m9u-Qx-Z9N"/> <outlet property="counterLabel" destination="PKP-M9-T8E" id="m9u-Qx-Z9N"/>
<outlet property="editButton" destination="qBo-Kw-vN9" id="g0S-0o-e3D"/>
<outlet property="loginModeButton" destination="Agd-0J-z5o" id="VQI-nl-5Yh"/> <outlet property="loginModeButton" destination="Agd-0J-z5o" id="VQI-nl-5Yh"/>
<outlet property="loginNameField" destination="3I9-vf-IZK" id="jK4-LI-4ST"/> <outlet property="loginNameField" destination="3I9-vf-IZK" id="jK4-LI-4ST"/>
<outlet property="modeButton" destination="b5f-wN-2xb" id="m2X-BZ-Lbv"/> <outlet property="modeButton" destination="b5f-wN-2xb" id="m2X-BZ-Lbv"/>
@ -1344,7 +1347,6 @@
<outlet property="siteNameLabel" destination="OwP-sb-Wxl" id="6GN-Ou-K0F"/> <outlet property="siteNameLabel" destination="OwP-sb-Wxl" id="6GN-Ou-K0F"/>
<outlet property="strengthLabel" destination="wfM-xz-roR" id="dzk-dB-OfP"/> <outlet property="strengthLabel" destination="wfM-xz-roR" id="dzk-dB-OfP"/>
<outlet property="upgradeButton" destination="vGk-t6-hZn" id="m2T-CA-HmJ"/> <outlet property="upgradeButton" destination="vGk-t6-hZn" id="m2T-CA-HmJ"/>
<outlet property="editButton" destination="qBo-Kw-vN9" id="g0S-0o-e3D"/>
</connections> </connections>
</collectionViewCell> </collectionViewCell>
</cells> </cells>