1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <libsec.h>
4 0fc65b37 2004-03-21 devnull /* rfc2104 */
5 0fc65b37 2004-03-21 devnull static DigestState*
6 0fc65b37 2004-03-21 devnull hmac_x(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DigestState *s,
7 0fc65b37 2004-03-21 devnull DigestState*(*x)(uchar*, ulong, uchar*, DigestState*), int xlen)
10 0fc65b37 2004-03-21 devnull uchar pad[65], innerdigest[256];
12 0fc65b37 2004-03-21 devnull if(xlen > sizeof(innerdigest))
13 0fc65b37 2004-03-21 devnull return nil;
15 0fc65b37 2004-03-21 devnull if(klen>64)
16 0fc65b37 2004-03-21 devnull return nil;
18 0fc65b37 2004-03-21 devnull /* first time through */
19 0fc65b37 2004-03-21 devnull if(s == nil){
20 0fc65b37 2004-03-21 devnull for(i=0; i<64; i++)
21 0fc65b37 2004-03-21 devnull pad[i] = 0x36;
22 0fc65b37 2004-03-21 devnull pad[64] = 0;
23 0fc65b37 2004-03-21 devnull for(i=0; i<klen; i++)
24 0fc65b37 2004-03-21 devnull pad[i] ^= key[i];
25 0fc65b37 2004-03-21 devnull s = (*x)(pad, 64, nil, nil);
26 0fc65b37 2004-03-21 devnull if(s == nil)
27 0fc65b37 2004-03-21 devnull return nil;
30 0fc65b37 2004-03-21 devnull s = (*x)(p, len, nil, s);
31 0fc65b37 2004-03-21 devnull if(digest == nil)
32 0fc65b37 2004-03-21 devnull return s;
34 0fc65b37 2004-03-21 devnull /* last time through */
35 0fc65b37 2004-03-21 devnull for(i=0; i<64; i++)
36 0fc65b37 2004-03-21 devnull pad[i] = 0x5c;
37 0fc65b37 2004-03-21 devnull pad[64] = 0;
38 0fc65b37 2004-03-21 devnull for(i=0; i<klen; i++)
39 0fc65b37 2004-03-21 devnull pad[i] ^= key[i];
40 0fc65b37 2004-03-21 devnull (*x)(nil, 0, innerdigest, s);
41 0fc65b37 2004-03-21 devnull s = (*x)(pad, 64, nil, nil);
42 0fc65b37 2004-03-21 devnull (*x)(innerdigest, xlen, digest, s);
43 0fc65b37 2004-03-21 devnull return nil;
46 0fc65b37 2004-03-21 devnull DigestState*
47 0fc65b37 2004-03-21 devnull hmac_sha1(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DigestState *s)
49 0fc65b37 2004-03-21 devnull return hmac_x(p, len, key, klen, digest, s, sha1, SHA1dlen);
52 0fc65b37 2004-03-21 devnull DigestState*
53 0fc65b37 2004-03-21 devnull hmac_md5(uchar *p, ulong len, uchar *key, ulong klen, uchar *digest, DigestState *s)
55 0fc65b37 2004-03-21 devnull return hmac_x(p, len, key, klen, digest, s, md5, MD5dlen);