You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.2 KiB
40 lines
1.2 KiB
#ifndef _TS3INIT_COOKIE_H |
|
#define _TS3INIT_COOKIE_H |
|
|
|
enum |
|
{ |
|
SHA512_SIZE = 64, |
|
SIP_KEY_SIZE = 16 |
|
}; |
|
|
|
struct xt_ts3init_cookie_cache |
|
{ |
|
time_t time[2]; |
|
union |
|
{ |
|
__u8 seed8[SHA512_SIZE*2]; |
|
__u64 seed64[(SHA512_SIZE/sizeof(__u64))*2]; |
|
}; |
|
}; |
|
|
|
/* |
|
* Returns the cookie seed that fits current_time and packet_index. |
|
* If the cookie seed is missing in cache it will be generated using |
|
* random_seed and current_time |
|
*/ |
|
__u64* ts3init_get_cookie_seed(time_t current_time, __u8 packet_index, |
|
struct xt_ts3init_cookie_cache* cache, |
|
const __u8* random_seed); |
|
|
|
/* |
|
* Returns a valid cookie. |
|
* The cookie is generated from a cookie seed and ip and port from the source |
|
* and destination. Ip and udp are the recieved headers from the client, |
|
* k0 and k1 are the cookie seed, and out is the resulting hash. |
|
*/ |
|
int ts3init_calculate_cookie_ipv6(const struct ipv6hdr *ip, const struct udphdr *udp, |
|
__u64 k0, __u64 k1, __u64* out); |
|
int ts3init_calculate_cookie_ipv4(const struct iphdr *ip, const struct udphdr *udp, |
|
__u64 k0, __u64 k1, __u64* out); |
|
|
|
#endif /* _TS3INIT_COOKIE_H */
|
|
|