3132258ee40339712f65e3bab9b3f76fc02b6adb chinhli Sun Dec 1 23:39:04 2013 -0800 created to have hmacSha1() and hmacMd5() functions in kent/src/lib tocalculate openssl keyed-hash message authentication code (HMAC) diff --git src/lib/hmac.c src/lib/hmac.c new file mode 100644 index 0000000..ab0b3ad --- /dev/null +++ src/lib/hmac.c @@ -0,0 +1,58 @@ +/* Calculate an openssl keyed-hash message authentication code (HMAC) */ +// You may use other openssl hash engines. e.g EVP_md5(), EVP_sha224, +// EVP_sha512, etc +// Be careful of the length of string with the choosen hash engine. +// SHA1 needed 20 characters, MD5 needed 16 characters. +// Change the length accordingly with your choosen hash engine + +#ifdef USE_SSL +#include "openssl/hmac.h" +#include "openssl/evp.h" +#include "common.h" + +char *hmacSha1(char *key, char *data) +/* Calculate a openssl SHA1 keyed-hash message authentication code (HMAC) */ +{ +unsigned char* digest; +digest=HMAC(EVP_sha1(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL); +char hmacStr[40]; +int i; +for(i = 0; i < 20; i++) + sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]); +return cloneString(hmacStr); +} + +char *hmacMd5(char *key, char *data) +/* Calculate a openssl MD5 keyed-hash message authentication code (HMAC) */ +{ +unsigned char* digest; +digest=HMAC(EVP_md5(), key, strlen(key), (unsigned char*)data, strlen(data), NULL, NULL); +//printf("Raw mdr digest: %s\n", digest); +char hmacStr[32]; +int i; +for(i = 0; i < 16; i++) + sprintf(&hmacStr[i*2], "%02x", (unsigned int)digest[i]); +return cloneString(hmacStr); +} + +#else // --------- no USE_SSL ==> errAbort with message that openssl is required -------------- + +#include "common.h" +#include "errabort.h" +#define NEED_OPENSSL "kent/src must be recompiled with openssl libs and USE_SSL=1 in order for this to work." + +char *hmacSha1(char *key, char *data) +/* This is just a warning that appears in the absence of USE_SSL. Real + * implementation is above! */ +{ +errAbort(NEED_OPENSSL); +} + +char *hmacMd5(char *key, char *data) +/* This is just a warning that appears in the absence of USE_SSL. Real + * implementation is above! */ +{ +errAbort(NEED_OPENSSL); +} + +#endif