Skip to content

Instantly share code, notes, and snippets.

@zrzka
Created December 4, 2014 09:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zrzka/3ae34814eb597c69bbff to your computer and use it in GitHub Desktop.
Save zrzka/3ae34814eb597c69bbff to your computer and use it in GitHub Desktop.
Ukázka podepisování requestů
- (NSString *)signatureWithPlainText:(NSString *)plainText key:(NSString *)key {
const char *charKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *charData = [plainText cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char charHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac( kCCHmacAlgSHA1, charKey, strlen( charKey ), charData, strlen( charData ), charHMAC);
NSData *data = [[NSData alloc] initWithBytes:charHMAC length:sizeof( charHMAC )];
return [data base64EncodedStringWithOptions:0];
}
- (NSMutableURLRequest *)requestWithMethod:(NSString *)method
URLString:(NSString *)URLString
parameters:(id)parameters
error:(NSError *__autoreleasing *)error {
NSMutableURLRequest *request = [super requestWithMethod:method
URLString:URLString
parameters:parameters
error:error];
NSString *nonce = [[NSUUID UUID] UUIDString];
NSMutableString *message = [@"" mutableCopy];
if ( request.HTTPBody != nil ) {
NSString *stringBody = [[NSString alloc] initWithData:request.HTTPBody
encoding:NSUTF8StringEncoding];
[message appendString:stringBody];
}
NSString *path = request.URL.path;
if ( path.length > 0 ) {
[message appendString:path];
}
[message appendString:nonce];
NSString *query = request.URL.query;
if ( query.length > 0 ) {
[message appendFormat:@"?%@", query];
}
NSData *decodedKeyData = [[NSData alloc] initWithBase64EncodedString:@"base64-klíč-známý-appce-a-serveru"
options:0];
NSString *key = [[NSString alloc] initWithData:decodedKeyData encoding:NSUTF8StringEncoding];
NSString *signature = [self signatureWithPlainText:message key:key];
[request setValue:nonce forHTTPHeaderField:@"nonce"];
[request setValue:signature forHTTPHeaderField:@"signature"];
return request;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment