commit: 883dd47ae03b7047e8d857fb4df779d41f44b202 Author: Sam James <sam <AT> gentoo <DOT> org> AuthorDate: Sat Jan 24 02:59:21 2026 +0000 Commit: Sam James <sam <AT> gentoo <DOT> org> CommitDate: Sat Jan 24 02:59:35 2026 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=883dd47a
dev-libs/libjcat: move patch to devspace Signed-off-by: Sam James <sam <AT> gentoo.org> dev-libs/libjcat/Manifest | 1 + .../files/libjcat-0.2.5-skip-pq-gnutls.patch | 728 --------------------- dev-libs/libjcat/libjcat-0.2.5.ebuild | 11 +- 3 files changed, 11 insertions(+), 729 deletions(-) diff --git a/dev-libs/libjcat/Manifest b/dev-libs/libjcat/Manifest index 175299d6cefb..5057e50e7cbb 100644 --- a/dev-libs/libjcat/Manifest +++ b/dev-libs/libjcat/Manifest @@ -1,3 +1,4 @@ DIST libjcat-0.2.3.tar.xz 66188 BLAKE2B 200cac29d355cce54a4d722bcdd5dcd88e2aea59c31fb43a37cf4a7272cd7d996acafa3e4e70e15fdd59174be158b9c5134acef6a722504f97835095f63eb274 SHA512 ff4627c3917b10eb5acce0c0c2f583f6cebe8d9c7501ff3cbb9a8b419db62761d6b82674786cbfa00fe66d30a7699bc87c37e76648e45884a97523d68ac6ae15 +DIST libjcat-0.2.5-skip-pq-gnutls.patch 3936 BLAKE2B 45bd003ee8c734f392c61775a995e0ca3d68e2f2cdc63628a69eb2603dab2c9dd16cdf29e67c8489fd34118489cebc2624166cfc7a244979b478e6242860201b SHA512 6df9c21232886f66144d3ef5074a32004db941317df96e66cf14e4f9cdcf8b6fd8dc01470ba7b57646994140828e2520a98b8f532a1a858c02fdf107ac4f057d DIST libjcat-0.2.5.tar.xz 71852 BLAKE2B adeaecd337dbd7e854700ff78c24c422bd3f0abe8cbd2d04611223023921b51c0ef21e3a3475ac189b7c20c41db22208ab3db9d1b7cd47c4c6448a7bb3a9772b SHA512 84b4111d80a2d9e6dccc39b120b97b7128a9aef716cce2426acc5b36199472d6d6acd291affeffcd48156ed07189c09a04559282772ab8e1dd8f321446141407 DIST libjcat-0.2.5.tar.xz.asc 488 BLAKE2B 321a014ccdc289ad21e2d782cec85d744b8fcedd7b62126165ec0565ef427d5c25aa0d721f567c148f7cdca8192da2eb6ea559cf3b7479224a690b27a01f5df2 SHA512 ab2e4364587e4457cdbc256f4768047e73754f47ac8f11d9fd9328d06f3154565e7a51313d98009162e68dabd9825ea5683ea5134870f345bc239d2277f7cdeb diff --git a/dev-libs/libjcat/files/libjcat-0.2.5-skip-pq-gnutls.patch b/dev-libs/libjcat/files/libjcat-0.2.5-skip-pq-gnutls.patch deleted file mode 100644 index 3b6089d5cf06..000000000000 --- a/dev-libs/libjcat/files/libjcat-0.2.5-skip-pq-gnutls.patch +++ /dev/null @@ -1,728 +0,0 @@ -https://github.com/hughsie/libjcat/commit/156f0101c88d4928f45ac95b0c3ab93dc964ba40 -https://github.com/hughsie/libjcat/commit/5de47e86be9cfb608fdb4f4925077174d89fe191 -https://github.com/hughsie/libjcat/commit/1952439e5235f7832c7ac694088ca497d1796262 - -From 156f0101c88d4928f45ac95b0c3ab93dc964ba40 Mon Sep 17 00:00:00 2001 -From: Richard Hughes <[email protected]> -Date: Mon, 17 Nov 2025 11:10:01 +0000 -Subject: [PATCH] Do not try to change the GnuTLS system-wide config - -To enable ML-DSA, either update your crypto-policy package or add -`secure-sig = ML-DSA-87` to `/etc/crypto-policies/back-ends/gnutls.config` ---- - libjcat/jcat-gnutls-common.c | 3 --- - 1 file changed, 3 deletions(-) - -diff --git a/libjcat/jcat-gnutls-common.c b/libjcat/jcat-gnutls-common.c -index 2a14b1f..e763767 100644 ---- a/libjcat/jcat-gnutls-common.c -+++ b/libjcat/jcat-gnutls-common.c -@@ -460,9 +460,6 @@ jcat_gnutls_global_log_cb(int level, const char *msg) - void - jcat_gnutls_global_init(void) - { --#ifdef HAVE_GNUTLS_PQC -- gnutls_sign_set_secure(GNUTLS_SIGN_MLDSA87, GNUTLS_SIGN_FLAG_SECURE_FOR_CERTS); --#endif - gnutls_global_set_log_level(3); - gnutls_global_set_log_function(jcat_gnutls_global_log_cb); - } - -From 5de47e86be9cfb608fdb4f4925077174d89fe191 Mon Sep 17 00:00:00 2001 -From: Richard Hughes <[email protected]> -Date: Mon, 17 Nov 2025 11:11:19 +0000 -Subject: [PATCH] Return the correct error code using the gnutls rc - ---- - libjcat/jcat-gnutls-common.c | 273 +++++++++++------------------ - libjcat/jcat-gnutls-common.h | 2 + - libjcat/jcat-gnutls-pkcs7-engine.c | 131 ++++---------- - 3 files changed, 131 insertions(+), 275 deletions(-) - -diff --git a/libjcat/jcat-gnutls-common.c b/libjcat/jcat-gnutls-common.c -index e763767..4bf8ebf 100644 ---- a/libjcat/jcat-gnutls-common.c -+++ b/libjcat/jcat-gnutls-common.c -@@ -54,13 +54,8 @@ jcat_gnutls_pkcs7_load_crt_from_blob(GBytes *blob, gnutls_x509_crt_fmt_t format, - - /* create certificate */ - rc = gnutls_x509_crt_init(&crt); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_init: "); - return NULL; - } - -@@ -68,13 +63,8 @@ jcat_gnutls_pkcs7_load_crt_from_blob(GBytes *blob, gnutls_x509_crt_fmt_t format, - d.size = g_bytes_get_size(blob); - d.data = (unsigned char *)g_bytes_get_data(blob, NULL); - rc = gnutls_x509_crt_import(crt, &d, format); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_import: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_import: "); - return NULL; - } - return g_steal_pointer(&crt); -@@ -89,25 +79,15 @@ jcat_gnutls_pkcs7_load_privkey_from_blob(GBytes *blob, GError **error) - - /* load the private key */ - rc = gnutls_privkey_init(&key); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_init: "); - return NULL; - } - d.size = g_bytes_get_size(blob); - d.data = (unsigned char *)g_bytes_get_data(blob, NULL); - rc = gnutls_privkey_import_x509_raw(key, &d, GNUTLS_X509_FMT_PEM, NULL, 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_import_x509_raw: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_import_x509_raw: "); - return NULL; - } - return g_steal_pointer(&key); -@@ -121,23 +101,13 @@ jcat_gnutls_pkcs7_load_pubkey_from_privkey(gnutls_privkey_t privkey, GError **er - - /* get the public key part of the private key */ - rc = gnutls_pubkey_init(&pubkey); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pubkey_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pubkey_init: "); - return NULL; - } - rc = gnutls_pubkey_import_privkey(pubkey, privkey, 0, 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pubkey_import_privkey: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pubkey_import_privkey: "); - return NULL; - } - -@@ -178,23 +148,13 @@ jcat_gnutls_pkcs7_create_private_key(gnutls_pk_algorithm_t algo, GError **error) - - /* initialize key and SPKI */ - rc = gnutls_x509_privkey_init(&key); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_init: "); - return NULL; - } - rc = gnutls_x509_spki_init(&spki); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "spki_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to spki_init: "); - return NULL; - } - -@@ -202,35 +162,20 @@ jcat_gnutls_pkcs7_create_private_key(gnutls_pk_algorithm_t algo, GError **error) - bits = gnutls_sec_param_to_pk_bits(algo, GNUTLS_SEC_PARAM_HIGH); - g_debug("generating a %d bit %s private key...", bits, gnutls_pk_algorithm_get_name(algo)); - rc = gnutls_x509_privkey_generate2(key, algo, bits, 0, NULL, 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_generate2: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_generate2: "); - return NULL; - } - rc = gnutls_x509_privkey_verify_params(key); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_verify_params: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_verify_params: "); - return NULL; - } - - /* save to file */ - rc = gnutls_x509_privkey_export2(key, GNUTLS_X509_FMT_PEM, &d); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "privkey_export2: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to privkey_export2: "); - return NULL; - } - d_payload = d.data; -@@ -279,167 +224,97 @@ jcat_gnutls_pkcs7_create_client_certificate(gnutls_privkey_t privkey, GError **e - return NULL; - - rc = gnutls_pubkey_get_preferred_hash_algorithm(pubkey, &digest_alg, NULL); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "preferred_hash_algorithm: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to get preferred hash algorithm: "); - return NULL; - } - g_debug("preferred_hash_algorithm=%s", gnutls_digest_get_name(digest_alg)); - - /* create certificate */ - rc = gnutls_x509_crt_init(&crt); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_init: "); - return NULL; - } - - /* set public key */ - rc = gnutls_x509_crt_set_pubkey(crt, pubkey); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_set_pubkey: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_set_pubkey: "); - return NULL; - } - - /* set positive random serial number */ - rc = gnutls_rnd(GNUTLS_RND_NONCE, sha1buf, sizeof(sha1buf)); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "gnutls_rnd: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to gnutls_rnd: "); - return NULL; - } - sha1buf[0] &= 0x7f; - rc = gnutls_x509_crt_set_serial(crt, sha1buf, sizeof(sha1buf)); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_set_serial: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_set_serial: "); - return NULL; - } - - /* set activation */ - rc = gnutls_x509_crt_set_activation_time(crt, time(NULL)); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "set_activation_time: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set activation time: "); - return NULL; - } - - /* set expiration */ - rc = gnutls_x509_crt_set_expiration_time(crt, (time_t)-1); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "set_expiration_time: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set expiration time: "); - return NULL; - } - - /* set basic constraints */ - rc = gnutls_x509_crt_set_basic_constraints(crt, 0, -1); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "set_basic_constraints: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set basic constraints: "); - return NULL; - } - - /* set usage */ - rc = gnutls_x509_crt_set_key_usage(crt, GNUTLS_KEY_DIGITAL_SIGNATURE); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "set_key_usage: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set key usage: "); - return NULL; - } - - /* set subject key ID */ - rc = gnutls_x509_crt_get_key_id(crt, GNUTLS_KEYID_USE_SHA1, sha1buf, &sha1bufsz); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "get_key_id: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to get key id: "); - return NULL; - } - rc = gnutls_x509_crt_set_subject_key_id(crt, sha1buf, sha1bufsz); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "set_subject_key_id: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set subject key id: "); - return NULL; - } - - /* set version */ - rc = gnutls_x509_crt_set_version(crt, 3); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "error setting certificate version: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to set certificate version: "); - return NULL; - } - - /* self-sign certificate */ - rc = gnutls_x509_crt_privkey_sign(crt, crt, privkey, digest_alg, 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_privkey_sign: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_privkey_sign: "); - return NULL; - } - - /* export to file */ - rc = gnutls_x509_crt_export2(crt, GNUTLS_X509_FMT_PEM, &d); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "crt_export2: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to crt_export2: "); - return NULL; - } - d_payload = d.data; -@@ -463,3 +338,51 @@ jcat_gnutls_global_init(void) - gnutls_global_set_log_level(3); - gnutls_global_set_log_function(jcat_gnutls_global_log_cb); - } -+ -+gboolean -+jcat_gnutls_rc_to_error(int rc, GError **error) -+{ -+ guint error_code = G_IO_ERROR_FAILED; -+ -+ if (rc >= GNUTLS_E_SUCCESS) -+ return TRUE; -+ switch (rc) { -+ case GNUTLS_E_ECC_UNSUPPORTED_CURVE: -+ case GNUTLS_E_INSUFFICIENT_CREDENTIALS: -+ case GNUTLS_E_INSUFFICIENT_SECURITY: -+ case GNUTLS_E_NO_CERTIFICATE_FOUND: -+ case GNUTLS_E_UNIMPLEMENTED_FEATURE: -+ case GNUTLS_E_UNKNOWN_ALGORITHM: -+ case GNUTLS_E_UNKNOWN_CIPHER_TYPE: -+ case GNUTLS_E_UNKNOWN_COMPRESSION_ALGORITHM: -+ case GNUTLS_E_UNKNOWN_HASH_ALGORITHM: -+ case GNUTLS_E_UNKNOWN_PK_ALGORITHM: -+ case GNUTLS_E_UNKNOWN_PKCS_CONTENT_TYPE: -+ case GNUTLS_E_UNSUPPORTED_CERTIFICATE_TYPE: -+ case GNUTLS_E_UNSUPPORTED_SIGNATURE_ALGORITHM: -+ case GNUTLS_E_UNWANTED_ALGORITHM: -+ case GNUTLS_E_X509_CERTIFICATE_ERROR: -+ case GNUTLS_E_X509_UNSUPPORTED_ATTRIBUTE: -+ case GNUTLS_E_X509_UNSUPPORTED_CRITICAL_EXTENSION: -+ case GNUTLS_E_X509_UNSUPPORTED_EXTENSION: -+ error_code = G_IO_ERROR_NOT_SUPPORTED; -+ break; -+ case GNUTLS_E_BASE64_DECODING_ERROR: -+ case GNUTLS_E_CERTIFICATE_KEY_MISMATCH: -+ case GNUTLS_E_DECRYPTION_FAILED: -+ case GNUTLS_E_KEY_USAGE_VIOLATION: -+ case GNUTLS_E_PK_DECRYPTION_FAILED: -+ case GNUTLS_E_PK_ENCRYPTION_FAILED: -+ case GNUTLS_E_PK_SIGN_FAILED: -+ case GNUTLS_E_PK_SIG_VERIFY_FAILED: -+ case GNUTLS_E_SHORT_MEMORY_BUFFER: -+ case GNUTLS_E_UNEXPECTED_PACKET_LENGTH: -+ case GNUTLS_E_UNKNOWN_CIPHER_SUITE: -+ error_code = G_IO_ERROR_INVALID_DATA; -+ break; -+ default: -+ break; -+ } -+ g_set_error(error, G_IO_ERROR, error_code, "%s [%i]", gnutls_strerror(rc), rc); -+ return FALSE; -+} -diff --git a/libjcat/jcat-gnutls-common.h b/libjcat/jcat-gnutls-common.h -index b89267c..cdcda22 100644 ---- a/libjcat/jcat-gnutls-common.h -+++ b/libjcat/jcat-gnutls-common.h -@@ -54,6 +54,8 @@ G_DEFINE_AUTO_CLEANUP_FREE_FUNC(gnutls_x509_trust_list_iter_t, - - void - jcat_gnutls_global_init(void); -+gboolean -+jcat_gnutls_rc_to_error(int rc, GError **error); - gchar * - jcat_gnutls_pkcs7_datum_to_dn_str(const gnutls_datum_t *raw) G_GNUC_NON_NULL(1); - gnutls_x509_crt_t -diff --git a/libjcat/jcat-gnutls-pkcs7-engine.c b/libjcat/jcat-gnutls-pkcs7-engine.c -index 3488d28..26d8e11 100644 ---- a/libjcat/jcat-gnutls-pkcs7-engine.c -+++ b/libjcat/jcat-gnutls-pkcs7-engine.c -@@ -38,13 +38,8 @@ jcat_gnutls_pkcs7_engine_add_pubkey_blob_fmt(JcatGnutlsPkcs7Engine *self, - if (crt == NULL) - return FALSE; - rc = gnutls_x509_crt_get_key_usage(crt, &key_usage, NULL); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to get key usage: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to get key usage: "); - return FALSE; - } - if ((key_usage & GNUTLS_KEY_DIGITAL_SIGNATURE) == 0 && -@@ -119,14 +114,9 @@ jcat_gnutls_pkcs7_engine_build_trust_list(JcatGnutlsPkcs7Engine *self, GError ** - (const gnutls_x509_crt_t *)self->pubkeys_crts->pdata, - self->pubkeys_crts->len, - 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to add to trust list: %s [%i]", -- gnutls_strerror(rc), -- rc); -- return FALSE; -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to add to trust list: "); -+ return NULL; - } - g_debug("loaded %i certificates", rc); - -@@ -142,14 +132,9 @@ jcat_gnutls_pkcs7_engine_build_trust_list_only_pq(JcatGnutlsPkcs7Engine *self, G - g_auto(gnutls_x509_trust_list_t) tl = NULL; - - rc = gnutls_x509_trust_list_init(&tl, 0); -- if (rc != GNUTLS_E_SUCCESS) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to create trust list: %s [%i]", -- gnutls_strerror(rc), -- rc); -- return FALSE; -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to create trust list: "); -+ return NULL; - } - for (guint i = 0; i < self->pubkeys_crts->len; i++) { - gnutls_x509_crt_t crt = g_ptr_array_index(self->pubkeys_crts, i); -@@ -159,14 +144,9 @@ jcat_gnutls_pkcs7_engine_build_trust_list_only_pq(JcatGnutlsPkcs7Engine *self, G - algo != GNUTLS_SIGN_MLDSA87) - continue; - rc = gnutls_x509_trust_list_add_cas(tl, &crt, 1, 0); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to add to trust list: %s [%i]", -- gnutls_strerror(rc), -- rc); -- return FALSE; -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to add to trust list: "); -+ return NULL; - } - g_debug("loaded %i certificates", rc); - } -@@ -197,13 +177,8 @@ jcat_gnutls_pkcs7_engine_verify(JcatEngine *engine, - - /* startup */ - rc = gnutls_pkcs7_init(&pkcs7); -- if (rc != GNUTLS_E_SUCCESS) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to init pkcs7: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to init pkcs7: "); - return NULL; - } - -@@ -211,13 +186,8 @@ jcat_gnutls_pkcs7_engine_verify(JcatEngine *engine, - datum.data = (guchar *)g_bytes_get_data(blob_signature, NULL); - datum.size = g_bytes_get_size(blob_signature); - rc = gnutls_pkcs7_import(pkcs7, &datum, GNUTLS_X509_FMT_PEM); -- if (rc != GNUTLS_E_SUCCESS) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to import the PKCS7 signature: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to import the PKCS7 signature: "); - return NULL; - } - -@@ -248,13 +218,8 @@ jcat_gnutls_pkcs7_engine_verify(JcatEngine *engine, - - /* always get issuer */ - rc = gnutls_pkcs7_get_signature_info(pkcs7, i, &info_tmp); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to get signature info: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to get signature info: "); - return NULL; - } - -@@ -290,24 +255,13 @@ jcat_gnutls_pkcs7_engine_verify(JcatEngine *engine, - &datum, /* data */ - verify_flags); - } -- if (rc < 0) { -+ if (!jcat_gnutls_rc_to_error(rc, error)) { - dn = jcat_gnutls_pkcs7_datum_to_dn_str(&info->issuer_dn); - if (dn != NULL) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to verify data for %s: %s [%i]", -- dn, -- gnutls_strerror(rc), -- rc); -- return NULL; -+ g_prefix_error(error, "failed to verify data for %s: ", dn); -+ } else { -+ g_prefix_error_literal(error, "failed to verify data: "); - } -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "failed to verify data: %s [%i]", -- gnutls_strerror(rc), -- rc); - return NULL; - } - -@@ -421,26 +375,16 @@ jcat_gnutls_pkcs7_engine_pubkey_sign(JcatEngine *engine, - if (pubkey == NULL) - return NULL; - rc = gnutls_pubkey_get_preferred_hash_algorithm(pubkey, &dig, NULL); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "preferred_hash_algorithm: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to get preferred hash algorithm: "); - return NULL; - } - g_debug("preferred_hash_algorithm=%s", gnutls_digest_get_name(dig)); - - /* create container */ - rc = gnutls_pkcs7_init(&pkcs7); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pkcs7_init: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pkcs7_init: "); - return NULL; - } - -@@ -452,37 +396,24 @@ jcat_gnutls_pkcs7_engine_pubkey_sign(JcatEngine *engine, - if (flags & JCAT_SIGN_FLAG_ADD_CERT) - gnutls_flags |= GNUTLS_PKCS7_INCLUDE_CERT; - rc = gnutls_pkcs7_sign(pkcs7, crt, key, &d, NULL, NULL, dig, gnutls_flags); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pkcs7_sign: %s [%i]", -- gnutls_strerror(rc), -- rc); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pkcs7_sign: "); - return NULL; - } - - /* set certificate */ - if (flags & JCAT_SIGN_FLAG_ADD_CERT) { - rc = gnutls_pkcs7_set_crt(pkcs7, crt); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pkcs7_set_cr: %s", -- gnutls_strerror(rc)); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pkcs7_set_cr: "); - return NULL; - } - } - - /* export */ - rc = gnutls_pkcs7_export2(pkcs7, GNUTLS_X509_FMT_PEM, &d); -- if (rc < 0) { -- g_set_error(error, -- G_IO_ERROR, -- G_IO_ERROR_INVALID_DATA, -- "pkcs7_export: %s", -- gnutls_strerror(rc)); -+ if (!jcat_gnutls_rc_to_error(rc, error)) { -+ g_prefix_error_literal(error, "failed to pkcs7_export: "); - return NULL; - } - d_payload = d.data; -From 1952439e5235f7832c7ac694088ca497d1796262 Mon Sep 17 00:00:00 2001 -From: Richard Hughes <[email protected]> -Date: Mon, 17 Nov 2025 11:14:50 +0000 -Subject: [PATCH] Skip the PQ tests if the GnuTLS config is not malleable - -Fixes https://github.com/hughsie/libjcat/issues/195 ---- - libjcat/jcat-self-test.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/libjcat/jcat-self-test.c b/libjcat/jcat-self-test.c -index ddccb3b..b89b67b 100644 ---- a/libjcat/jcat-self-test.c -+++ b/libjcat/jcat-self-test.c -@@ -667,6 +667,10 @@ jcat_pkcs7_engine_self_signed_pq_func(gconstpointer test_data) - payload, - JCAT_SIGN_FLAG_ADD_TIMESTAMP | JCAT_SIGN_FLAG_USE_PQ, - &error); -+ if (signature == NULL && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED)) { -+ g_test_skip("ML-MDA cannot be enabled at runtime, skipping"); -+ return; -+ } - g_assert_no_error(error); - g_assert_nonnull(signature); - result = jcat_engine_self_verify(engine, -@@ -674,6 +678,10 @@ jcat_pkcs7_engine_self_signed_pq_func(gconstpointer test_data) - jcat_blob_get_data(signature), - JCAT_VERIFY_FLAG_ONLY_PQ, - &error); -+ if (result == NULL && g_error_matches(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED)) { -+ g_test_skip("ML-MDA cannot be enabled at runtime, skipping"); -+ return; -+ } - g_assert_no_error(error); - g_assert_nonnull(result); - diff --git a/dev-libs/libjcat/libjcat-0.2.5.ebuild b/dev-libs/libjcat/libjcat-0.2.5.ebuild index 5fef53f4bd6c..bc92fe6d1207 100644 --- a/dev-libs/libjcat/libjcat-0.2.5.ebuild +++ b/dev-libs/libjcat/libjcat-0.2.5.ebuild @@ -12,6 +12,7 @@ DESCRIPTION="Library and tool for reading and writing Jcat files" HOMEPAGE="https://github.com/hughsie/libjcat" SRC_URI=" https://github.com/hughsie/libjcat/releases/download/${PV}/${P}.tar.xz + https://dev.gentoo.org/~sam/distfiles/${CATEGORY}/${PN}/${P}-skip-pq-gnutls.patch verify-sig? ( https://github.com/hughsie/libjcat/releases/download/${PV}/${P}.tar.xz.asc ) " @@ -46,7 +47,7 @@ BDEPEND=" " PATCHES=( - "${FILESDIR}"/${P}-skip-pq-gnutls.patch + "${WORKDIR}"/${P}-skip-pq-gnutls.patch ) python_check_deps() { @@ -57,6 +58,14 @@ pkg_setup() { use vala && vala_setup } +src_unpack() { + if use verify-sig; then + verify-sig_verify_detached "${DISTDIR}"/${P}.tar.xz{,.asc} + fi + + default +} + src_prepare() { xdg_environment_reset default
