Revert "Revert "and added files""
[bcm963xx.git] / userapps / opensource / sshd / libtomcrypt / mycrypt_hash.h
1 /* ---- HASH FUNCTIONS ---- */
2 #ifdef SHA512
3 struct sha512_state {
4     ulong64  length, state[8];
5     unsigned long curlen;
6     unsigned char buf[128];
7 };
8 #endif
9
10 #ifdef SHA256
11 struct sha256_state {
12     ulong64 length;
13     unsigned long state[8], curlen;
14     unsigned char buf[64];
15 };
16 #endif
17
18 #ifdef SHA1
19 struct sha1_state {
20     ulong64 length;
21     unsigned long state[5], curlen;
22     unsigned char buf[64];
23 };
24 #endif
25
26 #ifdef MD5
27 struct md5_state {
28     ulong64 length;
29     unsigned long state[4], curlen;
30     unsigned char buf[64];
31 };
32 #endif
33
34 #ifdef MD4
35 struct md4_state {
36     ulong64 length;
37     unsigned long state[4], curlen;
38     unsigned char buf[64];
39 };
40 #endif
41
42 #ifdef TIGER
43 struct tiger_state {
44     ulong64 state[3], length;
45     unsigned long curlen;
46     unsigned char buf[64];
47 };
48 #endif
49
50 #ifdef MD2
51 struct md2_state {
52     unsigned char chksum[16], X[48], buf[16];
53     unsigned long curlen;
54 };
55 #endif
56
57 typedef union Hash_state {
58 #ifdef SHA512
59     struct sha512_state sha512;
60 #endif
61 #ifdef SHA256
62     struct sha256_state sha256;
63 #endif
64 #ifdef SHA1
65     struct sha1_state   sha1;
66 #endif
67 #ifdef MD5
68     struct md5_state    md5;
69 #endif
70 #ifdef MD4
71     struct md4_state    md4;
72 #endif
73 #ifdef MD2
74     struct md2_state    md2;
75 #endif
76 #ifdef TIGER
77     struct tiger_state  tiger;
78 #endif
79 } hash_state;
80
81 extern struct _hash_descriptor {
82     char *name;
83     unsigned char ID;
84     unsigned long hashsize;       /* digest output size in bytes  */
85     unsigned long blocksize;      /* the block size the hash uses */
86     void (*init)(hash_state *);
87     void (*process)(hash_state *, const unsigned char *, unsigned long);
88     void (*done)(hash_state *, unsigned char *);
89     int  (*test)(void);
90 } hash_descriptor[];
91
92 #ifdef SHA512
93 extern void sha512_init(hash_state * md);
94 extern void sha512_process(hash_state * md, const unsigned char *buf, unsigned long len);
95 extern void sha512_done(hash_state * md, unsigned char *hash);
96 extern int  sha512_test(void);
97 extern const struct _hash_descriptor sha512_desc;
98 #endif
99
100 #ifdef SHA384
101 extern void sha384_init(hash_state * md);
102 extern void sha384_process(hash_state * md, const unsigned char *buf, unsigned long len);
103 extern void sha384_done(hash_state * md, unsigned char *hash);
104 extern int  sha384_test(void);
105 extern const struct _hash_descriptor sha384_desc;
106 #endif
107
108 #ifdef SHA256
109 extern void sha256_init(hash_state * md);
110 extern void sha256_process(hash_state * md, const unsigned char *buf, unsigned long len);
111 extern void sha256_done(hash_state * md, unsigned char *hash);
112 extern int  sha256_test(void);
113 extern const struct _hash_descriptor sha256_desc;
114 #endif
115
116 #ifdef SHA1
117 extern void sha1_init(hash_state * md);
118 extern void sha1_process(hash_state * md, const unsigned char *buf, unsigned long len);
119 extern void sha1_done(hash_state * md, unsigned char *hash);
120 extern int  sha1_test(void);
121 extern const struct _hash_descriptor sha1_desc;
122 #endif
123
124 #ifdef MD5
125 extern void md5_init(hash_state * md);
126 extern void md5_process(hash_state * md, const unsigned char *buf, unsigned long len);
127 extern void md5_done(hash_state * md, unsigned char *hash);
128 extern int  md5_test(void);
129 extern const struct _hash_descriptor md5_desc;
130 #endif
131
132 #ifdef MD4
133 extern void md4_init(hash_state * md);
134 extern void md4_process(hash_state * md, const unsigned char *buf, unsigned long len);
135 extern void md4_done(hash_state * md, unsigned char *hash);
136 extern int  md4_test(void);
137 extern const struct _hash_descriptor md4_desc;
138 #endif
139
140 #ifdef MD2
141 extern void md2_init(hash_state * md);
142 extern void md2_process(hash_state * md, const unsigned char *buf, unsigned long len);
143 extern void md2_done(hash_state * md, unsigned char *hash);
144 extern int  md2_test(void);
145 extern const struct _hash_descriptor md2_desc;
146 #endif
147
148 #ifdef TIGER
149 extern void tiger_init(hash_state * md);
150 extern void tiger_process(hash_state * md, const unsigned char *buf, unsigned long len);
151 extern void tiger_done(hash_state * md, unsigned char *hash);
152 extern int  tiger_test(void);
153 extern const struct _hash_descriptor tiger_desc;
154 #endif
155
156 extern int find_hash(const char *name);
157 extern int find_hash_id(unsigned char ID);
158 extern int register_hash(const struct _hash_descriptor *hash);
159 extern int unregister_hash(const struct _hash_descriptor *hash);
160 extern int hash_is_valid(int idx);
161
162 extern int hash_memory(int hash, const unsigned char *data, unsigned long len, unsigned char *dst, unsigned long *outlen);
163 extern int hash_filehandle(int hash, FILE *in, unsigned char *dst, unsigned long *outlen);
164 extern int hash_file(int hash, const char *fname, unsigned char *dst, unsigned long *outlen);
165
166 #ifdef HMAC
167 typedef struct Hmac_state {
168      hash_state md;
169      int hash;
170      unsigned long hashsize; /* here for your reference */
171      hash_state hashstate;
172      unsigned char key[MAXBLOCKSIZE];
173 } hmac_state;
174
175 extern int hmac_init(hmac_state *hmac, int hash, const unsigned char *key, unsigned long keylen);
176 extern int hmac_process(hmac_state *hmac, const unsigned char *buf, unsigned long len);
177 extern int hmac_done(hmac_state *hmac, unsigned char *hash);
178 extern int hmac_test(void);
179 extern int hmac_memory(int hash, const unsigned char *key, unsigned long keylen,
180                        const unsigned char *data, unsigned long len, 
181                        unsigned char *dst, unsigned long *dstlen);
182 extern int hmac_file(int hash, const char *fname, const unsigned char *key,
183                      unsigned long keylen, 
184                      unsigned char *dst, unsigned long *dstlen);
185 #endif