This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade to Digest::SHA 5.45.
[perl5.git] / ext / Digest / SHA / src / hmacxtra.c
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)