redrust/
siphash.rs

1extern crate c2rust_bitfields;
2extern crate libc;
3extern crate core;
4pub type __uint8_t = libc::c_uchar;
5pub type __uint64_t = libc::c_ulong;
6pub type uint8_t = __uint8_t;
7pub type uint64_t = __uint64_t;
8pub type size_t = libc::c_ulong;
9#[no_mangle]
10pub unsafe extern "C" fn siptlw(mut c: libc::c_int) -> libc::c_int {
11    if c >= 'A' as i32 && c <= 'Z' as i32 {
12        return c + ('a' as i32 - 'A' as i32)
13    } else {
14        return c
15    };
16}
17#[no_mangle]
18pub unsafe extern "C" fn siphash(
19    mut in_0: *const uint8_t,
20    inlen: size_t,
21    mut k: *const uint8_t,
22) -> uint64_t {
23    let mut v0: uint64_t = 0x736f6d6570736575 as libc::c_ulonglong as uint64_t;
24    let mut v1: uint64_t = 0x646f72616e646f6d as libc::c_ulonglong as uint64_t;
25    let mut v2: uint64_t = 0x6c7967656e657261 as libc::c_ulonglong as uint64_t;
26    let mut v3: uint64_t = 0x7465646279746573 as libc::c_ulonglong as uint64_t;
27    let mut k0: uint64_t = *(k as *mut uint64_t);
28    let mut k1: uint64_t = *(k.offset(8 as libc::c_int as isize) as *mut uint64_t);
29    let mut m: uint64_t = 0;
30    let mut end: *const uint8_t = in_0
31        .offset(inlen as isize)
32        .offset(
33            -(inlen.wrapping_rem(core::mem::size_of::<uint64_t>() as libc::c_ulong)
34                as isize),
35        );
36    let left: libc::c_int = (inlen & 7 as libc::c_int as libc::c_ulong) as libc::c_int;
37    let mut b: uint64_t = inlen << 56 as libc::c_int;
38    v3 ^= k1;
39    v2 ^= k0;
40    v1 ^= k1;
41    v0 ^= k0;
42    while in_0 != end {
43        m = *(in_0 as *mut uint64_t);
44        v3 ^= m;
45        v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
46        v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
47        v1 ^= v0;
48        v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
49        v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
50        v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
51        v3 ^= v2;
52        v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
53        v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
54        v3 ^= v0;
55        v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
56        v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
57        v1 ^= v2;
58        v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
59        v0 ^= m;
60        in_0 = in_0.offset(8 as libc::c_int as isize);
61    }
62    let mut current_block_31: u64;
63    match left {
64        7 => {
65            b
66                |= (*in_0.offset(6 as libc::c_int as isize) as uint64_t)
67                    << 48 as libc::c_int;
68            current_block_31 = 1249139192423293139;
69        }
70        6 => {
71            current_block_31 = 1249139192423293139;
72        }
73        5 => {
74            current_block_31 = 17953379472903764582;
75        }
76        4 => {
77            current_block_31 = 13450376713251723712;
78        }
79        3 => {
80            current_block_31 = 17412530589607255837;
81        }
82        2 => {
83            current_block_31 = 3653295323910715944;
84        }
85        1 => {
86            current_block_31 = 15640639866236238398;
87        }
88        0 | _ => {
89            current_block_31 = 4488286894823169796;
90        }
91    }
92    match current_block_31 {
93        1249139192423293139 => {
94            b
95                |= (*in_0.offset(5 as libc::c_int as isize) as uint64_t)
96                    << 40 as libc::c_int;
97            current_block_31 = 17953379472903764582;
98        }
99        _ => {}
100    }
101    match current_block_31 {
102        17953379472903764582 => {
103            b
104                |= (*in_0.offset(4 as libc::c_int as isize) as uint64_t)
105                    << 32 as libc::c_int;
106            current_block_31 = 13450376713251723712;
107        }
108        _ => {}
109    }
110    match current_block_31 {
111        13450376713251723712 => {
112            b
113                |= (*in_0.offset(3 as libc::c_int as isize) as uint64_t)
114                    << 24 as libc::c_int;
115            current_block_31 = 17412530589607255837;
116        }
117        _ => {}
118    }
119    match current_block_31 {
120        17412530589607255837 => {
121            b
122                |= (*in_0.offset(2 as libc::c_int as isize) as uint64_t)
123                    << 16 as libc::c_int;
124            current_block_31 = 3653295323910715944;
125        }
126        _ => {}
127    }
128    match current_block_31 {
129        3653295323910715944 => {
130            b
131                |= (*in_0.offset(1 as libc::c_int as isize) as uint64_t)
132                    << 8 as libc::c_int;
133            current_block_31 = 15640639866236238398;
134        }
135        _ => {}
136    }
137    match current_block_31 {
138        15640639866236238398 => {
139            b |= *in_0.offset(0 as libc::c_int as isize) as uint64_t;
140        }
141        _ => {}
142    }
143    v3 ^= b;
144    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
145    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
146    v1 ^= v0;
147    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
148    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
149    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
150    v3 ^= v2;
151    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
152    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
153    v3 ^= v0;
154    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
155    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
156    v1 ^= v2;
157    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
158    v0 ^= b;
159    v2 ^= 0xff as libc::c_int as libc::c_ulong;
160    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
161    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
162    v1 ^= v0;
163    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
164    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
165    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
166    v3 ^= v2;
167    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
168    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
169    v3 ^= v0;
170    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
171    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
172    v1 ^= v2;
173    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
174    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
175    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
176    v1 ^= v0;
177    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
178    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
179    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
180    v3 ^= v2;
181    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
182    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
183    v3 ^= v0;
184    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
185    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
186    v1 ^= v2;
187    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
188    b = v0 ^ v1 ^ v2 ^ v3;
189    return b;
190}
191#[no_mangle]
192pub unsafe extern "C" fn siphash_nocase(
193    mut in_0: *const uint8_t,
194    inlen: size_t,
195    mut k: *const uint8_t,
196) -> uint64_t {
197    let mut v0: uint64_t = 0x736f6d6570736575 as libc::c_ulonglong as uint64_t;
198    let mut v1: uint64_t = 0x646f72616e646f6d as libc::c_ulonglong as uint64_t;
199    let mut v2: uint64_t = 0x6c7967656e657261 as libc::c_ulonglong as uint64_t;
200    let mut v3: uint64_t = 0x7465646279746573 as libc::c_ulonglong as uint64_t;
201    let mut k0: uint64_t = *(k as *mut uint64_t);
202    let mut k1: uint64_t = *(k.offset(8 as libc::c_int as isize) as *mut uint64_t);
203    let mut m: uint64_t = 0;
204    let mut end: *const uint8_t = in_0
205        .offset(inlen as isize)
206        .offset(
207            -(inlen.wrapping_rem(core::mem::size_of::<uint64_t>() as libc::c_ulong)
208                as isize),
209        );
210    let left: libc::c_int = (inlen & 7 as libc::c_int as libc::c_ulong) as libc::c_int;
211    let mut b: uint64_t = inlen << 56 as libc::c_int;
212    v3 ^= k1;
213    v2 ^= k0;
214    v1 ^= k1;
215    v0 ^= k0;
216    while in_0 != end {
217        m = siptlw(*in_0.offset(0 as libc::c_int as isize) as libc::c_int) as uint64_t
218            | (siptlw(*in_0.offset(1 as libc::c_int as isize) as libc::c_int)
219                as uint64_t) << 8 as libc::c_int
220            | (siptlw(*in_0.offset(2 as libc::c_int as isize) as libc::c_int)
221                as uint64_t) << 16 as libc::c_int
222            | (siptlw(*in_0.offset(3 as libc::c_int as isize) as libc::c_int)
223                as uint64_t) << 24 as libc::c_int
224            | (siptlw(*in_0.offset(4 as libc::c_int as isize) as libc::c_int)
225                as uint64_t) << 32 as libc::c_int
226            | (siptlw(*in_0.offset(5 as libc::c_int as isize) as libc::c_int)
227                as uint64_t) << 40 as libc::c_int
228            | (siptlw(*in_0.offset(6 as libc::c_int as isize) as libc::c_int)
229                as uint64_t) << 48 as libc::c_int
230            | (siptlw(*in_0.offset(7 as libc::c_int as isize) as libc::c_int)
231                as uint64_t) << 56 as libc::c_int;
232        v3 ^= m;
233        v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
234        v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
235        v1 ^= v0;
236        v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
237        v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
238        v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
239        v3 ^= v2;
240        v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
241        v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
242        v3 ^= v0;
243        v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
244        v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
245        v1 ^= v2;
246        v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
247        v0 ^= m;
248        in_0 = in_0.offset(8 as libc::c_int as isize);
249    }
250    let mut current_block_31: u64;
251    match left {
252        7 => {
253            b
254                |= (siptlw(*in_0.offset(6 as libc::c_int as isize) as libc::c_int)
255                    as uint64_t) << 48 as libc::c_int;
256            current_block_31 = 2776346960145241100;
257        }
258        6 => {
259            current_block_31 = 2776346960145241100;
260        }
261        5 => {
262            current_block_31 = 649228984063957735;
263        }
264        4 => {
265            current_block_31 = 10473994958786212244;
266        }
267        3 => {
268            current_block_31 = 9711627312585919507;
269        }
270        2 => {
271            current_block_31 = 12437083962755276651;
272        }
273        1 => {
274            current_block_31 = 6055168197975140418;
275        }
276        0 | _ => {
277            current_block_31 = 4488286894823169796;
278        }
279    }
280    match current_block_31 {
281        2776346960145241100 => {
282            b
283                |= (siptlw(*in_0.offset(5 as libc::c_int as isize) as libc::c_int)
284                    as uint64_t) << 40 as libc::c_int;
285            current_block_31 = 649228984063957735;
286        }
287        _ => {}
288    }
289    match current_block_31 {
290        649228984063957735 => {
291            b
292                |= (siptlw(*in_0.offset(4 as libc::c_int as isize) as libc::c_int)
293                    as uint64_t) << 32 as libc::c_int;
294            current_block_31 = 10473994958786212244;
295        }
296        _ => {}
297    }
298    match current_block_31 {
299        10473994958786212244 => {
300            b
301                |= (siptlw(*in_0.offset(3 as libc::c_int as isize) as libc::c_int)
302                    as uint64_t) << 24 as libc::c_int;
303            current_block_31 = 9711627312585919507;
304        }
305        _ => {}
306    }
307    match current_block_31 {
308        9711627312585919507 => {
309            b
310                |= (siptlw(*in_0.offset(2 as libc::c_int as isize) as libc::c_int)
311                    as uint64_t) << 16 as libc::c_int;
312            current_block_31 = 12437083962755276651;
313        }
314        _ => {}
315    }
316    match current_block_31 {
317        12437083962755276651 => {
318            b
319                |= (siptlw(*in_0.offset(1 as libc::c_int as isize) as libc::c_int)
320                    as uint64_t) << 8 as libc::c_int;
321            current_block_31 = 6055168197975140418;
322        }
323        _ => {}
324    }
325    match current_block_31 {
326        6055168197975140418 => {
327            b
328                |= siptlw(*in_0.offset(0 as libc::c_int as isize) as libc::c_int)
329                    as uint64_t;
330        }
331        _ => {}
332    }
333    v3 ^= b;
334    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
335    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
336    v1 ^= v0;
337    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
338    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
339    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
340    v3 ^= v2;
341    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
342    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
343    v3 ^= v0;
344    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
345    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
346    v1 ^= v2;
347    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
348    v0 ^= b;
349    v2 ^= 0xff as libc::c_int as libc::c_ulong;
350    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
351    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
352    v1 ^= v0;
353    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
354    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
355    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
356    v3 ^= v2;
357    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
358    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
359    v3 ^= v0;
360    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
361    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
362    v1 ^= v2;
363    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
364    v0 = (v0 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
365    v1 = v1 << 13 as libc::c_int | v1 >> 64 as libc::c_int - 13 as libc::c_int;
366    v1 ^= v0;
367    v0 = v0 << 32 as libc::c_int | v0 >> 64 as libc::c_int - 32 as libc::c_int;
368    v2 = (v2 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
369    v3 = v3 << 16 as libc::c_int | v3 >> 64 as libc::c_int - 16 as libc::c_int;
370    v3 ^= v2;
371    v0 = (v0 as libc::c_ulong).wrapping_add(v3) as uint64_t as uint64_t;
372    v3 = v3 << 21 as libc::c_int | v3 >> 64 as libc::c_int - 21 as libc::c_int;
373    v3 ^= v0;
374    v2 = (v2 as libc::c_ulong).wrapping_add(v1) as uint64_t as uint64_t;
375    v1 = v1 << 17 as libc::c_int | v1 >> 64 as libc::c_int - 17 as libc::c_int;
376    v1 ^= v2;
377    v2 = v2 << 32 as libc::c_int | v2 >> 64 as libc::c_int - 32 as libc::c_int;
378    b = v0 ^ v1 ^ v2 ^ v3;
379    return b;
380}