summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/hmac
diff options
context:
space:
mode:
authorryker <>1998-10-05 20:13:14 +0000
committerryker <>1998-10-05 20:13:14 +0000
commitaeeae06a79815dc190061534d47236cec09f9e32 (patch)
tree851692b9c2f9c04f077666855641900f19fdb217 /src/lib/libcrypto/hmac
parenta4f79641824cbf9f60ca9d1168d1fcc46717a82a (diff)
downloadopenbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.gz
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.tar.bz2
openbsd-aeeae06a79815dc190061534d47236cec09f9e32.zip
Import of SSLeay-0.9.0b with RSA and IDEA stubbed + OpenBSD build
functionality for shared libs. Note that routines such as sslv2_init and friends that use RSA will not work due to lack of RSA in this library. Needs documentation and help from ports for easy upgrade to full functionality where legally possible.
Diffstat (limited to 'src/lib/libcrypto/hmac')
-rw-r--r--src/lib/libcrypto/hmac/hmac.c165
-rw-r--r--src/lib/libcrypto/hmac/hmac.h106
2 files changed, 271 insertions, 0 deletions
diff --git a/src/lib/libcrypto/hmac/hmac.c b/src/lib/libcrypto/hmac/hmac.c
new file mode 100644
index 0000000000..fb09129963
--- /dev/null
+++ b/src/lib/libcrypto/hmac/hmac.c
@@ -0,0 +1,165 @@
1/* crypto/hmac/hmac.c */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58#include <stdio.h>
59#include <stdlib.h>
60#include <string.h>
61#include "hmac.h"
62
63void HMAC_Init(ctx,key,len,md)
64HMAC_CTX *ctx;
65unsigned char *key;
66int len;
67EVP_MD *md;
68 {
69 int i,j,reset=0;
70 unsigned char pad[HMAC_MAX_MD_CBLOCK];
71
72 if (md != NULL)
73 {
74 reset=1;
75 ctx->md=md;
76 }
77 else
78 md=ctx->md;
79
80 if (key != NULL)
81 {
82 reset=1;
83 j=EVP_MD_block_size(md);
84 if (j < len)
85 {
86 EVP_DigestInit(&ctx->md_ctx,md);
87 EVP_DigestUpdate(&ctx->md_ctx,key,len);
88 EVP_DigestFinal(&(ctx->md_ctx),ctx->key,
89 &ctx->key_length);
90 }
91 else
92 {
93 memcpy(ctx->key,key,len);
94 memset(&(ctx->key[len]),0,sizeof(ctx->key)-len);
95 ctx->key_length=len;
96 }
97 }
98
99 if (reset)
100 {
101 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
102 pad[i]=0x36^ctx->key[i];
103 EVP_DigestInit(&ctx->i_ctx,md);
104 EVP_DigestUpdate(&ctx->i_ctx,pad,EVP_MD_block_size(md));
105
106 for (i=0; i<HMAC_MAX_MD_CBLOCK; i++)
107 pad[i]=0x5c^ctx->key[i];
108 EVP_DigestInit(&ctx->o_ctx,md);
109 EVP_DigestUpdate(&ctx->o_ctx,pad,EVP_MD_block_size(md));
110 }
111
112 memcpy(&ctx->md_ctx,&ctx->i_ctx,sizeof(ctx->i_ctx));
113 }
114
115void HMAC_Update(ctx,data,len)
116HMAC_CTX *ctx;
117unsigned char *data;
118int len;
119 {
120 EVP_DigestUpdate(&(ctx->md_ctx),data,len);
121 }
122
123void HMAC_Final(ctx,md,len)
124HMAC_CTX *ctx;
125unsigned char *md;
126unsigned int *len;
127 {
128 int j;
129 unsigned int i;
130 unsigned char buf[EVP_MAX_MD_SIZE];
131
132 j=EVP_MD_block_size(ctx->md);
133
134 EVP_DigestFinal(&(ctx->md_ctx),buf,&i);
135 memcpy(&(ctx->md_ctx),&(ctx->o_ctx),sizeof(ctx->o_ctx));
136 EVP_DigestUpdate(&(ctx->md_ctx),buf,i);
137 EVP_DigestFinal(&(ctx->md_ctx),md,len);
138 }
139
140void HMAC_cleanup(ctx)
141HMAC_CTX *ctx;
142 {
143 memset(ctx,0,sizeof(HMAC_CTX));
144 }
145
146unsigned char *HMAC(evp_md,key,key_len,d,n,md,md_len)
147EVP_MD *evp_md;
148unsigned char *key;
149int key_len;
150unsigned char *d;
151int n;
152unsigned char *md;
153unsigned int *md_len;
154 {
155 HMAC_CTX c;
156 static unsigned char m[EVP_MAX_MD_SIZE];
157
158 if (md == NULL) md=m;
159 HMAC_Init(&c,key,key_len,evp_md);
160 HMAC_Update(&c,d,n);
161 HMAC_Final(&c,md,md_len);
162 HMAC_cleanup(&c);
163 return(md);
164 }
165
diff --git a/src/lib/libcrypto/hmac/hmac.h b/src/lib/libcrypto/hmac/hmac.h
new file mode 100644
index 0000000000..e6b43f52c4
--- /dev/null
+++ b/src/lib/libcrypto/hmac/hmac.h
@@ -0,0 +1,106 @@
1/* crypto/hmac/hmac.h */
2/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
3 * All rights reserved.
4 *
5 * This package is an SSL implementation written
6 * by Eric Young (eay@cryptsoft.com).
7 * The implementation was written so as to conform with Netscapes SSL.
8 *
9 * This library is free for commercial and non-commercial use as long as
10 * the following conditions are aheared to. The following conditions
11 * apply to all code found in this distribution, be it the RC4, RSA,
12 * lhash, DES, etc., code; not just the SSL code. The SSL documentation
13 * included with this distribution is covered by the same copyright terms
14 * except that the holder is Tim Hudson (tjh@cryptsoft.com).
15 *
16 * Copyright remains Eric Young's, and as such any Copyright notices in
17 * the code are not to be removed.
18 * If this package is used in a product, Eric Young should be given attribution
19 * as the author of the parts of the library used.
20 * This can be in the form of a textual message at program startup or
21 * in documentation (online or textual) provided with the package.
22 *
23 * Redistribution and use in source and binary forms, with or without
24 * modification, are permitted provided that the following conditions
25 * are met:
26 * 1. Redistributions of source code must retain the copyright
27 * notice, this list of conditions and the following disclaimer.
28 * 2. Redistributions in binary form must reproduce the above copyright
29 * notice, this list of conditions and the following disclaimer in the
30 * documentation and/or other materials provided with the distribution.
31 * 3. All advertising materials mentioning features or use of this software
32 * must display the following acknowledgement:
33 * "This product includes cryptographic software written by
34 * Eric Young (eay@cryptsoft.com)"
35 * The word 'cryptographic' can be left out if the rouines from the library
36 * being used are not cryptographic related :-).
37 * 4. If you include any Windows specific code (or a derivative thereof) from
38 * the apps directory (application code) you must include an acknowledgement:
39 * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
40 *
41 * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
42 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
43 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
44 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
45 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
46 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
47 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
48 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
49 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
50 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
51 * SUCH DAMAGE.
52 *
53 * The licence and distribution terms for any publically available version or
54 * derivative of this code cannot be changed. i.e. this code cannot simply be
55 * copied and put under another distribution licence
56 * [including the GNU Public Licence.]
57 */
58#ifndef HEADER_HMAC_H
59#define HEADER_HMAC_H
60
61#ifdef __cplusplus
62extern "C" {
63#endif
64
65#include "evp.h"
66
67#define HMAC_MAX_MD_CBLOCK 64
68
69typedef struct hmac_ctx_st
70 {
71 EVP_MD *md;
72 EVP_MD_CTX md_ctx;
73 EVP_MD_CTX i_ctx;
74 EVP_MD_CTX o_ctx;
75 unsigned int key_length;
76 unsigned char key[HMAC_MAX_MD_CBLOCK];
77 } HMAC_CTX;
78
79#define HMAC_size(e) (EVP_MD_size((e)->md))
80
81#ifndef NOPROTO
82
83void HMAC_Init(HMAC_CTX *ctx, unsigned char *key, int len,
84 EVP_MD *md);
85void HMAC_Update(HMAC_CTX *ctx,unsigned char *key, int len);
86void HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
87void HMAC_cleanup(HMAC_CTX *ctx);
88unsigned char *HMAC(EVP_MD *evp_md, unsigned char *key, int key_len,
89 unsigned char *d, int n, unsigned char *md, unsigned int *md_len);
90
91
92#else
93
94void HMAC_Init();
95void HMAC_Update();
96void HMAC_Final();
97void HMAC_cleanup();
98unsigned char *HMAC();
99
100#endif
101
102#ifdef __cplusplus
103}
104#endif
105
106#endif