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