Skip to content

Commit

Permalink
some helper category methods related to md5
Browse files Browse the repository at this point in the history
  • Loading branch information
stevedekorte committed Oct 3, 2012
1 parent b14170a commit bc99922
Show file tree
Hide file tree
Showing 7 changed files with 61 additions and 4 deletions.
2 changes: 1 addition & 1 deletion S3Kit/S3Kit/BS3Requestor.m
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ - (NSString *)authorizationHeader
- (void)setHTTPBody:(NSData *)body
{
HTTPBody = body;
[allHTTPHeaderFields setObject:[HTTPBody md5Signature] forKey:@"Content-Md5"];
[allHTTPHeaderFields setObject:[HTTPBody md5SignatureBase64] forKey:@"Content-Md5"];
}

- (NSMutableURLRequest *)composedRequest
Expand Down
1 change: 1 addition & 0 deletions S3Kit/S3Kit/NSData+Base64.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,6 @@ char *NewBase64Encode(

+ (NSData *)dataFromBase64String:(NSString *)aString;
- (NSString *)base64EncodedString;
- (NSString *)base16EncodedString;

@end
19 changes: 19 additions & 0 deletions S3Kit/S3Kit/NSData+Base64.m
Original file line number Diff line number Diff line change
Expand Up @@ -305,5 +305,24 @@ - (NSString *)base64EncodedString {
}


- (NSString *)base16EncodedString
{
const unsigned char *dataBuffer = (const unsigned char *)[self bytes];

if (!dataBuffer)
{
return [NSString string];
}

NSUInteger dataLength = [self length];
NSMutableString *hexString = [NSMutableString stringWithCapacity:(dataLength * 2)];

for (int i = 0; i < dataLength; ++i)
{
[hexString appendString:[NSString stringWithFormat:@"%02x", (unsigned int)dataBuffer[i]]];
}

return [NSString stringWithString:hexString];
}

@end
4 changes: 3 additions & 1 deletion S3Kit/S3Kit/NSData+MD5.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@

@interface NSData (MD5)

- (NSString *)md5Signature;
- (NSData *)md5SignatureData;
- (NSString *)md5SignatureBase64;
- (NSString *)md5SignatureBase16;

@end

14 changes: 12 additions & 2 deletions S3Kit/S3Kit/NSData+MD5.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,22 @@

@implementation NSData (MD5)

- (NSString *)md5Signature
- (NSData *)md5SignatureData
{
static const int kNumBytes = 16;
unsigned char result[kNumBytes];
CC_MD5([self bytes], [self length], result);
return [[NSData dataWithBytes:result length:sizeof(unsigned char) * kNumBytes] base64EncodedString];
return [NSData dataWithBytes:result length:sizeof(unsigned char) * kNumBytes];
}

- (NSString *)md5SignatureBase64
{
return [[self md5SignatureData] base64EncodedString];
}

- (NSString *)md5SignatureBase16
{
return [[self md5SignatureData] base16EncodedString];
}

@end
Expand Down
1 change: 1 addition & 0 deletions S3Kit/S3Kit/NSString+Crypto.h
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
@interface NSString (Crypto)

- (NSData *)encryptWithKey:(NSString *)privateKey;
- (NSData *)dataFromBase16String;

@end

24 changes: 24 additions & 0 deletions S3Kit/S3Kit/NSString+Crypto.m
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,29 @@ - (NSData *)encryptWithKey:(NSString *)privateKey

return encryptedData;
}

- (NSData *)dataFromBase16String
{
NSString *theString = [[self componentsSeparatedByCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:nil];

NSMutableData* data = [NSMutableData data];
int idx;

for (idx = 0; idx+2 <= theString.length; idx+=2)
{
NSRange range = NSMakeRange(idx, 2);
NSString *hexStr = [theString substringWithRange:range];
NSScanner *scanner = [NSScanner scannerWithString:hexStr];
unsigned int intValue;
if ([scanner scanHexInt:&intValue])
{
[data appendBytes:&intValue length:1];
}
}

return data;
}

@end

0 comments on commit bc99922

Please sign in to comment.