ezmlmx 0.68
ezmlmx
Loading...
Searching...
No Matches
surfpcs.c
Go to the documentation of this file.
1/*$Id: surfpcs.c 167 2005-01-04 05:10:18Z bruce $*/
2
3/* XXX: this needs testing */
4
5#include "surf.h"
6#include "surfpcs.h"
7
8void surfpcs_init(surfpcs *s,const uint32 k[32])
9{
10 int i;
11 for (i = 0;i < 32;++i) s->seed[i] = k[i];
12 for (i = 0;i < 8;++i) s->sum[i] = 0;
13 for (i = 0;i < 12;++i) s->in[i] = 0;
14 s->todo = 0;
15}
16
17static const uint32 littleendian[8] = {
18 50462976, 117835012, 185207048, 252579084,
19 319951120, 387323156, 454695192, 522067228
20} ;
21#define end ((unsigned char *) &littleendian)
22
23#define data ((unsigned char *) s->in)
24#define outdata ((unsigned char *) s->out)
25
26void surfpcs_add(surfpcs *s,const unsigned char *x,unsigned int n)
27{
28 int i;
29 while (n--) {
30 data[end[s->todo++]] = *x++;
31 if (s->todo == 32) {
32 s->todo = 0;
33 if (!++s->in[8])
34 if (!++s->in[9])
35 if (!++s->in[10])
36 ++s->in[11];
37 surf(s->out,s->in,s->seed);
38 for (i = 0;i < 8;++i)
39 s->sum[i] += s->out[i];
40 }
41 }
42}
43
44void surfpcs_out(surfpcs *s,unsigned char h[32])
45{
46 int i;
47 surfpcs_add(s,".",1);
48 while (s->todo) surfpcs_add(s,"",1);
49 for (i = 0;i < 8;++i) s->in[i] = s->sum[i];
50 for (;i < 12;++i) s->in[i] = 0;
51 surf(s->out,s->in,s->seed);
52 for (i = 0;i < 32;++i) h[i] = outdata[end[i]];
53}
void surf(uint32 out[8], const uint32 in[12], const uint32 seed[32])
Definition surf.c:8
#define end
Definition makehash.c:43
#define data
Definition makehash.c:45
#define outdata
Definition makehash.c:46
void surfpcs_add(surfpcs *s, const unsigned char *x, unsigned int n)
Definition surfpcs.c:26
void surfpcs_init(surfpcs *s, const uint32 k[32])
Definition surfpcs.c:8
void surfpcs_out(surfpcs *s, unsigned char h[32])
Definition surfpcs.c:44
uint32 sum[8]
Definition surfpcs.h:8
uint32 out[8]
Definition surfpcs.h:9
uint32 in[12]
Definition surfpcs.h:10
int todo
Definition surfpcs.h:11
uint32 seed[32]
Definition surfpcs.h:7