Thanks Tom

I feel better now LoL

On Sep 13, 2:41 pm, 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 herehttp://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

Reply via email to