Blame


1 0fc65b37 2004-03-21 devnull #include "os.h"
2 0fc65b37 2004-03-21 devnull #include <libsec.h>
3 0fc65b37 2004-03-21 devnull
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)
8 0fc65b37 2004-03-21 devnull {
9 0fc65b37 2004-03-21 devnull int i;
10 0fc65b37 2004-03-21 devnull uchar pad[65], innerdigest[256];
11 0fc65b37 2004-03-21 devnull
12 0fc65b37 2004-03-21 devnull if(xlen > sizeof(innerdigest))
13 0fc65b37 2004-03-21 devnull return nil;
14 0fc65b37 2004-03-21 devnull
15 0fc65b37 2004-03-21 devnull if(klen>64)
16 0fc65b37 2004-03-21 devnull return nil;
17 0fc65b37 2004-03-21 devnull
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;
28 0fc65b37 2004-03-21 devnull }
29 0fc65b37 2004-03-21 devnull
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;
33 0fc65b37 2004-03-21 devnull
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;
44 0fc65b37 2004-03-21 devnull }
45 0fc65b37 2004-03-21 devnull
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)
48 0fc65b37 2004-03-21 devnull {
49 0fc65b37 2004-03-21 devnull return hmac_x(p, len, key, klen, digest, s, sha1, SHA1dlen);
50 0fc65b37 2004-03-21 devnull }
51 0fc65b37 2004-03-21 devnull
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)
54 0fc65b37 2004-03-21 devnull {
55 0fc65b37 2004-03-21 devnull return hmac_x(p, len, key, klen, digest, s, md5, MD5dlen);
56 0fc65b37 2004-03-21 devnull }