Merge branch '605-add-siphash24-v9_14-v9_11' into 'v9_11'
Resolve "Add SipHash24 and synchronize the Cookie algorithm with other vendors" See merge request isc-projects/bind9!2171
This commit is contained in:
@@ -1,3 +1,6 @@
|
||||
5264. [func] New DNS Cookie algorithm - siphash24 - has been added to
|
||||
BIND 9. [GL #605]
|
||||
|
||||
--- 9.11.9 released ---
|
||||
|
||||
5260. [bug] dnstap-read was producing malformed output for large
|
||||
|
||||
+46
-4
@@ -25,6 +25,7 @@
|
||||
#include <isc/random.h>
|
||||
#include <isc/safe.h>
|
||||
#include <isc/serial.h>
|
||||
#include <isc/siphash.h>
|
||||
#include <isc/stats.h>
|
||||
#include <isc/stdio.h>
|
||||
#include <isc/string.h>
|
||||
@@ -1928,6 +1929,42 @@ compute_cookie(ns_client_t *client, uint32_t when, uint32_t nonce,
|
||||
const unsigned char *secret, isc_buffer_t *buf)
|
||||
{
|
||||
switch (ns_g_server->cookiealg) {
|
||||
case ns_cookiealg_siphash24: {
|
||||
unsigned char digest[ISC_SIPHASH24_TAG_LENGTH] = { 0 };
|
||||
unsigned char input[16 + 16] = { 0 };
|
||||
size_t inputlen = 0;
|
||||
isc_netaddr_t netaddr;
|
||||
unsigned char *cp;
|
||||
|
||||
cp = isc_buffer_used(buf);
|
||||
isc_buffer_putmem(buf, client->cookie, 8);
|
||||
isc_buffer_putuint8(buf, NS_COOKIE_VERSION_1);
|
||||
isc_buffer_putuint24(buf, 0); /* Reserved */
|
||||
isc_buffer_putuint32(buf, when);
|
||||
|
||||
memmove(input, cp, 16);
|
||||
|
||||
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
cp = (unsigned char *)&netaddr.type.in;
|
||||
memmove(input + 16, cp, 4);
|
||||
inputlen = 20;
|
||||
break;
|
||||
case AF_INET6:
|
||||
cp = (unsigned char *)&netaddr.type.in6;
|
||||
memmove(input + 16, cp, 16);
|
||||
inputlen = 32;
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
isc_siphash24(secret, input, inputlen, digest);
|
||||
isc_buffer_putmem(buf, digest, 8);
|
||||
break;
|
||||
}
|
||||
#if defined(HAVE_OPENSSL_AES) || defined(HAVE_OPENSSL_EVP_AES)
|
||||
case ns_cookiealg_aes: {
|
||||
unsigned char digest[ISC_AES_BLOCK_LENGTH];
|
||||
@@ -1936,15 +1973,15 @@ compute_cookie(ns_client_t *client, uint32_t when, uint32_t nonce,
|
||||
unsigned char *cp;
|
||||
unsigned int i;
|
||||
|
||||
memset(input, 0, sizeof(input));
|
||||
cp = isc_buffer_used(buf);
|
||||
isc_buffer_putmem(buf, client->cookie, 8);
|
||||
isc_buffer_putuint32(buf, nonce);
|
||||
isc_buffer_putuint32(buf, when);
|
||||
memmove(input, cp, 16);
|
||||
isc_aes128_crypt(secret, input, digest);
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < 8; i++) {
|
||||
input[i] = digest[i] ^ digest[i + 8];
|
||||
}
|
||||
isc_netaddr_fromsockaddr(&netaddr, &client->peeraddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
@@ -1957,14 +1994,19 @@ compute_cookie(ns_client_t *client, uint32_t when, uint32_t nonce,
|
||||
cp = (unsigned char *)&netaddr.type.in6;
|
||||
memmove(input + 8, cp, 16);
|
||||
isc_aes128_crypt(secret, input, digest);
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < 8; i++) {
|
||||
input[i + 8] = digest[i] ^ digest[i + 8];
|
||||
}
|
||||
isc_aes128_crypt(ns_g_server->secret, input + 8,
|
||||
digest);
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
for (i = 0; i < 8; i++)
|
||||
for (i = 0; i < 8; i++) {
|
||||
digest[i] ^= digest[i + 8];
|
||||
}
|
||||
isc_buffer_putmem(buf, digest, 8);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -43,7 +43,10 @@ typedef ISC_LIST(ns_altsecret_t) ns_altsecretlist_t;
|
||||
typedef enum {
|
||||
ns_cookiealg_aes,
|
||||
ns_cookiealg_sha1,
|
||||
ns_cookiealg_sha256
|
||||
ns_cookiealg_sha256,
|
||||
ns_cookiealg_siphash24
|
||||
} ns_cookiealg_t;
|
||||
|
||||
#define NS_COOKIE_VERSION_1 1
|
||||
|
||||
#endif /* NAMED_TYPES_H */
|
||||
|
||||
@@ -238,7 +238,7 @@ options {
|
||||
check-wildcard <replaceable>boolean</replaceable>;
|
||||
cleaning-interval <replaceable>integer</replaceable>;
|
||||
clients-per-query <replaceable>integer</replaceable>;
|
||||
cookie-algorithm ( aes | sha1 | sha256 );
|
||||
cookie-algorithm ( aes | sha1 | sha256 | siphash24 );
|
||||
cookie-secret <replaceable>string</replaceable>;
|
||||
coresize ( default | unlimited | <replaceable>sizeval</replaceable> );
|
||||
datasize ( default | unlimited | <replaceable>sizeval</replaceable> );
|
||||
|
||||
+11
-3
@@ -42,6 +42,7 @@
|
||||
#include <isc/refcount.h>
|
||||
#include <isc/resource.h>
|
||||
#include <isc/sha2.h>
|
||||
#include <isc/siphash.h>
|
||||
#include <isc/socket.h>
|
||||
#include <isc/stat.h>
|
||||
#include <isc/stats.h>
|
||||
@@ -8482,7 +8483,9 @@ load_configuration(const char *filename, ns_server_t *server,
|
||||
obj = NULL;
|
||||
result = ns_config_get(maps, "cookie-algorithm", &obj);
|
||||
INSIST(result == ISC_R_SUCCESS);
|
||||
if (strcasecmp(cfg_obj_asstring(obj), "aes") == 0) {
|
||||
if (strcasecmp(cfg_obj_asstring(obj), "siphash24") == 0) {
|
||||
server->cookiealg = ns_cookiealg_siphash24;
|
||||
} else if (strcasecmp(cfg_obj_asstring(obj), "aes") == 0) {
|
||||
#if defined(HAVE_OPENSSL_AES) || defined(HAVE_OPENSSL_EVP_AES)
|
||||
server->cookiealg = ns_cookiealg_aes;
|
||||
#else
|
||||
@@ -8545,11 +8548,16 @@ load_configuration(const char *filename, ns_server_t *server,
|
||||
|
||||
usedlength = isc_buffer_usedlength(&b);
|
||||
switch (server->cookiealg) {
|
||||
case ns_cookiealg_siphash24:
|
||||
if (usedlength != ISC_SIPHASH24_KEY_LENGTH) {
|
||||
CHECKM(ISC_R_RANGE,
|
||||
"SipHash-2-4 cookie-secret must be 128 bits");
|
||||
}
|
||||
break;
|
||||
case ns_cookiealg_aes:
|
||||
if (usedlength != ISC_AES128_KEYLENGTH) {
|
||||
CHECKM(ISC_R_RANGE,
|
||||
"AES cookie-secret must be "
|
||||
"128 bits");
|
||||
"AES cookie-secret must be 128 bits");
|
||||
}
|
||||
break;
|
||||
case ns_cookiealg_sha1:
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
cookie-algorithm aes;
|
||||
cookie-secret "ebc7701beabb4a40c57d140eeb6733faaa"; // 136 bits
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
cookie-algorithm siphash24;
|
||||
cookie-secret "ebc7701beabb4a40c57d140eeb6733faaabbccdd"; // 160 bits
|
||||
};
|
||||
@@ -13,3 +13,5 @@ rm -f ns1/named_dump.db
|
||||
rm -f ns*/named.memstats
|
||||
rm -f ns*/named.run
|
||||
rm -f ns*/named.lock
|
||||
rm -f ./good-cookie-aes.conf
|
||||
rm -f ./bad-cookie-badaes.conf
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
cookie-algorithm aes;
|
||||
cookie-secret "ebc7701beabb4a40c57d140eeb6733fa"; // 128 bits
|
||||
};
|
||||
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
options {
|
||||
cookie-algorithm siphash24;
|
||||
cookie-secret "ebc7701beabb4a40c57d140eeb6733fa"; // 128 bits
|
||||
};
|
||||
@@ -27,8 +27,8 @@ options {
|
||||
listen-on { 10.53.0.4; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
cookie-algorithm sha1;
|
||||
cookie-secret "569d36a6cc27d6bf55502183302ba352745255a2";
|
||||
cookie-algorithm siphash24;
|
||||
cookie-secret "569d36a6cc27d6bf55502183302ba352";
|
||||
require-server-cookie yes;
|
||||
};
|
||||
|
||||
|
||||
@@ -27,9 +27,9 @@ options {
|
||||
listen-on { 10.53.0.5; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
cookie-algorithm sha1;
|
||||
cookie-secret "569d36a6cc27d6bf55502183302ba352745255a2";
|
||||
cookie-secret "6b300e27a0db46d4b046e4189790fa7db3c1ffb3";
|
||||
cookie-algorithm siphash24;
|
||||
cookie-secret "569d36a6cc27d6bf55502183302ba352";
|
||||
cookie-secret "6b300e27a0db46d4b046e4189790fa7d";
|
||||
require-server-cookie yes;
|
||||
};
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ options {
|
||||
listen-on { 10.53.0.6; };
|
||||
listen-on-v6 { none; };
|
||||
recursion yes;
|
||||
cookie-algorithm sha1;
|
||||
cookie-secret "6b300e27a0db46d4b046e4189790fa7db3c1ffb3";
|
||||
cookie-algorithm siphash24;
|
||||
cookie-secret "6b300e27a0db46d4b046e4189790fa7d";
|
||||
require-server-cookie yes;
|
||||
};
|
||||
|
||||
|
||||
@@ -21,3 +21,8 @@ copy_setports ns5/named.conf.in ns5/named.conf
|
||||
copy_setports ns6/named.conf.in ns6/named.conf
|
||||
copy_setports ns7/named.conf.in ns7/named.conf
|
||||
copy_setports ns8/named.conf.in ns8/named.conf
|
||||
|
||||
if ../feature-test --have-aes; then
|
||||
cp good-cookie-aes.conf.in good-cookie-aes.conf
|
||||
cp bad-cookie-badaes.conf.in bad-cookie-badaes.conf
|
||||
fi
|
||||
|
||||
@@ -211,12 +211,12 @@ status=`expr $status + $ret`
|
||||
#
|
||||
# Test shared cookie-secret support.
|
||||
#
|
||||
# NS4 has cookie-secret "569d36a6cc27d6bf55502183302ba352745255a2";
|
||||
# NS4 has cookie-secret "569d36a6cc27d6bf55502183302ba352";
|
||||
#
|
||||
# NS5 has cookie-secret "569d36a6cc27d6bf55502183302ba352745255a2";
|
||||
# NS5 has cookie-secret "6b300e27a0db46d4b046e4189790fa7db3c1ffb3"; (alternate)
|
||||
# NS5 has cookie-secret "569d36a6cc27d6bf55502183302ba352";
|
||||
# NS5 has cookie-secret "6b300e27a0db46d4b046e4189790fa7d"; (alternate)
|
||||
#
|
||||
# NS6 has cookie-secret "6b300e27a0db46d4b046e4189790fa7db3c1ffb3";
|
||||
# NS6 has cookie-secret "6b300e27a0db46d4b046e4189790fa7d";
|
||||
#
|
||||
# Server cookies from NS4 are accepted by NS5 and not NS6
|
||||
# Server cookies from NS5 are accepted by NS4 and not NS6
|
||||
|
||||
@@ -41,6 +41,7 @@ usage() {
|
||||
fprintf(stderr, " --enable-filter-aaaa\n");
|
||||
fprintf(stderr, " --gethostname\n");
|
||||
fprintf(stderr, " --gssapi\n");
|
||||
fprintf(stderr, " --have-aes\n");
|
||||
fprintf(stderr, " --have-dlopen\n");
|
||||
fprintf(stderr, " --have-geoip\n");
|
||||
fprintf(stderr, " --have-geoip2\n");
|
||||
@@ -114,6 +115,14 @@ main(int argc, char **argv) {
|
||||
#endif
|
||||
}
|
||||
|
||||
if (strcmp(argv[1], "--have-aes") == 0) {
|
||||
#if defined(HAVE_OPENSSL_AES) || defined(HAVE_OPENSSL_EVP_AES)
|
||||
return (0);
|
||||
#else
|
||||
return (1);
|
||||
#endif
|
||||
}
|
||||
|
||||
if (strcmp(argv[1], "--have-dlopen") == 0) {
|
||||
#if defined(HAVE_DLOPEN) && defined(ISC_DLZ_DLOPEN)
|
||||
return (0);
|
||||
|
||||
@@ -105,13 +105,7 @@ case "$1" in
|
||||
[ "$ipv6" ] && ifconfig lo0 inet6 \
|
||||
fd92:7065:b8e:${ipv6}ff::$ns alias
|
||||
;;
|
||||
*-unknown-netbsd*)
|
||||
ifconfig lo0 10.53.$i.$ns alias \
|
||||
netmask 255.255.255.0
|
||||
[ "$ipv6" ] && ifconfig lo0 inet6 \
|
||||
fd92:7065:b8e:${ipv6}ff::$ns alias
|
||||
;;
|
||||
*-unknown-openbsd*)
|
||||
*-unknown-dragonfly*|*-unknown-netbsd*|*-unknown-openbsd*)
|
||||
ifconfig lo0 10.53.$i.$ns alias \
|
||||
netmask 255.255.255.0
|
||||
[ "$ipv6" ] && ifconfig lo0 inet6 \
|
||||
|
||||
@@ -139,9 +139,6 @@ int sigwait(const unsigned int *set, int *sig);
|
||||
/* Define if building universal (internal helper macro) */
|
||||
#undef AC_APPLE_UNIVERSAL_BUILD
|
||||
|
||||
/* Use AES for Client Cookie generation */
|
||||
#undef AES_CC
|
||||
|
||||
/* Define to enable the "filter-aaaa-on-v4" and "filter-aaaa-on-v6" options.
|
||||
*/
|
||||
#undef ALLOW_FILTER_AAAA
|
||||
@@ -540,12 +537,6 @@ int sigwait(const unsigned int *set, int *sig);
|
||||
/* Define if zlib was found */
|
||||
#undef HAVE_ZLIB
|
||||
|
||||
/* Use HMAC-SHA1 for Client Cookie generation */
|
||||
#undef HMAC_SHA1_CC
|
||||
|
||||
/* Use HMAC-SHA256 for Client Cookie generation */
|
||||
#undef HMAC_SHA256_CC
|
||||
|
||||
/* return type of gai_strerror */
|
||||
#undef IRS_GAISTRERROR_RETURN_T
|
||||
|
||||
|
||||
@@ -367,15 +367,6 @@ typedef __int64 off_t;
|
||||
/* HMAC_*() return ints */
|
||||
@HMAC_RETURN_INT@
|
||||
|
||||
/* Use AES for Client Cookie generation */
|
||||
@AES_CC@
|
||||
|
||||
/* Use HMAC-SHA1 for Client Cookie generation */
|
||||
@HMAC_SHA1_CC@
|
||||
|
||||
/* Use HMAC-SHA256 for Client Cookie generation */
|
||||
@HMAC_SHA256_CC@
|
||||
|
||||
/* Define to 1 if you have the `readline' function. */
|
||||
@HAVE_READLINE@
|
||||
|
||||
|
||||
@@ -1797,8 +1797,7 @@ Optional Packages:
|
||||
--with-gost Crypto GOST [yes|no|raw|asn1].
|
||||
--with-eddsa Crypto EDDSA [yes|all|no].
|
||||
--with-aes Crypto AES
|
||||
--with-cc-alg=ALG choose the algorithm for Client Cookie
|
||||
[aes|sha1|sha256]
|
||||
--with-cc-alg=ALG deprecated
|
||||
--with-lmdb=PATH build with LMDB library [yes|no|path]
|
||||
--with-libxml2=PATH build with libxml2 library [yes|no|path]
|
||||
--with-libjson=PATH build with libjson0 library [yes|no|path]
|
||||
@@ -17053,7 +17052,7 @@ fi
|
||||
if test "${with_aes+set}" = set; then :
|
||||
withval=$with_aes; with_aes="$withval"
|
||||
else
|
||||
with_aes="checkcc"
|
||||
with_aes="yes"
|
||||
fi
|
||||
|
||||
|
||||
@@ -17068,44 +17067,6 @@ else
|
||||
fi
|
||||
|
||||
|
||||
#
|
||||
# Client Cookie algorithm choice
|
||||
#
|
||||
|
||||
# Check whether --with-cc-alg was given.
|
||||
if test "${with_cc_alg+set}" = set; then :
|
||||
withval=$with_cc_alg; with_cc_alg="$withval"
|
||||
else
|
||||
with_cc_alg="auto"
|
||||
fi
|
||||
|
||||
|
||||
case $with_cc_alg in
|
||||
*1)
|
||||
with_cc_alg="sha1"
|
||||
;;
|
||||
*2*)
|
||||
with_cc_alg="sha256"
|
||||
;;
|
||||
auto)
|
||||
if test "no" != "$with_aes"
|
||||
then
|
||||
with_aes="yes"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
with_cc_alg="aes"
|
||||
if test "no" != "$with_aes"
|
||||
then
|
||||
with_aes="yes"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if test "checkcc" = "with_aes"
|
||||
then
|
||||
with_aes="no"
|
||||
fi
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for OpenSSL library" >&5
|
||||
$as_echo_n "checking for OpenSSL library... " >&6; }
|
||||
OPENSSL_WARNING=
|
||||
@@ -17822,58 +17783,22 @@ fi
|
||||
# Choose Client Cookie algorithm
|
||||
#
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the Algorithm for Client Cookie" >&5
|
||||
$as_echo_n "checking for the Algorithm for Client Cookie... " >&6; }
|
||||
if test "auto" = "$with_cc_alg"
|
||||
then
|
||||
if test "yes" = "$with_aes"
|
||||
then
|
||||
with_cc_alg="aes"
|
||||
else
|
||||
with_cc_alg="sha256"
|
||||
fi
|
||||
# Check whether --with-cc-alg was given.
|
||||
if test "${with_cc_alg+set}" = set; then :
|
||||
withval=$with_cc_alg; :
|
||||
else
|
||||
with_cc_alg="siphash24"
|
||||
fi
|
||||
case $with_cc_alg in
|
||||
sha1)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: sha1" >&5
|
||||
$as_echo "sha1" >&6; }
|
||||
if test "X$CRYPTO" = "X-DOPENSSL"
|
||||
then
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="yes"
|
||||
fi
|
||||
fi
|
||||
|
||||
$as_echo "#define HMAC_SHA1_CC 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
sha256)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: sha256" >&5
|
||||
$as_echo "sha256" >&6; }
|
||||
if test "X$CRYPTO" = "X-DOPENSSL"
|
||||
then
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="yes"
|
||||
fi
|
||||
fi
|
||||
|
||||
$as_echo "#define HMAC_SHA256_CC 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
aes)
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: aes" >&5
|
||||
$as_echo "aes" >&6; }
|
||||
if test "yes" != "$with_aes"
|
||||
then
|
||||
as_fn_error $? "\"Client Cookie wants to use unavailable AES\"" "$LINENO" 5;
|
||||
fi
|
||||
|
||||
$as_echo "#define AES_CC 1" >>confdefs.h
|
||||
|
||||
;;
|
||||
case $with_cc_alg in #(
|
||||
siphash24) :
|
||||
: ;; #(
|
||||
*) :
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The Client Cookie is always SipHash 2-4 based" >&5
|
||||
$as_echo "$as_me: WARNING: The Client Cookie is always SipHash 2-4 based" >&2;} ;;
|
||||
esac
|
||||
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="no"
|
||||
|
||||
+8
-81
@@ -1481,7 +1481,7 @@ AC_ARG_WITH(gost,
|
||||
AC_ARG_WITH(eddsa, AS_HELP_STRING([--with-eddsa], [Crypto EDDSA [yes|all|no].]),
|
||||
with_eddsa="$withval", with_eddsa="auto")
|
||||
AC_ARG_WITH(aes, AS_HELP_STRING([--with-aes], [Crypto AES]),
|
||||
with_aes="$withval", with_aes="checkcc")
|
||||
with_aes="$withval", with_aes="yes")
|
||||
|
||||
#
|
||||
# was --enable-openssl-hash specified?
|
||||
@@ -1491,41 +1491,6 @@ AC_ARG_ENABLE(openssl-hash,
|
||||
[use OpenSSL for hash functions [default=no]]),
|
||||
want_openssl_hash="$enableval", want_openssl_hash="checkcc")
|
||||
|
||||
#
|
||||
# Client Cookie algorithm choice
|
||||
#
|
||||
AC_ARG_WITH(cc-alg,
|
||||
AS_HELP_STRING([--with-cc-alg=ALG],
|
||||
[choose the algorithm for Client Cookie
|
||||
[aes|sha1|sha256]]),
|
||||
with_cc_alg="$withval", with_cc_alg="auto")
|
||||
|
||||
case $with_cc_alg in
|
||||
*1)
|
||||
with_cc_alg="sha1"
|
||||
;;
|
||||
*2*)
|
||||
with_cc_alg="sha256"
|
||||
;;
|
||||
auto)
|
||||
if test "no" != "$with_aes"
|
||||
then
|
||||
with_aes="yes"
|
||||
fi
|
||||
;;
|
||||
*)
|
||||
with_cc_alg="aes"
|
||||
if test "no" != "$with_aes"
|
||||
then
|
||||
with_aes="yes"
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
if test "checkcc" = "with_aes"
|
||||
then
|
||||
with_aes="no"
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(for OpenSSL library)
|
||||
OPENSSL_WARNING=
|
||||
openssldirs="/usr /usr/local /usr/local/ssl /opt/local /usr/pkg /usr/sfw"
|
||||
@@ -2055,52 +2020,14 @@ AC_SUBST(ISC_PLATFORM_WANTAES)
|
||||
#
|
||||
# Choose Client Cookie algorithm
|
||||
#
|
||||
AC_ARG_WITH([cc-alg],
|
||||
[AS_HELP_STRING([--with-cc-alg=ALG], [deprecated])],
|
||||
[:], [with_cc_alg="siphash24"])
|
||||
|
||||
AS_CASE([$with_cc_alg],
|
||||
[siphash24],[:],
|
||||
[AC_MSG_WARN([The Client Cookie is always SipHash 2-4 based])])
|
||||
|
||||
AC_MSG_CHECKING(for the Algorithm for Client Cookie)
|
||||
if test "auto" = "$with_cc_alg"
|
||||
then
|
||||
if test "yes" = "$with_aes"
|
||||
then
|
||||
with_cc_alg="aes"
|
||||
else
|
||||
with_cc_alg="sha256"
|
||||
fi
|
||||
fi
|
||||
case $with_cc_alg in
|
||||
sha1)
|
||||
AC_MSG_RESULT(sha1)
|
||||
if test "X$CRYPTO" = "X-DOPENSSL"
|
||||
then
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="yes"
|
||||
fi
|
||||
fi
|
||||
AC_DEFINE(HMAC_SHA1_CC, 1,
|
||||
[Use HMAC-SHA1 for Client Cookie generation])
|
||||
;;
|
||||
sha256)
|
||||
AC_MSG_RESULT(sha256)
|
||||
if test "X$CRYPTO" = "X-DOPENSSL"
|
||||
then
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="yes"
|
||||
fi
|
||||
fi
|
||||
AC_DEFINE(HMAC_SHA256_CC, 1,
|
||||
[Use HMAC-SHA256 for Client Cookie generation])
|
||||
;;
|
||||
aes)
|
||||
AC_MSG_RESULT(aes)
|
||||
if test "yes" != "$with_aes"
|
||||
then
|
||||
AC_MSG_ERROR("Client Cookie wants to use unavailable AES");
|
||||
fi
|
||||
AC_DEFINE(AES_CC, 1,
|
||||
[Use AES for Client Cookie generation])
|
||||
;;
|
||||
esac
|
||||
if test "checkcc" = "$want_openssl_hash"
|
||||
then
|
||||
want_openssl_hash="no"
|
||||
|
||||
@@ -112,6 +112,18 @@
|
||||
and IPv6 lookups. [GL #182]
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
A SipHash 2-4 based DNS Cookie (RFC 7873) algorithm has been added.
|
||||
</para>
|
||||
<para>
|
||||
If you are running multiple DNS Servers (different versions of BIND 9
|
||||
or DNS server from multiple vendors) responding from the same IP
|
||||
address (anycast or load-balancing scenarios), you'll have to make
|
||||
sure that all the servers are configured with the same DNS Cookie
|
||||
algorithm and same Server Secret for the best performance.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</section>
|
||||
|
||||
|
||||
+1
-1
@@ -114,7 +114,7 @@ options {
|
||||
check-wildcard <boolean>;
|
||||
cleaning-interval <integer>;
|
||||
clients-per-query <integer>;
|
||||
cookie-algorithm ( aes | sha1 | sha256 );
|
||||
cookie-algorithm ( aes | sha1 | sha256 | siphash24 );
|
||||
cookie-secret <string>; // may occur multiple times
|
||||
coresize ( default | unlimited | <sizeval> );
|
||||
datasize ( default | unlimited | <sizeval> );
|
||||
|
||||
+9
-2
@@ -32,6 +32,7 @@
|
||||
#include <isc/result.h>
|
||||
#include <isc/sha1.h>
|
||||
#include <isc/sha2.h>
|
||||
#include <isc/siphash.h>
|
||||
#include <isc/sockaddr.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/symtab.h>
|
||||
@@ -1417,8 +1418,14 @@ check_options(const cfg_obj_t *options, isc_log_t *logctx, isc_mem_t *mctx,
|
||||
if (strcasecmp(ccalg, "aes") == 0 &&
|
||||
usedlength != ISC_AES128_KEYLENGTH) {
|
||||
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
|
||||
"AES cookie-secret must be "
|
||||
"128 bits");
|
||||
"AES cookie-secret must be 128 bits");
|
||||
if (result == ISC_R_SUCCESS)
|
||||
result = ISC_R_RANGE;
|
||||
}
|
||||
if (strcasecmp(ccalg, "siphash24") == 0 &&
|
||||
usedlength != ISC_SIPHASH24_KEY_LENGTH) {
|
||||
cfg_obj_log(obj, logctx, ISC_LOG_ERROR,
|
||||
"SipHash-2-4 cookie-secret must be 128 bits");
|
||||
if (result == ISC_R_SUCCESS)
|
||||
result = ISC_R_RANGE;
|
||||
}
|
||||
|
||||
+45
-81
@@ -22,18 +22,13 @@
|
||||
#include <isc/print.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/random.h>
|
||||
#include <isc/siphash.h>
|
||||
#include <isc/socket.h>
|
||||
#include <isc/stats.h>
|
||||
#include <isc/task.h>
|
||||
#include <isc/timer.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#ifdef AES_CC
|
||||
#include <isc/aes.h>
|
||||
#else
|
||||
#include <isc/hmacsha.h>
|
||||
#endif
|
||||
|
||||
#include <dns/acl.h>
|
||||
#include <dns/adb.h>
|
||||
#include <dns/badcache.h>
|
||||
@@ -207,7 +202,7 @@ typedef struct query {
|
||||
isc_mem_t * mctx;
|
||||
dns_dispatchmgr_t * dispatchmgr;
|
||||
dns_dispatch_t * dispatch;
|
||||
bool exclusivesocket;
|
||||
bool exclusivesocket;
|
||||
dns_adbaddrinfo_t * addrinfo;
|
||||
isc_socket_t * tcpsocket;
|
||||
isc_time_t start;
|
||||
@@ -219,7 +214,7 @@ typedef struct query {
|
||||
dns_tsigkey_t *tsigkey;
|
||||
isc_socketevent_t sendevent;
|
||||
isc_dscp_t dscp;
|
||||
int ednsversion;
|
||||
int ednsversion;
|
||||
unsigned int options;
|
||||
unsigned int attributes;
|
||||
unsigned int sends;
|
||||
@@ -2009,79 +2004,46 @@ add_triededns512(fetchctx_t *fctx, isc_sockaddr_t *address) {
|
||||
ISC_LIST_INITANDAPPEND(fctx->edns512, tried, link);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
addr2buf(void *buf, const size_t bufsize, const isc_sockaddr_t *sockaddr) {
|
||||
isc_netaddr_t netaddr;
|
||||
isc_netaddr_fromsockaddr(&netaddr, sockaddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
INSIST(bufsize >= 4);
|
||||
memmove(buf, &netaddr.type.in, 4);
|
||||
return (4);
|
||||
case AF_INET6:
|
||||
INSIST(bufsize >= 16);
|
||||
memmove(buf, &netaddr.type.in6, 16);
|
||||
return (16);
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
static inline size_t
|
||||
add_serveraddr(uint8_t *buf, const size_t bufsize, const resquery_t *query)
|
||||
{
|
||||
return (addr2buf(buf, bufsize, &query->addrinfo->sockaddr));
|
||||
}
|
||||
|
||||
#define CLIENT_COOKIE_SIZE 8U
|
||||
|
||||
static void
|
||||
compute_cc(resquery_t *query, unsigned char *cookie, size_t len) {
|
||||
#ifdef AES_CC
|
||||
unsigned char digest[ISC_AES_BLOCK_LENGTH];
|
||||
unsigned char input[16];
|
||||
isc_netaddr_t netaddr;
|
||||
unsigned int i;
|
||||
compute_cc(const resquery_t *query, uint8_t *cookie, const size_t len) {
|
||||
INSIST(len >= CLIENT_COOKIE_SIZE);
|
||||
INSIST(sizeof(query->fctx->res->view->secret)
|
||||
>= ISC_SIPHASH24_KEY_LENGTH);
|
||||
|
||||
INSIST(len >= 8U);
|
||||
uint8_t buf[16] = { 0 };
|
||||
size_t buflen = add_serveraddr(buf, sizeof(buf), query);
|
||||
|
||||
isc_netaddr_fromsockaddr(&netaddr, &query->addrinfo->sockaddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
memmove(input, (unsigned char *)&netaddr.type.in, 4);
|
||||
memset(input + 4, 0, 12);
|
||||
break;
|
||||
case AF_INET6:
|
||||
memmove(input, (unsigned char *)&netaddr.type.in6, 16);
|
||||
break;
|
||||
}
|
||||
isc_aes128_crypt(query->fctx->res->view->secret, input, digest);
|
||||
for (i = 0; i < 8; i++)
|
||||
digest[i] ^= digest[i + 8];
|
||||
memmove(cookie, digest, 8);
|
||||
#endif
|
||||
#ifdef HMAC_SHA1_CC
|
||||
unsigned char digest[ISC_SHA1_DIGESTLENGTH];
|
||||
isc_netaddr_t netaddr;
|
||||
isc_hmacsha1_t hmacsha1;
|
||||
|
||||
INSIST(len >= 8U);
|
||||
|
||||
isc_hmacsha1_init(&hmacsha1, query->fctx->res->view->secret,
|
||||
ISC_SHA1_DIGESTLENGTH);
|
||||
isc_netaddr_fromsockaddr(&netaddr, &query->addrinfo->sockaddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
isc_hmacsha1_update(&hmacsha1,
|
||||
(unsigned char *)&netaddr.type.in, 4);
|
||||
break;
|
||||
case AF_INET6:
|
||||
isc_hmacsha1_update(&hmacsha1,
|
||||
(unsigned char *)&netaddr.type.in6, 16);
|
||||
break;
|
||||
}
|
||||
isc_hmacsha1_sign(&hmacsha1, digest, sizeof(digest));
|
||||
memmove(cookie, digest, 8);
|
||||
isc_hmacsha1_invalidate(&hmacsha1);
|
||||
#endif
|
||||
#ifdef HMAC_SHA256_CC
|
||||
unsigned char digest[ISC_SHA256_DIGESTLENGTH];
|
||||
isc_netaddr_t netaddr;
|
||||
isc_hmacsha256_t hmacsha256;
|
||||
|
||||
INSIST(len >= 8U);
|
||||
|
||||
isc_hmacsha256_init(&hmacsha256, query->fctx->res->view->secret,
|
||||
ISC_SHA256_DIGESTLENGTH);
|
||||
isc_netaddr_fromsockaddr(&netaddr, &query->addrinfo->sockaddr);
|
||||
switch (netaddr.family) {
|
||||
case AF_INET:
|
||||
isc_hmacsha256_update(&hmacsha256,
|
||||
(unsigned char *)&netaddr.type.in, 4);
|
||||
break;
|
||||
case AF_INET6:
|
||||
isc_hmacsha256_update(&hmacsha256,
|
||||
(unsigned char *)&netaddr.type.in6, 16);
|
||||
break;
|
||||
}
|
||||
isc_hmacsha256_sign(&hmacsha256, digest, sizeof(digest));
|
||||
memmove(cookie, digest, 8);
|
||||
isc_hmacsha256_invalidate(&hmacsha256);
|
||||
#endif
|
||||
uint8_t digest[ISC_SIPHASH24_TAG_LENGTH] = { 0 };
|
||||
isc_siphash24(query->fctx->res->view->secret, buf, buflen, digest);
|
||||
memmove(cookie, digest, CLIENT_COOKIE_SIZE);
|
||||
}
|
||||
|
||||
static isc_result_t
|
||||
@@ -2560,10 +2522,12 @@ resquery_send(resquery_t *query) {
|
||||
*/
|
||||
dns_message_reset(fctx->qmessage, DNS_MESSAGE_INTENTRENDER);
|
||||
|
||||
if (query->exclusivesocket)
|
||||
if (query->exclusivesocket) {
|
||||
sock = dns_dispatch_getentrysocket(query->dispentry);
|
||||
else
|
||||
} else {
|
||||
sock = dns_dispatch_getsocket(query->dispatch);
|
||||
}
|
||||
|
||||
/*
|
||||
* Send the query!
|
||||
*/
|
||||
@@ -4871,9 +4835,9 @@ validated(isc_task_t *task, isc_event_t *event) {
|
||||
REQUIRE(event->ev_type == DNS_EVENT_VALIDATORDONE);
|
||||
valarg = event->ev_arg;
|
||||
fctx = valarg->fctx;
|
||||
REQUIRE(VALID_FCTX(fctx));
|
||||
res = fctx->res;
|
||||
addrinfo = valarg->addrinfo;
|
||||
REQUIRE(VALID_FCTX(fctx));
|
||||
REQUIRE(!ISC_LIST_EMPTY(fctx->validators));
|
||||
|
||||
vevent = (dns_validatorevent_t *)event;
|
||||
|
||||
+2
-2
@@ -60,7 +60,7 @@ OBJS = @ISC_EXTRA_OBJS@ @ISC_PK11_O@ @ISC_PK11_RESULT_O@ \
|
||||
parseint.@O@ portset.@O@ quota.@O@ radix.@O@ random.@O@ \
|
||||
ratelimiter.@O@ refcount.@O@ region.@O@ regex.@O@ result.@O@ \
|
||||
rwlock.@O@ \
|
||||
safe.@O@ serial.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ stats.@O@ \
|
||||
safe.@O@ serial.@O@ siphash.@O@ sha1.@O@ sha2.@O@ sockaddr.@O@ stats.@O@ \
|
||||
string.@O@ strtoul.@O@ symtab.@O@ task.@O@ taskpool.@O@ \
|
||||
tm.@O@ timer.@O@ version.@O@ \
|
||||
${UNIXOBJS} ${NLSOBJS} ${THREADOBJS}
|
||||
@@ -79,7 +79,7 @@ SRCS = @ISC_EXTRA_SRCS@ @ISC_PK11_C@ @ISC_PK11_RESULT_C@ \
|
||||
netaddr.c netscope.c pool.c ondestroy.c \
|
||||
parseint.c portset.c quota.c radix.c random.c ${CHACHASRCS} \
|
||||
ratelimiter.c refcount.c region.c regex.c result.c rwlock.c \
|
||||
safe.c serial.c sha1.c sha2.c sockaddr.c stats.c string.c \
|
||||
safe.c serial.c siphash.c sha1.c sha2.c sockaddr.c stats.c string.c \
|
||||
strtoul.c symtab.c task.c taskpool.c timer.c \
|
||||
tm.c version.c
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ VERSION=@BIND9_VERSION@
|
||||
HEADERS = aes.h app.h assertions.h boolean.h backtrace.h base32.h base64.h \
|
||||
bind9.h buffer.h bufferlist.h commandline.h \
|
||||
counter.h crc64.h deprecated.h entropy.h errno.h \
|
||||
error.h event.h eventclass.h file.h formatcheck.h \
|
||||
endian.h error.h event.h eventclass.h file.h formatcheck.h \
|
||||
fsaccess.h hash.h heap.h hex.h hmacmd5.h hmacsha.h \
|
||||
ht.h httpd.h int.h interfaceiter.h @ISC_IPV6_H@ iterated_hash.h \
|
||||
json.h lang.h lex.h lfsr.h lib.h likely.h list.h \
|
||||
@@ -30,7 +30,7 @@ HEADERS = aes.h app.h assertions.h boolean.h backtrace.h base32.h base64.h \
|
||||
parseint.h pool.h portset.h print.h queue.h quota.h \
|
||||
radix.h random.h ratelimiter.h refcount.h regex.h \
|
||||
region.h resource.h result.h resultclass.h rwlock.h \
|
||||
safe.h serial.h sha1.h sha2.h sockaddr.h socket.h \
|
||||
safe.h serial.h siphash.h sha1.h sha2.h sockaddr.h socket.h \
|
||||
stats.h stdio.h stdlib.h string.h symtab.h task.h \
|
||||
taskpool.h timer.h tm.h types.h util.h version.h \
|
||||
xml.h
|
||||
|
||||
@@ -0,0 +1,187 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#if defined(__DragonFly__) || defined(__FreeBSD__) || \
|
||||
defined(__NetBSD__) || defined (__OpenBSD__) || defined(__bsdi__)
|
||||
|
||||
# include <sys/endian.h>
|
||||
|
||||
/*
|
||||
* Recent BSDs should have [bl]e{16,32,64}toh() defined in <sys/endian.h>.
|
||||
* Older ones might not, but these should have the alternatively named
|
||||
* [bl]etoh{16,32,64}() functions defined.
|
||||
*/
|
||||
# ifndef be16toh
|
||||
# define be16toh(x) betoh16(x)
|
||||
# define le16toh(x) letoh16(x)
|
||||
# define be32toh(x) betoh32(x)
|
||||
# define le32toh(x) letoh32(x)
|
||||
# define be64toh(x) betoh64(x)
|
||||
# define le64toh(x) letoh64(x)
|
||||
# endif /* !be16toh */
|
||||
|
||||
#elif defined(_WIN32)
|
||||
|
||||
/*
|
||||
* Windows is always little-endian and has its own byte-swapping routines, so
|
||||
* use these.
|
||||
*/
|
||||
|
||||
# include <stdlib.h>
|
||||
|
||||
# define htobe16(x) _byteswap_ushort(x)
|
||||
# define htole16(x) (x)
|
||||
# define be16toh(x) _byteswap_ushort(x)
|
||||
# define le16toh(x) (x)
|
||||
|
||||
# define htobe32(x) _byteswap_ulong(x)
|
||||
# define htole32(x) (x)
|
||||
# define be32toh(x) _byteswap_ulong(x)
|
||||
# define le32toh(x) (x)
|
||||
|
||||
# define htobe64(x) _byteswap_uint64(x)
|
||||
# define htole64(x) (x)
|
||||
# define be64toh(x) _byteswap_uint64(x)
|
||||
# define le64toh(x) (x)
|
||||
|
||||
#elif defined __APPLE__
|
||||
|
||||
/*
|
||||
* macOS has its own byte-swapping routines, so use these.
|
||||
*/
|
||||
|
||||
# include <libkern/OSByteOrder.h>
|
||||
|
||||
# define htobe16(x) OSSwapHostToBigInt16(x)
|
||||
# define htole16(x) OSSwapHostToLittleInt16(x)
|
||||
# define be16toh(x) OSSwapBigToHostInt16(x)
|
||||
# define le16toh(x) OSSwapLittleToHostInt16(x)
|
||||
|
||||
# define htobe32(x) OSSwapHostToBigInt32(x)
|
||||
# define htole32(x) OSSwapHostToLittleInt32(x)
|
||||
# define be32toh(x) OSSwapBigToHostInt32(x)
|
||||
# define le32toh(x) OSSwapLittleToHostInt32(x)
|
||||
|
||||
# define htobe64(x) OSSwapHostToBigInt64(x)
|
||||
# define htole64(x) OSSwapHostToLittleInt64(x)
|
||||
# define be64toh(x) OSSwapBigToHostInt64(x)
|
||||
# define le64toh(x) OSSwapLittleToHostInt64(x)
|
||||
|
||||
#elif defined(sun) || defined(__sun) || defined(__SVR4)
|
||||
|
||||
/*
|
||||
* For Solaris, rely on the fallback definitions below, though use
|
||||
* Solaris-specific versions of bswap_{16,32,64}().
|
||||
*/
|
||||
|
||||
# include <sys/byteorder.h>
|
||||
|
||||
# define bswap_16(x) BSWAP_16(x)
|
||||
# define bswap_32(x) BSWAP_32(x)
|
||||
# define bswap_64(x) BSWAP_64(x)
|
||||
|
||||
#elif defined(__ANDROID__) || defined(__CYGWIN__) || \
|
||||
defined(__GNUC__) || defined(__GNU__)
|
||||
|
||||
# include <byteswap.h>
|
||||
# include <endian.h>
|
||||
|
||||
#else
|
||||
|
||||
#endif /* Specific platform support */
|
||||
|
||||
/*
|
||||
* Fallback definitions.
|
||||
*/
|
||||
|
||||
#include <inttypes.h>
|
||||
|
||||
#ifndef bswap_16
|
||||
# define bswap_16(x) \
|
||||
((uint16_t)((((uint16_t) (x) & 0xff00) >> 8) | \
|
||||
(((uint16_t) (x) & 0x00ff) << 8)))
|
||||
#endif /* !bswap_16 */
|
||||
|
||||
#ifndef bswap_32
|
||||
# define bswap_32(x) \
|
||||
((uint32_t)((((uint32_t) (x) & 0xff000000) >> 24) | \
|
||||
(((uint32_t) (x) & 0x00ff0000) >> 8) | \
|
||||
(((uint32_t) (x) & 0x0000ff00) << 8) | \
|
||||
(((uint32_t) (x) & 0x000000ff) << 24)))
|
||||
#endif /* !bswap_32 */
|
||||
|
||||
#ifndef bswap_64
|
||||
# define bswap_64(x) \
|
||||
((uint64_t)((((uint64_t) (x) & 0xff00000000000000ULL) >> 56) | \
|
||||
(((uint64_t) (x) & 0x00ff000000000000ULL) >> 40) | \
|
||||
(((uint64_t) (x) & 0x0000ff0000000000ULL) >> 24) | \
|
||||
(((uint64_t) (x) & 0x000000ff00000000ULL) >> 8) | \
|
||||
(((uint64_t) (x) & 0x00000000ff000000ULL) << 8) | \
|
||||
(((uint64_t) (x) & 0x0000000000ff0000ULL) << 24) | \
|
||||
(((uint64_t) (x) & 0x000000000000ff00ULL) << 40) | \
|
||||
(((uint64_t) (x) & 0x00000000000000ffULL) << 56)))
|
||||
#endif /* !bswap_64 */
|
||||
|
||||
#ifndef htobe16
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe16(x) (x)
|
||||
# define htole16(x) bswap_16(x)
|
||||
# define be16toh(x) (x)
|
||||
# define le16toh(x) bswap_16(x)
|
||||
|
||||
# else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe16(x) bswap_16(x)
|
||||
# define htole16(x) (x)
|
||||
# define be16toh(x) bswap_16(x)
|
||||
# define le16toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe16 */
|
||||
|
||||
#ifndef htobe32
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe32(x) (x)
|
||||
# define htole32(x) bswap_32(x)
|
||||
# define be32toh(x) (x)
|
||||
# define le32toh(x) bswap_32(x)
|
||||
|
||||
# else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe32(x) bswap_32(x)
|
||||
# define htole32(x) (x)
|
||||
# define be32toh(x) bswap_32(x)
|
||||
# define le32toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe32 */
|
||||
|
||||
#ifndef htobe64
|
||||
# if WORDS_BIGENDIAN
|
||||
|
||||
# define htobe64(x) (x)
|
||||
# define htole64(x) bswap_64(x)
|
||||
# define be64toh(x) (x)
|
||||
# define le64toh(x) bswap_64(x)
|
||||
|
||||
#else /* WORDS_BIGENDIAN */
|
||||
|
||||
# define htobe64(x) bswap_64(x)
|
||||
# define htole64(x) (x)
|
||||
# define be64toh(x) bswap_64(x)
|
||||
# define le64toh(x) (x)
|
||||
|
||||
# endif /* WORDS_BIGENDIAN */
|
||||
#endif /* !htobe64 */
|
||||
@@ -0,0 +1,31 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
|
||||
/*! \file isc/siphash.h */
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <isc/lang.h>
|
||||
#include <isc/platform.h>
|
||||
#include <isc/types.h>
|
||||
|
||||
#define ISC_SIPHASH24_KEY_LENGTH 128 / 8
|
||||
#define ISC_SIPHASH24_TAG_LENGTH 64 / 8
|
||||
|
||||
ISC_LANG_BEGINDECLS
|
||||
|
||||
void
|
||||
isc_siphash24(const uint8_t *key,
|
||||
const uint8_t *in, size_t inlen,
|
||||
uint8_t *out);
|
||||
|
||||
ISC_LANG_ENDDECLS
|
||||
@@ -0,0 +1,135 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
/*
|
||||
siphash() function is SipHash reference C implementation
|
||||
|
||||
Copyright (c) 2012-2016 Jean-Philippe Aumasson <jeanphilippe.aumasson@gmail.com>
|
||||
Copyright (c) 2012-2014 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/>.
|
||||
*/
|
||||
|
||||
/*! \file isc/siphash.c */
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <inttypes.h>
|
||||
#include <unistd.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <isc/endian.h>
|
||||
#include <isc/util.h>
|
||||
#include <isc/siphash.h>
|
||||
|
||||
#define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
|
||||
|
||||
#define HALF_ROUND(a, b, c, d, s, t) \
|
||||
a += b; c += d; \
|
||||
b = ROTATE(b, s) ^ a; \
|
||||
d = ROTATE(d, t) ^ c; \
|
||||
a = ROTATE(a, 32);
|
||||
|
||||
#define FULL_ROUND(v0, v1, v2, v3) \
|
||||
HALF_ROUND(v0, v1, v2, v3, 13, 16); \
|
||||
HALF_ROUND(v2, v1, v0, v3, 17, 21);
|
||||
|
||||
#define DOUBLE_ROUND(v0, v1, v2, v3) \
|
||||
FULL_ROUND(v0, v1, v2, v3) \
|
||||
FULL_ROUND(v0, v1, v2, v3)
|
||||
|
||||
#define SIPROUND FULL_ROUND
|
||||
|
||||
void
|
||||
isc_siphash24(const uint8_t *k, const uint8_t *in, size_t inlen, uint8_t *out)
|
||||
{
|
||||
const uint64_t *key = (const uint64_t *)k;
|
||||
uint64_t k0 = le64toh(key[0]);
|
||||
uint64_t k1 = le64toh(key[1]);
|
||||
|
||||
uint64_t v0 = 0x736f6d6570736575ULL ^ k0;
|
||||
uint64_t v1 = 0x646f72616e646f6dULL ^ k1;
|
||||
uint64_t v2 = 0x6c7967656e657261ULL ^ k0;
|
||||
uint64_t v3 = 0x7465646279746573ULL ^ k1;
|
||||
|
||||
size_t left = inlen;
|
||||
|
||||
uint64_t b = ((uint64_t)inlen) << 56;
|
||||
|
||||
const uint64_t *inbuf = (const uint64_t *)in;
|
||||
while (left >= 8) {
|
||||
uint64_t m = le64toh(*inbuf);
|
||||
|
||||
v3 ^= m;
|
||||
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
|
||||
v0 ^= m;
|
||||
|
||||
inbuf++; left -= 8;
|
||||
}
|
||||
|
||||
const uint8_t *end = in + (inlen - left);
|
||||
|
||||
switch (left) {
|
||||
case 7:
|
||||
b |= ((uint64_t)end[6]) << 48;
|
||||
/* FALLTHROUGH */
|
||||
case 6:
|
||||
b |= ((uint64_t)end[5]) << 40;
|
||||
/* FALLTHROUGH */
|
||||
case 5:
|
||||
b |= ((uint64_t)end[4]) << 32;
|
||||
/* FALLTHROUGH */
|
||||
case 4:
|
||||
b |= ((uint64_t)end[3]) << 24;
|
||||
/* FALLTHROUGH */
|
||||
case 3:
|
||||
b |= ((uint64_t)end[2]) << 16;
|
||||
/* FALLTHROUGH */
|
||||
case 2:
|
||||
b |= ((uint64_t)end[1]) << 8;
|
||||
/* FALLTHROUGH */
|
||||
case 1:
|
||||
b |= ((uint64_t)end[0]);
|
||||
/* FALLTHROUGH */
|
||||
case 0:
|
||||
break;
|
||||
default:
|
||||
INSIST(0);
|
||||
ISC_UNREACHABLE();
|
||||
}
|
||||
|
||||
v3 ^= b;
|
||||
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
|
||||
v0 ^= b;
|
||||
|
||||
v2 ^= 0xff;
|
||||
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
SIPROUND(v0, v1, v2, v3);
|
||||
|
||||
b = v0 ^ v1 ^ v2 ^ v3;
|
||||
|
||||
uint64_t *outbuf = (uint64_t *)out;
|
||||
*outbuf = htole64(b);
|
||||
}
|
||||
@@ -23,6 +23,7 @@ tap_test_program{name='random_test'}
|
||||
tap_test_program{name='regex_test'}
|
||||
tap_test_program{name='result_test'}
|
||||
tap_test_program{name='safe_test'}
|
||||
tap_test_program{name='siphash_test'}
|
||||
tap_test_program{name='sockaddr_test'}
|
||||
tap_test_program{name='socket_test'}
|
||||
tap_test_program{name='symtab_test'}
|
||||
|
||||
@@ -30,7 +30,7 @@ SRCS = isctest.c aes_test.c atomic_test.c buffer_test.c \
|
||||
heap_test.c ht_test.c inet_ntop_test.c lex_test.c \
|
||||
mem_test.c netaddr_test.c parse_test.c pool_test.c \
|
||||
print_test.c queue_test.c radix_test.c random_test.c \
|
||||
regex_test.c result_test.c safe_test.c sockaddr_test.c \
|
||||
regex_test.c result_test.c safe_test.c siphash_test.c sockaddr_test.c \
|
||||
socket_test.c socket_test.c symtab_test.c task_test.c \
|
||||
taskpool_test.c time_test.c timer_test.c
|
||||
|
||||
@@ -42,7 +42,7 @@ TARGETS = aes_test@EXEEXT@ atomic_test@EXEEXT@ buffer_test@EXEEXT@ \
|
||||
netaddr_test@EXEEXT@ parse_test@EXEEXT@ pool_test@EXEEXT@ \
|
||||
print_test@EXEEXT@ queue_test@EXEEXT@ radix_test@EXEEXT@ \
|
||||
random_test@EXEEXT@ regex_test@EXEEXT@ result_test@EXEEXT@ \
|
||||
safe_test@EXEEXT@ sockaddr_test@EXEEXT@ socket_test@EXEEXT@ \
|
||||
safe_test@EXEEXT@ siphash_test@EXEEXT@ sockaddr_test@EXEEXT@ socket_test@EXEEXT@ \
|
||||
socket_test@EXEEXT@ symtab_test@EXEEXT@ task_test@EXEEXT@ \
|
||||
taskpool_test@EXEEXT@ time_test@EXEEXT@ timer_test@EXEEXT@
|
||||
|
||||
@@ -160,6 +160,11 @@ safe_test@EXEEXT@: safe_test.@O@ ${ISCDEPLIBS}
|
||||
${LDFLAGS} -o $@ safe_test.@O@ \
|
||||
${ISCLIBS} ${LIBS}
|
||||
|
||||
siphash_test@EXEEXT@: siphash_test.@O@ ../siphash.c ${ISCDEPLIBS}
|
||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} \
|
||||
${LDFLAGS} -o $@ siphash_test.@O@ \
|
||||
${ISCLIBS} ${LIBS}
|
||||
|
||||
socket_test@EXEEXT@: socket_test.@O@ isctest.@O@ ${ISCDEPLIBS}
|
||||
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} \
|
||||
${LDFLAGS} -o $@ socket_test.@O@ isctest.@O@ \
|
||||
|
||||
@@ -0,0 +1,131 @@
|
||||
/*
|
||||
* Copyright (C) Internet Systems Consortium, Inc. ("ISC")
|
||||
*
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
*
|
||||
* See the COPYRIGHT file distributed with this work for additional
|
||||
* information regarding copyright ownership.
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#if HAVE_CMOCKA
|
||||
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
#include <setjmp.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#define UNIT_TESTING
|
||||
#include <cmocka.h>
|
||||
|
||||
#include <isc/siphash.h>
|
||||
#include <isc/print.h>
|
||||
|
||||
#include "../siphash.c"
|
||||
|
||||
const uint8_t vectors[64][8] = {
|
||||
{ 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, },
|
||||
{ 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, },
|
||||
{ 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, },
|
||||
{ 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, },
|
||||
{ 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, },
|
||||
{ 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, },
|
||||
{ 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, },
|
||||
{ 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, },
|
||||
{ 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, },
|
||||
{ 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, },
|
||||
{ 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, },
|
||||
{ 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, },
|
||||
{ 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, },
|
||||
{ 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, },
|
||||
{ 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, },
|
||||
{ 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, },
|
||||
{ 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, },
|
||||
{ 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, },
|
||||
{ 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, },
|
||||
{ 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, },
|
||||
{ 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, },
|
||||
{ 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, },
|
||||
{ 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, },
|
||||
{ 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, },
|
||||
{ 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, },
|
||||
{ 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, },
|
||||
{ 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, },
|
||||
{ 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, },
|
||||
{ 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, },
|
||||
{ 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, },
|
||||
{ 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, },
|
||||
{ 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, },
|
||||
{ 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, },
|
||||
{ 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, },
|
||||
{ 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, },
|
||||
{ 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, },
|
||||
{ 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, },
|
||||
{ 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, },
|
||||
{ 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, },
|
||||
{ 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, },
|
||||
{ 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, },
|
||||
{ 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, },
|
||||
{ 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, },
|
||||
{ 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, },
|
||||
{ 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, },
|
||||
{ 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, },
|
||||
{ 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, },
|
||||
{ 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, },
|
||||
{ 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, },
|
||||
{ 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, },
|
||||
{ 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, },
|
||||
{ 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, },
|
||||
{ 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, },
|
||||
{ 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, },
|
||||
{ 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, },
|
||||
{ 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, },
|
||||
{ 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, },
|
||||
{ 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, },
|
||||
{ 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, },
|
||||
{ 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, },
|
||||
{ 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, },
|
||||
{ 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, },
|
||||
{ 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, },
|
||||
{ 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, },
|
||||
};
|
||||
|
||||
static void
|
||||
isc_siphash24_test(void **state) {
|
||||
UNUSED(state);
|
||||
|
||||
uint8_t in[64], out[8], key[16];
|
||||
for (int i = 0; i < 16; i++) {
|
||||
key[i] = i;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 64; i++) {
|
||||
in[i] = i;
|
||||
isc_siphash24(key, in, i, out);
|
||||
assert_memory_equal(out, vectors[i], 8);
|
||||
}
|
||||
}
|
||||
|
||||
int main(void) {
|
||||
const struct CMUnitTest tests[] = {
|
||||
cmocka_unit_test(isc_siphash24_test),
|
||||
};
|
||||
|
||||
return (cmocka_run_group_tests(tests, NULL, NULL));
|
||||
}
|
||||
|
||||
#else /* HAVE_CMOCKA */
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
int
|
||||
main(void) {
|
||||
printf("1..0 # Skipped: cmocka not available\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
#endif
|
||||
@@ -605,6 +605,7 @@ isc_sha512_final
|
||||
isc_sha512_init
|
||||
isc_sha512_invalidate
|
||||
isc_sha512_update
|
||||
isc_siphash24
|
||||
isc_sockaddr_any
|
||||
isc_sockaddr_any6
|
||||
isc_sockaddr_anyofpf
|
||||
|
||||
@@ -67,6 +67,9 @@
|
||||
<ClInclude Include="..\include\isc\crc64.h">
|
||||
<Filter>Library Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\isc\endian.h">
|
||||
<Filter>Library Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\isc\entropy.h">
|
||||
<Filter>Library Header Files</Filter>
|
||||
</ClInclude>
|
||||
@@ -233,6 +236,7 @@
|
||||
<Filter>Library Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\isc\sha2.h">
|
||||
<ClInclude Include="..\include\isc\siphash.h">
|
||||
<Filter>Library Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\include\isc\sockaddr.h">
|
||||
@@ -637,6 +641,7 @@
|
||||
<Filter>Library Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\sha2.c">
|
||||
<ClCompile Include="..\siphash.c">
|
||||
<Filter>Library Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\sockaddr.c">
|
||||
|
||||
@@ -312,6 +312,7 @@ copy InstallFiles ..\Build\Release\
|
||||
<ClInclude Include="..\include\isc\commandline.h" />
|
||||
<ClInclude Include="..\include\isc\counter.h" />
|
||||
<ClInclude Include="..\include\isc\crc64.h" />
|
||||
<ClInclude Include="..\include\isc\endian.h" />
|
||||
<ClInclude Include="..\include\isc\entropy.h" />
|
||||
<ClInclude Include="..\include\isc\errno.h" />
|
||||
<ClInclude Include="..\include\isc\error.h" />
|
||||
@@ -368,6 +369,7 @@ copy InstallFiles ..\Build\Release\
|
||||
<ClInclude Include="..\include\isc\serial.h" />
|
||||
<ClInclude Include="..\include\isc\sha1.h" />
|
||||
<ClInclude Include="..\include\isc\sha2.h" />
|
||||
<ClInclude Include="..\include\isc\siphash.h" />
|
||||
<ClInclude Include="..\include\isc\sockaddr.h" />
|
||||
<ClInclude Include="..\include\isc\socket.h" />
|
||||
<ClInclude Include="..\include\isc\stats.h" />
|
||||
@@ -481,6 +483,7 @@ copy InstallFiles ..\Build\Release\
|
||||
<ClCompile Include="..\serial.c" />
|
||||
<ClCompile Include="..\sha1.c" />
|
||||
<ClCompile Include="..\sha2.c" />
|
||||
<ClCompile Include="..\siphash.c" />
|
||||
<ClCompile Include="..\sockaddr.c" />
|
||||
<ClCompile Include="..\stats.c" />
|
||||
<ClCompile Include="..\string.c" />
|
||||
|
||||
@@ -912,7 +912,7 @@ static cfg_type_t cfg_type_bracketed_portlist = {
|
||||
&cfg_rep_list, &cfg_type_portrange
|
||||
};
|
||||
|
||||
static const char *cookiealg_enums[] = { "aes", "sha1", "sha256", NULL };
|
||||
static const char *cookiealg_enums[] = { "aes", "sha1", "sha256", "siphash24", NULL };
|
||||
static cfg_type_t cfg_type_cookiealg = {
|
||||
"cookiealg", cfg_parse_enum, cfg_print_ustring, cfg_doc_enum,
|
||||
&cfg_rep_string, &cookiealg_enums
|
||||
|
||||
@@ -911,13 +911,17 @@
|
||||
./bin/tests/system/common/root.hint ZONE 2000,2001,2004,2007,2016,2018,2019
|
||||
./bin/tests/system/conf.sh.in SH 2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013,2014,2015,2016,2017,2018,2019
|
||||
./bin/tests/system/conf.sh.win32 SH 2016,2017,2018,2019
|
||||
./bin/tests/system/cookie/bad-cookie-badaes.conf.in X 2019
|
||||
./bin/tests/system/cookie/bad-cookie-badhex.conf CONF-C 2014,2015,2016,2018,2019
|
||||
./bin/tests/system/cookie/bad-cookie-badsha1.conf CONF-C 2017,2018,2019
|
||||
./bin/tests/system/cookie/bad-cookie-badsha256.conf CONF-C 2017,2018,2019
|
||||
./bin/tests/system/cookie/bad-cookie-badsiphash24.conf X 2019
|
||||
./bin/tests/system/cookie/bad-cookie-toolong.conf CONF-C 2014,2015,2016,2018,2019
|
||||
./bin/tests/system/cookie/clean.sh SH 2014,2015,2016,2018,2019
|
||||
./bin/tests/system/cookie/good-cookie-aes.conf.in X 2019
|
||||
./bin/tests/system/cookie/good-cookie-sha1.conf CONF-C 2017,2018,2019
|
||||
./bin/tests/system/cookie/good-cookie-sha256.conf CONF-C 2017,2018,2019
|
||||
./bin/tests/system/cookie/good-cookie-siphash24.conf X 2019
|
||||
./bin/tests/system/cookie/ns1/example.db ZONE 2014,2015,2016,2018,2019
|
||||
./bin/tests/system/cookie/ns1/named.conf.in CONF-C 2018,2019
|
||||
./bin/tests/system/cookie/ns1/root.hint ZONE 2014,2015,2016,2018,2019
|
||||
@@ -3919,6 +3923,7 @@
|
||||
./lib/isc/include/isc/counter.h C 2014,2016,2018,2019
|
||||
./lib/isc/include/isc/crc64.h C 2013,2016,2018,2019
|
||||
./lib/isc/include/isc/deprecated.h C 2017,2018,2019
|
||||
./lib/isc/include/isc/endian.h C 2019
|
||||
./lib/isc/include/isc/entropy.h C 2000,2001,2004,2005,2006,2007,2009,2016,2018,2019
|
||||
./lib/isc/include/isc/errno.h C 2016,2018,2019
|
||||
./lib/isc/include/isc/error.h C 1998,1999,2000,2001,2004,2005,2006,2007,2009,2016,2017,2018,2019
|
||||
@@ -3978,6 +3983,7 @@
|
||||
./lib/isc/include/isc/serial.h C 1999,2000,2001,2004,2005,2006,2007,2009,2016,2018,2019
|
||||
./lib/isc/include/isc/sha1.h C 2000,2001,2004,2005,2006,2007,2009,2014,2016,2017,2018,2019
|
||||
./lib/isc/include/isc/sha2.h C 2005,2006,2007,2009,2014,2016,2017,2018,2019
|
||||
./lib/isc/include/isc/siphash.h C 2019
|
||||
./lib/isc/include/isc/sockaddr.h C 1998,1999,2000,2001,2002,2003,2004,2005,2006,2007,2009,2012,2015,2016,2018,2019
|
||||
./lib/isc/include/isc/socket.h C 1998,1999,2000,2001,2002,2004,2005,2006,2007,2008,2009,2011,2012,2013,2014,2016,2018,2019
|
||||
./lib/isc/include/isc/stats.h C 2009,2012,2016,2018,2019
|
||||
@@ -4073,6 +4079,7 @@
|
||||
./lib/isc/serial.c C 1999,2000,2001,2004,2005,2007,2016,2018,2019
|
||||
./lib/isc/sha1.c C 2000,2001,2003,2004,2005,2007,2009,2011,2012,2014,2016,2017,2018,2019
|
||||
./lib/isc/sha2.c C 2005,2006,2007,2009,2011,2012,2014,2016,2017,2018,2019
|
||||
./lib/isc/siphash.c C 2019
|
||||
./lib/isc/sockaddr.c C 1999,2000,2001,2002,2003,2004,2005,2006,2007,2010,2011,2012,2014,2015,2016,2017,2018,2019
|
||||
./lib/isc/socket_api.c C 2009,2011,2012,2013,2014,2015,2016,2018,2019
|
||||
./lib/isc/sparc64/Makefile.in MAKE 2007,2012,2016,2018,2019
|
||||
@@ -4112,6 +4119,7 @@
|
||||
./lib/isc/tests/regex_test.c C 2013,2015,2016,2018,2019
|
||||
./lib/isc/tests/result_test.c C 2015,2016,2018,2019
|
||||
./lib/isc/tests/safe_test.c C 2013,2015,2016,2017,2018,2019
|
||||
./lib/isc/tests/siphash_test.c C 2019
|
||||
./lib/isc/tests/sockaddr_test.c C 2012,2015,2016,2017,2018,2019
|
||||
./lib/isc/tests/socket_test.c C 2011,2012,2013,2014,2015,2016,2017,2018,2019
|
||||
./lib/isc/tests/symtab_test.c C 2011,2012,2013,2016,2018,2019
|
||||
|
||||
+1
-19
@@ -340,8 +340,7 @@ my @projectlist = ("..\\bin\\check\\win32\\checkconf.vcxproj",
|
||||
|
||||
my %configdefh;
|
||||
|
||||
my @substdefh = ("AES_CC",
|
||||
"ALLOW_FILTER_AAAA",
|
||||
my @substdefh = ("ALLOW_FILTER_AAAA",
|
||||
"CONFIGARGS",
|
||||
"DNS_RDATASET_FIXED",
|
||||
"ENABLE_RPZ_NSDNAME",
|
||||
@@ -368,8 +367,6 @@ my @substdefh = ("AES_CC",
|
||||
"HAVE_PKCS11_GOST",
|
||||
"HAVE_READLINE",
|
||||
"HAVE_ZLIB",
|
||||
"HMAC_SHA1_CC",
|
||||
"HMAC_SHA256_CC",
|
||||
"ISC_LIST_CHECKINIT",
|
||||
"PREFER_GOSTASN1",
|
||||
"TUNE_LARGE",
|
||||
@@ -2244,21 +2241,6 @@ if ($use_aes eq "yes") {
|
||||
$configcond{"AES"} = 1;
|
||||
}
|
||||
|
||||
# with-cc-alg
|
||||
if ($cookie_algorithm eq "aes") {
|
||||
if ($use_aes ne "yes") {
|
||||
$cookie_algorithm = "sha256";
|
||||
} else {
|
||||
$configdefh{"AES_CC"} = 1;
|
||||
}
|
||||
}
|
||||
if ($cookie_algorithm eq "sha1") {
|
||||
$configdefh{"HMAC_SHA1_CC"} = 1;
|
||||
} elsif ($cookie_algorithm eq "sha256") {
|
||||
$configdefh{"HMAC_SHA256_CC"} = 1;
|
||||
} elsif ($cookie_algorithm ne "aes") {
|
||||
die "Unrecognized cookie algorithm: $cookie_algorithm\n";
|
||||
}
|
||||
|
||||
# enable-openssl-hash
|
||||
if ($enable_openssl_hash eq "yes") {
|
||||
|
||||
Reference in New Issue
Block a user