From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp1 ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms11 with LMTPS id GFruMMJ8GV9YOQAA0tVLHw (envelope-from ) for ; Thu, 23 Jul 2020 12:04:18 +0000 Received: from aspmx1.migadu.com ([2001:41d0:2:4a6f::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp1 with LMTPS id GO6aLMJ8GV8NFgAAbx9fmQ (envelope-from ) for ; Thu, 23 Jul 2020 12:04:18 +0000 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id E78F89401CD for ; Thu, 23 Jul 2020 12:04:17 +0000 (UTC) Received: from localhost ([::1]:37620 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jyZxQ-0005Q5-Sb for larch@yhetil.org; Thu, 23 Jul 2020 08:04:16 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:53824) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jyZxE-00057L-7n for guix-patches@gnu.org; Thu, 23 Jul 2020 08:04:04 -0400 Received: from debbugs.gnu.org ([209.51.188.43]:60966) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1jyZxD-00073Q-VT for guix-patches@gnu.org; Thu, 23 Jul 2020 08:04:03 -0400 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1jyZxD-00059J-Rs for guix-patches@gnu.org; Thu, 23 Jul 2020 08:04:03 -0400 X-Loop: help-debbugs@gnu.org Subject: [bug#42404] [PATCH 3/5] gnu: Add rnp. Resent-From: Justus Winter Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Thu, 23 Jul 2020 12:04:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 42404 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 42404@debbugs.gnu.org Cc: Justus Winter Received: via spool by 42404-submit@debbugs.gnu.org id=B42404.159550582119735 (code B ref 42404); Thu, 23 Jul 2020 12:04:03 +0000 Received: (at 42404) by debbugs.gnu.org; 23 Jul 2020 12:03:41 +0000 Received: from localhost ([127.0.0.1]:44275 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jyZwp-000588-HM for submit@debbugs.gnu.org; Thu, 23 Jul 2020 08:03:41 -0400 Received: from avior.uberspace.de ([185.26.156.32]:50380 ident=JCHtq2KmJsg) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1jyZwe-000575-JE for 42404@debbugs.gnu.org; Thu, 23 Jul 2020 08:03:33 -0400 Received: (qmail 10785 invoked from network); 23 Jul 2020 12:03:26 -0000 Received: from localhost (HELO europa) (127.0.0.1) by avior.uberspace.de with SMTP; 23 Jul 2020 12:03:26 -0000 Received: from teythoon by europa with local (Exim 4.92) (envelope-from ) id 1jyZwb-0002CA-FS; Thu, 23 Jul 2020 14:03:25 +0200 From: Justus Winter Date: Thu, 23 Jul 2020 14:03:20 +0200 Message-Id: <20200723120322.8385-3-justus@sequoia-pgp.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200723120322.8385-1-justus@sequoia-pgp.org> References: <20200723120322.8385-1-justus@sequoia-pgp.org> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-Spam-Score: -1.0 (-) X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+larch=yhetil.org@gnu.org Sender: "Guix-patches" X-Scanner: scn0 Authentication-Results: aspmx1.migadu.com; dkim=none; dmarc=none; spf=pass (aspmx1.migadu.com: domain of guix-patches-bounces@gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=guix-patches-bounces@gnu.org X-Spam-Score: -0.01 X-TUID: SVxnxshg1dz6 * gnu/packages/openpgp.scm (rnp): New variable. * gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch: New file. * gnu/packages/patches/rnp-fix-cp.patch: New file. * gnu/packages/patches/rnp-fix-gnupg-list-packets.patch: New file. * gnu/packages/patches/rnp-fix-test-setup.patch: New file. * gnu/packages/patches/rnp-fix-test.patch: New file. * gnu/packages/patches/rnp-fix-true-false.patch: New file. * gnu/packages/patches/rnp-unbundle-googletest.patch: New file. * gnu/packages/patches/rnp-update-expiration-16ecb289.patch: New file. --- gnu/packages/openpgp.scm | 65 ++++- .../patches/rnp-disable-ruby-rnp-tests.patch | 25 ++ gnu/packages/patches/rnp-fix-cp.patch | 27 ++ .../patches/rnp-fix-gnupg-list-packets.patch | 35 +++ gnu/packages/patches/rnp-fix-test-setup.patch | 34 +++ gnu/packages/patches/rnp-fix-test.patch | 32 +++ gnu/packages/patches/rnp-fix-true-false.patch | 253 ++++++++++++++++++ .../patches/rnp-unbundle-googletest.patch | 45 ++++ .../rnp-update-expiration-16ecb289.patch | 208 ++++++++++++++ 9 files changed, 723 insertions(+), 1 deletion(-) create mode 100644 gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch create mode 100644 gnu/packages/patches/rnp-fix-cp.patch create mode 100644 gnu/packages/patches/rnp-fix-gnupg-list-packets.patch create mode 100644 gnu/packages/patches/rnp-fix-test-setup.patch create mode 100644 gnu/packages/patches/rnp-fix-test.patch create mode 100644 gnu/packages/patches/rnp-fix-true-false.patch create mode 100644 gnu/packages/patches/rnp-unbundle-googletest.patch create mode 100644 gnu/packages/patches/rnp-update-expiration-16ecb289.patch diff --git a/gnu/packages/openpgp.scm b/gnu/packages/openpgp.scm index 94beab9929..a997f4ed74 100644 --- a/gnu/packages/openpgp.scm +++ b/gnu/packages/openpgp.scm @@ -19,11 +19,19 @@ (define-module (gnu packages openpgp) #:use-module (guix packages) #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix build-system cmake) #:use-module (guix build-system gnu) #:use-module ((guix licenses) #:prefix license:) + #:use-module (gnu packages) + #:use-module (gnu packages check) #:use-module (gnu packages compression) + #:use-module (gnu packages crypto) #:use-module (gnu packages gnupg) - #:use-module (gnu packages multiprecision)) + #:use-module (gnu packages multiprecision) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python) + #:use-module (gnu packages web)) (define-public libtmcg (package @@ -92,3 +100,58 @@ implementation is in experimental state and should NOT be used in production environments.") (home-page "https://www.nongnu.org/dkgpg/") (license license:gpl2+))) + +(define-public rnp + (package + (name "rnp") + (version "0.13.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "https://github.com/rnpgp/rnp") + (commit (string-append "v" version)))) + (file-name (git-file-name name version)) + (sha256 + (base32 + "04b2a5cwy91i41vgix6ws99bg93fav8qizx92bivc75lxii8gisz")) + (patches + (search-patches "rnp-unbundle-googletest.patch" + "rnp-disable-ruby-rnp-tests.patch" + "rnp-fix-test-setup.patch" + "rnp-fix-cp.patch" + "rnp-fix-test.patch" + "rnp-fix-gnupg-list-packets.patch" + "rnp-fix-true-false.patch" + "rnp-update-expiration-16ecb289.patch")))) + (build-system cmake-build-system) + (arguments '(#:configure-flags + '("-DBUILD_SHARED_LIBS=on" + "-DBUILD_TESTING=on") + #:phases + (modify-phases %standard-phases + (add-after 'unpack 'fixes + (lambda* (#:key inputs #:allow-other-keys) + (copy-recursively (assoc-ref inputs "googletest-source") + "src/tests/googletest-src") + #t))))) + (native-inputs + `(("gnupg" ,gnupg) + ("googletest-source" ,(package-source googletest)) + ("pkg-config" ,pkg-config) + ("python2" ,python-2.7))) + (inputs `(("botan" ,botan) + ("bzip2" ,bzip2) + ("json-c" ,json-c) + ("zlib" ,zlib))) + (synopsis + "RFC4880-compliant OpenPGP library written in C++") + (description + "Set of OpenPGP (RFC4880) tools that works on Linux, *BSD and macOS as a +replacement of GnuPG. It is maintained by Ribose after being forked from +NetPGP, itself originally written for NetBSD. + +librnp is the library used by rnp for all OpenPGP functions, useful for +developers to build against. It is a “real” library, not a wrapper like GPGME +of GnuPG.") + (home-page "https://www.rnpgp.com/") + (license (list license:bsd-2 license:asl2.0 license:bsd-3)))) diff --git a/gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch b/gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch new file mode 100644 index 0000000000..5c8c06524d --- /dev/null +++ b/gnu/packages/patches/rnp-disable-ruby-rnp-tests.patch @@ -0,0 +1,25 @@ +From 9f3c07601393e219cc5979f93fda57bf2d07dee7 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 16:10:21 +0200 +Subject: [PATCH 6/6] Disable ruby-rnp tests. + +--- + src/tests/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt +index 2f0a1c3f..1c82edbf 100644 +--- a/src/tests/CMakeLists.txt ++++ b/src/tests/CMakeLists.txt +@@ -164,7 +164,7 @@ foreach(suite IN LISTS suitelist) + endforeach() + + # cruby does not currently play nice with ASaN et al. +-if (NOT ENABLE_SANITIZERS AND BUILD_SHARED_LIBS AND NOT WIN32) ++if (NOT ENABLE_SANITIZERS AND BUILD_SHARED_LIBS AND NOT WIN32 AND IGNORE) + include(ExternalProject) + set(_sourcedir "${CMAKE_BINARY_DIR}/ruby-rnp") + if (DEFINED ENV{RUBY_RNP_INSTALL}) +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-fix-cp.patch b/gnu/packages/patches/rnp-fix-cp.patch new file mode 100644 index 0000000000..039912d953 --- /dev/null +++ b/gnu/packages/patches/rnp-fix-cp.patch @@ -0,0 +1,27 @@ +From c163e1b12511e9e7df752a01767a2a8ba56c4196 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 15:52:37 +0200 +Subject: [PATCH 1/6] Make copying more robust. + +Let the shell locate 'cp'. This is more robust in environments such +as Guix or Nix that do not provide /bin/cp. +--- + src/tests/support.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/tests/support.cpp b/src/tests/support.cpp +index 3d6a6dc9..d260e166 100644 +--- a/src/tests/support.cpp ++++ b/src/tests/support.cpp +@@ -283,7 +283,7 @@ copy_recursively(const char *src, const char *dst) + // TODO: maybe use fts or something less hacky + char buf[2048]; + #ifndef _WIN32 +- snprintf(buf, sizeof(buf), "/bin/cp -a '%s' '%s'", src, dst); ++ snprintf(buf, sizeof(buf), "cp -a '%s' '%s'", src, dst); + #else + snprintf(buf, sizeof(buf), "xcopy \"%s\" \"%s\" /I /Q /E /Y", src, dst); + #endif +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-fix-gnupg-list-packets.patch b/gnu/packages/patches/rnp-fix-gnupg-list-packets.patch new file mode 100644 index 0000000000..b23e76da7c --- /dev/null +++ b/gnu/packages/patches/rnp-fix-gnupg-list-packets.patch @@ -0,0 +1,35 @@ +From 4cb5b2c1d3783bfad3c4f77b2ad2ac89921e91f4 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 16:03:32 +0200 +Subject: [PATCH 4/6] Make invoking GnuPG more robust. + +GnuPG will try to read its state even for operations that do not +require it, e.g. listing packets. If the state directory does not +exist, GnuPG will try to create it. If this fails, GnuPG errors out. + +In some build environments, $HOME may not exist or may not be +writable (e.g. in Guix and Nix, $HOME does not exist). This leads to +a spurious test failures when GnuPG is invoked to inspect packets. + +Fix this by using the current directory as GnuPG state directory. +--- + src/tests/cli_tests.py | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/tests/cli_tests.py b/src/tests/cli_tests.py +index 74b28983..2b7d772a 100755 +--- a/src/tests/cli_tests.py ++++ b/src/tests/cli_tests.py +@@ -106,7 +106,8 @@ RNP_TO_GPG_CIPHERS = {'AES' : 'aes128', 'AES192' : 'aes192', 'AES256' : 'aes256' + 'IDEA' : 'idea', '3DES' : '3des', 'CAST5' : 'cast5', 'BLOWFISH' : 'blowfish'} + + def check_packets(fname, regexp): +- ret, output, err = run_proc(GPG, ['--list-packets', path_for_gpg(fname)]) ++ ret, output, err = run_proc(GPG, ['--homedir', '.', ++ '--list-packets', path_for_gpg(fname)]) + if ret != 0: + logging.error(err) + return None +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-fix-test-setup.patch b/gnu/packages/patches/rnp-fix-test-setup.patch new file mode 100644 index 0000000000..e155194ccc --- /dev/null +++ b/gnu/packages/patches/rnp-fix-test-setup.patch @@ -0,0 +1,34 @@ +From f544b3e63416f3a824ed2955d119ea0d36c88b36 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 16:00:37 +0200 +Subject: [PATCH] Make test environment setup more robust. + +Previously, a failing test leaving RNP or GnuPG state directories +behind would cause all tests following it to fail. Improve this by +removing the directories first should they exist. +--- + src/tests/cli_tests.py | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/tests/cli_tests.py b/src/tests/cli_tests.py +index 2b7d772a..8261486f 100755 +--- a/src/tests/cli_tests.py ++++ b/src/tests/cli_tests.py +@@ -704,12 +704,14 @@ def setup(loglvl): + RNPDIR = path.join(WORKDIR, '.rnp') + RNP = os.getenv('RNP_TESTS_RNP_PATH') or 'rnp' + RNPK = os.getenv('RNP_TESTS_RNPKEYS_PATH') or 'rnpkeys' ++ shutil.rmtree(RNPDIR, ignore_errors=True) + os.mkdir(RNPDIR, 0700) + + GPGDIR = path.join(WORKDIR, '.gpg') + GPGHOME = path_for_gpg(GPGDIR) if is_windows() else GPGDIR + GPG = os.getenv('RNP_TESTS_GPG_PATH') or find_utility('gpg') + GPGCONF = os.getenv('RNP_TESTS_GPGCONF_PATH') or find_utility('gpgconf') ++ shutil.rmtree(GPGDIR, ignore_errors=True) + os.mkdir(GPGDIR, 0700) + + def data_path(subpath): +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-fix-test.patch b/gnu/packages/patches/rnp-fix-test.patch new file mode 100644 index 0000000000..cb94f14673 --- /dev/null +++ b/gnu/packages/patches/rnp-fix-test.patch @@ -0,0 +1,32 @@ +From fede676aec9201cfd18b47ffb60ebb55fa90abac Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 15:54:32 +0200 +Subject: [PATCH 2/6] Make test more robust. + +Previously, a single character "0" was written to the RSA signature +data to invalidate the signature. However, there is a 1 in 256 +chance of there being a "0" character there, in which case the +invalidation fails. Instead, overwrite nine characters, reducing the +chance of failure to 1 in 2^72. +--- + src/tests/key-unlock.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/tests/key-unlock.cpp b/src/tests/key-unlock.cpp +index 66a44f0d..5610f065 100644 +--- a/src/tests/key-unlock.cpp ++++ b/src/tests/key-unlock.cpp +@@ -149,8 +149,8 @@ TEST_F(rnp_tests, test_key_unlock_pgp) + std::fstream verf("dummyfile.dat.pgp", + std::ios_base::binary | std::ios_base::out | std::ios_base::in); + off_t versize = file_size("dummyfile.dat.pgp"); +- verf.seekg(versize - 3, std::ios::beg); +- verf.write("0x0C", 1); ++ verf.seekg(versize - 9, std::ios::beg); ++ verf.write("foobarbaz", 9); + verf.close(); + assert_false(cli_rnp_process_file(&cfg, &rnp)); + rnp_cfg_free(&cfg); +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-fix-true-false.patch b/gnu/packages/patches/rnp-fix-true-false.patch new file mode 100644 index 0000000000..ee76e51bc6 --- /dev/null +++ b/gnu/packages/patches/rnp-fix-true-false.patch @@ -0,0 +1,253 @@ +From 028a2f50fbf47d989bbf79be589945bec55b4825 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 15:57:57 +0200 +Subject: [PATCH 3/6] Use 'true' and 'false' instead of 'TRUE' and 'FALSE'. + +The latter are not guaranteed to be defined. +--- + src/lib/rnp.cpp | 10 ++++----- + src/tests/ffi.cpp | 56 +++++++++++++++++++++++------------------------ + 2 files changed, 33 insertions(+), 33 deletions(-) + +diff --git a/src/lib/rnp.cpp b/src/lib/rnp.cpp +index a87511a4..9c0385d1 100644 +--- a/src/lib/rnp.cpp ++++ b/src/lib/rnp.cpp +@@ -5927,7 +5927,7 @@ key_to_json(json_object *jso, rnp_key_handle_t handle, uint32_t flags) + return RNP_ERROR_OUT_OF_MEMORY; + } + // revoked +- json_object *jsorevoked = json_object_new_boolean(key->revoked ? TRUE : FALSE); ++ json_object *jsorevoked = json_object_new_boolean(key->revoked ? true : false); + if (!jsorevoked) { + return RNP_ERROR_OUT_OF_MEMORY; + } +@@ -5992,7 +5992,7 @@ key_to_json(json_object *jso, rnp_key_handle_t handle, uint32_t flags) + } + json_object_object_add(jso, "public key", jsopublic); + json_object_object_add( +- jsopublic, "present", json_object_new_boolean(have_pub ? TRUE : FALSE)); ++ jsopublic, "present", json_object_new_boolean(have_pub ? true : false)); + if (flags & RNP_JSON_PUBLIC_MPIS) { + json_object *jsompis = json_object_new_object(); + if (!jsompis) { +@@ -6011,7 +6011,7 @@ key_to_json(json_object *jso, rnp_key_handle_t handle, uint32_t flags) + } + json_object_object_add(jso, "secret key", jsosecret); + json_object_object_add( +- jsosecret, "present", json_object_new_boolean(have_sec ? TRUE : FALSE)); ++ jsosecret, "present", json_object_new_boolean(have_sec ? true : false)); + if (have_sec) { + bool locked = pgp_key_is_locked(handle->sec); + if (flags & RNP_JSON_SECRET_MPIS) { +@@ -6029,13 +6029,13 @@ key_to_json(json_object *jso, rnp_key_handle_t handle, uint32_t flags) + } + } + } +- json_object *jsolocked = json_object_new_boolean(locked ? TRUE : FALSE); ++ json_object *jsolocked = json_object_new_boolean(locked ? true : false); + if (!jsolocked) { + return RNP_ERROR_OUT_OF_MEMORY; + } + json_object_object_add(jsosecret, "locked", jsolocked); + json_object *jsoprotected = +- json_object_new_boolean(pgp_key_is_protected(handle->sec) ? TRUE : FALSE); ++ json_object_new_boolean(pgp_key_is_protected(handle->sec) ? true : false); + if (!jsoprotected) { + return RNP_ERROR_OUT_OF_MEMORY; + } +diff --git a/src/tests/ffi.cpp b/src/tests/ffi.cpp +index 4224bb7d..28a4f867 100644 +--- a/src/tests/ffi.cpp ++++ b/src/tests/ffi.cpp +@@ -800,10 +800,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_pair) + rnp_key_handle_t primary = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "primary", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "primary", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -814,10 +814,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_pair) + rnp_key_handle_t sub = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "sub", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "sub", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -878,10 +878,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_pair_dsa_elg) + rnp_key_handle_t primary = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "primary", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "primary", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -892,10 +892,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_pair_dsa_elg) + rnp_key_handle_t sub = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "sub", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "sub", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -958,10 +958,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_primary) + rnp_key_handle_t primary = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "primary", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "primary", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -1021,10 +1021,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_sub) + char * primary_grip = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "primary", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "primary", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + primary_grip = strdup(json_object_get_string(jsogrip)); + assert_non_null(primary_grip); +@@ -1079,10 +1079,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_sub) + rnp_key_handle_t sub = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "sub", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "sub", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -2483,10 +2483,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_sub_pass_required) + char * primary_grip = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "primary", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "primary", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + primary_grip = strdup(json_object_get_string(jsogrip)); + assert_non_null(primary_grip); +@@ -2557,10 +2557,10 @@ TEST_F(rnp_tests, test_ffi_keygen_json_sub_pass_required) + rnp_key_handle_t sub = NULL; + { + json_object *jsokey = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(parsed_results, "sub", &jsokey)); ++ assert_int_equal(true, json_object_object_get_ex(parsed_results, "sub", &jsokey)); + assert_non_null(jsokey); + json_object *jsogrip = NULL; +- assert_int_equal(TRUE, json_object_object_get_ex(jsokey, "grip", &jsogrip)); ++ assert_int_equal(true, json_object_object_get_ex(jsokey, "grip", &jsogrip)); + assert_non_null(jsogrip); + const char *grip = json_object_get_string(jsogrip); + assert_non_null(grip); +@@ -3821,7 +3821,7 @@ TEST_F(rnp_tests, test_ffi_key_to_json) + assert_int_equal(rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "grip")), + "20A48B3C61525DCDF8B3B9D82C6BBCF4D8BFB5E5"), + 0); +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "revoked")), FALSE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "revoked")), false); + assert_int_equal(json_object_get_int64(get_json_obj(jso, "creation time")), 1511313500); + assert_int_equal(json_object_get_int64(get_json_obj(jso, "expiration")), 0); + // usage +@@ -3843,7 +3843,7 @@ TEST_F(rnp_tests, test_ffi_key_to_json) + "FFFA72FC225214DC712D0127172EE13E88AF93B4"), + 0); + // public key +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "public key.present")), TRUE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "public key.present")), true); + assert_int_equal( + rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "public key.mpis.point")), + "04B0C6F2F585C1EEDF805C4492CB683839D5EAE6246420780F063D558" +@@ -3851,14 +3851,14 @@ TEST_F(rnp_tests, test_ffi_key_to_json) + "793CEBAE8600BEEF"), + 0); + // secret key +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.present")), TRUE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.present")), true); + assert_int_equal( + rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "secret key.mpis.x")), + "46DE93CA439735F36B9CF228F10D8586DA824D88BBF4E24566D5312D061802C8"), + 0); +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.locked")), FALSE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.locked")), false); + assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.protected")), +- FALSE); ++ false); + // userids + assert_int_equal(json_object_array_length(get_json_obj(jso, "userids")), 1); + assert_int_equal(rnp_strcasecmp(json_object_get_string(json_object_array_get_idx( +@@ -3907,7 +3907,7 @@ TEST_F(rnp_tests, test_ffi_key_to_json) + assert_int_equal(rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "grip")), + "FFFA72FC225214DC712D0127172EE13E88AF93B4"), + 0); +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "revoked")), FALSE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "revoked")), false); + assert_int_equal(json_object_get_int64(get_json_obj(jso, "creation time")), 1511313500); + assert_int_equal(json_object_get_int64(get_json_obj(jso, "expiration")), 0); + // usage +@@ -3924,21 +3924,21 @@ TEST_F(rnp_tests, test_ffi_key_to_json) + // subkey grips + assert_null(get_json_obj(jso, "subkey grips")); + // public key +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "public key.present")), TRUE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "public key.present")), true); + assert_int_equal( + rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "public key.mpis.point")), + "04E2746BA4D180011B17A6909EABDBF2F3733674FBE00B20A3B857C2597233651544150B" + "896BCE7DCDF47C49FC1E12D5AD86384D26336A48A18845940A3F65F502"), + 0); + // secret key +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.present")), TRUE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.present")), true); + assert_int_equal( + rnp_strcasecmp(json_object_get_string(get_json_obj(jso, "secret key.mpis.x")), + "DF8BEB7272117AD7AFE2B7E882453113059787FBC785C82F78624EE7EF2117FB"), + 0); +- assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.locked")), FALSE); ++ assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.locked")), false); + assert_int_equal(json_object_get_boolean(get_json_obj(jso, "secret key.protected")), +- FALSE); ++ false); + // userids + assert_null(get_json_obj(jso, "userids")); + // signatures +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-unbundle-googletest.patch b/gnu/packages/patches/rnp-unbundle-googletest.patch new file mode 100644 index 0000000000..d573895ecf --- /dev/null +++ b/gnu/packages/patches/rnp-unbundle-googletest.patch @@ -0,0 +1,45 @@ +From 3d435bbc8c73c78260f510a8d7fd02f81e22f125 Mon Sep 17 00:00:00 2001 +From: Justus Winter +Date: Tue, 21 Jul 2020 16:10:12 +0200 +Subject: [PATCH 5/6] Unbundle googletest. + +--- + src/tests/CMakeLists.txt | 2 +- + src/tests/gtest-CMakeLists.txt.in | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt +index 1a7ab905..2f0a1c3f 100644 +--- a/src/tests/CMakeLists.txt ++++ b/src/tests/CMakeLists.txt +@@ -50,7 +50,7 @@ endif() + # maintain compiler/linker settings on Windows + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + # add to our build (provides gtest_main target) +-add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src ++add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/googletest-src + ${CMAKE_CURRENT_BINARY_DIR}/googletest-build + EXCLUDE_FROM_ALL) + +diff --git a/src/tests/gtest-CMakeLists.txt.in b/src/tests/gtest-CMakeLists.txt.in +index b8878ea5..16cd49ad 100644 +--- a/src/tests/gtest-CMakeLists.txt.in ++++ b/src/tests/gtest-CMakeLists.txt.in +@@ -4,10 +4,10 @@ project(googletest-download NONE) + + include(ExternalProject) + ExternalProject_Add(googletest +- GIT_REPOSITORY https://github.com/google/googletest.git +- GIT_TAG master +- GIT_SHALLOW yes +- SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src" ++# GIT_REPOSITORY https://github.com/google/googletest.git ++# GIT_TAG master ++# GIT_SHALLOW yes ++ SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/googletest-src" + BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" +-- +2.20.1 + diff --git a/gnu/packages/patches/rnp-update-expiration-16ecb289.patch b/gnu/packages/patches/rnp-update-expiration-16ecb289.patch new file mode 100644 index 0000000000..f552c5a9ea --- /dev/null +++ b/gnu/packages/patches/rnp-update-expiration-16ecb289.patch @@ -0,0 +1,208 @@ +commit 16ecb28974b18e51f9060c86c7229f3b7e1cbb88 +Author: Nickolay Olshevsky +Date: Fri Apr 10 16:29:52 2020 +0300 + + Update expiration date of test keys. + +diff --git a/src/tests/data/test_stream_signatures/pub.asc b/src/tests/data/test_stream_signatures/pub.asc +index 10f0509f..9da95e7a 100644 +--- a/src/tests/data/test_stream_signatures/pub.asc ++++ b/src/tests/data/test_stream_signatures/pub.asc +@@ -9,16 +9,16 @@ Wf4zSDhsEabUFJn2HoBdSoObcDX3DbBLP4GV7KzBDqJ0ZYfyL92Q58wOs5Q8ZDVP + v41PvEijwVrgNDq02LYxcHgNDAJ++eGOxQdySb3Blo56AorS3xsVtIXFFlzMFB0j + X0lUIeGEj5iKs4xpbRr/EE+m0B70fg2Yn/XpslUnOgboaNp/mZ5T4Zpe1kz/jDV4 + aNZ3p3l2DxxF8AUAEQEAAbQWdGVzdF9zdHJlYW1fc2lnbmF0dXJlc4kB1AQTAQgA +-PhYhBHpg5nEXn5uSD2R4olhzvXOOV1OYBQJau41QAhsDBQkDwmcABQsJCAcCBhUK +-CQgLAgQWAgMBAh4BAheAAAoJEFhzvXOOV1OYt5wL/iwz9BqzPpsGzTMtuCxGlUt5 +-A1p0aOwK6hD8oDlW5Tq9fuJwKrf0bSen5MPRTs7tkRQ5loriRiqwrgqggxbf2wJx +-bFM3p3OF/CO1NMRBeCQCr37hKmtyPv3rmSHRhdeW6IdA5RS5I+UqgUZ18UF9f5va +-zM49pflxeDLq16388gcep8pnppw8J0XBFzxW4KWEGLxto1LElq5SJzdTTwQiN2cZ +-XmDChFyyQhesxY3qosV2jtIJktLT9Pl1qmxr/wwJf38J5DKmvJeisAl55SahN9l1 +-owe2ACHQuE9L0HpjxYYxvmFeing0eydDyU10RVgavdI6+ztfVas5f38zy6r3uxX+ +-mSbV/w4LELvT0jmTAxpVM1O9N7pB71xKypTfsMNEOxi1fWx+/bpB6GVy319JF4aE +-JfJYO8rAMWn3UpvY8FaxuCnsDudmpwEvzgOHhr+EOyWlWMbpfC+vtFXncPjEPn7R +-lRVy5CkSL+WidtcRmI82iG8hfG3PcpFryea8zMTKCLkBjQRau41QAQwAwB/4Oa2w ++PgIbAwULCQgHAgYVCgkICwIEFgIDAQIeAQIXgBYhBHpg5nEXn5uSD2R4olhzvXOO ++V1OYBQJekHJ9BQkWoOgtAAoJEFhzvXOOV1OYdCUMALQ5AsHoE+RU66Qs1qWxQK9k ++R7wd0j3yLs/l9eUElpXFz0W/ZRWR2bZ9aO8fuCEQTXPgNtdGBG06fCB/MrpTCwoE ++ScUTlz0jGqC8CqbjfV6a92abk+9fXJkYcWyCjFJ0nWzQSSLOlNJ5xesqBB+yBNx7 ++xyWuggnTcg5F1IbiVN4R3yhKboUZu2nvXIBJVl/JYT5f0jQUAeYLsalmF6Ug6mW3 ++yVR2wvIlvA5BGlr3qJrIZH22QRPNOfwKZorhPvzD1yj/CXlV4zDDl2TjlcuAkcsT ++mqEq+gg/PkLsCpEd1rHIwbplCJiWAxTZLchw49VkGvWAFsiXKCfaWkHZaJpTbTfP ++vXppxeJ6VCt/+jU7x8KvRXyqWt45OqIbgs+mi9X4VXqLGXORh4auN6vT/V3uLTOU ++1rftvc6mEvcYoKVGNutKcQwfl+MJwfMcjAtDAsov8V6CNDJYGMBZVI6wjh6gt34O ++LjlhHM/znBU+FTtPyjSAOvD2SR3oQyVr5gSKVtlPBrkBjQRau41QAQwAwB/4Oa2w + 4qupz0+KCmmutEezSKZkf7xZ7UFO87X4hYdoyOUfmtnz4jjA6V5KpZ8DMfrEB9bm + vfHaQBrCdASxspfXDAXfZCV8UqyP+RBItfqdT/tlPxd1uWVqO8pwd0UvXgDICiXy + mCmUOsJ8sajI0X7yN+PjDGoGrUbT8sXpOdGD0aG5ARnaNr9zKa/7RiEaLt8SGdAt +@@ -27,15 +27,15 @@ NYMeTk33YoRDlhWWepLYkKZ4Tkrq9A3E/5WjJcFP5NuG8pSM7i+T9glRsZCUH0gI + BhbzTwehQZ3ZM6Rj0aCiFrxBCfzrhjM9PXiJhXwJmV2vCVW2GQZndkF2JwAcAAsF + 5mzQD/ylkVLvTg4evNfiFTVQog8nLV0ZyKmodTSUWJCBVgzFP1IuHMbObeAWQF8x + jO69SGt4iOGQw68JljCPBJ8u6N7GMY81mTY/36tWd5pIxOLnAbpodl1DABEBAAGJ +-AbwEGAEIACYWIQR6YOZxF5+bkg9keKJYc71zjldTmAUCWruNUAIbDAUJA8JnAAAK +-CRBYc71zjldTmBliDACYyguYp9V80mApoM9cdswJCSJu5TpAv+fP+hcekLE0I7wq +-qs7+zd0vasrReemgMMA9gx2IbSUZxWPUSoZloJsxcoBfEjlfoNNRXn2X9Hq7NUhu +-19gMdwUxtnyd4dOIleYqk93QkydTeqciI+xZ0s2lmiOps0FDgKLWAbNdC/kWOp5x +-GHx+Dy9D+cM+4YxjfBnxplG3qreY5Vmu2tlYTXG41LjJHpXL0LOQXdVf6ZdcVdQ5 +-CCynd583xL9fjxGtAoNYV5LK/1qAZuqFVSk/R9eEy2664W/Fj4I5LlH/UQIfcTdl +-ItY+/5mFa0CK7/7uucy7zfIwILx3M9nAvzbFaTdDP7ZBOO6xkeQE22WOMYrcGGkr +-lPueHq/gbu/4fl1XHyl4oHJZdqTaI9a9vwO/342ct+y9agtpkooSpljDavVSPiO+ +-wWd45g52HsY/bF/A7qv1e7ucH11elQgUXW6Q8kGvTy/FYMWjk5tV+mokI/k6rupt +-SEvTyvqqYIWvhPXmkI0= +-=C3aD ++AbwEGAEIACYCGwwWIQR6YOZxF5+bkg9keKJYc71zjldTmAUCXpBymQUJFqDoSQAK ++CRBYc71zjldTmOHODACQHml5YT4hsNN4OLP6xNdEKCCjLfY7V1EKYZZU671vYTQn ++qIRTGhNB18FATHJwONMjMegsu/8K67V3acnW7cszUbZDC1OMC7Mo0qFHvysfbxbq ++4Pb10QYtqvmla8nerbKGKqxm32CRYZf2qZ4pXG/7MvE5aAQPXR+cBgByU9EHOB5K ++t9NwYm7MEZyOSNvcRaJIN1aeS8cur5veRoLLEWYhBF/FrOusCLvkupQ/rqnsqr/D ++IHaxjHFpSwxAHan8VxkeHsxZNTYb9eejmXTBUrqePARGyuHiqCK7w0fv/RW+mXbn ++UDJl+NIg2F0oMcsoqj2F74IWkcn7X7FMP2XQv99PuAgVd9q1XhxDXSBUyXCT+E41 ++hmR4rtdQRg8JiJ4RZKE8arDjRVXZdaiNMW9J5vjWrlyvqLiVyNmyyHw63LXNO0cN ++Qv4qz+S5gir8JAHYzZFnjvisll1Ur9JSQWyg97OB6dsIN7Im6sJOcjpkpHgA5v+9 ++hMHj3/yuwMXx6aMHF1A= ++=zbzp + -----END PGP PUBLIC KEY BLOCK----- +diff --git a/src/tests/data/test_stream_signatures/sec.asc b/src/tests/data/test_stream_signatures/sec.asc +index f2e170d2..3b8acf1a 100644 +--- a/src/tests/data/test_stream_signatures/sec.asc ++++ b/src/tests/data/test_stream_signatures/sec.asc +@@ -8,38 +8,38 @@ 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 +@@ -48,36 +48,36 @@ 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 +-=vuN6 ++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 ++=Nabv + -----END PGP PRIVATE KEY BLOCK----- -- 2.20.1