Compare commits

...

6 Commits

20 changed files with 1240 additions and 517 deletions

View File

@@ -15,11 +15,11 @@ need ca-certificates-mozilla to run.
But this would create a build cycle. Skip test. But this would create a build cycle. Skip test.
Index: gnutls-3.6.15/tests/trust-store.c Index: gnutls-3.8.9/tests/trust-store.c
=================================================================== ===================================================================
--- gnutls-3.6.15.orig/tests/trust-store.c 2020-09-08 10:24:24.018094247 +0200 --- gnutls-3.8.9.orig/tests/trust-store.c
+++ gnutls-3.6.15/tests/trust-store.c 2020-09-08 10:24:25.534104346 +0200 +++ gnutls-3.8.9/tests/trust-store.c
@@ -44,6 +44,9 @@ static void tls_log_func(int level, cons @@ -42,6 +42,9 @@ static void tls_log_func(int level, cons
void doit(void) void doit(void)
{ {

View File

@@ -0,0 +1,24 @@
Index: gnutls-3.8.10/tests/Makefile.am
===================================================================
--- gnutls-3.8.10.orig/tests/Makefile.am
+++ gnutls-3.8.10/tests/Makefile.am
@@ -527,13 +527,13 @@ if !WINDOWS
#
if ENABLE_KTLS
-indirect_tests += gnutls_ktls
-dist_check_SCRIPTS += ktls.sh
+#indirect_tests += gnutls_ktls
+#dist_check_SCRIPTS += ktls.sh
-indirect_tests += ktls_keyupdate
-ktls_keyupdate_SOURCES = tls13/key_update.c
-ktls_keyupdate_CFLAGS = -DUSE_KTLS
-dist_check_SCRIPTS += ktls_keyupdate.sh
+#indirect_tests += ktls_keyupdate
+#ktls_keyupdate_SOURCES = tls13/key_update.c
+#ktls_keyupdate_CFLAGS = -DUSE_KTLS
+#dist_check_SCRIPTS += ktls_keyupdate.sh
endif
dist_check_SCRIPTS += dtls/dtls.sh #dtls/dtls-resume.sh #dtls/dtls-nb

BIN
gnutls-3.8.10.tar.xz (Stored with Git LFS) Normal file

Binary file not shown.

BIN
gnutls-3.8.10.tar.xz.sig Normal file

Binary file not shown.

BIN
gnutls-3.8.3.tar.xz (Stored with Git LFS)

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

View File

@@ -1,112 +1,120 @@
Index: gnutls-3.8.0/lib/fips.c Index: gnutls-3.8.8/lib/fips.c
=================================================================== ===================================================================
--- gnutls-3.8.0.orig/lib/fips.c --- gnutls-3.8.8.orig/lib/fips.c
+++ gnutls-3.8.0/lib/fips.c +++ gnutls-3.8.8/lib/fips.c
@@ -171,16 +171,28 @@ struct hmac_entry { @@ -349,11 +349,90 @@ static int load_hmac_file(struct hmac_fi
struct hmac_file { }
int version;
struct hmac_entry gnutls;
+#if 0
+ /* Disable nettle, hogweed and gpm HMAC verification as
+ * they are calculated during build of the respective
+ * packages and can differ from the ones listed here.
+ */
struct hmac_entry nettle;
struct hmac_entry hogweed;
struct hmac_entry gmp;
+#endif
};
struct lib_paths {
char gnutls[GNUTLS_PATH_MAX];
+#if 0
+ /* Disable nettle, hogweed and gpm HMAC verification as
+ * they are calculated during build of the respective
+ * packages and can differ from the ones listed here.
+ */
char nettle[GNUTLS_PATH_MAX];
char hogweed[GNUTLS_PATH_MAX];
char gmp[GNUTLS_PATH_MAX];
+#endif
};
/* /*
@@ -241,12 +253,18 @@ static int handler(void *user, const cha + * check_dep_lib_hmac:
} + * @path: path to the library which hmac should be compared
} else if (!strcmp(section, GNUTLS_LIBRARY_NAME)) { + *
return lib_handler(&p->gnutls, section, name, value); + * Verify that HMAC of a given library matches the hmac in the file
+#if 0 + * provided by the library, named: .<libname>.so.<soname>.hmac.
+ /* Disable nettle, hogweed and gpm HMAC verification as + *
+ * they are calculated during build of the respective + * Returns: 0 on successful HMAC verification, a negative error code otherwise
+ * packages and can differ from the ones listed here. + */
+ */ +static int check_dep_lib_hmac(const char *path)
} else if (!strcmp(section, NETTLE_LIBRARY_NAME)) { +{
return lib_handler(&p->nettle, section, name, value); + int ret;
} else if (!strcmp(section, HOGWEED_LIBRARY_NAME)) { + unsigned prev;
return lib_handler(&p->hogweed, section, name, value); + uint8_t hmac[HMAC_SIZE];
} else if (!strcmp(section, GMP_LIBRARY_NAME)) { + gnutls_datum_t data;
return lib_handler(&p->gmp, section, name, value); + char hmac_path[GNUTLS_PATH_MAX];
+#endif + uint8_t lib_hmac[HMAC_SIZE];
} else { + size_t lib_hmac_size;
return 0; +
} + _gnutls_debug_log("Loading: %s\n", path);
@@ -391,12 +409,18 @@ static int callback(struct dl_phdr_info + ret = gnutls_load_file(path, &data);
+ if (ret < 0) {
if (!strcmp(soname, GNUTLS_LIBRARY_SONAME)) + _gnutls_debug_log("Could not load %s: %s\n", path,
_gnutls_str_cpy(paths->gnutls, GNUTLS_PATH_MAX, path); + gnutls_strerror(ret));
+#if 0 + return gnutls_assert_val(ret);
+ /* Disable nettle, hogweed and gpm HMAC verification as + }
+ * they are calculated during build of the respective +
+ * packages and can differ from the ones listed here. + prev = _gnutls_get_lib_state();
+ */ + _gnutls_switch_lib_state(LIB_STATE_OPERATIONAL);
else if (!strcmp(soname, NETTLE_LIBRARY_SONAME)) + ret = gnutls_hmac_fast(HMAC_ALGO, FIPS_KEY, sizeof(FIPS_KEY) - 1,
_gnutls_str_cpy(paths->nettle, GNUTLS_PATH_MAX, path); + data.data, data.size, hmac);
else if (!strcmp(soname, HOGWEED_LIBRARY_SONAME)) + _gnutls_switch_lib_state(prev);
_gnutls_str_cpy(paths->hogweed, GNUTLS_PATH_MAX, path); +
else if (!strcmp(soname, GMP_LIBRARY_SONAME)) + gnutls_free(data.data);
_gnutls_str_cpy(paths->gmp, GNUTLS_PATH_MAX, path); + if (ret < 0) {
+#endif + _gnutls_debug_log("Could not calculate HMAC for %s: %s\n", path,
return 0; + gnutls_strerror(ret));
} + return gnutls_assert_val(ret);
+ }
@@ -409,6 +433,11 @@ static int load_lib_paths(struct lib_pat +
_gnutls_debug_log("Gnutls library path was not found\n"); + /* Check now the integrity of the hmac provided by the library */
return gnutls_assert_val(GNUTLS_E_FILE_ERROR); + ret = get_hmac_path(hmac_path, sizeof(hmac_path), path);
} + if (ret < 0) {
+#if 0 + _gnutls_debug_log("Could not get hmac file path: %s\n",
+ /* Disable nettle, hogweed and gpm HMAC verification as + gnutls_strerror(ret));
+ * they are calculated during build of the respective + return ret;
+ * packages and can differ from the ones listed here. + }
+ */ + _gnutls_debug_log("Loading: %s\n", hmac_path);
if (paths->nettle[0] == '\0') { + ret = gnutls_load_file(hmac_path, &data);
_gnutls_debug_log("Nettle library path was not found\n"); + if (ret < 0) {
return gnutls_assert_val(GNUTLS_E_FILE_ERROR); + _gnutls_debug_log("Could not load %s: %s\n", hmac_path,
@@ -421,7 +450,7 @@ static int load_lib_paths(struct lib_pat + gnutls_strerror(ret));
_gnutls_debug_log("Gmp library path was not found\n"); + return gnutls_assert_val(ret);
return gnutls_assert_val(GNUTLS_E_FILE_ERROR); + }
} + lib_hmac_size = hex_data_size(data.size);
- + /* trim eventual newlines from the end of the data read from file */
+#endif + while ((data.size > 0) && (data.data[data.size - 1] == '\n')) {
return GNUTLS_E_SUCCESS; + data.data[data.size - 1] = 0;
} + data.size--;
+ }
@@ -467,6 +496,11 @@ static int check_binary_integrity(void) + ret = gnutls_hex_decode(&data, lib_hmac, &lib_hmac_size);
ret = check_lib_hmac(&hmac.gnutls, paths.gnutls); + gnutls_free(data.data);
+ if (ret < 0) {
+ _gnutls_debug_log("Could not hex decode hmac\n");
+ return gnutls_assert_val(GNUTLS_E_PARSING_ERROR);
+ }
+ ret = gnutls_memcmp(lib_hmac, hmac, HMAC_SIZE);
+ if (ret){
+ _gnutls_debug_log("Calculated MAC for %s does not match\n",
+ path);
+ gnutls_memset(hmac, 0, HMAC_SIZE);
+ gnutls_memset(lib_hmac, 0, HMAC_SIZE);
+ return gnutls_assert_val(GNUTLS_E_PARSING_ERROR);
+ }
+ _gnutls_debug_log("Successfully verified MAC for %s\n", path);
+ gnutls_memset(hmac, 0, HMAC_SIZE);
+ return 0;
+}
+
+/*
* check_lib_hmac:
* @entry: hmac file entry
* @path: path to the library which hmac should be compared
*
- * Verify that HMAC from hmac file entry matches HMAC of given library.
+ * Verify that HMAC from hmac file entry matches HMAC of gnutls library.
*
* Returns: 0 on successful HMAC verification, a negative error code otherwise
*/
@@ -496,17 +575,20 @@ static int check_binary_integrity(void)
if (ret < 0) if (ret < 0)
return ret; return ret;
+# if 0 #ifdef NETTLE_LIBRARY_SONAME
+ /* Disable nettle, hogweed and gpm HMAC verification as - ret = check_lib_hmac(&hmac.nettle, paths.nettle);
+ * they are calculated during build of the respective + //ret = check_lib_hmac(&hmac.nettle, paths.nettle);
+ * packages and can differ from the ones listed here. + ret = check_dep_lib_hmac(paths.nettle);
+ */
ret = check_lib_hmac(&hmac.nettle, paths.nettle);
if (ret < 0) if (ret < 0)
return ret; return ret;
@@ -476,6 +510,7 @@ static int check_binary_integrity(void) #endif
ret = check_lib_hmac(&hmac.gmp, paths.gmp); #ifdef HOGWEED_LIBRARY_SONAME
- ret = check_lib_hmac(&hmac.hogweed, paths.hogweed);
+ //ret = check_lib_hmac(&hmac.hogweed, paths.hogweed);
+ ret = check_dep_lib_hmac(paths.hogweed);
if (ret < 0) if (ret < 0)
return ret; return ret;
+# endif #endif
#ifdef GMP_LIBRARY_SONAME
return 0; - ret = check_lib_hmac(&hmac.gmp, paths.gmp);
} + //ret = check_lib_hmac(&hmac.gmp, paths.gmp);
+ ret = check_dep_lib_hmac(paths.gmp);
if (ret < 0)
return ret;
#endif

View File

@@ -0,0 +1,47 @@
Index: gnutls-3.8.9/lib/fips.c
===================================================================
--- gnutls-3.8.9.orig/lib/fips.c
+++ gnutls-3.8.9/lib/fips.c
@@ -268,6 +268,28 @@ static int handler(void *user, const cha
return 1;
}
+
+/* In case of x86_64-v3 optmizations, names might differ in version numbers.
+ * @mac_file: buffer where the hmac file path will be written to
+ * @lib_path: path to the dependent library, used to deduce hmac file path
+ * @file_name: The file name of the library
+ */
+ static void get_hwcaps_lib_hmac_path(char *mac_file, const char *lib_path, char *file_name) {
+ // Cut name short if more than SOVER is present
+ char *soname = strstr(file_name, ".so.");
+ char correct_ext[256];
+ memset(correct_ext, 0x0, 256);
+ soname += strlen(".so.");
+ for (uint32_t i = 0; i < strlen(soname); i++) {
+ if (soname[i] == '.') {
+ int proper_len = soname - file_name + i;
+ strncpy(correct_ext, file_name, proper_len);
+ snprintf(mac_file, 256, "%.*s/.%.*s.hmac", (int)(file_name-lib_path),lib_path,proper_len,correct_ext);
+ break;
+ }
+ }
+}
+
/*
* get_hmac_path:
* @mac_file: buffer where the hmac file path will be written to
@@ -300,6 +322,13 @@ static int get_hmac_path(char *mac_file,
if (ret == 0)
return GNUTLS_E_SUCCESS;
+ if (strstr(gnutls_path, "glibc-hwcaps")) {
+ get_hwcaps_lib_hmac_path(mac_file, gnutls_path, p + 1);
+ ret = _gnutls_file_exists(mac_file);
+ if (ret == 0)
+ return GNUTLS_E_SUCCESS;
+ }
+
if (p == NULL)
ret = snprintf(mac_file, mac_file_size, "fipscheck/.%s.hmac",
gnutls_path);

View File

@@ -1,8 +1,8 @@
Index: gnutls-3.7.7/lib/fips.c Index: gnutls-3.8.9/lib/fips.c
=================================================================== ===================================================================
--- gnutls-3.7.7.orig/lib/fips.c --- gnutls-3.8.9.orig/lib/fips.c
+++ gnutls-3.7.7/lib/fips.c +++ gnutls-3.8.9/lib/fips.c
@@ -517,6 +517,26 @@ int _gnutls_fips_perform_self_checks2(vo @@ -621,6 +621,26 @@ int _gnutls_fips_perform_self_checks2(vo
return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR); return gnutls_assert_val(GNUTLS_E_SELF_TEST_ERROR);
} }
@@ -27,5 +27,5 @@ Index: gnutls-3.7.7/lib/fips.c
+ } + }
+ +
/* PK */ /* PK */
ret = gnutls_pk_self_test(0, GNUTLS_PK_RSA); if (_gnutls_config_is_rsa_pkcs1_encrypt_allowed()) {
if (ret < 0) { ret = gnutls_pk_self_test(0, GNUTLS_PK_RSA);

View File

@@ -0,0 +1,181 @@
commit c4eba74d4745e3a97b443abae1431658a826d2eb
Author: Angel Yankov <angel.yankov@suse.com>
Date: Thu Nov 28 11:02:07 2024 +0200
SHA-1 is not allowed in FIPS-140-3 anymore after 2030. Mark it as
unapproved
Signed-off-by: Angel Yankov <angel.yankov@suse.com>
Index: gnutls-3.8.10/lib/crypto-api.c
===================================================================
--- gnutls-3.8.10.orig/lib/crypto-api.c
+++ gnutls-3.8.10/lib/crypto-api.c
@@ -33,6 +33,7 @@
#include "crypto-api.h"
#include "iov.h"
#include "intprops.h"
+#include <gnutls/gnutls.h>
typedef struct api_cipher_hd_st {
cipher_hd_st ctx_enc;
@@ -597,7 +598,9 @@ int gnutls_hmac_init(gnutls_hmac_hd_t *d
bool not_approved = false;
/* MD5 is only allowed internally for TLS */
- if (!is_mac_algo_allowed(algorithm)) {
+ if (algorithm == GNUTLS_MAC_SHA1)
+ not_approved = true;
+ else if (!is_mac_algo_allowed(algorithm)) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
} else if (!is_mac_algo_approved_in_fips(algorithm)) {
@@ -757,8 +760,9 @@ int gnutls_hmac_fast(gnutls_mac_algorith
{
int ret;
bool not_approved = false;
-
- if (!is_mac_algo_allowed(algorithm)) {
+ if (algorithm == GNUTLS_MAC_SHA1)
+ not_approved = true;
+ else if (!is_mac_algo_allowed(algorithm)) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
} else if (!is_mac_algo_approved_in_fips(algorithm)) {
@@ -839,8 +843,9 @@ int gnutls_hash_init(gnutls_hash_hd_t *d
{
int ret;
bool not_approved = false;
-
- if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) {
+ if (algorithm == GNUTLS_MAC_SHA1)
+ not_approved = true;
+ else if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
} else if (!is_mac_algo_approved_in_fips(DIG_TO_MAC(algorithm))) {
@@ -957,8 +962,9 @@ int gnutls_hash_fast(gnutls_digest_algor
{
int ret;
bool not_approved = false;
-
- if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) {
+ if (algorithm == GNUTLS_MAC_SHA1)
+ not_approved = true;
+ else if (!is_mac_algo_allowed(DIG_TO_MAC(algorithm))) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
} else if (!is_mac_algo_approved_in_fips(DIG_TO_MAC(algorithm))) {
@@ -2173,7 +2179,9 @@ int gnutls_pbkdf2(gnutls_mac_algorithm_t
bool not_approved = false;
/* MD5 is only allowed internally for TLS */
- if (!is_mac_algo_allowed(mac)) {
+ if (mac == GNUTLS_MAC_SHA1)
+ not_approved = true;
+ else if (!is_mac_algo_allowed(mac)) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
return gnutls_assert_val(GNUTLS_E_UNWANTED_ALGORITHM);
} else if (!is_mac_algo_hmac_approved_in_fips(mac)) {
Index: gnutls-3.8.10/lib/crypto-selftests.c
===================================================================
--- gnutls-3.8.10.orig/lib/crypto-selftests.c
+++ gnutls-3.8.10/lib/crypto-selftests.c
@@ -2891,7 +2891,7 @@ int gnutls_mac_self_test(unsigned flags,
case GNUTLS_MAC_UNKNOWN:
NON_FIPS_CASE(GNUTLS_MAC_MD5, test_mac, hmac_md5_vectors);
FALLTHROUGH;
- CASE(GNUTLS_MAC_SHA1, test_mac, hmac_sha1_vectors);
+ NON_FIPS_CASE(GNUTLS_MAC_SHA1, test_mac, hmac_sha1_vectors);
FALLTHROUGH;
CASE(GNUTLS_MAC_SHA224, test_mac, hmac_sha224_vectors);
FALLTHROUGH;
Index: gnutls-3.8.10/lib/fips.h
===================================================================
--- gnutls-3.8.10.orig/lib/fips.h
+++ gnutls-3.8.10/lib/fips.h
@@ -79,7 +79,6 @@ inline static bool
is_mac_algo_hmac_approved_in_fips(gnutls_mac_algorithm_t algo)
{
switch (algo) {
- case GNUTLS_MAC_SHA1:
case GNUTLS_MAC_SHA256:
case GNUTLS_MAC_SHA384:
case GNUTLS_MAC_SHA512:
Index: gnutls-3.8.10/tests/fips-test.c
===================================================================
--- gnutls-3.8.10.orig/tests/fips-test.c
+++ gnutls-3.8.10/tests/fips-test.c
@@ -397,11 +397,12 @@ void doit(void)
}
FIPS_POP_CONTEXT(ERROR);
+ FIPS_PUSH_CONTEXT();
ret = gnutls_hmac_init(&mh, GNUTLS_MAC_SHA1, key.data, key.size);
if (ret < 0) {
- fail("gnutls_hmac_init failed\n");
+ fail("gnutls_hmac_init failed for sha1\n");
}
- gnutls_hmac_deinit(mh, NULL);
+ FIPS_POP_CONTEXT(NOT_APPROVED);
ret = gnutls_hmac_init(&mh, GNUTLS_MAC_MD5, key.data, key.size);
if (ret != GNUTLS_E_UNWANTED_ALGORITHM) {
@@ -736,7 +737,7 @@ void doit(void)
}
hashed_data.data = hash;
hashed_data.size = 20;
- FIPS_POP_CONTEXT(APPROVED);
+ FIPS_POP_CONTEXT(NOT_APPROVED);
/* Create a signature with ECDSA and SHA1 (2-pass API); not-approved */
FIPS_PUSH_CONTEXT();
Index: gnutls-3.8.10/tests/gnutls_hmac_fast.c
===================================================================
--- gnutls-3.8.10.orig/tests/gnutls_hmac_fast.c
+++ gnutls-3.8.10/tests/gnutls_hmac_fast.c
@@ -42,6 +42,11 @@ void doit(void)
if (debug)
gnutls_global_set_log_level(4711);
+ /* enable MD5 and SHA1 usage */
+ if (gnutls_fips140_mode_enabled()) {
+ gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0);
+ }
+
err = gnutls_hmac_fast(GNUTLS_MAC_SHA1, "keykeykey", 9, "abcdefgh", 8,
digest);
if (err < 0)
@@ -59,11 +64,6 @@ void doit(void)
}
}
- /* enable MD5 usage */
- if (gnutls_fips140_mode_enabled()) {
- gnutls_fips140_set_mode(GNUTLS_FIPS140_LOG, 0);
- }
-
err = gnutls_hmac_fast(GNUTLS_MAC_MD5, "keykeykey", 9, "abcdefgh", 8,
digest);
if (err < 0)
Index: gnutls-3.8.10/tests/kdf-api.c
===================================================================
--- gnutls-3.8.10.orig/tests/kdf-api.c
+++ gnutls-3.8.10/tests/kdf-api.c
@@ -108,7 +108,6 @@ inline static bool
is_mac_algo_hmac_approved_in_fips(gnutls_mac_algorithm_t algo)
{
switch (algo) {
- case GNUTLS_MAC_SHA1:
case GNUTLS_MAC_SHA256:
case GNUTLS_MAC_SHA384:
case GNUTLS_MAC_SHA512:
@@ -145,7 +144,7 @@ static void test_pbkdf2(gnutls_mac_algor
assert(gnutls_hex_decode2(&hex, &salt) >= 0);
fips_push_context(fips_context);
- assert(gnutls_pbkdf2(mac, &ikm, &salt, iter_count, buf, length) >= 0);
+ gnutls_pbkdf2(mac, &ikm, &salt, iter_count, buf, length);
fips_pop_context(fips_context, expected_state);
gnutls_free(ikm.data);
gnutls_free(salt.data);

View File

@@ -0,0 +1,34 @@
Index: gnutls-3.8.4/lib/state.c
===================================================================
--- gnutls-3.8.4.orig/lib/state.c
+++ gnutls-3.8.4/lib/state.c
@@ -830,6 +830,12 @@ void gnutls_deinit(gnutls_session_t sess
gnutls_mutex_deinit(&session->internals.post_negotiation_lock);
gnutls_mutex_deinit(&session->internals.epoch_lock);
+#if defined(__linux__)
+# if defined(ENABLE_FIPS140)
+ _rnd_system_entropy_deinit();
+# endif
+#endif
+
gnutls_free(session);
}
Index: gnutls-3.8.4/lib/nettle/rnd.c
===================================================================
--- gnutls-3.8.4.orig/lib/nettle/rnd.c
+++ gnutls-3.8.4/lib/nettle/rnd.c
@@ -79,6 +79,12 @@ struct generators_ctx_st {
static void wrap_nettle_rnd_deinit(void *_ctx)
{
+#if defined(__linux__)
+# if defined(ENABLE_FIPS140)
+ _rnd_system_entropy_deinit();
+# endif
+#endif
+
gnutls_free(_ctx);
}

View File

@@ -1,7 +1,7 @@
Index: gnutls-3.8.1/lib/nettle/sysrng-linux.c Index: gnutls-3.8.9/lib/nettle/sysrng-linux.c
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/lib/nettle/sysrng-linux.c --- gnutls-3.8.9.orig/lib/nettle/sysrng-linux.c
+++ gnutls-3.8.1/lib/nettle/sysrng-linux.c +++ gnutls-3.8.9/lib/nettle/sysrng-linux.c
@@ -49,6 +49,15 @@ @@ -49,6 +49,15 @@
get_entropy_func _rnd_get_system_entropy = NULL; get_entropy_func _rnd_get_system_entropy = NULL;
@@ -158,11 +158,11 @@ Index: gnutls-3.8.1/lib/nettle/sysrng-linux.c
+#endif +#endif
return; return;
} }
Index: gnutls-3.8.1/lib/nettle/Makefile.in Index: gnutls-3.8.9/lib/nettle/Makefile.in
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/lib/nettle/Makefile.in --- gnutls-3.8.9.orig/lib/nettle/Makefile.in
+++ gnutls-3.8.1/lib/nettle/Makefile.in +++ gnutls-3.8.9/lib/nettle/Makefile.in
@@ -402,7 +402,7 @@ am__v_CC_1 = @@ -521,7 +521,7 @@ am__v_CC_1 =
CCLD = $(CC) CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
@@ -171,10 +171,10 @@ Index: gnutls-3.8.1/lib/nettle/Makefile.in
AM_V_CCLD = $(am__v_CCLD_@AM_V@) AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_0 = @echo " CCLD " $@;
Index: gnutls-3.8.1/lib/nettle/Makefile.am Index: gnutls-3.8.9/lib/nettle/Makefile.am
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/lib/nettle/Makefile.am --- gnutls-3.8.9.orig/lib/nettle/Makefile.am
+++ gnutls-3.8.1/lib/nettle/Makefile.am +++ gnutls-3.8.9/lib/nettle/Makefile.am
@@ -20,7 +20,7 @@ @@ -20,7 +20,7 @@
include $(top_srcdir)/lib/common.mk include $(top_srcdir)/lib/common.mk
@@ -182,12 +182,12 @@ Index: gnutls-3.8.1/lib/nettle/Makefile.am
-AM_CFLAGS += $(HOGWEED_CFLAGS) $(GMP_CFLAGS) -AM_CFLAGS += $(HOGWEED_CFLAGS) $(GMP_CFLAGS)
+AM_CFLAGS += $(HOGWEED_CFLAGS) $(GMP_CFLAGS) -ljitterentropy +AM_CFLAGS += $(HOGWEED_CFLAGS) $(GMP_CFLAGS) -ljitterentropy
AM_CPPFLAGS = \ AM_CPPFLAGS += \
-I$(srcdir)/int \ -I$(srcdir)/int \
Index: gnutls-3.8.1/lib/nettle/rnd-fips.c Index: gnutls-3.8.9/lib/nettle/rnd-fips.c
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/lib/nettle/rnd-fips.c --- gnutls-3.8.9.orig/lib/nettle/rnd-fips.c
+++ gnutls-3.8.1/lib/nettle/rnd-fips.c +++ gnutls-3.8.9/lib/nettle/rnd-fips.c
@@ -129,6 +129,10 @@ static int drbg_init(struct fips_ctx *fc @@ -129,6 +129,10 @@ static int drbg_init(struct fips_ctx *fc
uint8_t buffer[DRBG_AES_SEED_SIZE]; uint8_t buffer[DRBG_AES_SEED_SIZE];
int ret; int ret;
@@ -210,16 +210,16 @@ Index: gnutls-3.8.1/lib/nettle/rnd-fips.c
ret = get_entropy(fctx, buffer, sizeof(buffer)); ret = get_entropy(fctx, buffer, sizeof(buffer));
if (ret < 0) { if (ret < 0) {
_gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR); _gnutls_switch_fips_state(GNUTLS_FIPS140_OP_ERROR);
Index: gnutls-3.8.1/tests/Makefile.am Index: gnutls-3.8.9/tests/Makefile.am
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/tests/Makefile.am --- gnutls-3.8.9.orig/tests/Makefile.am
+++ gnutls-3.8.1/tests/Makefile.am +++ gnutls-3.8.9/tests/Makefile.am
@@ -208,7 +208,7 @@ ctests += mini-record-2 simple gnutls_hm @@ -212,7 +212,7 @@ ctests += mini-record-2 simple gnutls_hm
dtls12-cert-key-exchange dtls10-cert-key-exchange x509-cert-callback-legacy \ dtls12-cert-key-exchange dtls10-cert-key-exchange x509-cert-callback-legacy \
keylog-env ssl2-hello tlsfeature-ext dtls-rehandshake-cert-2 dtls-session-ticket-lost \ keylog-env ssl2-hello tlsfeature-ext dtls-rehandshake-cert-2 dtls-session-ticket-lost \
tlsfeature-crt dtls-rehandshake-cert-3 resume-with-false-start \ tlsfeature-crt dtls-rehandshake-cert-3 resume-with-false-start \
- set_x509_key_file_ocsp client-fastopen rng-sigint srp rng-pthread \ - set_x509_key_file_ocsp client-fastopen rng-sigint srp \
+ set_x509_key_file_ocsp client-fastopen srp rng-pthread \ + set_x509_key_file_ocsp client-fastopen srp \
safe-renegotiation/srn0 safe-renegotiation/srn1 safe-renegotiation/srn2 \ safe-renegotiation/srn0 safe-renegotiation/srn1 safe-renegotiation/srn2 \
safe-renegotiation/srn3 safe-renegotiation/srn4 safe-renegotiation/srn5 \ safe-renegotiation/srn3 safe-renegotiation/srn4 safe-renegotiation/srn5 \
rsa-illegal-import set_x509_ocsp_multi_invalid set_key set_x509_key_file_ocsp_multi2 \ rsa-illegal-import set_x509_ocsp_multi_invalid set_key set_x509_key_file_ocsp_multi2 \

View File

@@ -1,10 +1,10 @@
Index: gnutls-3.7.8/tests/Makefile.am Index: gnutls-3.8.10/tests/Makefile.am
=================================================================== ===================================================================
--- gnutls-3.7.8.orig/tests/Makefile.am --- gnutls-3.8.10.orig/tests/Makefile.am
+++ gnutls-3.7.8/tests/Makefile.am +++ gnutls-3.8.10/tests/Makefile.am
@@ -508,7 +508,7 @@ if !WINDOWS @@ -536,7 +536,7 @@ ktls_keyupdate_CFLAGS = -DUSE_KTLS
# List of tests not available/functional under windows dist_check_SCRIPTS += ktls_keyupdate.sh
# endif
-dist_check_SCRIPTS += dtls/dtls.sh dtls/dtls-resume.sh #dtls/dtls-nb -dist_check_SCRIPTS += dtls/dtls.sh dtls/dtls-resume.sh #dtls/dtls-nb
+dist_check_SCRIPTS += dtls/dtls.sh #dtls/dtls-resume.sh #dtls/dtls-nb +dist_check_SCRIPTS += dtls/dtls.sh #dtls/dtls-resume.sh #dtls/dtls-nb

View File

@@ -0,0 +1,27 @@
Index: gnutls-3.8.9/lib/fips.c
===================================================================
--- gnutls-3.8.9.orig/lib/fips.c
+++ gnutls-3.8.9/lib/fips.c
@@ -484,18 +484,18 @@ static int callback(struct dl_phdr_info
const char *soname = last_component(path);
struct lib_paths *paths = (struct lib_paths *)data;
- if (!strcmp(soname, GNUTLS_LIBRARY_SONAME))
+ if (!strncmp(soname, GNUTLS_LIBRARY_SONAME, strlen(GNUTLS_LIBRARY_SONAME)))
_gnutls_str_cpy(paths->gnutls, GNUTLS_PATH_MAX, path);
#ifdef NETTLE_LIBRARY_SONAME
- else if (!strcmp(soname, NETTLE_LIBRARY_SONAME))
+ else if (!strncmp(soname, NETTLE_LIBRARY_SONAME, strlen(NETTLE_LIBRARY_SONAME)))
_gnutls_str_cpy(paths->nettle, GNUTLS_PATH_MAX, path);
#endif
#ifdef HOGWEED_LIBRARY_SONAME
- else if (!strcmp(soname, HOGWEED_LIBRARY_SONAME))
+ else if (!strncmp(soname, HOGWEED_LIBRARY_SONAME, strlen(HOGWEED_LIBRARY_SONAME)))
_gnutls_str_cpy(paths->hogweed, GNUTLS_PATH_MAX, path);
#endif
#ifdef GMP_LIBRARY_SONAME
- else if (!strcmp(soname, GMP_LIBRARY_SONAME))
+ else if (!strncmp(soname, GMP_LIBRARY_SONAME, strlen(GMP_LIBRARY_SONAME)))
_gnutls_str_cpy(paths->gmp, GNUTLS_PATH_MAX, path);
#endif
return 0;

View File

@@ -0,0 +1,10 @@
Index: gnutls-3.8.9/cligen/cli-docgen.py
===================================================================
--- gnutls-3.8.9.orig/cligen/cli-docgen.py
+++ gnutls-3.8.9/cligen/cli-docgen.py
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/python3
# Copyright (C) 2021-2022 Daiki Ueno
# SPDX-License-Identifier: LGPL-2.1-or-later

View File

@@ -0,0 +1,34 @@
Index: gnutls-3.8.10/tests/Makefile.am
===================================================================
--- gnutls-3.8.10.orig/tests/Makefile.am
+++ gnutls-3.8.10/tests/Makefile.am
@@ -628,8 +628,6 @@ ctests += win32-certopenstore
endif
-dist_check_SCRIPTS += pqc-hybrid-kx.sh
-
cpptests =
if ENABLE_CXX
if HAVE_CMOCKA
Index: gnutls-3.8.10/tests/Makefile.in
===================================================================
--- gnutls-3.8.10.orig/tests/Makefile.in
+++ gnutls-3.8.10/tests/Makefile.in
@@ -3293,7 +3293,7 @@ am__dist_check_SCRIPTS_DIST = rfc2253-es
gnutls-cli-self-signed.sh gnutls-cli-invalid-crl.sh \
gnutls-cli-rawpk.sh dh-fips-approved.sh p11-kit-trust.sh \
testpkcs11.sh certtool-pkcs11.sh pkcs11-tool.sh \
- p11-kit-load.sh danetool.sh tpmtool_test.sh pqc-hybrid-kx.sh
+ p11-kit-load.sh danetool.sh tpmtool_test.sh
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -7178,7 +7178,6 @@ dist_check_SCRIPTS = rfc2253-escape-test
$(am__append_18) $(am__append_20) $(am__append_21) \
$(am__append_23) $(am__append_25) $(am__append_26) \
$(am__append_27) $(am__append_29) $(am__append_30) \
- pqc-hybrid-kx.sh
@ENABLE_KTLS_TRUE@@WINDOWS_FALSE@ktls_keyupdate_SOURCES = tls13/key_update.c
@ENABLE_KTLS_TRUE@@WINDOWS_FALSE@ktls_keyupdate_CFLAGS = -DUSE_KTLS
@WINDOWS_FALSE@dtls_stress_SOURCES = dtls/dtls-stress.c

View File

@@ -1,8 +1,8 @@
Index: gnutls-3.8.1/tests/srp.c Index: gnutls-3.8.9/tests/srp.c
=================================================================== ===================================================================
--- gnutls-3.8.1.orig/tests/srp.c --- gnutls-3.8.9.orig/tests/srp.c
+++ gnutls-3.8.1/tests/srp.c +++ gnutls-3.8.9/tests/srp.c
@@ -287,7 +289,7 @@ static void start(const char *name, cons @@ -290,7 +290,7 @@ static void start(const char *name, cons
if (child) { if (child) {
int status; int status;
/* parent */ /* parent */
@@ -11,7 +11,7 @@ Index: gnutls-3.8.1/tests/srp.c
client(fd[1], prio, user, pass, exp_err); client(fd[1], prio, user, pass, exp_err);
if (exp_err < 0) { if (exp_err < 0) {
kill(child, SIGTERM); kill(child, SIGTERM);
@@ -297,7 +299,7 @@ static void start(const char *name, cons @@ -300,7 +300,7 @@ static void start(const char *name, cons
check_wait_status(status); check_wait_status(status);
} }
} else { } else {

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,8 @@
# #
# spec file for package gnutls # spec file for package gnutls
# #
# Copyright (c) 2024 SUSE LLC # Copyright (c) 2025 SUSE LLC
# Copyright (c) 2025 Andreas Stieger <Andreas.Stieger@gmx.de>
# #
# All modifications and additions to the file contributed by third parties # All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed # remain the property of their copyright owners, unless otherwise agreed
@@ -39,8 +40,10 @@
%bcond_with kcapi %bcond_with kcapi
%endif %endif
%bcond_with tpm %bcond_with tpm
%bcond_without tpm2
%bcond_without leancrypto
Name: gnutls Name: gnutls
Version: 3.8.3 Version: 3.8.10
Release: 0 Release: 0
Summary: The GNU Transport Layer Security Library Summary: The GNU Transport Layer Security Library
License: GPL-3.0-or-later AND LGPL-2.1-or-later License: GPL-3.0-or-later AND LGPL-2.1-or-later
@@ -66,7 +69,18 @@ Patch101: gnutls-FIPS-HMAC-nettle-hogweed-gmp.patch
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400 %if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
#PATCH-FIX-SUSE bsc#1202146 FIPS: Port gnutls to use jitterentropy #PATCH-FIX-SUSE bsc#1202146 FIPS: Port gnutls to use jitterentropy
Patch102: gnutls-FIPS-jitterentropy.patch Patch102: gnutls-FIPS-jitterentropy.patch
#PATCH-FIX-SUSE bsc#1221242 Fix memleak in gnutls' jitterentropy collector
Patch103: gnutls-FIPS-jitterentropy-deinit-threads.patch
%endif %endif
Patch104: gnutls-set-cligen-python-interp.patch
Patch105: gnutls-skip-pqx-test.patch
Patch106: gnutls-fips-sonames-check.patch
# PATCH-FIX-SUSE jsc#jsc#PED-12224 FIPS: Mark SHA1 as unapproved in the SLI
Patch107: gnutls-FIPS-disable-mac-sha1.patch
# PATCH-FIX-SUSE bsc#1237101 GNUTLS FIPS selfcheck is failing again on tumbleweed
Patch108: gnutls-FIPS-HMAC-x86_64-v3-opt.patch
# PATCH-FIX-SUSE Disable test
Patch109: gnutls-3.8.10-disable-ktls_test.patch
BuildRequires: autogen BuildRequires: autogen
BuildRequires: automake BuildRequires: automake
BuildRequires: datefudge BuildRequires: datefudge
@@ -85,10 +99,16 @@ BuildRequires: p11-kit-devel >= 0.23.1
BuildRequires: pkgconfig BuildRequires: pkgconfig
BuildRequires: xz BuildRequires: xz
BuildRequires: pkgconfig(autoopts) BuildRequires: pkgconfig(autoopts)
BuildRequires: pkgconfig(libbrotlidec)
BuildRequires: pkgconfig(libbrotlienc)
BuildRequires: pkgconfig(libzstd)
BuildRequires: pkgconfig(zlib) BuildRequires: pkgconfig(zlib)
%if %{with kcapi} %if %{with kcapi}
BuildRequires: pkgconfig(libkcapi) BuildRequires: pkgconfig(libkcapi)
%endif %endif
%if %{with leancrypto}
BuildRequires: pkgconfig(leancrypto)
%endif
%if 0%{?suse_version} <= 1320 %if 0%{?suse_version} <= 1320
BuildRequires: net-tools BuildRequires: net-tools
%else %else
@@ -97,6 +117,9 @@ BuildRequires: net-tools-deprecated
%if %{with tpm} %if %{with tpm}
BuildRequires: trousers-devel BuildRequires: trousers-devel
%endif %endif
%if %{with tpm2}
BuildRequires: tpm2-0-tss-devel >= 3.0.3
%endif
%if %{with dane} %if %{with dane}
Requires: libgnutls-dane%{gnutls_dane_sover} = %{version} Requires: libgnutls-dane%{gnutls_dane_sover} = %{version}
%if 0%{?suse_version} <= 1320 %if 0%{?suse_version} <= 1320
@@ -107,10 +130,13 @@ BuildRequires: libunbound-devel
%endif %endif
%if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400 %if 0%{?suse_version} >= 1550 || 0%{?sle_version} >= 150400
BuildRequires: crypto-policies BuildRequires: crypto-policies
Requires: crypto-policies
BuildRequires: jitterentropy-devel >= 3.4.0 BuildRequires: jitterentropy-devel >= 3.4.0
Requires: crypto-policies
Requires: libjitterentropy3 >= 3.4.0 Requires: libjitterentropy3 >= 3.4.0
%endif %endif
%if %{with tpm}
Recommends: trousers
%endif
%description %description
The GnuTLS library provides a secure layer over a reliable transport The GnuTLS library provides a secure layer over a reliable transport
@@ -132,7 +158,6 @@ The GnuTLS library provides a secure layer over a reliable transport
layer. Currently the GnuTLS library implements the proposed standards layer. Currently the GnuTLS library implements the proposed standards
of the IETF's TLS working group. of the IETF's TLS working group.
%if %{with dane}
%package -n libgnutls-dane%{gnutls_dane_sover} %package -n libgnutls-dane%{gnutls_dane_sover}
Summary: DANE support for the GNU Transport Layer Security Library Summary: DANE support for the GNU Transport Layer Security Library
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
@@ -142,7 +167,6 @@ Group: System/Libraries
The GnuTLS project aims to develop a library that provides a secure The GnuTLS project aims to develop a library that provides a secure
layer over a reliable transport layer. layer over a reliable transport layer.
This package contains the "DANE" part of gnutls. This package contains the "DANE" part of gnutls.
%endif
%package -n libgnutlsxx%{gnutlsxx_sover} %package -n libgnutlsxx%{gnutlsxx_sover}
Summary: C++ API for the GNU Transport Layer Security Library Summary: C++ API for the GNU Transport Layer Security Library
@@ -172,7 +196,6 @@ Requires: crypto-policies
%description -n libgnutls-devel %description -n libgnutls-devel
Files needed for software development using gnutls. Files needed for software development using gnutls.
%if %{with dane}
%package -n libgnutls-dane-devel %package -n libgnutls-dane-devel
Summary: Development package for GnuTLS DANE component Summary: Development package for GnuTLS DANE component
License: LGPL-2.1-or-later License: LGPL-2.1-or-later
@@ -181,7 +204,14 @@ Requires: libgnutls-dane%{gnutls_dane_sover} = %{version}
%description -n libgnutls-dane-devel %description -n libgnutls-dane-devel
Files needed for software development using gnutls. Files needed for software development using gnutls.
%endif
%package -n libgnutls-devel-doc
Summary: Manual and Info pages for libgnutls
License: LGPL-2.1-or-later
BuildArch: noarch
%description -n libgnutls-devel-doc
Manpages (troff) and GNU Info pages for libgnutls.
%package -n libgnutlsxx-devel %package -n libgnutlsxx-devel
Summary: Development package for the GnuTLS C++ API Summary: Development package for the GnuTLS C++ API
@@ -221,6 +251,11 @@ autoreconf -fiv
%if %{without tpm} %if %{without tpm}
--without-tpm \ --without-tpm \
%endif %endif
%if %{with tpm2}
--with-tpm2 \
%else
--without-tpm2 \
%endif
%if %{with dane} %if %{with dane}
--with-unbound-root-key-file=%{_localstatedir}/lib/unbound/root.key \ --with-unbound-root-key-file=%{_localstatedir}/lib/unbound/root.key \
%else %else
@@ -229,6 +264,11 @@ autoreconf -fiv
%if %{with srp} %if %{with srp}
--enable-srp-authentication \ --enable-srp-authentication \
%endif %endif
%if %{with leancrypto}
--with-leancrypto \
%else
--without-leancrypto \
%endif
%ifarch %{ix86} %{arm} %ifarch %{ix86} %{arm}
--disable-year2038 \ --disable-year2038 \
%endif %endif
@@ -236,6 +276,7 @@ autoreconf -fiv
--enable-fips140-mode \ --enable-fips140-mode \
--with-fips140-module-name="GnuTLS version" \ --with-fips140-module-name="GnuTLS version" \
--with-fips140-module-version="%{version}-%{release}" \ --with-fips140-module-version="%{version}-%{release}" \
--enable-ktls \
%{nil} %{nil}
%make_build %make_build
@@ -296,19 +337,12 @@ GNUTLS_FORCE_FIPS_MODE=1 make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=
} }
%endif %endif
%post -n libgnutls%{gnutls_sover} -p /sbin/ldconfig %ldconfig_scriptlets -n libgnutls%{gnutls_sover}
%postun -n libgnutls%{gnutls_sover} -p /sbin/ldconfig %ldconfig_scriptlets -n libgnutls-dane%{gnutls_dane_sover}
%ldconfig_scriptlets -n libgnutlsxx%{gnutlsxx_sover}
%if %{with dane}
%post -n libgnutls-dane%{gnutls_dane_sover} -p /sbin/ldconfig
%postun -n libgnutls-dane%{gnutls_dane_sover} -p /sbin/ldconfig
%endif
%post -n libgnutlsxx%{gnutlsxx_sover} -p /sbin/ldconfig
%postun -n libgnutlsxx%{gnutlsxx_sover} -p /sbin/ldconfig
%files -f libgnutls.lang %files -f libgnutls.lang
%license LICENSE %license COPYING COPYING.LESSERv2
%doc THANKS README.md NEWS ChangeLog AUTHORS doc/TODO %doc THANKS README.md NEWS ChangeLog AUTHORS doc/TODO
%{_bindir}/certtool %{_bindir}/certtool
%{_bindir}/gnutls-cli %{_bindir}/gnutls-cli
@@ -329,22 +363,22 @@ GNUTLS_FORCE_FIPS_MODE=1 make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=
%{_mandir}/man1/* %{_mandir}/man1/*
%files -n libgnutls%{gnutls_sover} %files -n libgnutls%{gnutls_sover}
%license LICENSE %license COPYING COPYING.LESSERv2
%{_libdir}/libgnutls.so.%{gnutls_sover}* %{_libdir}/libgnutls.so.%{gnutls_sover}*
%{_libdir}/.libgnutls.so.%{gnutls_sover}*.hmac %{_libdir}/.libgnutls.so.%{gnutls_sover}*.hmac
%if %{with dane} %if %{with dane}
%files -n libgnutls-dane%{gnutls_dane_sover} %files -n libgnutls-dane%{gnutls_dane_sover}
%license LICENSE %license COPYING COPYING.LESSERv2
%{_libdir}/libgnutls-dane.so.%{gnutls_dane_sover}* %{_libdir}/libgnutls-dane.so.%{gnutls_dane_sover}*
%endif %endif
%files -n libgnutlsxx%{gnutlsxx_sover} %files -n libgnutlsxx%{gnutlsxx_sover}
%license LICENSE %license COPYING COPYING.LESSERv2
%{_libdir}/libgnutlsxx.so.%{gnutlsxx_sover}* %{_libdir}/libgnutlsxx.so.%{gnutlsxx_sover}*
%files -n libgnutls-devel %files -n libgnutls-devel
%license LICENSE %license COPYING COPYING.LESSERv2
%dir %{_includedir}/%{name} %dir %{_includedir}/%{name}
%{_includedir}/%{name}/abstract.h %{_includedir}/%{name}/abstract.h
%{_includedir}/%{name}/crypto.h %{_includedir}/%{name}/crypto.h
@@ -365,13 +399,15 @@ GNUTLS_FORCE_FIPS_MODE=1 make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=
%{_includedir}/%{name}/urls.h %{_includedir}/%{name}/urls.h
%{_libdir}/libgnutls.so %{_libdir}/libgnutls.so
%{_libdir}/pkgconfig/gnutls.pc %{_libdir}/pkgconfig/gnutls.pc
%files -n libgnutls-devel-doc
%{_mandir}/man3/* %{_mandir}/man3/*
%{_infodir}/*%{ext_info} %{_infodir}/*%{ext_info}
%doc %{_docdir}/libgnutls-devel %{_docdir}/libgnutls-devel
%if %{with dane} %if %{with dane}
%files -n libgnutls-dane-devel %files -n libgnutls-dane-devel
%license LICENSE %license COPYING COPYING.LESSERv2
%dir %{_includedir}/%{name} %dir %{_includedir}/%{name}
%{_includedir}/%{name}/dane.h %{_includedir}/%{name}/dane.h
%{_libdir}/pkgconfig/gnutls-dane.pc %{_libdir}/pkgconfig/gnutls-dane.pc
@@ -379,7 +415,7 @@ GNUTLS_FORCE_FIPS_MODE=1 make check %{?_smp_mflags} GNUTLS_SYSTEM_PRIORITY_FILE=
%endif %endif
%files -n libgnutlsxx-devel %files -n libgnutlsxx-devel
%license LICENSE %license COPYING COPYING.LESSERv2
%{_libdir}/libgnutlsxx.so %{_libdir}/libgnutlsxx.so
%dir %{_includedir}/%{name} %dir %{_includedir}/%{name}
%{_includedir}/%{name}/gnutlsxx.h %{_includedir}/%{name}/gnutlsxx.h