propagate from branch 'ca.inverse.sogo.1_3_15' (head 2c3f8544a30679096de28ae80a840c371b12d94b)

to branch 'ca.inverse.sogo' (head 0ed6b9d5a5d4a8143d08cc4652384f5073d26096)

Monotone-Parent: 0ed6b9d5a5d4a8143d08cc4652384f5073d26096
Monotone-Parent: 2c3f8544a30679096de28ae80a840c371b12d94b
Monotone-Revision: 785de8feba6c3e190c55defa1a5e18e85c9b82ba

Monotone-Author: jraby@inverse.ca
Monotone-Date: 2012-04-16T22:38:02
Monotone-Branch: ca.inverse.sogo
This commit is contained in:
Jean Raby
2012-04-16 22:38:02 +00:00
6 changed files with 127 additions and 5 deletions
+15
View File
@@ -1,3 +1,18 @@
2012-04-16 Jean Raby <jraby@inverse.ca>
* SOPE/NGCards/iCalMonthlyRecurrenceCalculator.m
(-recurrenceRangesWithinCalendarDateRange:):
Fix of by one error. (bug #1772)
2012-04-16 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/SOGo/NSString+Utilities.m (-encryptWithKey:)
(-decryptWithKey:): new methods providing symmetric encryption of
strings.
* Tests/Unit/SOGoTestRunner.m (-run): do not empty the pool after
each test.
2012-04-13 Wolfgang Sourdeau <wsourdeau@inverse.ca>
* SoObjects/Appointments/SOGoAppointmentFolder.m (-bareFetchFields: ...),
@@ -247,7 +247,7 @@ static inline unsigned iCalDoWForNSDoW (int dow)
if (byMonth && [byMonth count] > 0)
{
int i;
for (i = 0; i <= 12; i++)
for (i = 0; i < 12; i++)
byMonthList[i] = [byMonth containsObject: [NSString stringWithFormat: @"%i", i + 1]];
}
+5
View File
@@ -74,6 +74,11 @@
- (NSUInteger) countOccurrencesOfString: (NSString *) substring;
/* Those methods provide symmetric enc-/decryption via a XOR operation */
- (NSString *) encryptWithKey: (NSString *) theKey;
- (NSString *) decryptWithKey: (NSString *) theKey;
@end
#endif /* NSSTRING_URL_H */
+82
View File
@@ -35,6 +35,7 @@
#import <NGExtensions/NSDictionary+misc.h>
#import <NGExtensions/NSObject+Logs.h>
#import <NGExtensions/NGBase64Coding.h>
#import <NGMime/NGMimeHeaderFieldGenerator.h>
#import <SBJson/SBJsonParser.h>
@@ -610,4 +611,85 @@ static int cssEscapingCount;
return count;
}
- (NSString *) encryptWithKey: (NSString *) theKey
{
NSMutableData *encryptedPassword;
NSMutableString *key;
NSString *result;
NSUInteger i, passLength, theKeyLength, keyLength;
unichar p, k, e;
if ([theKey length] > 0)
{
// The length of the key must be greater (or equal) than
// the length of the password
key = [NSMutableString string];
keyLength = 0;
passLength = [self length];
theKeyLength = [theKey length];
while (keyLength < passLength)
{
[key appendString: theKey];
keyLength += theKeyLength;
}
encryptedPassword = [NSMutableData data];
for (i = 0; i < passLength; i++)
{
p = [self characterAtIndex: i];
k = [key characterAtIndex: i];
e = p ^ k;
[encryptedPassword appendBytes: (void *)&e length: 2];
}
result = [encryptedPassword stringByEncodingBase64];
}
else
result = nil;
return result;
}
- (NSString *) decryptWithKey: (NSString *) theKey
{
NSMutableString *result;
NSMutableString *key;
NSData *decoded;
unichar *decryptedPassword;
NSUInteger i, theKeyLength, keyLength, decodedLength;
unichar p, k;
if ([theKey length] > 0)
{
decoded = [self dataByDecodingBase64];
decryptedPassword = (unichar *)[decoded bytes];
// The length of the key must be greater (or equal) than
// the length of the password
key = [NSMutableString string];
keyLength = 0;
decodedLength = ([decoded length] / 2); /* 1 unichar = 2 bytes/char */
theKeyLength = [theKey length];
while (keyLength < decodedLength)
{
[key appendString: theKey];
keyLength += theKeyLength;
}
result = [NSMutableString string];
for (i = 0; i < decodedLength; i++)
{
k = [key characterAtIndex: i];
p = decryptedPassword[i] ^ k;
[result appendFormat: @"%C", p];
}
}
else
result = nil;
return result;
}
@end
+1 -4
View File
@@ -68,11 +68,9 @@
NSEnumerator *allTestClasses;
NSString *class;
SOGoTest *test;
NSAutoreleasePool *pool;
int rc;
rc = 0;
pool = [NSAutoreleasePool currentPool];
[self retain];
allTestClasses = [[SOGoTest allTestClasses] objectEnumerator];
@@ -83,8 +81,7 @@
[test setTestRunner: self];
if (![test run])
rc |= -1;
[test autorelease];
[pool emptyPool];
[test release];
}
[self displayReport];
+23
View File
@@ -47,4 +47,27 @@
failIf(count != 0);
}
- (void) test_encryptdecrypt
{
NSString *secret = @"this is a secret";
NSString *password = @"qwerty";
NSString *encresult, *decresult;
encresult = [secret encryptWithKey: nil];
failIf(encresult != nil);
encresult = [secret encryptWithKey: @""];
failIf(encresult != nil);
encresult = [secret encryptWithKey: password];
failIf(encresult == nil);
decresult = [encresult decryptWithKey: nil];
failIf(decresult != nil);
decresult = [encresult decryptWithKey: @""];
failIf(decresult != nil);
decresult = [encresult decryptWithKey: password];
failIf(![decresult isEqualToString: secret]);
}
@end