summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/hmac
diff options
context:
space:
mode:
authorbeck <>2002-05-15 02:29:21 +0000
committerbeck <>2002-05-15 02:29:21 +0000
commitb64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch)
treefa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libcrypto/hmac
parente471e1ea98d673597b182ea85f29e30c97cd08b5 (diff)
downloadopenbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz
openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2
openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libcrypto/hmac')
-rw-r--r--src/lib/libcrypto/hmac/Makefile.ssl25
-rw-r--r--src/lib/libcrypto/hmac/hmac.c51
-rw-r--r--src/lib/libcrypto/hmac/hmac.h12
-rw-r--r--src/lib/libcrypto/hmac/hmactest.c3
4 files changed, 55 insertions, 36 deletions
diff --git a/src/lib/libcrypto/hmac/Makefile.ssl b/src/lib/libcrypto/hmac/Makefile.ssl
index 326339a90d..899d67c43b 100644
--- a/src/lib/libcrypto/hmac/Makefile.ssl
+++ b/src/lib/libcrypto/hmac/Makefile.ssl
@@ -11,7 +11,8 @@ INSTALL_PREFIX=
11OPENSSLDIR= /usr/local/ssl 11OPENSSLDIR= /usr/local/ssl
12INSTALLTOP=/usr/local/ssl 12INSTALLTOP=/usr/local/ssl
13MAKE= make -f Makefile.ssl 13MAKE= make -f Makefile.ssl
14MAKEDEPEND= $(TOP)/util/domd $(TOP) 14MAKEDEPPROG= makedepend
15MAKEDEPEND= $(TOP)/util/domd $(TOP) -MD $(MAKEDEPPROG)
15MAKEFILE= Makefile.ssl 16MAKEFILE= Makefile.ssl
16AR= ar r 17AR= ar r
17 18
@@ -39,8 +40,7 @@ all: lib
39 40
40lib: $(LIBOBJ) 41lib: $(LIBOBJ)
41 $(AR) $(LIB) $(LIBOBJ) 42 $(AR) $(LIB) $(LIBOBJ)
42 @echo You may get an error following this line. Please ignore. 43 $(RANLIB) $(LIB) || echo Never mind.
43 - $(RANLIB) $(LIB)
44 @touch lib 44 @touch lib
45 45
46files: 46files:
@@ -80,17 +80,10 @@ clean:
80# DO NOT DELETE THIS LINE -- make depend depends on it. 80# DO NOT DELETE THIS LINE -- make depend depends on it.
81 81
82hmac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h 82hmac.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
83hmac.o: ../../include/openssl/blowfish.h ../../include/openssl/bn.h 83hmac.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
84hmac.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h 84hmac.o: ../../include/openssl/e_os2.h ../../include/openssl/evp.h
85hmac.o: ../../include/openssl/des.h ../../include/openssl/dh.h 85hmac.o: ../../include/openssl/hmac.h ../../include/openssl/obj_mac.h
86hmac.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
87hmac.o: ../../include/openssl/evp.h ../../include/openssl/hmac.h
88hmac.o: ../../include/openssl/idea.h ../../include/openssl/md2.h
89hmac.o: ../../include/openssl/md4.h ../../include/openssl/md5.h
90hmac.o: ../../include/openssl/mdc2.h ../../include/openssl/obj_mac.h
91hmac.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h 86hmac.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
92hmac.o: ../../include/openssl/opensslv.h ../../include/openssl/rc2.h 87hmac.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
93hmac.o: ../../include/openssl/rc4.h ../../include/openssl/rc5.h 88hmac.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
94hmac.o: ../../include/openssl/ripemd.h ../../include/openssl/rsa.h 89hmac.o: ../../include/openssl/symhacks.h hmac.c
95hmac.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
96hmac.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
diff --git a/src/lib/libcrypto/hmac/hmac.c b/src/lib/libcrypto/hmac/hmac.c
index e1ec79e093..026dbe8f66 100644
--- a/src/lib/libcrypto/hmac/hmac.c
+++ b/src/lib/libcrypto/hmac/hmac.c
@@ -60,8 +60,8 @@
60#include <string.h> 60#include <string.h>
61#include <openssl/hmac.h> 61#include <openssl/hmac.h>
62 62
63void HMAC_Init(HMAC_CTX *ctx, const void *key, int len, 63void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
64 const EVP_MD *md) 64 const EVP_MD *md, ENGINE *impl)
65 { 65 {
66 int i,j,reset=0; 66 int i,j,reset=0;
67 unsigned char pad[HMAC_MAX_MD_CBLOCK]; 67 unsigned char pad[HMAC_MAX_MD_CBLOCK];
@@ -70,8 +70,9 @@ void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
70 { 70 {
71 reset=1; 71 reset=1;
72 ctx->md=md; 72 ctx->md=md;
73 EVP_MD_CTX_init(&ctx->md_ctx);
73 } 74 }
74 else 75 else
75 md=ctx->md; 76 md=ctx->md;
76 77
77 if (key != NULL) 78 if (key != NULL)
@@ -80,9 +81,9 @@ void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
80 j=EVP_MD_block_size(md); 81 j=EVP_MD_block_size(md);
81 if (j < len) 82 if (j < len)
82 { 83 {
83 EVP_DigestInit(&ctx->md_ctx,md); 84 EVP_DigestInit_ex(&ctx->md_ctx,md, impl);
84 EVP_DigestUpdate(&ctx->md_ctx,key,len); 85 EVP_DigestUpdate(&ctx->md_ctx,key,len);
85 EVP_DigestFinal(&(ctx->md_ctx),ctx->key, 86 EVP_DigestFinal_ex(&(ctx->md_ctx),ctx->key,
86 &ctx->key_length); 87 &ctx->key_length);
87 } 88 }
88 else 89 else
@@ -99,21 +100,28 @@ void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
99 { 100 {
100 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++) 101 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
101 pad[i]=0x36^ctx->key[i]; 102 pad[i]=0x36^ctx->key[i];
102 EVP_DigestInit(&ctx->i_ctx,md); 103 EVP_DigestInit_ex(&ctx->i_ctx,md, impl);
103 EVP_DigestUpdate(&ctx->i_ctx,pad,EVP_MD_block_size(md)); 104 EVP_DigestUpdate(&ctx->i_ctx,pad,EVP_MD_block_size(md));
104 105
105 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++) 106 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
106 pad[i]=0x5c^ctx->key[i]; 107 pad[i]=0x5c^ctx->key[i];
107 EVP_DigestInit(&ctx->o_ctx,md); 108 EVP_DigestInit_ex(&ctx->o_ctx,md, impl);
108 EVP_DigestUpdate(&ctx->o_ctx,pad,EVP_MD_block_size(md)); 109 EVP_DigestUpdate(&ctx->o_ctx,pad,EVP_MD_block_size(md));
109 } 110 }
111 EVP_MD_CTX_copy_ex(&ctx->md_ctx,&ctx->i_ctx);
112 }
110 113
111 memcpy(&ctx->md_ctx,&ctx->i_ctx,sizeof(ctx->i_ctx)); 114void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
115 const EVP_MD *md)
116 {
117 if(key && md)
118 HMAC_CTX_init(ctx);
119 HMAC_Init_ex(ctx,key,len,md, NULL);
112 } 120 }
113 121
114void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len) 122void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len)
115 { 123 {
116 EVP_DigestUpdate(&(ctx->md_ctx),data,len); 124 EVP_DigestUpdate(&ctx->md_ctx,data,len);
117 } 125 }
118 126
119void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len) 127void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
@@ -124,15 +132,25 @@ void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len)
124 132
125 j=EVP_MD_block_size(ctx->md); 133 j=EVP_MD_block_size(ctx->md);
126 134
127 EVP_DigestFinal(&(ctx->md_ctx),buf,&i); 135 EVP_DigestFinal_ex(&ctx->md_ctx,buf,&i);
128 memcpy(&(ctx->md_ctx),&(ctx->o_ctx),sizeof(ctx->o_ctx)); 136 EVP_MD_CTX_copy_ex(&ctx->md_ctx,&ctx->o_ctx);
129 EVP_DigestUpdate(&(ctx->md_ctx),buf,i); 137 EVP_DigestUpdate(&ctx->md_ctx,buf,i);
130 EVP_DigestFinal(&(ctx->md_ctx),md,len); 138 EVP_DigestFinal_ex(&ctx->md_ctx,md,len);
139 }
140
141void HMAC_CTX_init(HMAC_CTX *ctx)
142 {
143 EVP_MD_CTX_init(&ctx->i_ctx);
144 EVP_MD_CTX_init(&ctx->o_ctx);
145 EVP_MD_CTX_init(&ctx->md_ctx);
131 } 146 }
132 147
133void HMAC_cleanup(HMAC_CTX *ctx) 148void HMAC_CTX_cleanup(HMAC_CTX *ctx)
134 { 149 {
135 memset(ctx,0,sizeof(HMAC_CTX)); 150 EVP_MD_CTX_cleanup(&ctx->i_ctx);
151 EVP_MD_CTX_cleanup(&ctx->o_ctx);
152 EVP_MD_CTX_cleanup(&ctx->md_ctx);
153 memset(ctx,0,sizeof *ctx);
136 } 154 }
137 155
138unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, 156unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
@@ -143,10 +161,11 @@ unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
143 static unsigned char m[EVP_MAX_MD_SIZE]; 161 static unsigned char m[EVP_MAX_MD_SIZE];
144 162
145 if (md == NULL) md=m; 163 if (md == NULL) md=m;
164 HMAC_CTX_init(&c);
146 HMAC_Init(&c,key,key_len,evp_md); 165 HMAC_Init(&c,key,key_len,evp_md);
147 HMAC_Update(&c,d,n); 166 HMAC_Update(&c,d,n);
148 HMAC_Final(&c,md,md_len); 167 HMAC_Final(&c,md,md_len);
149 HMAC_cleanup(&c); 168 HMAC_CTX_cleanup(&c);
150 return(md); 169 return(md);
151 } 170 }
152 171
diff --git a/src/lib/libcrypto/hmac/hmac.h b/src/lib/libcrypto/hmac/hmac.h
index 328bad2608..0364a1fcbd 100644
--- a/src/lib/libcrypto/hmac/hmac.h
+++ b/src/lib/libcrypto/hmac/hmac.h
@@ -58,7 +58,7 @@
58#ifndef HEADER_HMAC_H 58#ifndef HEADER_HMAC_H
59#define HEADER_HMAC_H 59#define HEADER_HMAC_H
60 60
61#ifdef NO_HMAC 61#ifdef OPENSSL_NO_HMAC
62#error HMAC is disabled. 62#error HMAC is disabled.
63#endif 63#endif
64 64
@@ -83,11 +83,17 @@ typedef struct hmac_ctx_st
83#define HMAC_size(e) (EVP_MD_size((e)->md)) 83#define HMAC_size(e) (EVP_MD_size((e)->md))
84 84
85 85
86void HMAC_CTX_init(HMAC_CTX *ctx);
87void HMAC_CTX_cleanup(HMAC_CTX *ctx);
88
89#define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx) /* deprecated */
90
86void HMAC_Init(HMAC_CTX *ctx, const void *key, int len, 91void HMAC_Init(HMAC_CTX *ctx, const void *key, int len,
87 const EVP_MD *md); 92 const EVP_MD *md); /* deprecated */
93void HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
94 const EVP_MD *md, ENGINE *impl);
88void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len); 95void HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, int len);
89void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); 96void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
90void HMAC_cleanup(HMAC_CTX *ctx);
91unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, 97unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len,
92 const unsigned char *d, int n, unsigned char *md, 98 const unsigned char *d, int n, unsigned char *md,
93 unsigned int *md_len); 99 unsigned int *md_len);
diff --git a/src/lib/libcrypto/hmac/hmactest.c b/src/lib/libcrypto/hmac/hmactest.c
index 4b56b8ee13..96d3beb8e6 100644
--- a/src/lib/libcrypto/hmac/hmactest.c
+++ b/src/lib/libcrypto/hmac/hmactest.c
@@ -60,7 +60,7 @@
60#include <string.h> 60#include <string.h>
61#include <stdlib.h> 61#include <stdlib.h>
62 62
63#ifdef NO_HMAC 63#ifdef OPENSSL_NO_HMAC
64int main(int argc, char *argv[]) 64int main(int argc, char *argv[])
65{ 65{
66 printf("No HMAC support\n"); 66 printf("No HMAC support\n");
@@ -68,6 +68,7 @@ int main(int argc, char *argv[])
68} 68}
69#else 69#else
70#include <openssl/hmac.h> 70#include <openssl/hmac.h>
71#include <openssl/md5.h>
71 72
72#ifdef CHARSET_EBCDIC 73#ifdef CHARSET_EBCDIC
73#include <openssl/ebcdic.h> 74#include <openssl/ebcdic.h>