That's really puzzling for me. I've tried 5 different ways to get oauth_signature, even extracted from libraries suggested by Twitter All of them produce same result MUYmiobRdoK6s0ZVqo4xQNNO17w= It's different from example http://dev.twitter.com/pages/xauth
I'm looking for any logical explanation for this Nikolay Klimchuk On Sep 15, 12:03 pm, Taylor Singletary <taylorsinglet...@twitter.com> wrote: > Hi Everyone, > > I've revised the xAuth examples athttp://dev.twitter.com/pages/xauth-- > you'll find they should have signatures that are easier to reproduce and was > confirmed functional at the time of execution. > > Thanks for the nudge, Tom. > > Thanks, > Taylor > > On Mon, Sep 13, 2010 at 11:41 AM, Tom van der Woerdt <i...@tvdw.eu> wrote: > > > > > 2010-09-13 20:39:11.190 Test[56513:207] NSData *HMAC: <3146268a 86d17682 > > bab34655 aa8e3140 d34ed7bc> > > 2010-09-13 20:39:11.191 Test[56513:207] NSString *HMAC64: > > MUYmiobRdoK6s0ZVqo4xQNNO17w= > > > Looks like you're right :-) > > > @episod: You should fix that! :-) > > > Tom > > > On 9/13/10 8:23 PM, Nikolay Klimchuk wrote: > > > Still no luck > > > > With your code I'm gettings exactly the same result > > > MUYmiobRdoK6s0ZVqo4xQNNO17w= > > > > Something really strange in example here > >http://dev.twitter.com/pages/xauth > > > > Nikolay Klimchuk > > > > On Sep 13, 7:19 am, Tom van der Woerdt <i...@tvdw.eu> wrote: > > >> Oh, hehe, good point. That's because my Base String has one extra > > >> urlencoded '&' on the end, and that shouldn't be there. > > > >> Tom > > > >> On Mon, 13 Sep 2010 04:18:06 -0700 (PDT), Nikolay Klimchuk > > > >> <klimc...@gmail.com> wrote: > > >>> Thank you Tom > > > >>> I will try your algorithm and compare results. > > >>> Quick question: why you do this [str substringToIndex:[str > > >>> length]-3] ? > > > >>> Nikolay Klimchuk > > > >>> On Sep 13, 2:46 am, Tom van der Woerdt <i...@tvdw.eu> wrote: > > >>>> Hi Nikolay, > > > >>>> The first part of your code looks fine. You may, however, like to do > > >>>> some debugging on the HMAC part - it looks a bit too simple to me. > > > >>>> This works : > > >>>> NSString *compKey = [NSString stringWithFormat:@ > > "%@&%@",secret,userSecret]; > > >>>> const char *cKey = [compKey > > cStringUsingEncoding:NSUTF8StringEncoding]; > > >>>> const char *cData = [[str substringToIndex:[str length]-3] > > >>>> cStringUsingEncoding:NSUTF8StringEncoding]; > > >>>> unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH]; > > >>>> CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, > > strlen(cData), cHMAC); > > >>>> NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC > > length:sizeof(cHMAC)]; > > >>>> (str being the Base String) > > > >>>> Hope it helps :-) > > > >>>> Tom > > > >>>> On 9/13/10 3:02 AM, Nikolay Klimchuk wrote: > > > >>>>> I'm trying to understand why algorithm for calculation of > > >>>>> oauth_signature does not give me the same result as shown here: > > >>>>>http://dev.twitter.com/pages/xauth > > > >>>>> In my case I'm getting signedSK = 'MUYmiobRdoK6s0ZVqo4xQNNO17w=' > > > >>>>> If I URL encode such result it's still very different from > > >>>>> yUDBrcMMm6ghqBEKCFKVoJPIacU%3D > > > >>>>> I've tried different implementations, all of them give the same > > >>>>> result. After few hours of exercises with all this stuff I completely > > >>>>> run out of ideas, please help > > > >>>>> // Test with input data taken from Twitter page > > > >>>>> NSString *s= @"POST&https%3A%2F%2Fapi.twitter.com%2Foauth > > >>>>> %2Faccess_token&oauth_consumer_key%3DsGNxxnqgZRHUt6NunK3uw > > >>>>> %26oauth_nonce%3DWLxsobj4rhS2xmCbaAeT4aAkRfx4vSHX4OnYpTE77hA > > >>>>> %26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp > > >>>>> %3D1276101652%26oauth_version%3D1.0%26x_auth_mode%3Dclient_auth > > >>>>> %26x_auth_password%3D%2525%2526123%2521aZ%252B > > >>>>> %2528%2529456242134%26x_auth_username%3DtpFriendlyGiant"; > > > >>>>> NSString *k = @"5kEQypKe7lFHnufLtsocB1vAzO07xLFgp2Pc4sp2vk&"; > > > >>>>> NSString *signedSK = [NetworkManager base64forData:[NetworkManager > > >>>>> HMACSHA1withKey:k forString:s]]; > > > >>>>> // Source code > > > >>>>> + (NSData *)HMACSHA1withKey:(NSString *)key forString:(NSString > > >>>>> *)string > > >>>>> { > > >>>>> NSData *clearTextData = [string > > >>>>> dataUsingEncoding:NSUTF8StringEncoding]; > > >>>>> NSData *keyData = [key dataUsingEncoding:NSUTF8StringEncoding]; > > > >>>>> uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0}; > > > >>>>> CCHmacContext hmacContext; > > >>>>> CCHmacInit(&hmacContext, kCCHmacAlgSHA1, keyData.bytes, > > >>>>> keyData.length); > > >>>>> CCHmacUpdate(&hmacContext, clearTextData.bytes, > > >>>>> clearTextData.length); > > >>>>> CCHmacFinal(&hmacContext, digest); > > > >>>>> return [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH]; > > >>>>> } > > > >>>>> //Sourcehttp://www.cocoadev.com/index.pl?BaseSixtyFour > > > >>>>> + (NSString *)base64forData:(NSData *)data > > >>>>> { > > >>>>> static const char encodingTable[] = > > >>>>> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; > > > >>>>> if ([data length] == 0) > > >>>>> return @""; > > > >>>>> char *characters = malloc((([data length] + 2) / 3) * 4); > > >>>>> if (characters == NULL) > > >>>>> return nil; > > >>>>> NSUInteger length = 0; > > > >>>>> NSUInteger i = 0; > > >>>>> while (i < [data length]) > > >>>>> { > > >>>>> char buffer[3] = {0,0,0}; > > >>>>> short bufferLength = 0; > > >>>>> while (bufferLength < 3 && i < [data length]) > > >>>>> buffer[bufferLength++] = ((char *)[data > > bytes])[i++]; > > > >>>>> // Encode the bytes in the buffer to four characters, > > >>>>> including padding "=" characters if necessary. > > >>>>> characters[length++] = encodingTable[(buffer[0] & 0xFC) >> > > 2]; > > >>>>> characters[length++] = encodingTable[((buffer[0] & 0x03) << > > 4) > > >>>>> | ((buffer[1] & 0xF0) >> 4)]; > > >>>>> if (bufferLength > 1) > > >>>>> characters[length++] = encodingTable[((buffer[1] & > > 0x0F) << 2) | > > >>>>> ((buffer[2] & 0xC0) >> 6)]; > > >>>>> else characters[length++] = '='; > > >>>>> if (bufferLength > 2) > > >>>>> characters[length++] = encodingTable[buffer[2] & > > 0x3F]; > > >>>>> else characters[length++] = '='; > > >>>>> } > > > >>>>> return [[[NSString alloc] initWithBytesNoCopy:characters > > >>>>> length:length encoding:NSASCIIStringEncoding freeWhenDone:YES] > > >>>>> autorelease]; > > >>>>> } > > > -- > > Twitter developer documentation and resources:http://dev.twitter.com/doc > > API updates via Twitter:http://twitter.com/twitterapi > > Issues/Enhancements Tracker: > >http://code.google.com/p/twitter-api/issues/list > > Change your membership to this group: > >http://groups.google.com/group/twitter-development-talk?hl=en -- Twitter developer documentation and resources: http://dev.twitter.com/doc API updates via Twitter: http://twitter.com/twitterapi Issues/Enhancements Tracker: http://code.google.com/p/twitter-api/issues/list Change your membership to this group: http://groups.google.com/group/twitter-development-talk?hl=en