QuickBlox / quickblox-ios-sdk

QuickBlox iOS SDK for messaging and video calling
https://quickblox.com/developers/IOS
MIT License
397 stars 358 forks source link

how to generate signature during session creation #666

Closed vikrant88 closed 7 years ago

vikrant88 commented 7 years ago

Hello I am working on app with Quickblox 2.6. I want to use https://api.quickblox.com/session.json Api with the help of following link. http://quickblox.com/developers/Authentication_and_Authorization I don't know how to use HMAC-SHA for generate signature and what is timestamp or nonce parameter in it. Please help me

ghost commented 7 years ago

HI @vikrant88, what programming language do you use for generating signature ?

vikrant88 commented 7 years ago

Sorry I forgot to mention. I used Objective C

ghost commented 7 years ago

@vikrant88

I don't know how to use HMAC-SHA for generate signature :

#import <CommonCrypto/CommonHMAC.h>

@implementation SignHelper

// Example of data: 
// NSString *signature = @"application_id=22&auth_key=wJHd4cQSxpQGWx5&nonce=33432&timestamp=1326966962"
// data =  [signature dataUsingEncoding:NSUTF8StringEncoding];
// secret - [QBSettings authSecret]
+ (NSString *)signData:(NSData *)data withSecret:(NSString *)secret {

    NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding];
    NSData *clearTextData = data;
    uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
    CCHmacContext hmacContext;
    CCHmacInit(&hmacContext, kCCHmacAlgSHA1, secretData.bytes, secretData.length);
    CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length);
    CCHmacFinal(&hmacContext, digest);
    NSData *result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
    NSString *hash = [result description];
    hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
    hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];

    return hash;
}
@end

and what is timestamp or nonce parameter in it:

nonce - random int value timestamp - (int)[[NSDate date] timeIntervalSince1970]

vikrant88 commented 7 years ago

Thanks for reply. Please tell me what is parameter value data and secret in method given by you.

ghost commented 7 years ago

@vikrant88 Check comments before + (NSString *)signData:(NSData *)data withSecret:(NSString *)secret

ghost commented 7 years ago

@vikrant88 - Take a look at Signature generation. There you can find formats with user and social provider.

vikrant88 commented 7 years ago

@Pro100Andrey Thanks for reply. I am using and let you know.

vikrant88 commented 7 years ago

Thanks @Pro100Andrey. My issue solved. Thanks again.

SameerDonga commented 5 years ago

@vikrant88

I don't know how to use HMAC-SHA for generate signature :

#import <CommonCrypto/CommonHMAC.h>

@implementation SignHelper

// Example of data: 
// NSString *signature = @"application_id=22&auth_key=wJHd4cQSxpQGWx5&nonce=33432&timestamp=1326966962"
// data =  [signature dataUsingEncoding:NSUTF8StringEncoding];
// secret - [QBSettings authSecret]
+ (NSString *)signData:(NSData *)data withSecret:(NSString *)secret {

  NSData *secretData = [secret dataUsingEncoding:NSUTF8StringEncoding];
  NSData *clearTextData = data;
  uint8_t digest[CC_SHA1_DIGEST_LENGTH] = {0};
  CCHmacContext hmacContext;
  CCHmacInit(&hmacContext, kCCHmacAlgSHA1, secretData.bytes, secretData.length);
  CCHmacUpdate(&hmacContext, clearTextData.bytes, clearTextData.length);
  CCHmacFinal(&hmacContext, digest);
  NSData *result = [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
  NSString *hash = [result description];
  hash = [hash stringByReplacingOccurrencesOfString:@" " withString:@""];
  hash = [hash stringByReplacingOccurrencesOfString:@"<" withString:@""];
  hash = [hash stringByReplacingOccurrencesOfString:@">" withString:@""];

  return hash;
}
@end

and what is timestamp or nonce parameter in it:

nonce - random int value timestamp - (int)[[NSDate date] timeIntervalSince1970]

### How to generate it in Dart/Flutter?