Can you share the code you're using? On Wed, Sep 15, 2010 at 8:02 PM, Nikolay Klimchuk <klimc...@gmail.com>wrote:
> 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 > -- 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