Attempt to fix core-specific logic in IPC::Open2 tests
[p5sagit/p5-mst-13.2.git] / ext / Digest-SHA / src / hmacxtra.c
CommitLineData
05128928 1#include <stdio.h>
2#include <string.h>
3#include "hmac.h"
4
5static unsigned char *hmaccomp(alg, fmt, bitstr, bitcnt, key, keylen)
6int alg;
7int fmt;
8unsigned char *bitstr;
9unsigned long bitcnt;
10unsigned char *key;
11unsigned 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)
747da336 22 memcpy(digest, hmacdigest(h), h->osha->digestlen);
05128928 23 else if (fmt == SHA_FMT_HEX)
747da336 24 strcpy((char *) digest, hmachex(h));
05128928 25 else if (fmt == SHA_FMT_BASE64)
747da336 26 strcpy((char *) digest, hmacbase64(h));
05128928 27 else
28 ret = NULL;
29 hmacclose(h);
30 return(ret);
31}
32
33#define HMAC_DIRECT(type, name, alg, fmt) \
34type name(bitstr, bitcnt, key, keylen) \
35unsigned char *bitstr; \
36unsigned long bitcnt; \
37unsigned char *key; \
38unsigned int keylen; \
39{ \
40 return((type) hmaccomp(alg, fmt, bitstr, bitcnt, \
41 key, keylen)); \
42}
43
44HMAC_DIRECT(unsigned char *, hmac1digest, SHA1, SHA_FMT_RAW)
45HMAC_DIRECT(char *, hmac1hex, SHA1, SHA_FMT_HEX)
46HMAC_DIRECT(char *, hmac1base64, SHA1, SHA_FMT_BASE64)
47
48HMAC_DIRECT(unsigned char *, hmac224digest, SHA224, SHA_FMT_RAW)
49HMAC_DIRECT(char *, hmac224hex, SHA224, SHA_FMT_HEX)
50HMAC_DIRECT(char *, hmac224base64, SHA224, SHA_FMT_BASE64)
51
52HMAC_DIRECT(unsigned char *, hmac256digest, SHA256, SHA_FMT_RAW)
53HMAC_DIRECT(char *, hmac256hex, SHA256, SHA_FMT_HEX)
54HMAC_DIRECT(char *, hmac256base64, SHA256, SHA_FMT_BASE64)
55
56HMAC_DIRECT(unsigned char *, hmac384digest, SHA384, SHA_FMT_RAW)
57HMAC_DIRECT(char *, hmac384hex, SHA384, SHA_FMT_HEX)
58HMAC_DIRECT(char *, hmac384base64, SHA384, SHA_FMT_BASE64)
59
60HMAC_DIRECT(unsigned char *, hmac512digest, SHA512, SHA_FMT_RAW)
61HMAC_DIRECT(char *, hmac512hex, SHA512, SHA_FMT_HEX)
62HMAC_DIRECT(char *, hmac512base64, SHA512, SHA_FMT_BASE64)