Authentication routines (based on the SHA-1 hash algorithm).
[charm.git] / src / conv-ccs / ccs-auth.h
1 /**************************************************
2  CCS Authentication utility routines 
3
4 Orion Sky Lawlor, olawlor@acm.org, 7/23/2001
5 */
6 #ifndef __CCS_AUTH_H
7 #define __CCS_AUTH_H
8
9 /*A secret key, used to authenticate a client or server.
10 This could be human-readable text, a random one-time pad,
11 some shared common knowledge, or any combination.
12 */
13 typedef struct {
14         unsigned char data[16];
15 } CcsSec_secretKey;
16 int CCS_AUTH_makeSecretKey(const char *str,CcsSec_secretKey *key);
17
18
19 /*The output of a SHA-1 hash algorithm*/
20 typedef struct {
21         unsigned char data[20];
22 } SHA1_hash_t;
23
24 void CCS_AUTH_hash(const CcsSec_secretKey *key,unsigned int salt,
25                    const CcsMessageHeader *hdrOrNull,SHA1_hash_t *out);
26 int  CCS_AUTH_differ(const CcsSec_secretKey *key,unsigned int salt,
27                    const CcsMessageHeader *hdrOrNull,SHA1_hash_t *given);
28
29
30 /*Strong (but rather slow) random stream*/
31 typedef struct {
32   unsigned char state[64]; /*Random number stream state*/
33 } CCS_RAND_state;
34
35 void CCS_RAND_new(CCS_RAND_state *s);
36 unsigned int CCS_RAND_next(CCS_RAND_state *s);
37
38 #endif /* def(thisHeader) */
39