Fix for HMAC.
[openssl.git] / crypto / hmac / hmac.c
index fb091299633dbd243a7a64ae31ee93ba99caa5ee..e1ec79e09337c1ecbcb9aa9e0760d0139011588e 100644 (file)
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#include "hmac.h"
+#include <openssl/hmac.h>
 
-void HMAC_Init(ctx,key,len,md)
-HMAC_CTX *ctx;
-unsigned char *key;
-int len;
-EVP_MD *md;
+void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
+              const EVP_MD *md)
        {
        int i,j,reset=0;
        unsigned char pad[HMAC_MAX_MD_CBLOCK];
@@ -91,9 +88,11 @@ EVP_MD *md;
                else
                        {
                        memcpy(ctx->key,key,len);
-                       memset(&(ctx->key[len]),0,sizeof(ctx->key)-len);
                        ctx->key_length=len;
                        }
+               if(ctx->key_length != HMAC_MAX_MD_CBLOCK)
+                       memset(&ctx->key[ctx->key_length], 0,
+                               HMAC_MAX_MD_CBLOCK - ctx->key_length);
                }
 
        if (reset)      
@@ -112,18 +111,12 @@ EVP_MD *md;
        memcpy(&ctx->md_ctx,&ctx->i_ctx,sizeof(ctx->i_ctx));
        }
 
-void HMAC_Update(ctx,data,len)
-HMAC_CTX *ctx;
-unsigned char *data;
-int len;
+void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len)
        {
        EVP_DigestUpdate(&(ctx->md_ctx),data,len);
        }
 
-void HMAC_Final(ctx,md,len)
-HMAC_CTX *ctx;
-unsigned char *md;
-unsigned int *len;
+void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
        {
        int j;
        unsigned int i;
@@ -137,20 +130,14 @@ unsigned int *len;
        EVP_DigestFinal(&(ctx->md_ctx),md,len);
        }
 
-void HMAC_cleanup(ctx)
-HMAC_CTX *ctx;
+void HMAC_cleanup(HMAC_CTX *ctx)
        {
        memset(ctx,0,sizeof(HMAC_CTX));
        }
 
-unsigned char *HMAC(evp_md,key,key_len,d,n,md,md_len)
-EVP_MD *evp_md;
-unsigned char *key;
-int key_len;
-unsigned char *d;
-int n;
-unsigned char *md;
-unsigned int *md_len;
+unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
+                   const unsigned char *d, int n, unsigned char *md,
+                   unsigned int *md_len)
        {
        HMAC_CTX c;
        static unsigned char m[EVP_MAX_MD_SIZE];