10
10
#include <limits.h>
11
11
#include <stdint.h>
12
12
13
- uint32_t afl_hash_ip (uint8_t * input , size_t len );
14
- uint32_t AFL_readLE32 (const void * memPtr );
13
+ uint32_t afl_hash_ip (uint64_t ip );
15
14
uint64_t AFL_readLE64 (const void * memPtr );
16
15
uint64_t AFL_rrmxmx (uint64_t h64 , uint64_t len );
17
16
18
- const uint8_t AFL_kSecret [] = {
19
-
20
- 0xb8 , 0xfe , 0x6c , 0x39 , 0x23 , 0xa4 , 0x4b , 0xbe , 0x7c , 0x01 , 0x81 , 0x2c ,
21
- 0xf7 , 0x21 , 0xad , 0x1c , 0xde , 0xd4 , 0x6d , 0xe9 , 0x83 , 0x90 , 0x97 , 0xdb ,
22
- 0x72 , 0x40 , 0xa4 , 0xa4 , 0xb7 , 0xb3 , 0x67 , 0x1f , 0xcb , 0x79 , 0xe6 , 0x4e ,
23
- 0xcc , 0xc0 , 0xe5 , 0x78 , 0x82 , 0x5a , 0xd0 , 0x7d , 0xcc , 0xff , 0x72 , 0x21 ,
24
- 0xb8 , 0x08 , 0x46 , 0x74 , 0xf7 , 0x43 , 0x24 , 0x8e , 0xe0 , 0x35 , 0x90 , 0xe6 ,
25
- 0x81 , 0x3a , 0x26 , 0x4c , 0x3c , 0x28 , 0x52 , 0xbb , 0x91 , 0xc3 , 0x00 , 0xcb ,
26
- 0x88 , 0xd0 , 0x65 , 0x8b , 0x1b , 0x53 , 0x2e , 0xa3 , 0x71 , 0x64 , 0x48 , 0x97 ,
27
- 0xa2 , 0x0d , 0xf9 , 0x4e , 0x38 , 0x19 , 0xef , 0x46 , 0xa9 , 0xde , 0xac , 0xd8 ,
28
- 0xa8 , 0xfa , 0x76 , 0x3f , 0xe3 , 0x9c , 0x34 , 0x3f , 0xf9 , 0xdc , 0xbb , 0xc7 ,
29
- 0xc7 , 0x0b , 0x4f , 0x1d , 0x8a , 0x51 , 0xe0 , 0x4b , 0xcd , 0xb4 , 0x59 , 0x31 ,
30
- 0xc8 , 0x9f , 0x7e , 0xc9 , 0xd9 , 0x78 , 0x73 , 0x64 , 0xea , 0xc5 , 0xac , 0x83 ,
31
- 0x34 , 0xd3 , 0xeb , 0xc3 , 0xc5 , 0x81 , 0xa0 , 0xff , 0xfa , 0x13 , 0x63 , 0xeb ,
32
- 0x17 , 0x0d , 0xdd , 0x51 , 0xb7 , 0xf0 , 0xda , 0x49 , 0xd3 , 0x16 , 0x55 , 0x26 ,
33
- 0x29 , 0xd4 , 0x68 , 0x9e , 0x2b , 0x16 , 0xbe , 0x58 , 0x7d , 0x47 , 0xa1 , 0xfc ,
34
- 0x8f , 0xf8 , 0xb8 , 0xd1 , 0x7a , 0xd0 , 0x31 , 0xce , 0x45 , 0xcb , 0x3a , 0x8f ,
35
- 0x95 , 0x16 , 0x04 , 0x28 , 0xaf , 0xd7 , 0xfb , 0xca , 0xbb , 0x4b , 0x40 , 0x7e ,
36
-
37
- };
38
-
39
17
#define AFL_rotl64 (x , r ) (((x) << (r)) | ((x) >> (64 - (r))))
40
18
41
- inline uint32_t AFL_readLE32 (const void * memPtr ) {
42
-
43
- const uint8_t * bytePtr = (const uint8_t * )memPtr ;
44
- return bytePtr [0 ] | ((uint32_t )bytePtr [1 ] << 8 ) | ((uint32_t )bytePtr [2 ] << 16 ) |
45
- ((uint32_t )bytePtr [3 ] << 24 );
46
-
47
- }
48
-
49
19
inline uint64_t AFL_readLE64 (const void * memPtr ) {
50
20
51
21
const uint8_t * bytePtr = (const uint8_t * )memPtr ;
@@ -67,17 +37,35 @@ inline uint64_t AFL_rrmxmx(uint64_t h64, uint64_t len) {
67
37
68
38
}
69
39
70
- inline uint32_t afl_hash_ip (uint8_t * input , size_t len ) {
40
+ inline uint32_t afl_hash_ip (uint64_t ip ) {
41
+
42
+ const uint8_t secret [] = {
43
+
44
+ 0xb8 , 0xfe , 0x6c , 0x39 , 0x23 , 0xa4 , 0x4b , 0xbe , 0x7c , 0x01 , 0x81 , 0x2c ,
45
+ 0xf7 , 0x21 , 0xad , 0x1c , 0xde , 0xd4 , 0x6d , 0xe9 , 0x83 , 0x90 , 0x97 , 0xdb ,
46
+ 0x72 , 0x40 , 0xa4 , 0xa4 , 0xb7 , 0xb3 , 0x67 , 0x1f , 0xcb , 0x79 , 0xe6 , 0x4e ,
47
+ 0xcc , 0xc0 , 0xe5 , 0x78 , 0x82 , 0x5a , 0xd0 , 0x7d , 0xcc , 0xff , 0x72 , 0x21 ,
48
+ 0xb8 , 0x08 , 0x46 , 0x74 , 0xf7 , 0x43 , 0x24 , 0x8e , 0xe0 , 0x35 , 0x90 , 0xe6 ,
49
+ 0x81 , 0x3a , 0x26 , 0x4c , 0x3c , 0x28 , 0x52 , 0xbb , 0x91 , 0xc3 , 0x00 , 0xcb ,
50
+ 0x88 , 0xd0 , 0x65 , 0x8b , 0x1b , 0x53 , 0x2e , 0xa3 , 0x71 , 0x64 , 0x48 , 0x97 ,
51
+ 0xa2 , 0x0d , 0xf9 , 0x4e , 0x38 , 0x19 , 0xef , 0x46 , 0xa9 , 0xde , 0xac , 0xd8 ,
52
+ 0xa8 , 0xfa , 0x76 , 0x3f , 0xe3 , 0x9c , 0x34 , 0x3f , 0xf9 , 0xdc , 0xbb , 0xc7 ,
53
+ 0xc7 , 0x0b , 0x4f , 0x1d , 0x8a , 0x51 , 0xe0 , 0x4b , 0xcd , 0xb4 , 0x59 , 0x31 ,
54
+ 0xc8 , 0x9f , 0x7e , 0xc9 , 0xd9 , 0x78 , 0x73 , 0x64 , 0xea , 0xc5 , 0xac , 0x83 ,
55
+ 0x34 , 0xd3 , 0xeb , 0xc3 , 0xc5 , 0x81 , 0xa0 , 0xff , 0xfa , 0x13 , 0x63 , 0xeb ,
56
+ 0x17 , 0x0d , 0xdd , 0x51 , 0xb7 , 0xf0 , 0xda , 0x49 , 0xd3 , 0x16 , 0x55 , 0x26 ,
57
+ 0x29 , 0xd4 , 0x68 , 0x9e , 0x2b , 0x16 , 0xbe , 0x58 , 0x7d , 0x47 , 0xa1 , 0xfc ,
58
+ 0x8f , 0xf8 , 0xb8 , 0xd1 , 0x7a , 0xd0 , 0x31 , 0xce , 0x45 , 0xcb , 0x3a , 0x8f ,
59
+ 0x95 , 0x16 , 0x04 , 0x28 , 0xaf , 0xd7 , 0xfb , 0xca , 0xbb , 0x4b , 0x40 , 0x7e ,
71
60
72
- const uint8_t * secret = AFL_kSecret ;
61
+ } ;
73
62
74
- uint32_t const input1 = AFL_readLE32 (input );
75
- uint32_t const input2 = AFL_readLE32 (input + len - 4 );
76
- uint64_t const bitflip =
77
- (AFL_readLE64 (secret + 8 ) ^ AFL_readLE64 (secret + 16 ));
78
- uint64_t const input64 = input2 + (((uint64_t )input1 ) << 32 );
79
- uint64_t const keyed = input64 ^ bitflip ;
80
- return AFL_rrmxmx (keyed , len );
63
+ uint32_t const input1 = (uint32_t )(ip & 0xffffffff );
64
+ uint32_t const input2 = (uint32_t )(ip >> 32 );
65
+ uint64_t const bitflip = (AFL_readLE64 (secret + 8 ) ^ AFL_readLE64 (secret + 16 ));
66
+ uint64_t const input64 = input2 + (((uint64_t )input1 ) << 32 );
67
+ uint64_t const keyed = input64 ^ bitflip ;
68
+ return AFL_rrmxmx (keyed , 8 );
81
69
82
70
}
83
71
0 commit comments