mirror of
https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git
synced 2026-02-05 17:00:29 +01:00
This is a direct dump from systemd git on 2015-07-03, git commit 2812dcba8543. SYSTEMD_DIR=../systemd COMMIT=2812dcba85435c59203268ab54901a72c6c24a69 ( cd "$SYSTEMD_DIR" git checkout "$COMMIT" git reset --hard git clean -fdx ) git ls-files :/src/systemd/src/ | xargs -d '\n' rm -f mkdir src/systemd/src/basic cp "$SYSTEMD_DIR"/src/libsystemd/sd-id128/sd-id128.c ./src/systemd/src/libsystemd/sd-id128/sd-id128.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.c ./src/systemd/src/libsystemd-network/dhcp-identifier.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-identifier.h ./src/systemd/src/libsystemd-network/dhcp-identifier.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-internal.h ./src/systemd/src/libsystemd-network/dhcp-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-lease-internal.h ./src/systemd/src/libsystemd-network/dhcp-lease-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-network.c ./src/systemd/src/libsystemd-network/dhcp-network.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-option.c ./src/systemd/src/libsystemd-network/dhcp-option.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-packet.c ./src/systemd/src/libsystemd-network/dhcp-packet.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp-protocol.h ./src/systemd/src/libsystemd-network/dhcp-protocol.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-internal.h ./src/systemd/src/libsystemd-network/dhcp6-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-lease-internal.h ./src/systemd/src/libsystemd-network/dhcp6-lease-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-network.c ./src/systemd/src/libsystemd-network/dhcp6-network.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-option.c ./src/systemd/src/libsystemd-network/dhcp6-option.c cp "$SYSTEMD_DIR"/src/libsystemd-network/dhcp6-protocol.h ./src/systemd/src/libsystemd-network/dhcp6-protocol.h cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.c ./src/systemd/src/libsystemd-network/network-internal.c cp "$SYSTEMD_DIR"/src/libsystemd-network/network-internal.h ./src/systemd/src/libsystemd-network/network-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-client.c ./src/systemd/src/libsystemd-network/sd-dhcp-client.c cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp-lease.c ./src/systemd/src/libsystemd-network/sd-dhcp-lease.c cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-client.c ./src/systemd/src/libsystemd-network/sd-dhcp6-client.c cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-dhcp6-lease.c ./src/systemd/src/libsystemd-network/sd-dhcp6-lease.c cp "$SYSTEMD_DIR"/src/libsystemd-network/ipv4ll-internal.h ./src/systemd/src/libsystemd-network/ipv4ll-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/ipv4ll-internal.h ./src/systemd/src/libsystemd-network/ipv4ll-internal.h cp "$SYSTEMD_DIR"/src/libsystemd-network/ipv4ll-network.c ./src/systemd/src/libsystemd-network/ipv4ll-network.c cp "$SYSTEMD_DIR"/src/libsystemd-network//ipv4ll-packet.c ./src/systemd/src/libsystemd-network//ipv4ll-packet.c cp "$SYSTEMD_DIR"/src/libsystemd-network/sd-ipv4ll.c ./src/systemd/src/libsystemd-network/sd-ipv4ll.c cp "$SYSTEMD_DIR"/src/basic/async.h ./src/systemd/src/basic/async.h cp "$SYSTEMD_DIR"/src/basic/fileio.c ./src/systemd/src/basic/fileio.c cp "$SYSTEMD_DIR"/src/basic/fileio.h ./src/systemd/src/basic/fileio.h cp "$SYSTEMD_DIR"/src/basic/list.h ./src/systemd/src/basic/list.h cp "$SYSTEMD_DIR"/src/basic/log.h ./src/systemd/src/basic/log.h cp "$SYSTEMD_DIR"/src/basic/macro.h ./src/systemd/src/basic/macro.h cp "$SYSTEMD_DIR"/src/basic/path-util.c ./src/systemd/src/basic/path-util.c cp "$SYSTEMD_DIR"/src/basic/path-util.h ./src/systemd/src/basic/path-util.h cp "$SYSTEMD_DIR"/src/basic/refcnt.h ./src/systemd/src/basic/refcnt.h cp "$SYSTEMD_DIR"/src/basic/siphash24.c ./src/systemd/src/basic/siphash24.c cp "$SYSTEMD_DIR"/src/basic/siphash24.h ./src/systemd/src/basic/siphash24.h cp "$SYSTEMD_DIR"/src/basic/socket-util.h ./src/systemd/src/basic/socket-util.h cp "$SYSTEMD_DIR"/src/basic/sparse-endian.h ./src/systemd/src/basic/sparse-endian.h cp "$SYSTEMD_DIR"/src/basic/strv.c ./src/systemd/src/basic/strv.c cp "$SYSTEMD_DIR"/src/basic/strv.h ./src/systemd/src/basic/strv.h cp "$SYSTEMD_DIR"/src/basic/time-util.c ./src/systemd/src/basic/time-util.c cp "$SYSTEMD_DIR"/src/basic/time-util.h ./src/systemd/src/basic/time-util.h cp "$SYSTEMD_DIR"/src/basic/utf8.c ./src/systemd/src/basic/utf8.c cp "$SYSTEMD_DIR"/src/basic/utf8.h ./src/systemd/src/basic/utf8.h cp "$SYSTEMD_DIR"/src/basic/util.c ./src/systemd/src/basic/util.c cp "$SYSTEMD_DIR"/src/basic/util.h ./src/systemd/src/basic/util.h cp "$SYSTEMD_DIR"/src/basic/unaligned.h ./src/systemd/src/basic/unaligned.h cp "$SYSTEMD_DIR"/src/basic/in-addr-util.c ./src/systemd/src/basic/in-addr-util.c cp "$SYSTEMD_DIR"/src/basic/in-addr-util.h ./src/systemd/src/basic/in-addr-util.h cp "$SYSTEMD_DIR"/src/basic/hostname-util.c ./src/systemd/src/basic/hostname-util.c cp "$SYSTEMD_DIR"/src/basic/hostname-util.h ./src/systemd/src/basic/hostname-util.h cp "$SYSTEMD_DIR"/src/basic/random-util.c ./src/systemd/src/basic/random-util.c cp "$SYSTEMD_DIR"/src/basic/random-util.h ./src/systemd/src/basic/random-util.h cp "$SYSTEMD_DIR"/src/shared/dns-domain.c ./src/systemd/src/shared/dns-domain.c cp "$SYSTEMD_DIR"/src/shared/dns-domain.h ./src/systemd/src/shared/dns-domain.h cp "$SYSTEMD_DIR"/src/systemd/_sd-common.h ./src/systemd/src/systemd/_sd-common.h cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-client.h ./src/systemd/src/systemd/sd-dhcp-client.h cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp-lease.h ./src/systemd/src/systemd/sd-dhcp-lease.h cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-client.h ./src/systemd/src/systemd/sd-dhcp6-client.h cp "$SYSTEMD_DIR"/src/systemd/sd-dhcp6-lease.h ./src/systemd/src/systemd/sd-dhcp6-lease.h cp "$SYSTEMD_DIR"/src/systemd/sd-event.h ./src/systemd/src/systemd/sd-event.h cp "$SYSTEMD_DIR"/src/systemd/sd-id128.h ./src/systemd/src/systemd/sd-id128.h cp "$SYSTEMD_DIR"/src/systemd/sd-ipv4ll.h ./src/systemd/src/systemd/sd-ipv4ll.h
135 lines
3.9 KiB
C
135 lines
3.9 KiB
C
/*
|
|
SipHash reference C implementation
|
|
|
|
Written in 2012 by
|
|
Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
|
|
Daniel J. Bernstein <djb@cr.yp.to>
|
|
|
|
To the extent possible under law, the author(s) have dedicated all copyright
|
|
and related and neighboring rights to this software to the public domain
|
|
worldwide. This software is distributed without any warranty.
|
|
|
|
You should have received a copy of the CC0 Public Domain Dedication along with
|
|
this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
|
|
|
(Minimal changes made by Lennart Poettering, to make clean for inclusion in systemd)
|
|
*/
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "siphash24.h"
|
|
|
|
typedef uint64_t u64;
|
|
typedef uint32_t u32;
|
|
typedef uint8_t u8;
|
|
|
|
#define ROTL(x,b) (u64)( ((x) << (b)) | ( (x) >> (64 - (b))) )
|
|
|
|
#define U32TO8_LE(p, v) \
|
|
(p)[0] = (u8)((v) ); (p)[1] = (u8)((v) >> 8); \
|
|
(p)[2] = (u8)((v) >> 16); (p)[3] = (u8)((v) >> 24);
|
|
|
|
#define U64TO8_LE(p, v) \
|
|
U32TO8_LE((p), (u32)((v) )); \
|
|
U32TO8_LE((p) + 4, (u32)((v) >> 32));
|
|
|
|
#define U8TO64_LE(p) \
|
|
(((u64)((p)[0]) ) | \
|
|
((u64)((p)[1]) << 8) | \
|
|
((u64)((p)[2]) << 16) | \
|
|
((u64)((p)[3]) << 24) | \
|
|
((u64)((p)[4]) << 32) | \
|
|
((u64)((p)[5]) << 40) | \
|
|
((u64)((p)[6]) << 48) | \
|
|
((u64)((p)[7]) << 56))
|
|
|
|
#define SIPROUND \
|
|
do { \
|
|
v0 += v1; v1=ROTL(v1,13); v1 ^= v0; v0=ROTL(v0,32); \
|
|
v2 += v3; v3=ROTL(v3,16); v3 ^= v2; \
|
|
v0 += v3; v3=ROTL(v3,21); v3 ^= v0; \
|
|
v2 += v1; v1=ROTL(v1,17); v1 ^= v2; v2=ROTL(v2,32); \
|
|
} while(0)
|
|
|
|
/* SipHash-2-4 */
|
|
void siphash24(uint8_t out[8], const void *_in, size_t inlen, const uint8_t k[16])
|
|
{
|
|
/* "somepseudorandomlygeneratedbytes" */
|
|
u64 v0 = 0x736f6d6570736575ULL;
|
|
u64 v1 = 0x646f72616e646f6dULL;
|
|
u64 v2 = 0x6c7967656e657261ULL;
|
|
u64 v3 = 0x7465646279746573ULL;
|
|
u64 b;
|
|
u64 k0 = U8TO64_LE( k );
|
|
u64 k1 = U8TO64_LE( k + 8 );
|
|
u64 m;
|
|
const u8 *in = _in;
|
|
const u8 *end = in + inlen - ( inlen % sizeof( u64 ) );
|
|
const int left = inlen & 7;
|
|
b = ( ( u64 )inlen ) << 56;
|
|
v3 ^= k1;
|
|
v2 ^= k0;
|
|
v1 ^= k1;
|
|
v0 ^= k0;
|
|
|
|
for ( ; in != end; in += 8 )
|
|
{
|
|
m = U8TO64_LE( in );
|
|
#ifdef DEBUG
|
|
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
|
|
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
|
|
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
|
|
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
|
|
printf( "(%3d) compress %08x %08x\n", ( int )inlen, ( u32 )( m >> 32 ), ( u32 )m );
|
|
#endif
|
|
v3 ^= m;
|
|
SIPROUND;
|
|
SIPROUND;
|
|
v0 ^= m;
|
|
}
|
|
|
|
switch( left )
|
|
{
|
|
case 7: b |= ( ( u64 )in[ 6] ) << 48;
|
|
|
|
case 6: b |= ( ( u64 )in[ 5] ) << 40;
|
|
|
|
case 5: b |= ( ( u64 )in[ 4] ) << 32;
|
|
|
|
case 4: b |= ( ( u64 )in[ 3] ) << 24;
|
|
|
|
case 3: b |= ( ( u64 )in[ 2] ) << 16;
|
|
|
|
case 2: b |= ( ( u64 )in[ 1] ) << 8;
|
|
|
|
case 1: b |= ( ( u64 )in[ 0] ); break;
|
|
|
|
case 0: break;
|
|
}
|
|
|
|
#ifdef DEBUG
|
|
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
|
|
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
|
|
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
|
|
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
|
|
printf( "(%3d) padding %08x %08x\n", ( int )inlen, ( u32 )( b >> 32 ), ( u32 )b );
|
|
#endif
|
|
v3 ^= b;
|
|
SIPROUND;
|
|
SIPROUND;
|
|
v0 ^= b;
|
|
#ifdef DEBUG
|
|
printf( "(%3d) v0 %08x %08x\n", ( int )inlen, ( u32 )( v0 >> 32 ), ( u32 )v0 );
|
|
printf( "(%3d) v1 %08x %08x\n", ( int )inlen, ( u32 )( v1 >> 32 ), ( u32 )v1 );
|
|
printf( "(%3d) v2 %08x %08x\n", ( int )inlen, ( u32 )( v2 >> 32 ), ( u32 )v2 );
|
|
printf( "(%3d) v3 %08x %08x\n", ( int )inlen, ( u32 )( v3 >> 32 ), ( u32 )v3 );
|
|
#endif
|
|
v2 ^= 0xff;
|
|
SIPROUND;
|
|
SIPROUND;
|
|
SIPROUND;
|
|
SIPROUND;
|
|
b = v0 ^ v1 ^ v2 ^ v3;
|
|
U64TO8_LE( out, b );
|
|
}
|