Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
att
GitHub Repository: att/ast
Path: blob/master/src/lib/libsum/sum-lmd.c
1808 views
1
/***********************************************************************
2
* *
3
* This software is part of the ast package *
4
* Copyright (c) 1996-2011 AT&T Intellectual Property *
5
* and is licensed under the *
6
* Eclipse Public License, Version 1.0 *
7
* by AT&T Intellectual Property *
8
* *
9
* A copy of the License is available at *
10
* http://www.eclipse.org/org/documents/epl-v10.html *
11
* (with md5 checksum b35adb5213ca9657e911e9befb180842) *
12
* *
13
* Information and Software Systems Research *
14
* AT&T Research *
15
* Florham Park NJ *
16
* *
17
* Glenn Fowler <[email protected]> *
18
* *
19
***********************************************************************/
20
#pragma prototyped
21
22
/*
23
* sum(3) wrapper for solaris -lmd message digest library
24
*/
25
26
typedef void (*Lmd_init_f)(void*);
27
typedef void (*Lmd_update_f)(void*, const void*, size_t);
28
typedef void (*Lmd_final_f)(unsigned char*, void*);
29
30
#define _SUM_LMD_ \
31
_SUM_PUBLIC_ \
32
_SUM_PRIVATE_ \
33
Lmd_init_f initf; \
34
Lmd_update_f updatef; \
35
Lmd_final_f finalf; \
36
unsigned int datasize; \
37
unsigned char total[64]; \
38
unsigned char data[64];
39
40
typedef struct Lmd_s
41
{
42
_SUM_LMD_
43
struct
44
{
45
uintmax_t context;
46
} context;
47
} Lmd_t;
48
49
static int
50
lmd_init(Sum_t* p)
51
{
52
Lmd_t* lmd = (Lmd_t*)p;
53
54
(*lmd->initf)(&lmd->context);
55
return 0;
56
}
57
58
static int
59
lmd_block(Sum_t* p, const void* s, size_t n)
60
{
61
Lmd_t* lmd = (Lmd_t*)p;
62
63
(*lmd->updatef)(&lmd->context, s, n);
64
return 0;
65
}
66
67
static int
68
lmd_done(Sum_t* p)
69
{
70
register Lmd_t* lmd = (Lmd_t*)p;
71
register int i;
72
73
(*lmd->finalf)(lmd->data, &lmd->context);
74
for (i = 0; i < lmd->datasize; i++)
75
lmd->total[i] ^= lmd->data[i];
76
return 0;
77
}
78
79
static int
80
lmd_print(Sum_t* p, Sfio_t* sp, register int flags, size_t scale)
81
{
82
register Lmd_t* lmd = (Lmd_t*)p;
83
register unsigned char* d;
84
register int i;
85
86
d = (flags & SUM_TOTAL) ? lmd->total : lmd->data;
87
for (i = 0; i < lmd->datasize; i++)
88
sfprintf(sp, "%02x", d[i]);
89
return 0;
90
}
91
92
static int
93
lmd_data(Sum_t* p, Sumdata_t* data)
94
{
95
Lmd_t* lmd = (Lmd_t*)p;
96
97
data->size = lmd->datasize;
98
data->num = 0;
99
data->buf = lmd->data;
100
return 0;
101
}
102
103
#if _lib_MD4Init && _hdr_md4
104
105
#include <md4.h>
106
107
#define md4_description "RFC1320 MD4 message digest. Cryptographically weak. The block count is not printed."
108
#define md4_options "[+(version)?md4 (solaris -lmd) 2005-07-26]"
109
#define md4_match "md4|MD4"
110
#define md4_scale 0
111
#define md4_init lmd_init
112
#define md4_block lmd_block
113
#define md4_done lmd_done
114
#define md4_print lmd_print
115
#define md4_data lmd_data
116
117
typedef struct Md4_s
118
{
119
_SUM_LMD_
120
MD4_CTX context;
121
} Md4_t;
122
123
static Sum_t*
124
md4_open(const Method_t* method, const char* name)
125
{
126
Md4_t* lmd;
127
128
if (lmd = newof(0, Md4_t, 1, 0))
129
{
130
lmd->method = (Method_t*)method;
131
lmd->name = name;
132
lmd->datasize = 16;
133
lmd->initf = (Lmd_init_f)MD4Init;
134
lmd->updatef = (Lmd_update_f)MD4Update;
135
lmd->finalf = (Lmd_final_f)MD4Final;
136
md4_init((Sum_t*)lmd);
137
}
138
return (Sum_t*)lmd;
139
}
140
141
#endif
142
143
#if _lib_MD5Init && _hdr_md5
144
145
#include <md5.h>
146
147
#define md5_description "RFC1321 MD5 message digest. Cryptographically weak. The block count is not printed."
148
#define md5_options "[+(version)?md5 (solaris -lmd) 2005-07-26]"
149
#define md5_match "md5|MD5"
150
#define md5_scale 0
151
#define md5_init lmd_init
152
#define md5_block lmd_block
153
#define md5_done lmd_done
154
#define md5_print lmd_print
155
#define md5_data lmd_data
156
157
typedef struct Md5_s
158
{
159
_SUM_LMD_
160
MD5_CTX context;
161
} Md5_t;
162
163
static Sum_t*
164
md5_open(const Method_t* method, const char* name)
165
{
166
Md5_t* lmd;
167
168
if (lmd = newof(0, Md5_t, 1, 0))
169
{
170
lmd->method = (Method_t*)method;
171
lmd->name = name;
172
lmd->datasize = 16;
173
lmd->initf = (Lmd_init_f)MD5Init;
174
lmd->updatef = (Lmd_update_f)MD5Update;
175
lmd->finalf = (Lmd_final_f)MD5Final;
176
md5_init((Sum_t*)lmd);
177
}
178
return (Sum_t*)lmd;
179
}
180
181
#endif
182
183
#if _lib_SHA1Init && _hdr_sha1
184
185
#include <sha1.h>
186
187
#define sha1_description "RFC3174 / FIPS 180-1 SHA-1 secure hash algorithm 1. Cryptographically weak. The block count is not printed."
188
#define sha1_options "[+(version)?sha1 (solaris -lmd) 2005-07-26]"
189
#define sha1_match "sha1|SHA1|sha-1|SHA-1"
190
#define sha1_scale 0
191
#define sha1_init lmd_init
192
#define sha1_block lmd_block
193
#define sha1_done lmd_done
194
#define sha1_print lmd_print
195
#define sha1_data lmd_data
196
197
typedef struct Sha1_s
198
{
199
_SUM_LMD_
200
SHA1_CTX context;
201
unsigned char pad[1024]; /* XXX: who's bug is it? */
202
} Sha1_t;
203
204
static Sum_t*
205
sha1_open(const Method_t* method, const char* name)
206
{
207
Sha1_t* lmd;
208
209
if (lmd = newof(0, Sha1_t, 1, 0))
210
{
211
lmd->method = (Method_t*)method;
212
lmd->name = name;
213
lmd->datasize = 20;
214
lmd->initf = (Lmd_init_f)SHA1Init;
215
lmd->updatef = (Lmd_update_f)SHA1Update;
216
lmd->finalf = (Lmd_final_f)SHA1Final;
217
sha1_init((Sum_t*)lmd);
218
}
219
return (Sum_t*)lmd;
220
}
221
222
#endif
223
224
#if _lib_SHA2Init && _hdr_sha2
225
226
#include <sha2.h>
227
228
#define sha256_description "FIPS 180-2 SHA256 secure hash algorithm. The block count is not printed."
229
#define sha256_options "[+(version)?sha256 (solaris -lmd) 2005-07-26]"
230
#define sha256_match "sha256|sha-256|SHA256|SHA-256"
231
#define sha256_scale 0
232
#define sha256_init lmd_init
233
#define sha256_block lmd_block
234
#define sha256_done lmd_done
235
#define sha256_print lmd_print
236
#define sha256_data lmd_data
237
238
typedef struct Sha256_s
239
{
240
_SUM_LMD_
241
SHA256_CTX context;
242
} Sha256_t;
243
244
static Sum_t*
245
sha256_open(const Method_t* method, const char* name)
246
{
247
Sha256_t* lmd;
248
249
if (lmd = newof(0, Sha256_t, 1, 0))
250
{
251
lmd->method = (Method_t*)method;
252
lmd->name = name;
253
lmd->datasize = 32;
254
lmd->initf = (Lmd_init_f)SHA256Init;
255
lmd->updatef = (Lmd_update_f)SHA256Update;
256
lmd->finalf = (Lmd_final_f)SHA256Final;
257
sha256_init((Sum_t*)lmd);
258
}
259
return (Sum_t*)lmd;
260
}
261
262
#define sha384_description "FIPS 180-2 SHA384 secure hash algorithm. The block count is not printed."
263
#define sha384_options "[+(version)?sha384 (solaris -lmd) 2005-07-26]"
264
#define sha384_match "sha384|sha-384|SHA384|SHA-384"
265
#define sha384_scale 0
266
#define sha384_init lmd_init
267
#define sha384_block lmd_block
268
#define sha384_done lmd_done
269
#define sha384_print lmd_print
270
#define sha384_data lmd_data
271
272
typedef struct Sha384_s
273
{
274
_SUM_LMD_
275
SHA384_CTX context;
276
} Sha384_t;
277
278
static Sum_t*
279
sha384_open(const Method_t* method, const char* name)
280
{
281
Sha384_t* lmd;
282
283
if (lmd = newof(0, Sha384_t, 1, 0))
284
{
285
lmd->method = (Method_t*)method;
286
lmd->name = name;
287
lmd->datasize = 48;
288
lmd->initf = (Lmd_init_f)SHA384Init;
289
lmd->updatef = (Lmd_update_f)SHA384Update;
290
lmd->finalf = (Lmd_final_f)SHA384Final;
291
sha384_init((Sum_t*)lmd);
292
}
293
return (Sum_t*)lmd;
294
}
295
296
#define sha512_description "FIPS 180-2 SHA512 secure hash algorithm. The block count is not printed."
297
#define sha512_options "[+(version)?sha512 (solaris -lmd) 2005-07-26]"
298
#define sha512_match "sha512|sha-512|SHA512|SHA-512"
299
#define sha512_scale 0
300
#define sha512_init lmd_init
301
#define sha512_block lmd_block
302
#define sha512_done lmd_done
303
#define sha512_print lmd_print
304
#define sha512_data lmd_data
305
306
typedef struct Sha512_s
307
{
308
_SUM_LMD_
309
SHA512_CTX context;
310
} Sha512_t;
311
312
static Sum_t*
313
sha512_open(const Method_t* method, const char* name)
314
{
315
Sha512_t* lmd;
316
317
if (lmd = newof(0, Sha512_t, 1, 0))
318
{
319
lmd->method = (Method_t*)method;
320
lmd->name = name;
321
lmd->datasize = 64;
322
lmd->initf = (Lmd_init_f)SHA512Init;
323
lmd->updatef = (Lmd_update_f)SHA512Update;
324
lmd->finalf = (Lmd_final_f)SHA512Final;
325
sha512_init((Sum_t*)lmd);
326
}
327
return (Sum_t*)lmd;
328
}
329
330
#endif
331
332