From 07c0ade959aa53fa790625b73f6bfd39db5dc62c Mon Sep 17 00:00:00 2001 From: Remmelt Koenes Date: Wed, 24 Sep 2014 12:02:57 +0200 Subject: [PATCH] Fixed HMAC algorithm so support all CCHmacAlgorithm types. --- CommonCrypto/NSData+CommonCrypto.m | 38 ++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/CommonCrypto/NSData+CommonCrypto.m b/CommonCrypto/NSData+CommonCrypto.m index 593b151..ee9bfec 100644 --- a/CommonCrypto/NSData+CommonCrypto.m +++ b/CommonCrypto/NSData+CommonCrypto.m @@ -531,11 +531,45 @@ - (NSData *) HMACWithAlgorithm: (CCHmacAlgorithm) algorithm key: (id) key else keyData = (NSData *) key; + NSInteger digestLength = 0; + + switch (algorithm) { + case kCCHmacAlgSHA1: + digestLength = CC_SHA1_DIGEST_LENGTH; + break; + + case kCCHmacAlgMD5: + digestLength = CC_MD5_DIGEST_LENGTH; + break; + + case kCCHmacAlgSHA256: + digestLength = CC_SHA256_DIGEST_LENGTH; + break; + + case kCCHmacAlgSHA384: + digestLength = CC_SHA384_DIGEST_LENGTH; + break; + + case kCCHmacAlgSHA512: + digestLength = CC_SHA512_DIGEST_LENGTH; + break; + + case kCCHmacAlgSHA224: + digestLength = CC_SHA224_DIGEST_LENGTH; + break; + + default: + NSAssert(NO, @"Unkown CCHmacAlgorithm, could not detect digest length"); + break; + } + + // this could be either CC_SHA1_DIGEST_LENGTH or CC_MD5_DIGEST_LENGTH. SHA1 is larger. - unsigned char buf[CC_SHA1_DIGEST_LENGTH]; + unsigned char buf[digestLength]; CCHmac( algorithm, [keyData bytes], [keyData length], [self bytes], [self length], buf ); - return ( [NSData dataWithBytes: buf length: (algorithm == kCCHmacAlgMD5 ? CC_MD5_DIGEST_LENGTH : CC_SHA1_DIGEST_LENGTH)] ); + return ( [NSData dataWithBytes: buf length: digestLength] ); + } @end