- digest->key = xrealloc(digest->key, len);
- memcpy(digest->key, key, len);
- digest->keylength = len;
+#ifdef HAVE_HMAC_CTX_NEW
+ digest->hmac_ctx = HMAC_CTX_new();
+ HMAC_Init_ex(digest->hmac_ctx, key, len, digest->digest, NULL);
+#else
+ digest->hmac_ctx = xzalloc(sizeof(*digest->hmac_ctx));
+ HMAC_Init(digest->hmac_ctx, key, len, digest->digest);
+#endif
+
+ if(!digest->hmac_ctx) {
+ abort();
+ }
+