Commit | Line | Data |
05128928 |
1 | #include <stdio.h> |
2 | #include <string.h> |
3 | #include "hmac.h" |
4 | |
5 | static unsigned char *hmaccomp(alg, fmt, bitstr, bitcnt, key, keylen) |
6 | int alg; |
7 | int fmt; |
8 | unsigned char *bitstr; |
9 | unsigned long bitcnt; |
10 | unsigned char *key; |
11 | unsigned int keylen; |
12 | { |
13 | HMAC *h; |
14 | static unsigned char digest[SHA_MAX_HEX_LEN+1]; |
15 | unsigned char *ret = digest; |
16 | |
17 | if ((h = hmacopen(alg, key, keylen)) == NULL) |
18 | return(NULL); |
19 | hmacwrite(bitstr, bitcnt, h); |
20 | hmacfinish(h); |
21 | if (fmt == SHA_FMT_RAW) |
22 | memcpy(digest, hmacdigest(h), h->osha->digestlen); |
23 | else if (fmt == SHA_FMT_HEX) |
24 | strcpy((char *) digest, hmachex(h)); |
25 | else if (fmt == SHA_FMT_BASE64) |
26 | strcpy((char *) digest, hmacbase64(h)); |
27 | else |
28 | ret = NULL; |
29 | hmacclose(h); |
30 | return(ret); |
31 | } |
32 | |
33 | #define HMAC_DIRECT(type, name, alg, fmt) \ |
34 | type name(bitstr, bitcnt, key, keylen) \ |
35 | unsigned char *bitstr; \ |
36 | unsigned long bitcnt; \ |
37 | unsigned char *key; \ |
38 | unsigned int keylen; \ |
39 | { \ |
40 | return((type) hmaccomp(alg, fmt, bitstr, bitcnt, \ |
41 | key, keylen)); \ |
42 | } |
43 | |
44 | HMAC_DIRECT(unsigned char *, hmac1digest, SHA1, SHA_FMT_RAW) |
45 | HMAC_DIRECT(char *, hmac1hex, SHA1, SHA_FMT_HEX) |
46 | HMAC_DIRECT(char *, hmac1base64, SHA1, SHA_FMT_BASE64) |
47 | |
48 | HMAC_DIRECT(unsigned char *, hmac224digest, SHA224, SHA_FMT_RAW) |
49 | HMAC_DIRECT(char *, hmac224hex, SHA224, SHA_FMT_HEX) |
50 | HMAC_DIRECT(char *, hmac224base64, SHA224, SHA_FMT_BASE64) |
51 | |
52 | HMAC_DIRECT(unsigned char *, hmac256digest, SHA256, SHA_FMT_RAW) |
53 | HMAC_DIRECT(char *, hmac256hex, SHA256, SHA_FMT_HEX) |
54 | HMAC_DIRECT(char *, hmac256base64, SHA256, SHA_FMT_BASE64) |
55 | |
56 | HMAC_DIRECT(unsigned char *, hmac384digest, SHA384, SHA_FMT_RAW) |
57 | HMAC_DIRECT(char *, hmac384hex, SHA384, SHA_FMT_HEX) |
58 | HMAC_DIRECT(char *, hmac384base64, SHA384, SHA_FMT_BASE64) |
59 | |
60 | HMAC_DIRECT(unsigned char *, hmac512digest, SHA512, SHA_FMT_RAW) |
61 | HMAC_DIRECT(char *, hmac512hex, SHA512, SHA_FMT_HEX) |
62 | HMAC_DIRECT(char *, hmac512base64, SHA512, SHA_FMT_BASE64) |