1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
#include <stdio.h>
#include <string.h>
#include "sha.h"
static unsigned char *shacomp(alg, fmt, bitstr, bitcnt)
int alg;
int fmt;
unsigned char *bitstr;
unsigned long bitcnt;
{
SHA *s;
static unsigned char digest[SHA_MAX_HEX_LEN+1];
unsigned char *ret = digest;
if ((s = shaopen(alg)) == NULL)
return(NULL);
shawrite(bitstr, bitcnt, s);
shafinish(s);
if (fmt == SHA_FMT_RAW)
memcpy(digest, shadigest(s), s->digestlen);
else if (fmt == SHA_FMT_HEX)
strcpy((char *) digest, shahex(s));
else if (fmt == SHA_FMT_BASE64)
strcpy((char *) digest, shabase64(s));
else
ret = NULL;
shaclose(s);
return(ret);
}
#define SHA_DIRECT(type, name, alg, fmt) \
type name(bitstr, bitcnt) \
unsigned char *bitstr; \
unsigned long bitcnt; \
{ \
return((type) shacomp(alg, fmt, bitstr, bitcnt)); \
}
SHA_DIRECT(unsigned char *, sha1digest, SHA1, SHA_FMT_RAW)
SHA_DIRECT(char *, sha1hex, SHA1, SHA_FMT_HEX)
SHA_DIRECT(char *, sha1base64, SHA1, SHA_FMT_BASE64)
SHA_DIRECT(unsigned char *, sha224digest, SHA224, SHA_FMT_RAW)
SHA_DIRECT(char *, sha224hex, SHA224, SHA_FMT_HEX)
SHA_DIRECT(char *, sha224base64, SHA224, SHA_FMT_BASE64)
SHA_DIRECT(unsigned char *, sha256digest, SHA256, SHA_FMT_RAW)
SHA_DIRECT(char *, sha256hex, SHA256, SHA_FMT_HEX)
SHA_DIRECT(char *, sha256base64, SHA256, SHA_FMT_BASE64)
SHA_DIRECT(unsigned char *, sha384digest, SHA384, SHA_FMT_RAW)
SHA_DIRECT(char *, sha384hex, SHA384, SHA_FMT_HEX)
SHA_DIRECT(char *, sha384base64, SHA384, SHA_FMT_BASE64)
SHA_DIRECT(unsigned char *, sha512digest, SHA512, SHA_FMT_RAW)
SHA_DIRECT(char *, sha512hex, SHA512, SHA_FMT_HEX)
SHA_DIRECT(char *, sha512base64, SHA512, SHA_FMT_BASE64)
|