From fe63b254419e0e7826f6ebc69f9606e432d98c13 Mon Sep 17 00:00:00 2001 From: "W.C.A. Wijngaards" Date: Tue, 24 Jun 2025 16:31:18 +0200 Subject: [PATCH] - xfr-tsig, parse and verify query tsig. --- config.h.in | 6 + configure | 12 + configure.ac | 2 +- sldns/rrdef.h | 1 + sldns/wire2str.c | 1 + testcode/unittsig.c | 93 ++++++++ util/tsig.c | 545 +++++++++++++++++++++++++++++++++++++++++++- util/tsig.h | 42 +++- 8 files changed, 687 insertions(+), 15 deletions(-) diff --git a/config.h.in b/config.h.in index b166f6f23..3fe6c73a2 100644 --- a/config.h.in +++ b/config.h.in @@ -249,6 +249,9 @@ /* Define to 1 if you have the `EVP_EncryptInit_ex' function. */ #undef HAVE_EVP_ENCRYPTINIT_EX +/* Define to 1 if you have the `EVP_MAC_CTX_new' function. */ +#undef HAVE_EVP_MAC_CTX_NEW + /* Define to 1 if you have the `EVP_MAC_CTX_set_params' function. */ #undef HAVE_EVP_MAC_CTX_SET_PARAMS @@ -330,6 +333,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_HIREDIS_HIREDIS_H +/* Define to 1 if you have the `HMAC_CTX_new' function. */ +#undef HAVE_HMAC_CTX_NEW + /* Define to 1 if you have the `HMAC_Init_ex' function. */ #undef HAVE_HMAC_INIT_EX diff --git a/configure b/configure index af58f5ef6..e9d8a473f 100755 --- a/configure +++ b/configure @@ -20824,6 +20824,18 @@ then : printf "%s\n" "#define HAVE_SSL_CTX_SET_TMP_ECDH 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "HMAC_CTX_new" "ac_cv_func_HMAC_CTX_new" +if test "x$ac_cv_func_HMAC_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_HMAC_CTX_NEW 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "EVP_MAC_CTX_new" "ac_cv_func_EVP_MAC_CTX_new" +if test "x$ac_cv_func_EVP_MAC_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_EVP_MAC_CTX_NEW 1" >>confdefs.h + +fi # these check_funcs need -lssl diff --git a/configure.ac b/configure.ac index ff50e1e27..d2e9b47f4 100644 --- a/configure.ac +++ b/configure.ac @@ -996,7 +996,7 @@ else AC_MSG_RESULT([no]) fi AC_CHECK_HEADERS([openssl/conf.h openssl/engine.h openssl/bn.h openssl/dh.h openssl/dsa.h openssl/rsa.h openssl/core_names.h openssl/param_build.h],,, [AC_INCLUDES_DEFAULT]) -AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex SSL_CTX_set_tmp_ecdh]) +AC_CHECK_FUNCS([OPENSSL_config EVP_sha1 EVP_sha256 EVP_sha512 FIPS_mode EVP_default_properties_is_fips_enabled EVP_MD_CTX_new OpenSSL_add_all_digests OPENSSL_init_crypto EVP_cleanup ENGINE_cleanup ERR_load_crypto_strings CRYPTO_cleanup_all_ex_data ERR_free_strings RAND_cleanup DSA_SIG_set0 EVP_dss1 EVP_DigestVerify EVP_aes_256_cbc EVP_EncryptInit_ex HMAC_Init_ex CRYPTO_THREADID_set_callback EVP_MAC_CTX_set_params OSSL_PARAM_BLD_new BIO_set_callback_ex SSL_CTX_set_tmp_ecdh HMAC_CTX_new EVP_MAC_CTX_new]) # these check_funcs need -lssl BAKLIBS="$LIBS" diff --git a/sldns/rrdef.h b/sldns/rrdef.h index 540468889..52d32e183 100644 --- a/sldns/rrdef.h +++ b/sldns/rrdef.h @@ -494,6 +494,7 @@ typedef enum sldns_enum_ede_code sldns_ede_code; #define LDNS_TSIG_ERROR_BADMODE 19 #define LDNS_TSIG_ERROR_BADNAME 20 #define LDNS_TSIG_ERROR_BADALG 21 +#define LDNS_TSIG_ERROR_BADTRUNC 22 /** DNS Cookie extended rcode */ #define LDNS_EXT_RCODE_BADCOOKIE 23 diff --git a/sldns/wire2str.c b/sldns/wire2str.c index 1bc5b9cf6..b2ac27943 100644 --- a/sldns/wire2str.c +++ b/sldns/wire2str.c @@ -255,6 +255,7 @@ static sldns_lookup_table sldns_tsig_errors_data[] = { { LDNS_TSIG_ERROR_BADMODE, "BADMODE" }, { LDNS_TSIG_ERROR_BADNAME, "BADNAME" }, { LDNS_TSIG_ERROR_BADALG, "BADALG" }, + { LDNS_TSIG_ERROR_BADTRUNC, "BADTRUNC" }, { 0, NULL } }; sldns_lookup_table* sldns_tsig_errors = sldns_tsig_errors_data; diff --git a/testcode/unittsig.c b/testcode/unittsig.c index 1092db1f3..9b4c05393 100644 --- a/testcode/unittsig.c +++ b/testcode/unittsig.c @@ -80,6 +80,7 @@ static int vtest = 0; * It TSIG signs with key name, at timestamp in secs, and the * result of the call is compared with the expected result, and * the test fails if not equal. The result is in the packet buffer. + * tsig-verify-query