+(NSString*)getHMAC_SHA256WithBase64Encoding:(NSString*)stringToSign
{
NSString *key = kSecrectKey;
NSString *data = stringToSign;
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [stringToSign cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
//1
// const unsigned int hex_len = CC_SHA256_DIGEST_LENGTH*2+2;
// char hex[hex_len];
// for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
// snprintf(&hex[i*2], hex_len-i*2, "%02x", cHMAC[i]);
// }
// NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
// NSString *hash = [Base64 encode:HMAC];
//2.
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64Encoding];
//3.
// NSString *hash;
//
// NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
//
// for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
// [output appendFormat:@"%02x", cHMAC[i]];
// hash = output;
//
//4. amazaon
// CCHmacContext context;
// const char *keyCString = [key cStringUsingEncoding:NSASCIIStringEncoding];
// NSData *d = [data dataUsingEncoding:NSASCIIStringEncoding];
// CCHmacInit(&context, kCCHmacAlgSHA256, keyCString, strlen(keyCString));
// CCHmacUpdate(&context, [d bytes], [d length]);
//
// // Both SHA1 and SHA256 will fit in here
// unsigned char digestRaw[CC_SHA256_DIGEST_LENGTH];
// int digestLength = CC_SHA256_DIGEST_LENGTH;
// CCHmacFinal(&context, digestRaw);
//
// NSData *digestData = [NSData dataWithBytes:digestRaw length:digestLength];
//
// NSString *hash = [digestData base64Encoding];
//5. amazon
// CCHmacContext context;
// const char *keyCString = [key cStringUsingEncoding:NSASCIIStringEncoding];
// NSData *d = [data dataUsingEncoding:NSASCIIStringEncoding];
// CCHmacInit(&context, kCCHmacAlgSHA256, keyCString, strlen(keyCString));
// CCHmacUpdate(&context, [d bytes], [d length]);
//
// unsigned char digestRaw[CC_SHA256_DIGEST_LENGTH];
// int digestLength = CC_SHA256_DIGEST_LENGTH;
//
// CCHmacFinal(&context, digestRaw);
//
// NSData *HMAC = [[NSData alloc] initWithBytes:digestRaw length:digestLength];
// NSString *hash = [HMAC base64Encoding];
//6.
// const unsigned int blockSize = CC_SHA256_BLOCK_BYTES;
// char ipad[blockSize], opad[blockSize], keypad[blockSize];
// unsigned int keyLen = strlen(cKey);
// CC_SHA256_CTX ctxt;
// if(keyLen > blockSize) {
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, cKey, keyLen);
// CC_SHA256_Final((unsigned char *)keypad, &ctxt);
// keyLen = CC_SHA256_DIGEST_LENGTH;
// } else {
// memcpy(keypad, cKey, keyLen);
// }
// memset(ipad, 0x36, blockSize);
// memset(opad, 0x5c, blockSize);
//
// int i;
// for(i = 0; i < keyLen; i++) {
// ipad[i] ^= keypad[i];
// opad[i] ^= keypad[i];
// }
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, ipad, blockSize);
// CC_SHA256_Update(&ctxt, cData, strlen(cData));
// unsigned char sha256[CC_SHA256_DIGEST_LENGTH];
// CC_SHA256_Final(sha256, &ctxt);
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, opad, blockSize);
// CC_SHA256_Update(&ctxt, sha256, CC_SHA256_DIGEST_LENGTH);
// CC_SHA256_Final(sha256, &ctxt);
//
// const unsigned int hex_len = CC_SHA256_DIGEST_LENGTH*2+2;
// char hex[hex_len];
// for(i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
// snprintf(&hex[i*2], hex_len-i*2, "%02x", sha256[i]);
// }
//
// NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
// NSString *hash = [Base64 encode:HMAC];
// [HMAC release];
return hash;
}
{
NSString *key = kSecrectKey;
NSString *data = stringToSign;
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [stringToSign cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
//1
// const unsigned int hex_len = CC_SHA256_DIGEST_LENGTH*2+2;
// char hex[hex_len];
// for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
// snprintf(&hex[i*2], hex_len-i*2, "%02x", cHMAC[i]);
// }
// NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
// NSString *hash = [Base64 encode:HMAC];
//2.
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64Encoding];
//3.
// NSString *hash;
//
// NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
//
// for(int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++)
// [output appendFormat:@"%02x", cHMAC[i]];
// hash = output;
//
//4. amazaon
// CCHmacContext context;
// const char *keyCString = [key cStringUsingEncoding:NSASCIIStringEncoding];
// NSData *d = [data dataUsingEncoding:NSASCIIStringEncoding];
// CCHmacInit(&context, kCCHmacAlgSHA256, keyCString, strlen(keyCString));
// CCHmacUpdate(&context, [d bytes], [d length]);
//
// // Both SHA1 and SHA256 will fit in here
// unsigned char digestRaw[CC_SHA256_DIGEST_LENGTH];
// int digestLength = CC_SHA256_DIGEST_LENGTH;
// CCHmacFinal(&context, digestRaw);
//
// NSData *digestData = [NSData dataWithBytes:digestRaw length:digestLength];
//
// NSString *hash = [digestData base64Encoding];
//5. amazon
// CCHmacContext context;
// const char *keyCString = [key cStringUsingEncoding:NSASCIIStringEncoding];
// NSData *d = [data dataUsingEncoding:NSASCIIStringEncoding];
// CCHmacInit(&context, kCCHmacAlgSHA256, keyCString, strlen(keyCString));
// CCHmacUpdate(&context, [d bytes], [d length]);
//
// unsigned char digestRaw[CC_SHA256_DIGEST_LENGTH];
// int digestLength = CC_SHA256_DIGEST_LENGTH;
//
// CCHmacFinal(&context, digestRaw);
//
// NSData *HMAC = [[NSData alloc] initWithBytes:digestRaw length:digestLength];
// NSString *hash = [HMAC base64Encoding];
//6.
// const unsigned int blockSize = CC_SHA256_BLOCK_BYTES;
// char ipad[blockSize], opad[blockSize], keypad[blockSize];
// unsigned int keyLen = strlen(cKey);
// CC_SHA256_CTX ctxt;
// if(keyLen > blockSize) {
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, cKey, keyLen);
// CC_SHA256_Final((unsigned char *)keypad, &ctxt);
// keyLen = CC_SHA256_DIGEST_LENGTH;
// } else {
// memcpy(keypad, cKey, keyLen);
// }
// memset(ipad, 0x36, blockSize);
// memset(opad, 0x5c, blockSize);
//
// int i;
// for(i = 0; i < keyLen; i++) {
// ipad[i] ^= keypad[i];
// opad[i] ^= keypad[i];
// }
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, ipad, blockSize);
// CC_SHA256_Update(&ctxt, cData, strlen(cData));
// unsigned char sha256[CC_SHA256_DIGEST_LENGTH];
// CC_SHA256_Final(sha256, &ctxt);
//
// CC_SHA256_Init(&ctxt);
// CC_SHA256_Update(&ctxt, opad, blockSize);
// CC_SHA256_Update(&ctxt, sha256, CC_SHA256_DIGEST_LENGTH);
// CC_SHA256_Final(sha256, &ctxt);
//
// const unsigned int hex_len = CC_SHA256_DIGEST_LENGTH*2+2;
// char hex[hex_len];
// for(i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
// snprintf(&hex[i*2], hex_len-i*2, "%02x", sha256[i]);
// }
//
// NSData *HMAC = [[NSData alloc] initWithBytes:hex length:strlen(hex)];
// NSString *hash = [Base64 encode:HMAC];
// [HMAC release];
return hash;
}