source: trunk/essentials/net-misc/wget/src/gen-md5.c

Last change on this file was 3440, checked in by bird, 18 years ago

wget 1.10.2

File size: 3.6 KB
Line 
1/* General MD5 support.
2 Copyright (C) 2001 Free Software Foundation, Inc.
3
4This file is part of GNU Wget.
5
6GNU Wget is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11GNU Wget is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License
17along with Wget; if not, write to the Free Software
18Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
19
20In addition, as a special exception, the Free Software Foundation
21gives permission to link the code of its release of Wget with the
22OpenSSL project's "OpenSSL" library (or with modified versions of it
23that use the same license as the "OpenSSL" library), and distribute
24the linked executables. You must obey the GNU General Public License
25in all respects for all of the code used other than "OpenSSL". If you
26modify this file, you may extend this exception to your version of the
27file, but you are not obligated to do so. If you do not wish to do
28so, delete this exception statement from your version. */
29
30#include <config.h>
31#include "wget.h"
32
33#include "gen-md5.h"
34
35#ifdef HAVE_BUILTIN_MD5
36# include <gnu-md5.h>
37typedef struct md5_ctx gen_md5_context_imp;
38#endif
39
40#ifdef HAVE_SOLARIS_MD5
41# include <md5.h>
42typedef MD5_CTX gen_md5_context_imp;
43#endif
44
45#ifdef HAVE_OPENSSL_MD5
46# include <openssl/md5.h>
47typedef MD5_CTX gen_md5_context_imp;
48#endif
49
50struct gen_md5_context {
51 gen_md5_context_imp imp;
52};
53
54/* Originally I planned for these to be macros, but that's very hard
55 because some of these MD5 implementations use the same names for
56 their types. For example, it is impossible to include <md5.h> and
57 <openssl/ssl.h> on Solaris, because the latter includes its own MD5
58 implementation, which clashes with <md5.h>. */
59
60int
61gen_md5_context_size (void)
62{
63 return sizeof (struct gen_md5_context);
64}
65
66void
67gen_md5_init (gen_md5_context *ctx)
68{
69 gen_md5_context_imp *ctx_imp = &ctx->imp;
70
71#ifdef HAVE_BUILTIN_MD5
72 md5_init_ctx (ctx_imp);
73#endif
74
75#ifdef HAVE_SOLARIS_MD5
76 MD5Init (ctx_imp);
77#endif
78
79#ifdef HAVE_OPENSSL_MD5
80 MD5_Init (ctx_imp);
81#endif
82}
83
84void
85gen_md5_update (unsigned const char *buffer, int len, gen_md5_context *ctx)
86{
87 gen_md5_context_imp *ctx_imp = &ctx->imp;
88
89#ifdef HAVE_BUILTIN_MD5
90 md5_process_bytes (buffer, len, ctx_imp);
91#endif
92
93#ifdef HAVE_SOLARIS_MD5
94 MD5Update (ctx_imp, (unsigned char *)buffer, len);
95#endif
96
97#ifdef HAVE_OPENSSL_MD5
98 MD5_Update (ctx_imp, buffer, len);
99#endif
100}
101
102void
103gen_md5_finish (gen_md5_context *ctx, unsigned char *result)
104{
105 gen_md5_context_imp *ctx_imp = &ctx->imp;
106
107#ifdef HAVE_BUILTIN_MD5
108 md5_finish_ctx (ctx_imp, result);
109#endif
110
111#ifdef HAVE_SOLARIS_MD5
112 MD5Final (result, ctx_imp);
113#endif
114
115#ifdef HAVE_OPENSSL_MD5
116 MD5_Final (result, ctx_imp);
117#endif
118}
119
120#if 0
121/* A debugging function for checking whether an MD5 library works. */
122
123#include "gen-md5.h"
124
125char *
126debug_test_md5 (char *buf)
127{
128 unsigned char raw[16];
129 static char res[33];
130 unsigned char *p1;
131 char *p2;
132 int cnt;
133 ALLOCA_MD5_CONTEXT (ctx);
134
135 gen_md5_init (ctx);
136 gen_md5_update ((unsigned char *)buf, strlen (buf), ctx);
137 gen_md5_finish (ctx, raw);
138
139 p1 = raw;
140 p2 = res;
141 cnt = 16;
142 while (cnt--)
143 {
144 *p2++ = XNUM_TO_digit (*p1 >> 4);
145 *p2++ = XNUM_TO_digit (*p1 & 0xf);
146 ++p1;
147 }
148 *p2 = '\0';
149
150 return res;
151}
152#endif
Note: See TracBrowser for help on using the repository browser.