aboutsummaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/cms/samplemsgs/pdf-signature-sample.pdfbin0 -> 58529 bytes
-rw-r--r--tests/gpgscm/ffi.c508
-rw-r--r--tests/gpgscm/scheme.c4
-rw-r--r--tests/gpgscm/t-child.scm39
-rw-r--r--tests/gpgscm/tests.scm93
-rw-r--r--tests/openpgp/Makefile.am32
-rw-r--r--tests/openpgp/defs.scm7
-rw-r--r--tests/openpgp/privkeys/19C87B74004E9839F3D56992B0A9943BF90B56F7.key7
-rw-r--r--tests/openpgp/privkeys/2F4CD0990D56D41A74456668469E3139A7960CD4.key5
-rw-r--r--tests/openpgp/privkeys/513906BEA5A40F25C9D6EBBCEF62D0784E7235A5.key8
-rw-r--r--tests/openpgp/privkeys/6EC551A7895031EE4543A1C789E16E6A6C229CFC.key137
-rw-r--r--tests/openpgp/privkeys/702F599E35E6E0BE68E6FDF25D887229D42780F7.key7
-rw-r--r--tests/openpgp/privkeys/7C31A4A632A49C4E8B1C8CBA53976ADFF714510F.key137
-rw-r--r--tests/openpgp/privkeys/8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7.key104
-rw-r--r--tests/openpgp/privkeys/8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859.key5
-rw-r--r--tests/openpgp/privkeys/A1598F57316F7FEC3F946895E35A7D2EAE8D3A13.key137
-rw-r--r--tests/openpgp/privkeys/A1ABFD89944870D04039D40C218EE127254AEEE9.key8
-rw-r--r--tests/openpgp/privkeys/A87B85D88DB8B2B5A62A9958C8F2878F49605D09.key5
-rw-r--r--tests/openpgp/privkeys/D54E9B75C3541D95C45E430DAC9645E9FB62C668.key5
-rw-r--r--tests/openpgp/privkeys/DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93.key5
-rw-r--r--tests/openpgp/privkeys/EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A.key104
-rw-r--r--tests/openpgp/privkeys/F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59.key5
-rw-r--r--tests/openpgp/samplekeys/README7
-rw-r--r--tests/openpgp/samplekeys/pqc-sample-1.key.asc46
-rw-r--r--tests/openpgp/samplekeys/pqc-sample-2.key.asc55
-rw-r--r--tests/openpgp/samplekeys/pqc-sample-3.key.asc48
-rw-r--r--tests/openpgp/samplekeys/pqc-sample-4.key.asc58
-rw-r--r--tests/openpgp/samplekeys/pqc-sample-5.key.asc61
-rw-r--r--tests/openpgp/samplemsgs/pqc-sample-1.enc.asc81
-rw-r--r--tests/openpgp/samplemsgs/pqc-sample-2.enc.asc102
-rw-r--r--tests/openpgp/samplemsgs/pqc-sample-3.enc.asc32
-rw-r--r--tests/openpgp/samplemsgs/pqc-sample-4.enc.asc43
-rw-r--r--tests/openpgp/samplemsgs/pqc-sample-5.enc.asc45
-rw-r--r--tests/tpm2dtests/defs.scm7
34 files changed, 1743 insertions, 204 deletions
diff --git a/tests/cms/samplemsgs/pdf-signature-sample.pdf b/tests/cms/samplemsgs/pdf-signature-sample.pdf
new file mode 100644
index 000000000..0ed04b577
--- /dev/null
+++ b/tests/cms/samplemsgs/pdf-signature-sample.pdf
Binary files differ
diff --git a/tests/gpgscm/ffi.c b/tests/gpgscm/ffi.c
index ce18e0794..36b0b98d2 100644
--- a/tests/gpgscm/ffi.c
+++ b/tests/gpgscm/ffi.c
@@ -42,6 +42,9 @@
#endif
#include "../../common/util.h"
+#ifdef HAVE_W32_SYSTEM
+#define NEED_STRUCT_SPAWN_CB_ARG
+#endif
#include "../../common/exechelp.h"
#include "../../common/sysutils.h"
@@ -644,6 +647,7 @@ static struct foreign_object_vtable es_object_vtable =
es_object_to_string,
};
+#if 0
static pointer
es_wrap (scheme *sc, estream_t stream)
{
@@ -655,6 +659,7 @@ es_wrap (scheme *sc, estream_t stream)
box->closed = 0;
return sc->vptr->mk_foreign_object (sc, &es_object_vtable, box);
}
+#endif
static struct es_object_box *
es_unwrap (scheme *sc, pointer object)
@@ -753,25 +758,166 @@ do_es_write (scheme *sc, pointer args)
}
-
/* Process handling. */
+struct proc_object_box
+{
+ gnupg_process_t proc;
+};
+
+static void
+proc_object_finalize (scheme *sc, void *data)
+{
+ struct proc_object_box *box = data;
+ (void) sc;
+
+ if (!box->proc)
+ gnupg_process_release (box->proc);
+ xfree (box);
+}
+
+static void
+proc_object_to_string (scheme *sc, char *out, size_t size, void *data)
+{
+ struct proc_object_box *box = data;
+ (void) sc;
+
+ snprintf (out, size, "#proc %p", box->proc);
+}
+
+static struct foreign_object_vtable proc_object_vtable =
+ {
+ proc_object_finalize,
+ proc_object_to_string,
+ };
+
static pointer
-do_spawn_process (scheme *sc, pointer args)
+proc_wrap (scheme *sc, gnupg_process_t proc)
+{
+ struct proc_object_box *box = xmalloc (sizeof *box);
+ if (box == NULL)
+ return sc->NIL;
+
+ box->proc = proc;
+ return sc->vptr->mk_foreign_object (sc, &proc_object_vtable, box);
+}
+
+static struct proc_object_box *
+proc_unwrap (scheme *sc, pointer object)
+{
+ (void) sc;
+
+ if (! is_foreign_object (object))
+ return NULL;
+
+ if (sc->vptr->get_foreign_object_vtable (object) != &proc_object_vtable)
+ return NULL;
+
+ return sc->vptr->get_foreign_object_data (object);
+}
+
+#define CONVERSION_proc(SC, X) proc_unwrap (SC, X)
+#define IS_A_proc(SC, X) proc_unwrap (SC, X)
+
+
+#define SPAWN_IO_BUFSIZE 4096
+
+#ifdef HAVE_W32_SYSTEM
+struct rfp {
+ HANDLE hd;
+ char *buf;
+ size_t len;
+ off_t off;
+};
+
+static DWORD __attribute__((stdcall))
+read_from_pipe (void *arg)
+{
+ struct rfp *rfp = arg;
+ DWORD bytes_read;
+
+ if (rfp->hd == INVALID_HANDLE_VALUE)
+ goto errout;
+
+ while (1)
+ {
+ if (!ReadFile (rfp->hd, rfp->buf + rfp->off, rfp->len - rfp->off,
+ &bytes_read, NULL))
+ {
+ DWORD ec = GetLastError ();
+
+ if (ec == ERROR_BROKEN_PIPE)
+ {
+ CloseHandle (rfp->hd);
+ rfp->hd = INVALID_HANDLE_VALUE;
+ break;
+ }
+
+ goto errout;
+ }
+
+ if (bytes_read == 0)
+ /* It may occur, when it writes WriteFile with zero-byte on
+ the other end of the pipe. */
+ continue;
+ else
+ {
+ rfp->off += bytes_read;
+ if (rfp->off == rfp->len)
+ {
+ rfp->len += SPAWN_IO_BUFSIZE;
+ rfp->buf = xtryrealloc (rfp->buf, rfp->len);
+ if (rfp->buf == NULL)
+ goto errout;
+ }
+ }
+ }
+
+ return 0;
+
+ errout:
+ if (rfp->hd != INVALID_HANDLE_VALUE)
+ {
+ CloseHandle (rfp->hd);
+ rfp->hd = INVALID_HANDLE_VALUE;
+ }
+ xfree (rfp->buf);
+ rfp->buf = NULL;
+ return 1;
+}
+#endif
+
+
+static pointer
+do_process_spawn_io (scheme *sc, pointer args)
{
FFI_PROLOG ();
pointer arguments;
+ char *a_input;
char **argv;
size_t len;
unsigned int flags;
-
+ gnupg_process_t proc = NULL;
estream_t infp;
- estream_t outfp;
- estream_t errfp;
- pid_t pid;
+#ifdef HAVE_W32_SYSTEM
+ HANDLE out_hd, err_hd;
+#else
+ int out_fd, err_fd;
+#endif
+ char *out_string = NULL;
+ char *err_string = NULL;
+ size_t out_len = SPAWN_IO_BUFSIZE;
+ size_t err_len = SPAWN_IO_BUFSIZE;
+ off_t out_off = 0;
+ off_t err_off = 0;
+ int retcode = -1;
+ pointer p0, p1, p2;
FFI_ARG_OR_RETURN (sc, pointer, arguments, list, args);
- FFI_ARG_OR_RETURN (sc, unsigned int, flags, number, args);
+ FFI_ARG_OR_RETURN (sc, char *, a_input, string, args);
+ flags = (GNUPG_PROCESS_STDIN_PIPE
+ | GNUPG_PROCESS_STDOUT_PIPE
+ | GNUPG_PROCESS_STDERR_PIPE);
FFI_ARGS_DONE_OR_RETURN (sc, args);
err = ffi_list2argv (sc, arguments, &argv, &len);
@@ -791,38 +937,239 @@ do_spawn_process (scheme *sc, pointer args)
fprintf (stderr, "\n");
}
- err = gnupg_spawn_process (argv[0], (const char **) &argv[1],
- NULL,
- flags,
- &infp, &outfp, &errfp, &pid);
+ err = gnupg_process_spawn (argv[0], (const char **) &argv[1],
+ flags, NULL, NULL, &proc);
+ err = gnupg_process_get_streams (proc, 0, &infp, NULL, NULL);
+
+ err = es_write (infp, a_input, strlen (a_input), NULL);
+ es_fclose (infp);
+ if (err)
+ {
+ gnupg_process_release (proc);
+ xfree (argv);
+ FFI_RETURN_ERR (sc, err);
+ }
+
+#ifdef HAVE_W32_SYSTEM
+ err = gnupg_process_ctl (proc, GNUPG_PROCESS_GET_HANDLES,
+ NULL, &out_hd, &err_hd);
+#else
+ err = gnupg_process_get_fds (proc, 0, NULL, &out_fd, &err_fd);
+#endif
+ if (err)
+ {
+ gnupg_process_release (proc);
+ xfree (argv);
+ FFI_RETURN_ERR (sc, err);
+ }
+
+ out_string = xtrymalloc (out_len);
+ if (out_string == NULL)
+ goto errout;
+
+ err_string = xtrymalloc (err_len);
+ if (err_string == NULL)
+ goto errout;
+
+#ifdef HAVE_W32_SYSTEM
+ {
+ HANDLE h_thread_rfp_err;
+ struct rfp rfp_out;
+ struct rfp rfp_err;
+ DWORD thread_exit_code;
+
+ rfp_err.hd = err_hd;
+ rfp_err.buf = err_string;
+ rfp_err.len = err_len;
+ rfp_err.off = 0;
+ err_hd = INVALID_HANDLE_VALUE;
+ err_string = NULL;
+
+ h_thread_rfp_err = CreateThread (NULL, 0, read_from_pipe, (void *)&rfp_err,
+ 0, NULL);
+ if (h_thread_rfp_err == NULL)
+ {
+ xfree (rfp_err.buf);
+ CloseHandle (rfp_err.hd);
+ goto errout;
+ }
+
+ rfp_out.hd = out_hd;
+ rfp_out.buf = out_string;
+ rfp_out.len = out_len;
+ rfp_out.off = 0;
+ out_hd = INVALID_HANDLE_VALUE;
+ out_string = NULL;
+
+ if (read_from_pipe (&rfp_out))
+ {
+ CloseHandle (h_thread_rfp_err);
+ xfree (rfp_err.buf);
+ goto errout;
+ }
+
+ out_string = rfp_out.buf;
+ out_off = rfp_out.off;
+
+ WaitForSingleObject (h_thread_rfp_err, INFINITE);
+ GetExitCodeThread (h_thread_rfp_err, &thread_exit_code);
+ CloseHandle (h_thread_rfp_err);
+ if (thread_exit_code)
+ goto errout;
+
+ err_string = rfp_err.buf;
+ err_off = rfp_err.off;
+ }
+#else
+ {
+ fd_set read_fdset;
+ ssize_t bytes_read;
+
+ while (1)
+ {
+ int nfd;
+ int ret;
+
+ FD_ZERO (&read_fdset);
+
+ if (out_fd >= 0)
+ FD_SET (out_fd, &read_fdset);
+
+ if (err_fd >= 0)
+ FD_SET (err_fd, &read_fdset);
+
+ if (out_fd > err_fd)
+ nfd = out_fd;
+ else
+ nfd = err_fd;
+
+ if (nfd == -1)
+ break;
+
+ ret = select (nfd+1, &read_fdset, NULL, NULL, NULL);
+ if (ret < 0)
+ break;
+
+ if (FD_ISSET (out_fd, &read_fdset))
+ {
+ bytes_read = read (out_fd, out_string + out_off,
+ out_len - out_off);
+ if (bytes_read == 0)
+ {
+ close (out_fd);
+ out_fd = -1;
+ }
+ else if (bytes_read < 0)
+ goto errout;
+ else
+ {
+ out_off += bytes_read;
+ if (out_off == out_len)
+ {
+ out_len += SPAWN_IO_BUFSIZE;
+ out_string = xtryrealloc (out_string, out_len);
+ if (out_string == NULL)
+ goto errout;
+ }
+ }
+ }
+
+ if (FD_ISSET (err_fd, &read_fdset))
+ {
+ bytes_read = read (err_fd, err_string + err_off,
+ err_len - err_off);
+ if (bytes_read == 0)
+ {
+ close (err_fd);
+ err_fd = -1;
+ }
+ else if (bytes_read < 0)
+ goto errout;
+ else
+ {
+ err_off += bytes_read;
+ if (err_off == err_len)
+ {
+ err_len += SPAWN_IO_BUFSIZE;
+ err_string = xtryrealloc (err_string, err_len);
+ if (err_string == NULL)
+ goto errout;
+ }
+ }
+ }
+ }
+ }
+#endif
+
+ err = gnupg_process_wait (proc, 1);
+ if (!err)
+ err = gnupg_process_ctl (proc, GNUPG_PROCESS_GET_EXIT_ID, &retcode);
+
+ gnupg_process_release (proc);
xfree (argv);
-#define IMC(A, B) \
- _cons (sc, sc->vptr->mk_integer (sc, (unsigned long) (A)), (B), 1)
-#define IMS(A, B) \
- _cons (sc, es_wrap (sc, (A)), (B), 1)
- FFI_RETURN_POINTER (sc, IMS (infp,
- IMS (outfp,
- IMS (errfp,
- IMC (pid, sc->NIL)))));
-#undef IMS
-#undef IMC
+
+ p0 = sc->vptr->mk_integer (sc, (unsigned long)retcode);
+ p1 = sc->vptr->mk_counted_string (sc, out_string, out_off);
+ p2 = sc->vptr->mk_counted_string (sc, err_string, err_off);
+
+ xfree (out_string);
+ xfree (err_string);
+
+ FFI_RETURN_POINTER (sc, _cons (sc, p0,
+ _cons (sc, p1,
+ _cons (sc, p2, sc->NIL, 1), 1), 1));
+ errout:
+ xfree (out_string);
+ xfree (err_string);
+#ifdef HAVE_W32_SYSTEM
+ if (out_hd != INVALID_HANDLE_VALUE)
+ CloseHandle (out_hd);
+ if (err_hd != INVALID_HANDLE_VALUE)
+ CloseHandle (err_hd);
+#else
+ if (out_fd >= 0)
+ close (out_fd);
+ if (err_fd >= 0)
+ close (err_fd);
+#endif
+ gnupg_process_release (proc);
+ xfree (argv);
+ FFI_RETURN_ERR (sc, err);
+}
+
+static void
+setup_std_fds (struct spawn_cb_arg *sca)
+{
+ int *std_fds = sca->arg;
+
+#ifdef HAVE_W32_SYSTEM
+ sca->hd[0] = std_fds[0] == -1?
+ INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[0]);
+ sca->hd[1] = std_fds[1] == -1?
+ INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[1]);
+ sca->hd[2] = std_fds[2] == -1?
+ INVALID_HANDLE_VALUE : (HANDLE)_get_osfhandle (std_fds[2]);
+#else
+ sca->fds[0] = std_fds[0];
+ sca->fds[1] = std_fds[1];
+ sca->fds[2] = std_fds[2];
+#endif
}
static pointer
-do_spawn_process_fd (scheme *sc, pointer args)
+do_process_spawn_fd (scheme *sc, pointer args)
{
FFI_PROLOG ();
pointer arguments;
char **argv;
size_t len;
- int infd, outfd, errfd;
-
- pid_t pid;
+ int std_fds[3];
+ gnupg_process_t proc = NULL;
FFI_ARG_OR_RETURN (sc, pointer, arguments, list, args);
- FFI_ARG_OR_RETURN (sc, int, infd, number, args);
- FFI_ARG_OR_RETURN (sc, int, outfd, number, args);
- FFI_ARG_OR_RETURN (sc, int, errfd, number, args);
+ FFI_ARG_OR_RETURN (sc, int, std_fds[0], number, args);
+ FFI_ARG_OR_RETURN (sc, int, std_fds[1], number, args);
+ FFI_ARG_OR_RETURN (sc, int, std_fds[2], number, args);
FFI_ARGS_DONE_OR_RETURN (sc, args);
err = ffi_list2argv (sc, arguments, &argv, &len);
@@ -839,107 +1186,35 @@ do_spawn_process_fd (scheme *sc, pointer args)
fprintf (stderr, "Executing:");
for (p = argv; *p; p++)
fprintf (stderr, " '%s'", *p);
- fprintf (stderr, "\n");
+ fprintf (stderr, " (%d %d %d)\n", std_fds[0], std_fds[1], std_fds[2]);
}
- err = gnupg_spawn_process_fd (argv[0], (const char **) &argv[1],
- infd, outfd, errfd, &pid);
+ err = gnupg_process_spawn (argv[0], (const char **) &argv[1],
+ 0, setup_std_fds, std_fds, &proc);
xfree (argv);
- FFI_RETURN_INT (sc, pid);
+ FFI_RETURN_POINTER (sc, proc_wrap (sc, proc));
}
static pointer
-do_wait_process (scheme *sc, pointer args)
+do_process_wait (scheme *sc, pointer args)
{
FFI_PROLOG ();
- const char *name;
- pid_t pid;
+ struct proc_object_box *box;
int hang;
+ int retcode = -1;
- int retcode;
-
- FFI_ARG_OR_RETURN (sc, const char *, name, string, args);
- FFI_ARG_OR_RETURN (sc, pid_t, pid, number, args);
+ FFI_ARG_OR_RETURN (sc, struct proc_object_box *, box, proc, args);
FFI_ARG_OR_RETURN (sc, int, hang, bool, args);
FFI_ARGS_DONE_OR_RETURN (sc, args);
- err = gnupg_wait_process (name, pid, hang, &retcode);
- if (err == GPG_ERR_GENERAL)
- err = 0; /* Let the return code speak for itself. */
-
- FFI_RETURN_INT (sc, retcode);
-}
-
-
-static pointer
-do_wait_processes (scheme *sc, pointer args)
-{
- FFI_PROLOG ();
- pointer list_names;
- char **names;
- pointer list_pids;
- size_t i, count;
- pid_t *pids;
- int hang;
- int *retcodes;
- pointer retcodes_list = sc->NIL;
-
- FFI_ARG_OR_RETURN (sc, pointer, list_names, list, args);
- FFI_ARG_OR_RETURN (sc, pointer, list_pids, list, args);
- FFI_ARG_OR_RETURN (sc, int, hang, bool, args);
- FFI_ARGS_DONE_OR_RETURN (sc, args);
-
- if (sc->vptr->list_length (sc, list_names)
- != sc->vptr->list_length (sc, list_pids))
- return
- sc->vptr->mk_string (sc, "length of first two arguments must match");
-
- err = ffi_list2argv (sc, list_names, &names, &count);
- if (err == gpg_error (GPG_ERR_INV_VALUE))
- return ffi_sprintf (sc, "%lu%s element of first argument is "
- "neither string nor symbol",
- (unsigned long) count,
- ordinal_suffix ((int) count));
- if (err)
- FFI_RETURN_ERR (sc, err);
-
- err = ffi_list2intv (sc, list_pids, (int **) &pids, &count);
- if (err == gpg_error (GPG_ERR_INV_VALUE))
- return ffi_sprintf (sc, "%lu%s element of second argument is "
- "not a number",
- (unsigned long) count,
- ordinal_suffix ((int) count));
- if (err)
- FFI_RETURN_ERR (sc, err);
-
- retcodes = xtrycalloc (sizeof *retcodes, count);
- if (retcodes == NULL)
- {
- xfree (names);
- xfree (pids);
- FFI_RETURN_ERR (sc, gpg_error_from_syserror ());
- }
-
- err = gnupg_wait_processes ((const char **) names, pids, count, hang,
- retcodes);
- if (err == GPG_ERR_GENERAL)
- err = 0; /* Let the return codes speak. */
+ err = gnupg_process_wait (box->proc, hang);
+ if (!err)
+ err = gnupg_process_ctl (box->proc, GNUPG_PROCESS_GET_EXIT_ID, &retcode);
if (err == GPG_ERR_TIMEOUT)
- err = 0; /* We may have got some results. */
-
- for (i = 0; i < count; i++)
- retcodes_list =
- (sc->vptr->cons) (sc,
- sc->vptr->mk_integer (sc,
- (long) retcodes[count-1-i]),
- retcodes_list);
+ err = 0;
- xfree (names);
- xfree (pids);
- xfree (retcodes);
- FFI_RETURN_POINTER (sc, retcodes_list);
+ FFI_RETURN_INT (sc, retcode);
}
-
static pointer
do_pipe (scheme *sc, pointer args)
{
@@ -1398,13 +1673,12 @@ ffi_init (scheme *sc, const char *argv0, const char *scriptname,
ffi_define_function (sc, make_random_string);
/* Process management. */
- ffi_define_function (sc, spawn_process);
- ffi_define_function (sc, spawn_process_fd);
- ffi_define_function (sc, wait_process);
- ffi_define_function (sc, wait_processes);
ffi_define_function (sc, pipe);
ffi_define_function (sc, inbound_pipe);
ffi_define_function (sc, outbound_pipe);
+ ffi_define_function (sc, process_spawn_io);
+ ffi_define_function (sc, process_spawn_fd);
+ ffi_define_function (sc, process_wait);
/* estream functions. */
ffi_define_function_name (sc, "es-fclose", es_fclose);
diff --git a/tests/gpgscm/scheme.c b/tests/gpgscm/scheme.c
index bde39fcd0..003e85037 100644
--- a/tests/gpgscm/scheme.c
+++ b/tests/gpgscm/scheme.c
@@ -169,7 +169,11 @@ type_to_string (enum scheme_types typ)
case T_SINK: return "sink";
case T_FRAME: return "frame";
}
+#ifdef __GNUC__
+ __builtin_unreachable ();
+#else
assert (! "not reached");
+#endif
}
/* ADJ is enough slack to align cells in a TYPE_BITS-bit boundary */
diff --git a/tests/gpgscm/t-child.scm b/tests/gpgscm/t-child.scm
index fd1dcc3fe..461413b9c 100644
--- a/tests/gpgscm/t-child.scm
+++ b/tests/gpgscm/t-child.scm
@@ -69,37 +69,36 @@
(assert (string=? "" (:stderr r))))
(define (spawn what)
- (spawn-process-fd what CLOSED_FD STDOUT_FILENO STDERR_FILENO))
+ (process-spawn-fd what CLOSED_FD STDOUT_FILENO STDERR_FILENO))
-(let ((pid0 (spawn `(,(qualify "t-child") "return0")))
- (pid1 (spawn `(,(qualify "t-child") "return0"))))
- (assert (equal? '(0 0)
- (wait-processes '("child0" "child1") (list pid0 pid1) #t))))
+(let ((proc0 (spawn `(,(qualify "t-child") "return0")))
+ (proc1 (spawn `(,(qualify "t-child") "return0"))))
+ (assert (= (process-wait proc0 #t) 0))
+ (assert (= (process-wait proc1 #t) 0)))
-(let ((pid0 (spawn `(,(qualify "t-child") "return1")))
- (pid1 (spawn `(,(qualify "t-child") "return0"))))
- (assert (equal? '(1 0)
- (wait-processes '("child0" "child1") (list pid0 pid1) #t))))
+(let ((proc0 (spawn `(,(qualify "t-child") "return1")))
+ (proc1 (spawn `(,(qualify "t-child") "return0"))))
+ (assert (= (process-wait proc0 #t) 1))
+ (assert (= (process-wait proc1 #t) 0)))
-(let ((pid0 (spawn `(,(qualify "t-child") "return0")))
- (pid1 (spawn `(,(qualify "t-child") "return77")))
- (pid2 (spawn `(,(qualify "t-child") "return1"))))
- (assert (equal? '(0 77 1)
- (wait-processes '("child0" "child1" "child2")
- (list pid0 pid1 pid2) #t))))
+(let ((proc0 (spawn `(,(qualify "t-child") "return0")))
+ (proc1 (spawn `(,(qualify "t-child") "return77")))
+ (proc2 (spawn `(,(qualify "t-child") "return1"))))
+ (assert (= (process-wait proc0 #t) 0))
+ (assert (= (process-wait proc1 #t) 77))
+ (assert (= (process-wait proc2 #t) 1)))
(let* ((p (pipe))
- (pid0 (spawn-process-fd
+ (proc0 (process-spawn-fd
`(,(qualify "t-child") "hello_stdout")
CLOSED_FD (:write-end p) STDERR_FILENO))
(_ (close (:write-end p)))
- (pid1 (spawn-process-fd
+ (proc1 (process-spawn-fd
`(,(qualify "t-child") "cat")
(:read-end p) STDOUT_FILENO STDERR_FILENO)))
(close (:read-end p))
- (assert
- (equal? '(0 0)
- (wait-processes '("child0" "child1") (list pid0 pid1) #t))))
+ (assert (= (process-wait proc0 #t) 0))
+ (assert (= (process-wait proc1 #t) 0)))
(echo " world.")
(tr:do
diff --git a/tests/gpgscm/tests.scm b/tests/gpgscm/tests.scm
index db1025bbb..1e6d7fea0 100644
--- a/tests/gpgscm/tests.scm
+++ b/tests/gpgscm/tests.scm
@@ -81,7 +81,7 @@
;; Process management.
(define CLOSED_FD -1)
(define (call-with-fds what infd outfd errfd)
- (wait-process (stringify what) (spawn-process-fd what infd outfd errfd) #t))
+ (process-wait (process-spawn-fd what infd outfd errfd) #t))
(define (call what)
(call-with-fds what
CLOSED_FD
@@ -92,24 +92,16 @@
(define :stdin car)
(define :stdout cadr)
(define :stderr caddr)
-(define :pid cadddr)
(define (call-with-io what in)
- (let ((h (spawn-process what 0)))
- (es-write (:stdin h) in)
- (es-fclose (:stdin h))
- (let* ((out (es-read-all (:stdout h)))
- (err (es-read-all (:stderr h)))
- (result (wait-process (car what) (:pid h) #t)))
- (es-fclose (:stdout h))
- (es-fclose (:stderr h))
- (if (> (*verbose*) 2)
- (info "Child" (:pid h) "returned:"
- `((command ,(stringify what))
- (status ,result)
- (stdout ,out)
- (stderr ,err))))
- (list result out err))))
+ (let ((proc-result (process-spawn-io what in)))
+ (if (> (*verbose*) 2)
+ (info "Child #proc returned:"
+ `((command ,(stringify what))
+ (status ,(car proc-result))
+ (stdout ,(cadr proc-result))
+ (stderr ,(caddr proc-result)))))
+ proc-result))
;; Accessor function for the results of 'call-with-io'. ':stdout' and
;; ':stderr' can also be used.
@@ -129,17 +121,6 @@
(throw (:stderr result)))))
;;
-;; estream helpers.
-;;
-
-(define (es-read-all stream)
- (let loop
- ((acc ""))
- (if (es-feof stream)
- acc
- (loop (string-append acc (es-read stream 4096))))))
-
-;;
;; File management.
;;
(define (file-exists? name)
@@ -351,12 +332,8 @@
(define (dump)
(write (list procs source sink producer))
(newline))
- (define (add-proc command pid)
- (new (cons (list command pid) procs) source sink producer))
- (define (commands)
- (map car procs))
- (define (pids)
- (map cadr procs))
+ (define (add-proc proc)
+ (new (cons proc procs) source sink producer))
(define (set-source source')
(new procs source' sink producer))
(define (set-sink sink')
@@ -367,17 +344,19 @@
(new procs source sink producer'))))))
+(define (process-wait-list procs hang)
+ (map (lambda (p) (process-wait p hang)) procs))
+
(define (pipe:do . commands)
(let loop ((M (pipeM::new '() CLOSED_FD CLOSED_FD #f)) (cmds commands))
(if (null? cmds)
(begin
(if M::producer (M::producer))
(if (not (null? M::procs))
- (let* ((retcodes (wait-processes (map stringify (M::commands))
- (M::pids) #t))
- (results (map (lambda (p r) (append p (list r)))
+ (let* ((retcodes (process-wait-list M::procs #t))
+ (results (map (lambda (p r) (cons p r))
M::procs retcodes))
- (failed (filter (lambda (x) (not (= 0 (caddr x))))
+ (failed (filter (lambda (x) (not (= 0 (cdr x))))
results)))
(if (not (null? failed))
(throw failed))))) ; xxx nicer reporting
@@ -408,11 +387,11 @@
(define (pipe:spawn command)
(lambda (M)
(define (do-spawn M new-source)
- (let ((pid (spawn-process-fd command M::source M::sink
- (if (> (*verbose*) 0)
- STDERR_FILENO CLOSED_FD)))
+ (let ((proc (process-spawn-fd command M::source M::sink
+ (if (> (*verbose*) 0)
+ STDERR_FILENO CLOSED_FD)))
(M' (M::set-source new-source)))
- (M'::add-proc command pid)))
+ (M'::add-proc proc)))
(if (= CLOSED_FD M::sink)
(let* ((p (pipe))
(M' (do-spawn (M::set-sink (:write-end p)) (:read-end p))))
@@ -568,8 +547,8 @@
(assert (= (length enqueued) (- i 1)))
test)))))
- (define (pid->test pid)
- (let ((t (filter (lambda (x) (= pid x::pid)) procs)))
+ (define (proc->test proc)
+ (let ((t (filter (lambda (x) (eq? proc x::proc)) procs)))
(if (null? t) #f (car t))))
(define (wait)
(if (null? enqueued)
@@ -587,7 +566,7 @@
(if (null? unfinished)
(current-environment)
(let ((names (map (lambda (t) t::name) unfinished))
- (pids (map (lambda (t) t::pid) unfinished))
+ (procs (map (lambda (t) t::proc) unfinished))
(any #f))
(for-each
(lambda (test retcode)
@@ -597,8 +576,8 @@
(test::report)
(sem::release!)
(set! any #t)))
- (map pid->test pids)
- (wait-processes (map stringify names) pids hang))
+ (map proc->test procs)
+ (process-wait-list procs hang))
;; If some processes finished, try to start new ones.
(let loop ()
@@ -682,7 +661,7 @@
(define (scm setup variant name path . args)
;; Start the process.
(define (spawn-scm args' in out err)
- (spawn-process-fd `(,*argv0* ,@(verbosity (*verbose*))
+ (process-spawn-fd `(,*argv0* ,@(verbosity (*verbose*))
,(locate-test (test-name path))
,@(if setup (force setup) '())
,@args' ,@args) in out err))
@@ -691,12 +670,12 @@
(define (binary setup name path . args)
;; Start the process.
(define (spawn-binary args' in out err)
- (spawn-process-fd `(,(test-name path)
+ (process-spawn-fd `(,(test-name path)
,@(if setup (force setup) '()) ,@args' ,@args)
in out err))
(new #f name #f spawn-binary #f #f CLOSED_FD (expect-failure? name)))
- (define (new variant name directory spawn pid retcode logfd expect-failure)
+ (define (new variant name directory spawn proc retcode logfd expect-failure)
(package
;; XXX: OO glue.
@@ -721,7 +700,7 @@
;; Has the test been started yet?
(define (started?)
- (number? pid))
+ proc)
(define (open-log-file)
(unless log-file-name
@@ -738,26 +717,26 @@
(letfd ((log (open-log-file)))
(with-working-directory directory
(let* ((p (inbound-pipe))
- (pid' (spawn args 0 (:write-end p) (:write-end p))))
+ (proc' (spawn args 0 (:write-end p) (:write-end p))))
(close (:write-end p))
(splice (:read-end p) STDERR_FILENO log)
(close (:read-end p))
- (set! pid pid')
- (set! retcode (wait-process name pid' #t)))))
+ (set! proc proc')
+ (set! retcode (process-wait proc' #t)))))
(report)
(current-environment))
(define (run-sync-quiet . args)
(set-start-time!)
(with-working-directory directory
- (set! pid (spawn args CLOSED_FD CLOSED_FD CLOSED_FD)))
- (set! retcode (wait-process name pid #t))
+ (set! proc (spawn args CLOSED_FD CLOSED_FD CLOSED_FD)))
+ (set! retcode (process-wait proc #t))
(set-end-time!)
(current-environment))
(define (run-async . args)
(set-start-time!)
(let ((log (open-log-file)))
(with-working-directory directory
- (set! pid (spawn args CLOSED_FD log log)))
+ (set! proc (spawn args CLOSED_FD log log)))
(set! logfd log))
(current-environment))
(define (status)
diff --git a/tests/openpgp/Makefile.am b/tests/openpgp/Makefile.am
index 7998d2ab9..d1f04e99b 100644
--- a/tests/openpgp/Makefile.am
+++ b/tests/openpgp/Makefile.am
@@ -212,7 +212,23 @@ priv_keys = privkeys/50B2D4FA4122C212611048BC5FC31BD44393626E.asc \
privkeys/C6A6390E9388CDBAD71EAEA698233FE5E04F001E.asc \
privkeys/D69102E0F5AC6B6DB8E4D16DA8E18CF46D88CAE3.asc \
privkeys/891067FFFC6D67D37BD4BFC399191C5F3989D1B5.key \
- privkeys/F27FC04CB01723A4CB6F5399F7B86CCD82C0169C.key
+ privkeys/F27FC04CB01723A4CB6F5399F7B86CCD82C0169C.key \
+ privkeys/DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93.key \
+ privkeys/2F4CD0990D56D41A74456668469E3139A7960CD4.key \
+ privkeys/8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7.key \
+ privkeys/F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59.key \
+ privkeys/8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859.key \
+ privkeys/A1598F57316F7FEC3F946895E35A7D2EAE8D3A13.key \
+ privkeys/19C87B74004E9839F3D56992B0A9943BF90B56F7.key \
+ privkeys/513906BEA5A40F25C9D6EBBCEF62D0784E7235A5.key \
+ privkeys/6EC551A7895031EE4543A1C789E16E6A6C229CFC.key \
+ privkeys/702F599E35E6E0BE68E6FDF25D887229D42780F7.key \
+ privkeys/7C31A4A632A49C4E8B1C8CBA53976ADFF714510F.key \
+ privkeys/A1ABFD89944870D04039D40C218EE127254AEEE9.key \
+ privkeys/A87B85D88DB8B2B5A62A9958C8F2878F49605D09.key \
+ privkeys/D54E9B75C3541D95C45E430DAC9645E9FB62C668.key \
+ privkeys/EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A.key
+
sample_keys = samplekeys/README \
samplekeys/ecc-sample-1-pub.asc \
@@ -239,7 +255,12 @@ sample_keys = samplekeys/README \
samplekeys/ssh-rsa.key \
samplekeys/issue2346.gpg \
samplekeys/authenticate-only.pub.asc \
- samplekeys/authenticate-only.sec.asc
+ samplekeys/authenticate-only.sec.asc \
+ samplekeys/pqc-sample-1.key.asc \
+ samplekeys/pqc-sample-2.key.asc \
+ samplekeys/pqc-sample-3.key.asc \
+ samplekeys/pqc-sample-4.key.asc \
+ samplekeys/pqc-sample-5.key.asc
sample_msgs = samplemsgs/clearsig-1-key-1.asc \
samplemsgs/clearsig-2-keys-1.asc \
@@ -272,7 +293,12 @@ sample_msgs = samplemsgs/clearsig-1-key-1.asc \
samplemsgs/signed-1-key-1.asc \
samplemsgs/signed-1-key-2.asc \
samplemsgs/signed-2-keys-1.asc \
- samplemsgs/signed-2-keys-2.asc
+ samplemsgs/signed-2-keys-2.asc \
+ samplemsgs/pqc-sample-1.enc.asc \
+ samplemsgs/pqc-sample-2.enc.asc \
+ samplemsgs/pqc-sample-3.enc.asc \
+ samplemsgs/pqc-sample-4.enc.asc \
+ samplemsgs/pqc-sample-5.enc.asc
EXTRA_DIST = defs.scm trust-pgp/common.scm $(XTESTS) $(TEST_FILES) \
mkdemodirs signdemokey $(priv_keys) $(sample_keys) \
diff --git a/tests/openpgp/defs.scm b/tests/openpgp/defs.scm
index bf3714f50..1ac25bf65 100644
--- a/tests/openpgp/defs.scm
+++ b/tests/openpgp/defs.scm
@@ -268,13 +268,14 @@
(define (gpg-pipe args0 args1 errfd)
(lambda (source sink)
(let* ((p (pipe))
- (task0 (spawn-process-fd `(,@GPG ,@args0)
+ (task0 (process-spawn-fd `(,@GPG ,@args0)
source (:write-end p) errfd))
(_ (close (:write-end p)))
- (task1 (spawn-process-fd `(,@GPG ,@args1)
+ (task1 (process-spawn-fd `(,@GPG ,@args1)
(:read-end p) sink errfd)))
(close (:read-end p))
- (wait-processes (list GPG GPG) (list task0 task1) #t))))
+ (process-wait task0 #t)
+ (process-wait task1 #t))))
(setenv "GPG_AGENT_INFO" "" #t)
(setenv "GNUPGHOME" (getcwd) #t)
diff --git a/tests/openpgp/privkeys/19C87B74004E9839F3D56992B0A9943BF90B56F7.key b/tests/openpgp/privkeys/19C87B74004E9839F3D56992B0A9943BF90B56F7.key
new file mode 100644
index 000000000..d0c602d3f
--- /dev/null
+++ b/tests/openpgp/privkeys/19C87B74004E9839F3D56992B0A9943BF90B56F7.key
@@ -0,0 +1,7 @@
+Created: 20240423T121650
+Key: (private-key (ecc (curve brainpoolP384r1)(q
+ #0472FB0D5A0A01E55C29E9FB8C5C425BDF37150DAFA3C556C786E2FEF9E011919E68
+ 3DBC7731D1281FDB9780C4B7FD7785198516BE2033D06448BA7EA39C2BCB7128BC1E0B
+ 3F81F2E734434E6FE96B29E19C57B423C5009134010CD87FADCA63A1#)(d
+ #474FD16712E9A8EC87A6F94E553E369358985475B453E95CFFD2123E4E97679720AA
+ 269CD6002DC688C9F3B9B8C456F1#)))
diff --git a/tests/openpgp/privkeys/2F4CD0990D56D41A74456668469E3139A7960CD4.key b/tests/openpgp/privkeys/2F4CD0990D56D41A74456668469E3139A7960CD4.key
new file mode 100644
index 000000000..b35c7377a
--- /dev/null
+++ b/tests/openpgp/privkeys/2F4CD0990D56D41A74456668469E3139A7960CD4.key
@@ -0,0 +1,5 @@
+Created: 20240419T125003
+Key: (private-key (ecc (curve Curve25519)(flags djb-tweak)(q
+ #406438411B2E3EA2EA48B681860C2CA537978C69072CBD04A40069E122660F6F37#)
+ (d #7D295F7111BD111DB6685B451EF1FCFEA61F7777B8227194F97E093D6E508268#)
+ ))
diff --git a/tests/openpgp/privkeys/513906BEA5A40F25C9D6EBBCEF62D0784E7235A5.key b/tests/openpgp/privkeys/513906BEA5A40F25C9D6EBBCEF62D0784E7235A5.key
new file mode 100644
index 000000000..c902ecf25
--- /dev/null
+++ b/tests/openpgp/privkeys/513906BEA5A40F25C9D6EBBCEF62D0784E7235A5.key
@@ -0,0 +1,8 @@
+Created: 20240423T151658
+Key: (private-key (ecc (curve brainpoolP512r1)(q
+ #046E26896EAC8D3D7F31F0B57439FFDBC0078841CEF7A9A98AB15F489FEE34E9D15E
+ 2050EAFCA0CD4C7021E5E018F601EEC7EDDE1AACE959EA13F84143861489DD54ADAA4F
+ F86E5FF75E3CC2EA6453716075DD908B9647B45257A64AE88DD390D7325B9E30698027
+ 16B3743AFE7A7E44495AF625C3E009C581C63E341A16A23D07#)(d
+ #1A1364149C7AB54D76D9345424EF755139031E85B5B7DEB0D221855D0189A579614B
+ BCB6D01D9E02627F5C187338D7A176A830DF55422FE20D3BFF7812255C1A#)))
diff --git a/tests/openpgp/privkeys/6EC551A7895031EE4543A1C789E16E6A6C229CFC.key b/tests/openpgp/privkeys/6EC551A7895031EE4543A1C789E16E6A6C229CFC.key
new file mode 100644
index 000000000..e9df95c0a
--- /dev/null
+++ b/tests/openpgp/privkeys/6EC551A7895031EE4543A1C789E16E6A6C229CFC.key
@@ -0,0 +1,137 @@
+Created: 20240423T151658
+Key: (private-key (kyber1024 (p #BE7768B33800B583978414965EC439D29A4180
+ 655B0A58BA40CB9C29D10088A07D66B47AE6124B986156A9347878FBCFC0351049D2C1
+ 8835CEE72BADE28B7AC8BA7FF8345AD885B1E730409939C5B3A1A5867AB7912538F234
+ 59AA335204ECC5E94A9B651772A9AC5C60A5137AA74719996479D7A424839172398078
+ 57493825896C628DA1726418D843E4946F9838A2E2DA5B93C6805995CD7D4B26EB79BC
+ BD645E52B31703986686CB2AB26A22029879BD57212928096F0954A65654FAD6651FEB
+ 11039C6E0F03172025303480AE6F5A0ED786A17E3779ABD775B15407B6560C97C42CF8
+ 6A63D7AA1032767D20D97EAD7A3EFCD346D00B4DFD147FAE9C7BCC64224837B6C62770
+ 76E25BE756C201A58445779AE98679C753C2BBA69425D343A5156EAED17AACF0B939C4
+ 9B3FE83AA80C5E4399BE81C13F0A2CB4E6B08E588A13B8944AC9F74D79541FAB1691BE
+ 88156F920FA836C4D41AC4965009FAA174DA36B5521C79F4313B498525311369261B64
+ 48FC7AEE6B9D44455BF6347C35F2B99F95254C6027759B99CA16659006BAD1F7C0B20C
+ BDBFF66A8F454E24863B175A0B614830AC8ACB1AFB93F1D3C54F7216DAA05AE210B57B
+ 503E4657B6870A8CD448644B7A5B68F565E9F51C9F12890AC8315ED52015F6BBED89C6
+ 924BC756EB752FB3502BC50CAFA073E1B6AE3DD29E0C9269F8B505CA0654702114F03B
+ AE81C945B13631EA6C28B244BCDFB159B55B1EACAC30AF7872BD3C8F5BEA0EE9056DB2
+ E6C87C9B204AB21018696217D648EFCBBB4C078C16751B03702BAF447FFB741FDB2455
+ AF5A9BCA6A3340C5B8F6B82748723024B20E6F5A3D56278DBC975D4EA70D9399A6E355
+ 533920A3C5E858AD5180BD4434F3E42B971908AA591ABBF3C1EBF257627CB2BF740DC1
+ B88C7551A5B8462F6CE3B58C65A390C07C01A15C2BC624AB007924D9B76DD1A50603C1
+ 92278A24CC86CFAA952E66ACFE99A800D56C473A7877955FC7D83C1DD548A57527B259
+ 0B56B6CB3E8525F06986725379C4130F8FE15524D569346AAF451538DC663149F1946D
+ 5509BE3BB6026031F87AC4B21B80D66981F8527CDAF0AD4BFC2A3B3265BDAC4E65190B
+ 5D777275896EA238606CA7B2173C1C4DE01058965128BC866B8CC2991045AE47324243
+ CBB0808E2F851FC9563779AC269664B01AECBEF45465FEB9584CC47F3B031794594BF5
+ 7497446B0A856755429A7389A21AB3573C2D8A036238486451013D647D288979200A83
+ 72C6039FA23E35877008408C7C815E55035A5BA9165BBB3BA56A96253B526DDC37FCC2
+ 9F16F18E7D6676A393B867849C85927CAF996A9FE388FF880D5615AC64B7B4251803D7
+ 9599D2232D560C85F562643E9B9F33F8139D0B61ABE98F76043E5166145A045B83E574
+ AAB35D9D119A3EB3107FB3388EF483B056726B3036C29663018C929FD972D444C54373
+ 16D749AF0D12556F159FC02584C6B8456BF56DC2128DCA61B794E7AAFB61969354B5A6
+ DA82EB545CFA242CE997A5168AA43926131165B534FBBE1F15A4D4432FF5BB8446A575
+ E528480B7C3FA0328C8134C0BF778792C05902EB32476326AE979CCF0C80C39C4B7332
+ 9FC4EA365164A848D529BCB43985D35B3AE30B02AC057E1910BDB616F50A79F22441B3
+ 51C77C8A17AB4052F44930B991AF7C751209253C4D27C8C5166C3285A1B1D39981B85E
+ CE5CC7AF11B4B8B38170963766E6130A66ABD736478067C0A86470C542216AE1593591
+ 62F72C34241601E4F54087D64A8752C38FD85CC09C0C7F38CE3A0320E5E16B507302D7
+ 830EA18793774A3D7BAA807971AD17332D8862C0FA757D98782CE927577A32B45BF18E
+ EE77B393F410620C03093620470BBC93313489F11C96871C42DA296909ABF16A885950
+ A2CF896CD18A61D54B3C529C96355AC2D3C69324C3AE634C8718C3CBFA734C40E78F91
+ 53A1286B379E0B7636141DD20B43A26B6BB2E03A56F008F0868CE2B940CF108FCE7954
+ C0A1B933CC15FE156E2C4C4E4EDCBBA1E87108E3CFF24865548A838E7619315B25C265
+ 3465158CAE4683AA03696870C397359B118CB37AA853D46CC5B05ACFDBC010C8984284
+ 07009340A4793A05718B0E12E95FA8685A213B8559B44021B8C3A458AF81C2476775AB
+ F0015DBFF820427CA306265DE9AE0F4AE474DF627DCD167AEA9FB7A6EB3F021BA4A78A
+ E111275F13AC923E23#)(s #2EB39309148C404770B9EC5188D13FEDD24E3DAA78FCC3
+ 5AAA6840B1458E30511A973C389FF3B4F8073ACF9780AC09A648822E460C6399C125B5
+ 191DCF16C92C350FFCF25A94E22E4E80C9A25C18DFC884D9536D2E8469CAC88781726C
+ CE899E477BAFE3B25F3319A310E499AF030CC65867E207D0BCFA1C1EF711F2403B8293
+ 7F83A0859051CDC9AA9B43B53197CB47B1F47BC6BB5A073A3D5B2182A312C747A50C5B
+ E67CB43315019CB0B6D73216943144A5228307A4D7FA3C88B0B3AA1B088CCC73A81AA3
+ 0EF56D06D3A2139517215A843E093C1F61C1B1890FE5E9A0FC64986622BBFF7635F6F7
+ 70C1325727300665B437544456C1211FC7D1753B724DB691CAE729BC89CA97B5C60363
+ 710FF5A2502C54C429591824A62547D70FB17A8D177979473B254E12BA1A589B1039CC
+ 9AF061FF098AF5B09B89334DF3E54B6D524FB8B99F7C9A41F4731175D4904BA040A201
+ 76BF153241FC5F38D63665629C75C97935F99DF7B7B415816705C00A47020DB2D8A6C7
+ 945FD950206FB1CE970A973A285469FC6B2D495BCC50BACCCC9DD03A9D85C2B667BB64
+ 887A37EB645DC5F4281ABA6FA5D2B73C0B97D9AC9220DB5A0ADABA6B438367E60E0412
+ 453E6791C275A19F1B44D23A9C00E11610EABC332746F6FC09DDAAA402475E7528C57F
+ 8B79BE8B506F100E43AB3131C138225622DC597F0405B86A3CCABF2B45CBA028FE1221
+ A9AB4368EA6D9129A80A26B2F8CB76438A15D0FC8BD0B26BD6D5BDAB75BA25F636A889
+ 95DCE2656A21C66C3CCBE2CACF38C66F2D66BB55C81A66C1695BA5391BA327F44B6596
+ 4A035A37C6C3BA7198F27E758C822EDAC40E50CBC86274E6EC6710B74178321FEAD3B7
+ 20319A50D34EAC953424379CCCF9753E3C26D60B896A555C62D21F226899620995CCEA
+ 312F840D08294A6816789DC77B1D730151FA5084BB8CA3CBA402E834CA5C2069D6455B
+ 133864F64CCDAA7C98B7038AD6A1FCF24C81E6B20D2C7BA1B1B45B4A949D48AC51683F
+ A8C4938B4CBBA49C258318742BFAA172DC58C5E628BD9A10A9C54116705B6E9C80D936
+ 2C62E26DC5A132F02B2A4B1A2376A74668ECA44D2080C414941C6A3836CA90C590CD3D
+ 2B74F2C33C82288B15B708F4178D7B1A01990308DC76C0C83794063B0D2F434EE86AAE
+ 9240163AB0AB49DC36F5AC925F05C38CD6722E70B09F8871F04066DF90A4EF06AB3776
+ 161DD8817313653A0A58CCE69040EBB5D84B9B1DEB0892E8071B073965D68F4C191354
+ 184E2D0100A272636560C305394185D01D0FE527A66CC1F4ECB34C208222FB505FB39F
+ 5B47A6CE87BA58C848EAD5ADC78B17CE6584A4336C3AF8C23C9BBE805ACA16AC53247A
+ 621D074A1AC79339B83661D7018E55A6091C58441606A862C29A79BCB7600041AC7CFF
+ 5C76961B48D4C47437E3119D2697B28502748036784A99F4D07F21FC16C6A1C5F44070
+ C2F07F71FC74D91114C8E71053E18A59EB567C1445CBE3216CAB431FE59D42E627BB8C
+ 5C905C4FDA2B1C0A5B3B67567879660E044B5FA0666310939250020AAF31A6FA789B38
+ 904121713F08A5760EAAC87EA58444D25FC40787A3600B55059FE081AA535BBF6DF25C
+ 1C4A27DBA8A243AC88A4D879BBAB260BFA62DF0557BF7B7466654DE5C69DDBB18C3E17
+ B5EBD0AD91A80AEA71C2F5F076794C1B60323E7C5416F11179CAD8A6F48C943AAB6265
+ 6A9AFAFA2F5CE8918935C21E169806463CE140B1CF6930B9A3AD4AFCA1B2607867B441
+ 5EE696E3949D53AAA74A8692913AA900E5A32BD7C9482284F1133245A08EBA41C17C70
+ 987FC106C3961B3A13C2E9966DC6F9B42CFBA39EBA7620CA6E42DC7F58759315F04703
+ 262E334B45CDD90FDE270C679A67C91B8D80076E4F539678822AF993633EC54FE6486D
+ 53E51DE286C5887B66A6188BC7E88BFF4455C03160F3A2AF2BF9C7EED288D1F977EB69
+ 72BA48742543325FB667DA80B5B6CB3C70B76C15940A93CB2ABAC76315F18E7A578370
+ 6320299C33B8636E0354966E46585025462444300BFB94C36784904A1DF199C6B1AB62
+ 410723D6365F50111CD7854384296D47A1BA7B241FD179443C5721D3655435069C0F6A
+ 4DD6E21C40F3CAA5502431601486DB3ADC329888D7ACB364B3902B6781B52712C70054
+ 8C61F811184A00AEBE7768B33800B583978414965EC439D29A4180655B0A58BA40CB9C
+ 29D10088A07D66B47AE6124B986156A9347878FBCFC0351049D2C18835CEE72BADE28B
+ 7AC8BA7FF8345AD885B1E730409939C5B3A1A5867AB7912538F23459AA335204ECC5E9
+ 4A9B651772A9AC5C60A5137AA74719996479D7A42483917239807857493825896C628D
+ A1726418D843E4946F9838A2E2DA5B93C6805995CD7D4B26EB79BCBD645E52B3170398
+ 6686CB2AB26A22029879BD57212928096F0954A65654FAD6651FEB11039C6E0F031720
+ 25303480AE6F5A0ED786A17E3779ABD775B15407B6560C97C42CF86A63D7AA1032767D
+ 20D97EAD7A3EFCD346D00B4DFD147FAE9C7BCC64224837B6C6277076E25BE756C201A5
+ 8445779AE98679C753C2BBA69425D343A5156EAED17AACF0B939C49B3FE83AA80C5E43
+ 99BE81C13F0A2CB4E6B08E588A13B8944AC9F74D79541FAB1691BE88156F920FA836C4
+ D41AC4965009FAA174DA36B5521C79F4313B498525311369261B6448FC7AEE6B9D4445
+ 5BF6347C35F2B99F95254C6027759B99CA16659006BAD1F7C0B20CBDBFF66A8F454E24
+ 863B175A0B614830AC8ACB1AFB93F1D3C54F7216DAA05AE210B57B503E4657B6870A8C
+ D448644B7A5B68F565E9F51C9F12890AC8315ED52015F6BBED89C6924BC756EB752FB3
+ 502BC50CAFA073E1B6AE3DD29E0C9269F8B505CA0654702114F03BAE81C945B13631EA
+ 6C28B244BCDFB159B55B1EACAC30AF7872BD3C8F5BEA0EE9056DB2E6C87C9B204AB210
+ 18696217D648EFCBBB4C078C16751B03702BAF447FFB741FDB2455AF5A9BCA6A3340C5
+ B8F6B82748723024B20E6F5A3D56278DBC975D4EA70D9399A6E355533920A3C5E858AD
+ 5180BD4434F3E42B971908AA591ABBF3C1EBF257627CB2BF740DC1B88C7551A5B8462F
+ 6CE3B58C65A390C07C01A15C2BC624AB007924D9B76DD1A50603C192278A24CC86CFAA
+ 952E66ACFE99A800D56C473A7877955FC7D83C1DD548A57527B2590B56B6CB3E8525F0
+ 6986725379C4130F8FE15524D569346AAF451538DC663149F1946D5509BE3BB6026031
+ F87AC4B21B80D66981F8527CDAF0AD4BFC2A3B3265BDAC4E65190B5D777275896EA238
+ 606CA7B2173C1C4DE01058965128BC866B8CC2991045AE47324243CBB0808E2F851FC9
+ 563779AC269664B01AECBEF45465FEB9584CC47F3B031794594BF57497446B0A856755
+ 429A7389A21AB3573C2D8A036238486451013D647D288979200A8372C6039FA23E3587
+ 7008408C7C815E55035A5BA9165BBB3BA56A96253B526DDC37FCC29F16F18E7D6676A3
+ 93B867849C85927CAF996A9FE388FF880D5615AC64B7B4251803D79599D2232D560C85
+ F562643E9B9F33F8139D0B61ABE98F76043E5166145A045B83E574AAB35D9D119A3EB3
+ 107FB3388EF483B056726B3036C29663018C929FD972D444C5437316D749AF0D12556F
+ 159FC02584C6B8456BF56DC2128DCA61B794E7AAFB61969354B5A6DA82EB545CFA242C
+ E997A5168AA43926131165B534FBBE1F15A4D4432FF5BB8446A575E528480B7C3FA032
+ 8C8134C0BF778792C05902EB32476326AE979CCF0C80C39C4B73329FC4EA365164A848
+ D529BCB43985D35B3AE30B02AC057E1910BDB616F50A79F22441B351C77C8A17AB4052
+ F44930B991AF7C751209253C4D27C8C5166C3285A1B1D39981B85ECE5CC7AF11B4B8B3
+ 8170963766E6130A66ABD736478067C0A86470C542216AE159359162F72C34241601E4
+ F54087D64A8752C38FD85CC09C0C7F38CE3A0320E5E16B507302D7830EA18793774A3D
+ 7BAA807971AD17332D8862C0FA757D98782CE927577A32B45BF18EEE77B393F410620C
+ 03093620470BBC93313489F11C96871C42DA296909ABF16A885950A2CF896CD18A61D5
+ 4B3C529C96355AC2D3C69324C3AE634C8718C3CBFA734C40E78F9153A1286B379E0B76
+ 36141DD20B43A26B6BB2E03A56F008F0868CE2B940CF108FCE7954C0A1B933CC15FE15
+ 6E2C4C4E4EDCBBA1E87108E3CFF24865548A838E7619315B25C2653465158CAE4683AA
+ 03696870C397359B118CB37AA853D46CC5B05ACFDBC010C898428407009340A4793A05
+ 718B0E12E95FA8685A213B8559B44021B8C3A458AF81C2476775ABF0015DBFF820427C
+ A306265DE9AE0F4AE474DF627DCD167AEA9FB7A6EB3F021BA4A78AE111275F13AC923E
+ 23D1F7082DD2B7C9BA1CF7957573C9778E452967D9D35277277471D1E15EC88ED243E0
+ ABDAF1149BF31CEC85D81BB32BF3CFFB4E62301100C95B53023559948E18#)))
diff --git a/tests/openpgp/privkeys/702F599E35E6E0BE68E6FDF25D887229D42780F7.key b/tests/openpgp/privkeys/702F599E35E6E0BE68E6FDF25D887229D42780F7.key
new file mode 100644
index 000000000..cb3e6ea3e
--- /dev/null
+++ b/tests/openpgp/privkeys/702F599E35E6E0BE68E6FDF25D887229D42780F7.key
@@ -0,0 +1,7 @@
+Created: 20240423T121603
+Key: (private-key (ecc (curve brainpoolP384r1)(q
+ #044F9318AAA2E3A3D28DA76F4B3B6B7CCAFA9B77A571E9A5BFFDEAC24A0FD96C6BB3
+ 8F74FCF980696EDD5F4CBCA2B628AE24C9DBC1C60EF1D5809D4D544EBAA01F7744233E
+ 248106D98A67CE1ED52D14FA942F6090C9988AA5EEB2368E19F679E2#)(d
+ #0D146C6EDEC6AE142765DABBFFEF4EA6CA290EB7DDF99676F3F59AE6CA3942531B31
+ 7330A07F5C8AAAEDFF69E6855301#)))
diff --git a/tests/openpgp/privkeys/7C31A4A632A49C4E8B1C8CBA53976ADFF714510F.key b/tests/openpgp/privkeys/7C31A4A632A49C4E8B1C8CBA53976ADFF714510F.key
new file mode 100644
index 000000000..e46ebbc6e
--- /dev/null
+++ b/tests/openpgp/privkeys/7C31A4A632A49C4E8B1C8CBA53976ADFF714510F.key
@@ -0,0 +1,137 @@
+Created: 20240423T121650
+Key: (private-key (kyber1024 (p #9A9A0790782C7F4A7F51934777FBCF7E56C66C
+ 2A56158680E424196D2749B7D624FDC9AC2B890BF8594CAE427E79DB4B0551A1512736
+ ACA58CA8ACB41DDB854A08B546170190075051E91A85529795044500E239514A2ABAD1
+ BE0D4C9F6512A887C30903AABECFDB6A6708185641402473637C80806162BDF85C2133
+ B0BBA05450E638860784902616621FE7529A107A5A976FAC4985C3583BEFF33DC4A05E
+ 52767599D426C11BBDE0A0C0BC45B6AEC3747A316E3119ADA71A5B6589927797483E36
+ 13E9F836C87685A26BB35C93CCDCC8B2C3B8AF38C60B2B8BB54B21C9ADC91644D541E1
+ 70AE1A97ABCAC321BF41855A48B71CF9250A39948601100AD1B26DA8740E2AA117E60F
+ B813848A126FDB87C0F2856B0497104250590B9041919A0253ECA5F283688D25C7788B
+ 68A21450F388B1FFDBB6736A9E38CCBC2A2B0F6A64AD45F882EDAC680AF060C0FA2B73
+ 921E7F053EDA54549176BE0E65ABD94B490FE75681822B21B4784D849FB32C76DF08C8
+ 17846A2628B1118580818740B637CEF7B31C1EC2B10FA7ADB8B4AEC9B541C568244E74
+ A4D94817E7B294B78A637A8AAD9F762028398B757063445C1BEE807B316788A3FCB7F8
+ A288C5463975301E4EA27171738EA0983D5AE01CD38811E9699F5065101CCCA251C052
+ 4CB5B147B98FF65902243C98B1992475D297910383F6AAC31BE8A32D8A6341F436F5C4
+ 928826AD4628C51A443826C05314E11851BC41CA1571E43061BB730A5AA1CBC9963690
+ 3745458851E28864E54A885C0BC88C423670795777784A9607A3BD2004F1F51871000D
+ C6F2578AC434D486871E665D14C76B1A416CC72676A96C4E6F79B75BE23FA31C2527D7
+ C976133F4B211E07E0BF4ED46C2FB77D81272290DB760DE8B567527B36316276AA9A36
+ 89AF4B3790C08820A844258D139856944EB8C40C9EBB6D199A196D446FCF25B0E61688
+ 4591950021AC9D5B62AFF2A46A955C36D21EC41B294EE3AC6235323BA1B3A3000B384B
+ 87813550FCAA470C6C6CBCC16D8732C5A3387C16C87B34B60D56B71797B177584C6A20
+ 804C9C145698A2ADA0453ABB290B36124D2690124D1B4A0FB37BAA9A1BA0237690018B
+ 66E426B7F1400A8B3C0635A79689861F3B1A8041919F600B435179E375859591293E98
+ 209A2B07AFE028982B5532275157E0545F844BC07C0491E55A2757A6DBDBB0A0817D58
+ 0CA677E8C60823AEFC76B42845AB54C40BF0D5733198C326AAA99F11667FD583A97195
+ D4091BA790C419BB2312684479E15E09D94974B5BF747CCC99BB9F348C411178645555
+ 372EE08C514B6AF5BC4EAF357FE0132AF374475BFC7754B29945D525E5E45561967002
+ 452C9B6A99B7340577D9AC5184911D3BA1E833C3FCD93B3401B3E8913721179D75AAB9
+ 94A17FA6C9C62C2CCE4194C563B4A78BABAE8CC82E177835AB351884FA1638898D5491
+ 2A2E87A5BF14170FD689E0E494DED76C43EBC23CE564B0EB94A5927DEC720C98346562
+ D375E116AE6E00B5081B69CC45AB8263ADA4304C50615FCB3C78FA37961953560912B0
+ 1D2C255541B94C929E1F105B6F462A36436090461473ECAA05BCCCB26536DFC157EA60
+ B37B49B4A17154AE6003A1C053E52329DF375F86A48300B7855C6865A7FAAA3F04A10D
+ 7821B18A978B8AA8DD096C6C101015C4CF385422CD1105E765201A445D9D22B3C61525
+ C4A09C692CA838E01EEF6B45F82A25B9F15108441A5911C5529498BB629A22543239EA
+ 9765453633C51E75B8C62F2C2D5E8A524E69097DF8480E8347F0F94ECC193DD9E2C86B
+ 7134066189C7FA6BC12331D5622CCAC42D090553E1191186E6315165BAD5039AA3A75A
+ 777AB9057A59D463C0E93B5DC34A058519848C78A607ECC631CC050554CEA61B29658A
+ 75D4D33DBC95AF5E587C1EC3B2B8E717FE85B8D3D41AE5C4700DCC449EA65491B55685
+ 791686CB9B51E97B18671D92F1A356A3060001CAB220707206B485EA6E0BD85F53719D
+ FA3876C6534058C4C291330244C19AC87B944B6945B77B44577772DDC8727C60260C5B
+ 17B4819A2C801A9D168D0EEA03BCA50236BC20F69886CEFB0C6994BF25C1CC09209EA5
+ 3B6C04F15F9613C5D04646D151457A206F0B35C9A40CC3782B2F851759F93040CC0BC9
+ 75477C7228BD7D1435DA80607EAB07CAF93F3FAFC623B4458888F05949EA9B2972888F
+ D40F3E6E009F8C935E#)(s #8D204312E102743757098841C5E7661CD0469E50326578
+ B3F7324E3A303617BBBFB9022E03C61F69BAA89890C72AB82964B60F039786C9436A84
+ 7223E412A76F34B1AB913C44D0CC9682593BAB0738072748F2014A38A424DA91D629A4
+ 33DC33928C862BBC466B3166884010AD6A33E20A75D9870D3C07C183C01F410444D982
+ A15B8A377806136DB03A94EB5D2EF1311AE03884E92CED483365C582E5C60EE708AF20
+ 939E135A5EE45781448911DAA90EBCA6792F86C13579C4D6305816F493A35C4F8BC3C6
+ 4D516D901A38174701B33C597AA40953FAB5CF3C672C4B29220176BE370846AB24E216
+ B634F3A6ED26CA88757854883FFB203382DB609F473686E57AF1970B75724E8D339DF8
+ A7B614063556E72569447A81901705A319686125EE5480FB8C3C1B73CDE6DC8EFE7060
+ 2D8811C52C85DB834C06B57850AC742683C05451B27F8B47C7491A42B102D1A83AB114
+ 0D8EEA401C80467CC1826C59B572DCCA3B32880E07BC14C7A6A39015E7548197FC1BB8
+ C8203554312F170FC3916727E9A5A349B427EBCC2833C77F4C045E8C4F5B39708C4C61
+ FD2761BD824BCD5606992B1716C15EDE0155DD311238BC529C7838AD6B65BFB31915F6
+ 7248021410E6A4BA44817D307B0F713689186BA91C683EAA7C29B509D57A41BA0A09FA
+ 4427F5C806CD705039669A5871C4170BB3F7081A77E17BFB1455311650EEFCC35C8336
+ 03976CC8B34C9C23CA52641698DB36ED45AAABE15540A757F0BB09647B5D0943305FA7
+ 91C89C623EC941D24CA283A208EB8745F0B2049E196CB3CC032782BB44F01B94A89883
+ B5C52040806BFABA3143464677CF8540876E189FBE69BEA7B151D8106711F666929596
+ D61A7344D783A7A741BCC4C5F8A9064FB29C27D8A08EA009E13414523088361B52A6C8
+ 5C5FE88D54E4CAC784804F9C0E9B508E49DC7F1FD9574863C2B3B39EE74614BA60ABA6
+ 52777832175026613BD08EB979B66B92AFEE89341C30770601892172CC7A34587C04B3
+ FB901F0618CFEC0BA54874C95F833C99AC2ED7F20AB74C3719A27D7572CA6F8A99A221
+ 843CA939491B210703497CB3288F227680E54F0954B62B455650979250336509709280
+ 7BB80349A2B4F8576B4600225A8D059608C8173E78398C971A12940B14F414208ABA1D
+ 00343DA1332E2A813164D80C8E9B54D0212A481027EC0B81D3580E74982D63DA100265
+ 9EB600A9E096140938526AA3B709B9086F1A9E78076EF36B372EF3C4DC4C6A1BE015C6
+ 9B7DCFE960AAE67449424BD4448861520EE59008391243C9F508DBF22A7DF1C90DA9AB
+ FF663DD1D7BA02B2C21DE9BB5656BD935B639565982BE41805D5A2FE63646CB48A4A69
+ 26A8E11C3185BAEF032372B8687ECC71021BB44004ADA09A9B6AAC0F335C2A9B689BEB
+ 556D9C706CCFC480DA20695CD0C94807A05BCAB436B88911FBB36DD36E1F734E66F288
+ 5A325A06CCA6CEA3BECCE02E1E6B71FB9A5327A13B172C9E9D908327655A25DA8E6307
+ C9BC251C4C7CA11B211327C68783727AB7F280FB654EAE3883BA3B54D2EBB4564A7C23
+ 7AA44D3C15F48817A23B9A6D346D562560C34B41CAE117075857F9A6B23B717EBD719F
+ D4A75537D9420F411C0D9A75BF3160DA172FA9615579E4B0D4D965376B6F5006660330
+ 216DB476F2688B512A836D52A2CBDC4C56B690BE205D1C681EB1D55702BC0611B960F6
+ 558AACD22B41370C04B10BBC63B4EBE10BBDDC024C94BD7046C525F2767C6A55668A0B
+ EB47C0330C1A4E17493B15460DA6AD8084C304268DC0203013119017B59C5FE2C785A6
+ 6BD7E130004DCEC940BB422CCE6D434049385443E18FC832C0A2C60553A5B4C81B8708
+ 78AB143016F883A36A4742ED7B2BE8EAA13C817475F6B0A49462AD38A0993CB1A6F5A3
+ 88E0835A8164B5F9B53B8C7A41E419F9E42ABEA1921BC5154B293D00B05CD900323533
+ 1384E8AA789304F570249BF2B1D2AC7FD4AB93F76B41E49421ECBA3AA0D44A7A72296A
+ 5711069C94394270D03B3B13D99CAEB78B091C8C71924D5241ABD14C80FDE9C2E34346
+ 8A974A844B760BF80A2826249A22A20E26ABFB1486AAD01E815B54A2CB32E179946C04
+ 3F6F298DAB042FEEB65494376784F8424D73099910154F29CF1CC55A4D76BA3487C41F
+ 7A9E5B9C8FC324A49A9A0790782C7F4A7F51934777FBCF7E56C66C2A56158680E42419
+ 6D2749B7D624FDC9AC2B890BF8594CAE427E79DB4B0551A1512736ACA58CA8ACB41DDB
+ 854A08B546170190075051E91A85529795044500E239514A2ABAD1BE0D4C9F6512A887
+ C30903AABECFDB6A6708185641402473637C80806162BDF85C2133B0BBA05450E63886
+ 0784902616621FE7529A107A5A976FAC4985C3583BEFF33DC4A05E52767599D426C11B
+ BDE0A0C0BC45B6AEC3747A316E3119ADA71A5B6589927797483E3613E9F836C87685A2
+ 6BB35C93CCDCC8B2C3B8AF38C60B2B8BB54B21C9ADC91644D541E170AE1A97ABCAC321
+ BF41855A48B71CF9250A39948601100AD1B26DA8740E2AA117E60FB813848A126FDB87
+ C0F2856B0497104250590B9041919A0253ECA5F283688D25C7788B68A21450F388B1FF
+ DBB6736A9E38CCBC2A2B0F6A64AD45F882EDAC680AF060C0FA2B73921E7F053EDA5454
+ 9176BE0E65ABD94B490FE75681822B21B4784D849FB32C76DF08C817846A2628B11185
+ 80818740B637CEF7B31C1EC2B10FA7ADB8B4AEC9B541C568244E74A4D94817E7B294B7
+ 8A637A8AAD9F762028398B757063445C1BEE807B316788A3FCB7F8A288C5463975301E
+ 4EA27171738EA0983D5AE01CD38811E9699F5065101CCCA251C0524CB5B147B98FF659
+ 02243C98B1992475D297910383F6AAC31BE8A32D8A6341F436F5C4928826AD4628C51A
+ 443826C05314E11851BC41CA1571E43061BB730A5AA1CBC99636903745458851E28864
+ E54A885C0BC88C423670795777784A9607A3BD2004F1F51871000DC6F2578AC434D486
+ 871E665D14C76B1A416CC72676A96C4E6F79B75BE23FA31C2527D7C976133F4B211E07
+ E0BF4ED46C2FB77D81272290DB760DE8B567527B36316276AA9A3689AF4B3790C08820
+ A844258D139856944EB8C40C9EBB6D199A196D446FCF25B0E616884591950021AC9D5B
+ 62AFF2A46A955C36D21EC41B294EE3AC6235323BA1B3A3000B384B87813550FCAA470C
+ 6C6CBCC16D8732C5A3387C16C87B34B60D56B71797B177584C6A20804C9C145698A2AD
+ A0453ABB290B36124D2690124D1B4A0FB37BAA9A1BA0237690018B66E426B7F1400A8B
+ 3C0635A79689861F3B1A8041919F600B435179E375859591293E98209A2B07AFE02898
+ 2B5532275157E0545F844BC07C0491E55A2757A6DBDBB0A0817D580CA677E8C60823AE
+ FC76B42845AB54C40BF0D5733198C326AAA99F11667FD583A97195D4091BA790C419BB
+ 2312684479E15E09D94974B5BF747CCC99BB9F348C411178645555372EE08C514B6AF5
+ BC4EAF357FE0132AF374475BFC7754B29945D525E5E45561967002452C9B6A99B73405
+ 77D9AC5184911D3BA1E833C3FCD93B3401B3E8913721179D75AAB994A17FA6C9C62C2C
+ CE4194C563B4A78BABAE8CC82E177835AB351884FA1638898D54912A2E87A5BF14170F
+ D689E0E494DED76C43EBC23CE564B0EB94A5927DEC720C98346562D375E116AE6E00B5
+ 081B69CC45AB8263ADA4304C50615FCB3C78FA37961953560912B01D2C255541B94C92
+ 9E1F105B6F462A36436090461473ECAA05BCCCB26536DFC157EA60B37B49B4A17154AE
+ 6003A1C053E52329DF375F86A48300B7855C6865A7FAAA3F04A10D7821B18A978B8AA8
+ DD096C6C101015C4CF385422CD1105E765201A445D9D22B3C61525C4A09C692CA838E0
+ 1EEF6B45F82A25B9F15108441A5911C5529498BB629A22543239EA9765453633C51E75
+ B8C62F2C2D5E8A524E69097DF8480E8347F0F94ECC193DD9E2C86B7134066189C7FA6B
+ C12331D5622CCAC42D090553E1191186E6315165BAD5039AA3A75A777AB9057A59D463
+ C0E93B5DC34A058519848C78A607ECC631CC050554CEA61B29658A75D4D33DBC95AF5E
+ 587C1EC3B2B8E717FE85B8D3D41AE5C4700DCC449EA65491B55685791686CB9B51E97B
+ 18671D92F1A356A3060001CAB220707206B485EA6E0BD85F53719DFA3876C6534058C4
+ C291330244C19AC87B944B6945B77B44577772DDC8727C60260C5B17B4819A2C801A9D
+ 168D0EEA03BCA50236BC20F69886CEFB0C6994BF25C1CC09209EA53B6C04F15F9613C5
+ D04646D151457A206F0B35C9A40CC3782B2F851759F93040CC0BC975477C7228BD7D14
+ 35DA80607EAB07CAF93F3FAFC623B4458888F05949EA9B2972888FD40F3E6E009F8C93
+ 5EFC819BE888E45002962BD84C240119DDC2FB54BAC77FFB2D990600F53E83DA47DE79
+ 15EC78E7947BADC403546041E8985FB1BB2CEBE867C9D6E08C213E54992D#)))
diff --git a/tests/openpgp/privkeys/8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7.key b/tests/openpgp/privkeys/8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7.key
new file mode 100644
index 000000000..e0bc486b2
--- /dev/null
+++ b/tests/openpgp/privkeys/8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7.key
@@ -0,0 +1,104 @@
+Created: 20240419T125003
+Key: (private-key (kyber768 (p #0DE94F420165B79701FB24A7669190CF2840ED7
+ B96E4B088D45A9DB4512117E39B2FB23754175B64471CF95C0480078FD0A8611D19A15
+ 9303B26063DEA88752C00200C8192A287C27ED707D6B830006D821F9C26F0501F85651
+ 866C0CAEA481C7CE59D1FD04548E15C565C95DBE6BD0C32500AE9BC838050A073005F4
+ C76D05B1780669F4C6B24F27769F76926543753CBF9B53441484120BA0FD1214FA4AD2
+ 2E56D63BB1D0B004FC155CB5445ADEF258517D393894A4235221359789C06B649FDACB
+ 8D290B81EF82C7987638F42603C9B85C3613166591D384524485C07FC0C3DA957A2291
+ 0743105B13E22BDC9989988192FF537B294D59601B97A21810051D580F1FCA453C240E
+ D198F6D3A6F185511CA99029859B5C17240EA443792533B6F63750A0336D1A1166FD29
+ B7669999A025B938C304080C1D8B784AAE4703AE2459F7815F8EB4083B69B83276D548
+ 26E00A690C82709423549634CC02F0429126B5CFFD29946752B122525C6610F4A3914B
+ AFC5E0CBB16507158FA5AC29463744F166A5C105C646399455682E8114F78208CBCC95
+ 1C94B986BA20690710466547C70B35687FC6047F79C78715CB533C31040C8E34C95C4D
+ B220F10A8EF6CBCA6B0B5B7704339B430C0530DAEB37CD17C96D3821FDD331C001788A
+ 9068E913B1A697549D1E32C5D72215365CC9B4C59DC8093EE3482AD0C29EF19341214C
+ 50419408B2403E4830066D1009D55B14D569F65733D0DF5362030A424A5ABCF25C268C
+ B087591AD8DA4C6B8A80F11D14552671D71183383520152D2C44B3C76B3C875D5FC432
+ BB46A7CE5833E91928AD55D30D7789718364BB43900C98FEE5315C8035DEB94387265C
+ C4EC48927158077125673CBB649E82B890A16E1E5025E598DD544510D5C133F7C0036E
+ 665AC2A5951C7A75299777EB8A8C44ABCA15339DE0388320067394321ADCC346C49926
+ 487CBB2D9B0D130C53B1471D7A939FE1C323A62C1325690A5866702182F98F550AFD0A
+ 5551A2D01AC7E66038AD4E7682D642D4EA020939A7FC0E30FF228AADFF935F54CB02BB
+ 03D7C10A001E81ED1151DDBC77E912297D7F922E255A5AEF979172B218D6CB365222ED
+ CD6852A30ADEF0CAE5C0C7783493E7A9530FFCB7A490A69735ACB86563AF000C89B922
+ D39F6C1F638AF1F0BA5E7B11961EB7FE8B631EB38AD60F2C09FACAB473A71AC391527C
+ 502BEE27B11115F9CA1869F6033A97590D984100E540AB9AC2744F921DE2C3D2A1B9CC
+ 58231B755C270BC29242C9693493D88701447AC50011374F8E87A1313415E512D77192
+ AA2D084F65C6900E72D41D8826B7CB84C26720685C53F5A47FE0220CBE2CA95C827178
+ CC677D1098741C767E55BF52B92D5152029EB30D83CC28ADB7E774B06D64A4C0E75424
+ 51188B482778864ABEAC0645B07993F98A202642A59940AFE5161C0C535DEE6386AFC3
+ AA98769B0D0927FCB85BB7951B5F76354570B24C93A1B277771FAB0C8ECB9326B070C5
+ 124C946B3E53A669FC46FEED668CF2955C87974C0429BCCCC6A9C040B8A93CE49E40D4
+ C607CB269087742B4D428819E434C41749708154AE8CB5C1C385B60C509008A8B6F15A
+ B7FC5BD20FB704939BEE164A180BCD2C0A901FA9F30356336576926E24E3516948A722
+ 27672594EEA77AEE903#)(s #218B22DB8B1D760A1A070A26950BB1ACE8C5898C2A319
+ 583E20A118A56A1E6BB3422B0BB9F466930B50B932780F9E00274590A13B60014E0B22
+ D141D074134F577B15409AD58106AD3012C52329DB8E13BBB0B1A753CB79BE9A233557
+ 142A60496E0BEAC54334B2394E7CA8B3175956D0CA2CA404FA1930DF36414EB4C776E7
+ A041F3409F61384B1AB7B097729473520D18630ED050F0B3957A41C7E34089CB6029AE
+ E85A25BC3257E7A3EFCA3617D601735BCCD1CB73AF9BB79E90A248A249009D779F9945
+ 0E3D82C5D56AEA8707DFF8410835A24DF37B411F3646D6684F11C1765A2C2BFE55F097
+ 10467D62EB4AA0F90049AFFF09B1F66560382A7FA5C91CA1C0A696A2FB86CCB8E53480
+ 0A4218FB81033E41DA544907A583BE8BC76321AA5D198C80CA295F5E55D98688D35267
+ AC38A0822587A825CC90BC721695A9D4414710DFBA3E14332BC5C86A7A9970A624880B
+ 518749C959384365CA747D2867EC43343C1C61194D5311B555027ABA759F3602E57214
+ 7E20C761125D2E86EE1693F80DB809D79138C0AB299712CAFD298209617DAD830EC3B0
+ A70649A76F5BDD143476F951767FC1F6F204E434A604C723379837377C8B1A9067E500
+ 34E79CC016F30C11FEBA0DB19C2BF42C3D6590C75E75B0271B02DD664402BA75635145
+ BE38733C12DE5054759930F36252F5DB2CEF4587965D49B10A4765036C5D5E001700C0
+ F9A813559409B72EB4B564C1EF77B28ADA3319DB98EF0183035C1ADF3445C46C320D44
+ 31F8C48251893C7CB7421FF65117239547193A4A843019A70BCC42BBACFE9C5BB172DA
+ CC8AE5D2B15E8338F2EF58FFCA1191CE576A85B8AE5E99231E1156EC9815E499D260C3
+ 1AE804FA983C1A996AD3B538386E4680D2067E64234AF0A055E14C818CC2A29524B056
+ 03670393BA01642E99BBFA0BCC2681759116C4E1D705D78197EC3D0726DE2A5F9239F0
+ 47089684508870B5C06C8715771A1F908923891BEF548194DE22E433C845B48B69D1A5
+ A3A289F3FCA2F7032B6176225FA762C7DDCBE1000088D804CEB11BD03A712E7EA2AE96
+ 33F9B8765465912E6B4222C64798AC51DE2E09BA4F9A46944256812ACA99A2B08F6AF9
+ 205721C227637EC4DE5D4C001D126ED00CB4D8698F1B45E78079187425AF3086F716C3
+ 4C72787132C472860AA7B1A547EE65085652106CAC1B48A0057C8CFCEE2C210D90CCCC
+ 3629D713C142046CA57BFBB738542E360BE6C1DF072CB425199D3915BBDFB0BE435436
+ 7F7273ED0471E5129D8C691D7C66EBBE3ADEC86246C45CBC14C474401CEEA3A39AFE14
+ 79051A2FE497C4054063508B3F908B00FE797C0A4C60D396B15920537423AECCA2D634
+ 09878173D52B66AA4B6C6CA6020ED63BFD47BA85A196E0C66208C4A61E603B94965642
+ 884A624309BD21903A0F5693167906DB315FB7B735D290C5A63B58CC8892A4C52C5BC6
+ 0F026648B86B6CDE36E7EC68950E224679A2F29FA658B9B3E67560A8E10B5D5A3CB29C
+ 02743E66FC3E7C90B0973AFB2BCFE935A1277723993924225AC63A60B35314544A9542
+ 2D48FFFB3A3927BACB168A72FCABF1664C3E0C91D73A89381AB6BF95A22ADB5C24E971
+ 57A1A1D24BC52FD879E0DE94F420165B79701FB24A7669190CF2840ED7B96E4B088D45
+ A9DB4512117E39B2FB23754175B64471CF95C0480078FD0A8611D19A159303B26063DE
+ A88752C00200C8192A287C27ED707D6B830006D821F9C26F0501F85651866C0CAEA481
+ C7CE59D1FD04548E15C565C95DBE6BD0C32500AE9BC838050A073005F4C76D05B17806
+ 69F4C6B24F27769F76926543753CBF9B53441484120BA0FD1214FA4AD22E56D63BB1D0
+ B004FC155CB5445ADEF258517D393894A4235221359789C06B649FDACB8D290B81EF82
+ C7987638F42603C9B85C3613166591D384524485C07FC0C3DA957A22910743105B13E2
+ 2BDC9989988192FF537B294D59601B97A21810051D580F1FCA453C240ED198F6D3A6F1
+ 85511CA99029859B5C17240EA443792533B6F63750A0336D1A1166FD29B7669999A025
+ B938C304080C1D8B784AAE4703AE2459F7815F8EB4083B69B83276D54826E00A690C82
+ 709423549634CC02F0429126B5CFFD29946752B122525C6610F4A3914BAFC5E0CBB165
+ 07158FA5AC29463744F166A5C105C646399455682E8114F78208CBCC951C94B986BA20
+ 690710466547C70B35687FC6047F79C78715CB533C31040C8E34C95C4DB220F10A8EF6
+ CBCA6B0B5B7704339B430C0530DAEB37CD17C96D3821FDD331C001788A9068E913B1A6
+ 97549D1E32C5D72215365CC9B4C59DC8093EE3482AD0C29EF19341214C50419408B240
+ 3E4830066D1009D55B14D569F65733D0DF5362030A424A5ABCF25C268CB087591AD8DA
+ 4C6B8A80F11D14552671D71183383520152D2C44B3C76B3C875D5FC432BB46A7CE5833
+ E91928AD55D30D7789718364BB43900C98FEE5315C8035DEB94387265CC4EC48927158
+ 077125673CBB649E82B890A16E1E5025E598DD544510D5C133F7C0036E665AC2A5951C
+ 7A75299777EB8A8C44ABCA15339DE0388320067394321ADCC346C49926487CBB2D9B0D
+ 130C53B1471D7A939FE1C323A62C1325690A5866702182F98F550AFD0A5551A2D01AC7
+ E66038AD4E7682D642D4EA020939A7FC0E30FF228AADFF935F54CB02BB03D7C10A001E
+ 81ED1151DDBC77E912297D7F922E255A5AEF979172B218D6CB365222EDCD6852A30ADE
+ F0CAE5C0C7783493E7A9530FFCB7A490A69735ACB86563AF000C89B922D39F6C1F638A
+ F1F0BA5E7B11961EB7FE8B631EB38AD60F2C09FACAB473A71AC391527C502BEE27B111
+ 15F9CA1869F6033A97590D984100E540AB9AC2744F921DE2C3D2A1B9CC58231B755C27
+ 0BC29242C9693493D88701447AC50011374F8E87A1313415E512D77192AA2D084F65C6
+ 900E72D41D8826B7CB84C26720685C53F5A47FE0220CBE2CA95C827178CC677D109874
+ 1C767E55BF52B92D5152029EB30D83CC28ADB7E774B06D64A4C0E7542451188B482778
+ 864ABEAC0645B07993F98A202642A59940AFE5161C0C535DEE6386AFC3AA98769B0D09
+ 27FCB85BB7951B5F76354570B24C93A1B277771FAB0C8ECB9326B070C5124C946B3E53
+ A669FC46FEED668CF2955C87974C0429BCCCC6A9C040B8A93CE49E40D4C607CB269087
+ 742B4D428819E434C41749708154AE8CB5C1C385B60C509008A8B6F15AB7FC5BD20FB7
+ 04939BEE164A180BCD2C0A901FA9F30356336576926E24E3516948A72227672594EEA7
+ 7AEE9037C525E6180138B80E2CA84C2BEEF3319A65284D35117FA4853E2E6DC7F2EADF
+ D9351CFC435F23FA9D2C91DD9EF3F8ABDB7784586949C248606273835C099D53A#)))
diff --git a/tests/openpgp/privkeys/8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859.key b/tests/openpgp/privkeys/8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859.key
new file mode 100644
index 000000000..8a047886b
--- /dev/null
+++ b/tests/openpgp/privkeys/8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859.key
@@ -0,0 +1,5 @@
+Created: 20240419T125051
+Key: (private-key (ecc (curve X448)(q #5E42BC08BE62F4D740196FC1888D18F1
+ D1BD6D21DAC63C7265BE2897F1C2CE5E9E2140AA3B65620FE0EA2FB443952821AD0596
+ 7A6D32D849#)(d #28FCD007DA2A8D37E94628291FD0BDCFE06F07D1586A1FEF914A12
+ 092896727F260F49B6A80081A89603F10FF9B40719BF16D20F2E5DA6D2#)))
diff --git a/tests/openpgp/privkeys/A1598F57316F7FEC3F946895E35A7D2EAE8D3A13.key b/tests/openpgp/privkeys/A1598F57316F7FEC3F946895E35A7D2EAE8D3A13.key
new file mode 100644
index 000000000..6a86fe240
--- /dev/null
+++ b/tests/openpgp/privkeys/A1598F57316F7FEC3F946895E35A7D2EAE8D3A13.key
@@ -0,0 +1,137 @@
+Created: 20240419T125051
+Key: (private-key (kyber1024 (p #76E799415B04C5B048D8671C59439A7134263C
+ 18127971232947AA66D66DF13476E0AC5F81736316D38E8FC94E07144B32856A2F7725
+ EA1C93A6D4C2668008F77BC41B16B479F313542ACAD6F248A340B9790880B3875D4777
+ 6692EA64BC939F880482FE3A981FC88BB9CA36E339BD5175167E73948122AEF0555CFE
+ 736FA7FC4A36C4634B4502ADB454DA04584C8B1C8F531194A74B15391BBCCA8EDA75BA
+ C52A75ED11AA3832C7AC00D07A6C6F2238648A7056E3A11BDEA47DFBDB5C6DC55A33E2
+ AC5D3826230993BCF960E2D82FAE7273518C1F4B21B8DD3175496987FC1768D8DA9778
+ 6C219C054507636901656AE8F62A64B73C179CA5F55C9CD55B54452228408001AADA10
+ 6A3C22F320B590C693B1891D82666BA04101810B140B52B20B783C0CA8B875958D75DC
+ 815805AE85B53501A683E5EB95DB4B61C29ABACF2B31320CB60200648BBA82CCC0A92C
+ 790583E12CC65643299C544A2219879C512783559851616AD7371C7A21A72BAE6D618A
+ 65BA32B8C24FEEF25191C5C85E08B4B854AA99A5A386058B9E56C4CB92906EBC811638
+ 4ADF96673CC22063462D34D679FDFA632109B9917B2485E8BE80D8025CEA2AA61488B8
+ 82B66811B24457C0B11BBD4759625EA290EC67B10C438D5112CDA20993B67C4AE71573
+ 235023DC1BAB2D477F7EE882677A3FC7325349854C933AB863E36EF18AAC9A0376B89B
+ 3764058D7039A8987162C5B2A698B98A4BE4842C065520E253EFDCC0A460BBC1E753B3
+ 3A77FE47837CB9B106B5B3737C5D1030CB8F27864E57C54D424A5C69B745E718D2871B
+ 9A9B7B5C73221FFC8879F4B23211A08A23CE33381EDB972E0BB710B9DC81D6B78BB4EC
+ 2D856AB14372C32C35BD4188B650F97B954A97736892D2B487F8756821FB308A7B1456
+ B1A0C48090DD311AF6AC16FAC8CC4EF4BDFDD47C79E9829ABA0D91F82FE474B58D0049
+ A8D15C0ED7ACF154CCBAF398E749B67FFCA176003E72FB00D33CC9E55C18C94C8B7C53
+ 48267B9053FA89993AA693DC9291DC9F81E0422FD2BD19029D9BDB88C812A9953C9C9C
+ B44BA1E6B8470715BE365560B0841428AB11FBA77B9A5A9C442FE35B49481BBEC24657
+ F4D20B36B466D1E85C29F2BFD2C784A3C661133C5B8578030D219F6AA9B62E1A6C60C3
+ 093B63C8A3484DFFC32847B305F0889411D965EDF132F3B22106276288B44AA91019E6
+ C161A472698E380AFC6635497890902CCF937340F73A4A79692700DBC65A4103D47810
+ 3C6032668773C91AB63F8729CB897D2B4BAB14A5B6B669BC82162EBB33C752883F14E8
+ 2122333B8A6C6C8C4C81610500F5E44F93F389BDD5C5F51AB8A18BCDE75B082E12A58F
+ 92482FF82E37A26849851C7B933218512794A3649A38B5881035594486B8B7C378D69A
+ FF18C62C64A27CB740ED1AA84216A796B874DE7CC0D9A4C230A35254829A8745CF523A
+ 59B5B873B2F03A16CA466876B08781167035863EBC2456C04DC37C8409373CB83ACBDE
+ DC85B41BADC1831A15A1405D503BE8ECA6B79964A4D186C8D9AC57366BB2A2300CF7A8
+ 1B4C8188AB0355E46F28D60416E509F6F034C58056DD27A0A0ABB6A8AB9AEAB8047E57
+ 60F7FC3B870A82FF22B408B647A7B497CE555BC632ADDFD1A1E547A06E581C54901695
+ 7948F8A745EAC57DBDDAADDA376DD2C643F30366A7F913FFC89A3479C96A4725B8D58F
+ F4580B3BF5134E027DBA4C6E0F8C5C6E8270D7E1AF10AC7C0EB4A52FB8A0415A9AFE79
+ 668F629BB140282781892E88037A84662EEB079A6B1927167DD27909C5188C9AAC1DE3
+ 37C555807665C57C8F829DBB3BB74899A4AF831FB6316122989772A57ADE899F990407
+ F7FCBC6704670238626A6249AD8665C8AA9302786904EA8ADBD21893246F817AAD0193
+ 35E478B257975D39C60DF7AA080F26B37014ABA53C8E4F205BCD049512197200CA5FFF
+ 8B243E5546FB4A17250376238CB8B3535FB10B773A6CA6179936490ACB8280571A7C35
+ 656CA35352279EDA55CD12816BA51C2AA072C2A628AF24CCA8BABD193757DD16615B34
+ 09FDF045390C4346792A0D8B2399697BC485B9D8510316C9AF66B6A08E74B1301186E9
+ 9ABA3ABB5DB68BC8172C8DF677B78FA60F247B45D3B14D39164592F53DE39AB6B4A96C
+ 7949964F204C919A576B515F4BF9BB6ABFCE4DD7B5969DB8ECE3DA32CE298B573793F3
+ E45248B0CBCFF67D79#)(s #1A8B03F87A2BAACB60D8261B32AC2742BB83BA4014C7E2
+ 6847613CF7A7BD44D1C428F4009AE4C42F12CF39E283A5DA2632B649F259ACAD157DFE
+ 9086B6F0CE919B6490499597AB809EBBA71DD55D6FCC61DF5067C78C8D1907745C703D
+ 1BE25F0E18057A496FB476C47C8C01CD656619C7213D61223A124B15D38B27F0686907
+ 0D0D47476A756FE629C2F516A9F527044BA5931FB8B2EC23A415B9CD510C1233270A7E
+ C209F245CA82C93B7BF40C2CBB20213A8650EA6934D910B1D80BCCFC9B169704AF7ACA
+ 2038205CE193C931514865BF5629A901E0BFEFE78FC8657A16999AD4F14AB51648F329
+ 08E8FA9A22A35C936888E03581588ABCAF016A1A920BFF394EBD3840EA47731E677E9D
+ E77CF30701EB805C1A91A5BE531BD400022D19C350E809288A9F6542C5EF391C61C48B
+ CED9079E691490E92EB60BA7088720873755B997A2A62A1665876CF91B3E4682200993
+ 57F94A8B035699D19B64EB480E41074FC011A64508226C7A21B4F2348FE8151A47912B
+ E96454541CD54A3CE5D74C92643E4210C306F6A10CC890EE5A7575F0853123693211B6
+ CE8CB16EB05BDE0933B850270C86B01B026B4F11A6DB12CFE06C79809A8F5357B2E749
+ 530D584A76F13E3FEA98003390B56885B43C1BEF82A4E87AB07B19B47689B8D6C4ADAE
+ 2178886517BCC1C0642A944C426AE6C8540331B73D524DA449BA91F0CBD2558175A9CD
+ 693B3DC8545D68B97BD3D212D395B1BC4437D40C2AEB5013B829AA40EA7913737730B7
+ 252C266E5AB011928BA68D681012BA066257A5DF8C41392970258B9FCDEB133D6C1A71
+ DC2C23B52FB6BB8267951C25621ED620CF929517B6F3B233331E80365FAA06978247BC
+ 01573CFD592F39932B4076BFCFC23F28F2892724761DC02FFD722D795285653AC0B6D0
+ 6341B45B980092BAAB270AF4AAAA8AAEFE0896B19B5190A6108205B999199ABFB1BD0C
+ 15A53CA723BE569BE3912E4C552973A45A356CC88208689C7847D4370456A59D5CB7B6
+ 50E8A0C41141C3EC0999E31ED5E7A938C0031A112218E715EA387DA1F327D93B4134F8
+ 0C32C960D211CAB173CFF3029E9A10A222985131398C528C6D2B644464590DCAB105B1
+ BABAB97C33D2E77C41D417022940A31A72CA30AD9596AB998C5B26152A98685E991738
+ E9A9228D1C859C899D76AA1F0C68568C83897751527B462F8842225C118B786CAE710A
+ 57AFB16577B7BDBBF19CD8B74C035162C5C6967712CF46EC8CE3CC817CBBB5D7B11F6C
+ 645A2B784A5E226CE2D522236C74CBC5A9CFE26CE4ACB08300826589B8F9B870582390
+ 9E2930B5945342DCB592B56D80C13B54C3B1F84BA58E66C102A639E6B1A3C7B4202A6A
+ 98A1F82668F6C4D61BCF96B3AB8FB132E67A251407207BB467BFB02FD90B04C54809E1
+ 12B347BBACFBBC5FA2D16627499AB8C8439D89299EA4C363F46474F8B568511ED3A614
+ 797015BC4C25E41B3C3A674CE9A6241FDA07A9027608BB0248FA20671A8E6CF461A989
+ 24F314CA7F37C03D397B2E760C9C101717E83064F198ED52098DC7B18D08CD06925C26
+ 039536B57E82902CD6E33AEA0A65231A58BBB694FCC76D9985486938BDC8E61244114B
+ 7CE7C0D466907AF309FFF09A89203755843B4EB89FC7F5C357321BC79B0528941682BC
+ 2213CC8408552368158C73448EE71C67A40BC6B76251FE860AE08C7922E3CADDBC64F1
+ B56000075293970906D848AF430F4B9186A4A50EE2505BEE0084F0A2923FF4A7938009
+ 7670B422D2A10D083312329FB24B3F256B37DB05BB10FC464EC1BE48B4A61CE98D8FE7
+ 667EFB10CBBB5300F3944CFA403C03CF83023640895A8BD859A4DAA9036450A79775D7
+ F83B37CBAAB2454CC3158E8A5152F9E816DACC4693B34FBF238AFA43724637C83EDAAA
+ 608C36DC15026255CB0B8B4A17284086052C9B449B80D154EDC07A16D3AA0E2B9177F1
+ 7D96AA6162D47828400939C22CCB019293528E06E947A8D8C7BB20A0BBA277B45AB677
+ 0155CB14C0016B4E64E43F91E8CE660BAECD371512B5A29ED3B759F9C3813314241950
+ BF9862079011F6B233C2897C75C63DFFE418759105D4CA1D5470389FC2C0B623412CD4
+ A208530A1FDCB743717980926AAA928A55498C1ED4C183F37E26777F405CA949237BD9
+ 793A025A8A27773976E799415B04C5B048D8671C59439A7134263C18127971232947AA
+ 66D66DF13476E0AC5F81736316D38E8FC94E07144B32856A2F7725EA1C93A6D4C26680
+ 08F77BC41B16B479F313542ACAD6F248A340B9790880B3875D47776692EA64BC939F88
+ 0482FE3A981FC88BB9CA36E339BD5175167E73948122AEF0555CFE736FA7FC4A36C463
+ 4B4502ADB454DA04584C8B1C8F531194A74B15391BBCCA8EDA75BAC52A75ED11AA3832
+ C7AC00D07A6C6F2238648A7056E3A11BDEA47DFBDB5C6DC55A33E2AC5D3826230993BC
+ F960E2D82FAE7273518C1F4B21B8DD3175496987FC1768D8DA97786C219C0545076369
+ 01656AE8F62A64B73C179CA5F55C9CD55B54452228408001AADA106A3C22F320B590C6
+ 93B1891D82666BA04101810B140B52B20B783C0CA8B875958D75DC815805AE85B53501
+ A683E5EB95DB4B61C29ABACF2B31320CB60200648BBA82CCC0A92C790583E12CC65643
+ 299C544A2219879C512783559851616AD7371C7A21A72BAE6D618A65BA32B8C24FEEF2
+ 5191C5C85E08B4B854AA99A5A386058B9E56C4CB92906EBC8116384ADF96673CC22063
+ 462D34D679FDFA632109B9917B2485E8BE80D8025CEA2AA61488B882B66811B24457C0
+ B11BBD4759625EA290EC67B10C438D5112CDA20993B67C4AE71573235023DC1BAB2D47
+ 7F7EE882677A3FC7325349854C933AB863E36EF18AAC9A0376B89B3764058D7039A898
+ 7162C5B2A698B98A4BE4842C065520E253EFDCC0A460BBC1E753B33A77FE47837CB9B1
+ 06B5B3737C5D1030CB8F27864E57C54D424A5C69B745E718D2871B9A9B7B5C73221FFC
+ 8879F4B23211A08A23CE33381EDB972E0BB710B9DC81D6B78BB4EC2D856AB14372C32C
+ 35BD4188B650F97B954A97736892D2B487F8756821FB308A7B1456B1A0C48090DD311A
+ F6AC16FAC8CC4EF4BDFDD47C79E9829ABA0D91F82FE474B58D0049A8D15C0ED7ACF154
+ CCBAF398E749B67FFCA176003E72FB00D33CC9E55C18C94C8B7C5348267B9053FA8999
+ 3AA693DC9291DC9F81E0422FD2BD19029D9BDB88C812A9953C9C9CB44BA1E6B8470715
+ BE365560B0841428AB11FBA77B9A5A9C442FE35B49481BBEC24657F4D20B36B466D1E8
+ 5C29F2BFD2C784A3C661133C5B8578030D219F6AA9B62E1A6C60C3093B63C8A3484DFF
+ C32847B305F0889411D965EDF132F3B22106276288B44AA91019E6C161A472698E380A
+ FC6635497890902CCF937340F73A4A79692700DBC65A4103D478103C6032668773C91A
+ B63F8729CB897D2B4BAB14A5B6B669BC82162EBB33C752883F14E82122333B8A6C6C8C
+ 4C81610500F5E44F93F389BDD5C5F51AB8A18BCDE75B082E12A58F92482FF82E37A268
+ 49851C7B933218512794A3649A38B5881035594486B8B7C378D69AFF18C62C64A27CB7
+ 40ED1AA84216A796B874DE7CC0D9A4C230A35254829A8745CF523A59B5B873B2F03A16
+ CA466876B08781167035863EBC2456C04DC37C8409373CB83ACBDEDC85B41BADC1831A
+ 15A1405D503BE8ECA6B79964A4D186C8D9AC57366BB2A2300CF7A81B4C8188AB0355E4
+ 6F28D60416E509F6F034C58056DD27A0A0ABB6A8AB9AEAB8047E5760F7FC3B870A82FF
+ 22B408B647A7B497CE555BC632ADDFD1A1E547A06E581C549016957948F8A745EAC57D
+ BDDAADDA376DD2C643F30366A7F913FFC89A3479C96A4725B8D58FF4580B3BF5134E02
+ 7DBA4C6E0F8C5C6E8270D7E1AF10AC7C0EB4A52FB8A0415A9AFE79668F629BB1402827
+ 81892E88037A84662EEB079A6B1927167DD27909C5188C9AAC1DE337C555807665C57C
+ 8F829DBB3BB74899A4AF831FB6316122989772A57ADE899F990407F7FCBC6704670238
+ 626A6249AD8665C8AA9302786904EA8ADBD21893246F817AAD019335E478B257975D39
+ C60DF7AA080F26B37014ABA53C8E4F205BCD049512197200CA5FFF8B243E5546FB4A17
+ 250376238CB8B3535FB10B773A6CA6179936490ACB8280571A7C35656CA35352279EDA
+ 55CD12816BA51C2AA072C2A628AF24CCA8BABD193757DD16615B3409FDF045390C4346
+ 792A0D8B2399697BC485B9D8510316C9AF66B6A08E74B1301186E99ABA3ABB5DB68BC8
+ 172C8DF677B78FA60F247B45D3B14D39164592F53DE39AB6B4A96C7949964F204C919A
+ 576B515F4BF9BB6ABFCE4DD7B5969DB8ECE3DA32CE298B573793F3E45248B0CBCFF67D
+ 7994C02B6A67177C09FD8A3F3F2630D907A48ABB59A77AC1F75F344ED2846963561053
+ B1E9F15F14583281F621DD991A24EA473FDA7C63FE59C80F5F49708EE520#)))
diff --git a/tests/openpgp/privkeys/A1ABFD89944870D04039D40C218EE127254AEEE9.key b/tests/openpgp/privkeys/A1ABFD89944870D04039D40C218EE127254AEEE9.key
new file mode 100644
index 000000000..fd50945f6
--- /dev/null
+++ b/tests/openpgp/privkeys/A1ABFD89944870D04039D40C218EE127254AEEE9.key
@@ -0,0 +1,8 @@
+Created: 20240423T151629
+Key: (private-key (ecc (curve brainpoolP512r1)(q
+ #04681C6E8D70DEF5DED6097972643ECEA2538EA6CA3F9F87DC1E4B27D37CFDA3296A
+ F129D5EEB331D836EC7A215CC1CF4103184D21F7AA184C1EE9C338BAB19147438F4C30
+ 705E610E142C29F712C913D01132D862F5B65D7FADE1E145B4D9FB08E8B281DA94139D
+ 11D3FDC0A55B85D1AFF0DDFE052779115A72DE03BB098E03DD#)(d
+ #32C7C4790D709ADC404D85A791FB119C327FA8E88F835BE8C4076E250ABAD2858237
+ 6496ACC61573108A9518789BCF13FA7D33D6D4324D962895F6554DD6A129#)))
diff --git a/tests/openpgp/privkeys/A87B85D88DB8B2B5A62A9958C8F2878F49605D09.key b/tests/openpgp/privkeys/A87B85D88DB8B2B5A62A9958C8F2878F49605D09.key
new file mode 100644
index 000000000..b3898c99d
--- /dev/null
+++ b/tests/openpgp/privkeys/A87B85D88DB8B2B5A62A9958C8F2878F49605D09.key
@@ -0,0 +1,5 @@
+Created: 20240423T121404
+Key: (private-key (ecc (curve brainpoolP256r1)(q
+ #0431801CBE11209D65705872CDBED8E8718ADEBC8F4F44D69A71244F883EFFF54654
+ 7B31DCC0BC0D1BF5DE953DBE11A753DC3B9BD39DB955DCA30C1F2535F59CB4#)(d
+ #6418FBDFBCE6B9389971AF84468050995EC79FBCF42BE6AB5A5F96BF4A8000BE#)))
diff --git a/tests/openpgp/privkeys/D54E9B75C3541D95C45E430DAC9645E9FB62C668.key b/tests/openpgp/privkeys/D54E9B75C3541D95C45E430DAC9645E9FB62C668.key
new file mode 100644
index 000000000..835045265
--- /dev/null
+++ b/tests/openpgp/privkeys/D54E9B75C3541D95C45E430DAC9645E9FB62C668.key
@@ -0,0 +1,5 @@
+Created: 20240423T121447
+Key: (private-key (ecc (curve brainpoolP256r1)(q
+ #049A80F4C7499AE14056F51D49D9899D7B73DB1BE7EE62EEEAA477C7A1F96F55F118
+ CC0C0F89FF23E636C4F27AC51F6C571802606689A9FD9940D717EEDB0702ED#)(d
+ #409D4A1B8E6B0C8CB466BCD8D6C0B1D832A73FD8241C6EA65F01EA2D3BFFE1A4#)))
diff --git a/tests/openpgp/privkeys/DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93.key b/tests/openpgp/privkeys/DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93.key
new file mode 100644
index 000000000..7170d0ff2
--- /dev/null
+++ b/tests/openpgp/privkeys/DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93.key
@@ -0,0 +1,5 @@
+Created: 20240419T124916
+Key: (private-key (ecc (curve Ed25519)(flags eddsa)(q
+ #405D1A8C6FB60828BEF043119A1DF97E3A6A408CF3E0CD56F74F9522A7BAACD51C#)
+ (d #ACF7F220B124A7C726F40DE83D07EFB9165814E9A42EFD9ECB53B27401D85BB3#)
+ ))
diff --git a/tests/openpgp/privkeys/EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A.key b/tests/openpgp/privkeys/EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A.key
new file mode 100644
index 000000000..bc1e024a4
--- /dev/null
+++ b/tests/openpgp/privkeys/EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A.key
@@ -0,0 +1,104 @@
+Created: 20240423T121447
+Key: (private-key (kyber768 (p #46A3CE8B663A26CB4AFC5A5ED35A405AD3B3A66
+ B47A859A458AC6F1BF3518575209D91CD2311777DEA1A14D196E50388AC7A2E2599221
+ FF2697F5129FE6A5FC6B89AB1667AAD7179A99111CBD874E3D18699DBC03A601E82E16
+ 0547C2AA2962972B5AFD1EA74ECE3C67599693448760CB383FF044F8F716C37493865B
+ 419872B60173360AC74CCC31035C23A380D7660B536105ABA2CB2598F2434631C733E4
+ 952398A182C799C732BE69FBCC94796781AFA137D27080FCE314B9590A8F48261A3FC7
+ CB94A2094535E9712A29E02BA50C3BDA4D8B76F68BEE95907BB72A6913829245C7B9EB
+ C86778994FFC183EB423B9C48AF1A3A149621868CB984A67CAA8A8987DA6983337418E
+ 50217F0780C595BA39845A724A0400DA35FD0E308D2250F83723B009D41818C38156B9
+ 6C5C6ACDBD592BED95D67E939486A16565005EF105D55D7983E534F1E8767814B5C141
+ 867A0AC7CBE297CD39885BF837C9602BFD4344158F304B1BBC91F832B291214AAA0BE4
+ 7661168F16D9229A1A4B53B0BEC7C657729D0D6365A51C4A7919CC49B7D88DA619A5B4
+ 0FB082A33C26BE6100C5D183D2A72634AC46D314825B190B4AAF27573844E0CCCB21C6
+ 69513A5279AC0B5F1588D48C01167478E940BC62247A772065E80F339B708651740B8D
+ B2955F3BA78F50C2E5C645F995BCBCCFB466E0390DF2A595B69193FF3ADF1422D41A08
+ 33940355DDC48DD93960B0A4D9681A5BD54234DB94B24C44B2EFC9A90731978B9B4E2D
+ 12E4C253A58A947651658FA949A267323A79C4875488A7F9C0D22EB743EF6A39EE30E3
+ 423B6911677827BC3C2001154027381843E4C58B0B43B59EF317DEC146A27817664990
+ 2DC68245406C4835A56BB0174A30C50CD59598F873A979A6F15612B5044798C1AAEEB5
+ 40883A33766BB274A1B390BCB8AFC0C9C11A14A4D5568F237A9EC3232AA782BEFE6BBF
+ 2F8385B5C5E5133232907BAF963789F24B3EE989DC78C3AD0F59045B7ACF66340FDA65
+ 5442A19AADA6697175013FB0668C45153B61EF722C2CBF571AE3810801A3B1567CD797
+ 49C33955A4B413DCC989F24EA4AAFE80A2C3A24925574E422C11BA8735E9C96E9929DE
+ 9D263DA7ACD08A80A5BACA156C11161B3A7D0C56BADE20385C51A30941C16D4849EFCC
+ 89D479ADC6A9C06FC383AD900BA03750EC3BA81F97916D90FBC6582DE92CDF3E7C7DF5
+ C9621CA99CCA47D72A171C8C945E6891E421C87CAF523776874A3C441C2A824704ACDC
+ 5D384F65958D47A46DEB079A1B895F0D37D9CF36F6622A1D19109FB1933B52B4D9D271
+ 83496547B1794CDC675437C90C0C36C38F12A23D70B6D83540CC395BBA1B1885A3B8EB
+ 582D0A5C294E0048E7A94BC1A2E17F89DA710887C3B8241DB4D0891564D939932C047F
+ B28A2180B878F5BC142EB152E49411C8C1AB33A568E401BB827AD4E7B7B04A89236C40
+ 0B233006A89A77CC362F5F63D57715A85EC08BB175348FA305876CD3A282547A3502FD
+ 14AB85004BEB50EB6C8B2F5E217FF086C86473F1B34672FB9CBFA63BE1DB8A13DC76A9
+ CB30C6FEA0A25C828D8A6B6FB725569B888692B46DAEC53332A9AF9B61B1FC92851A02
+ 33384A9735B86F076A05F44C97DA491C69AAD8622CEC7530C0BD13CA98B91E58BC1229
+ 7CA2C2B37CDCE455EB5#)(s #0679BE74A86EB9B647B637B40EE3A26C4B3EA6D57024B
+ 56827C02017071E98052BCF0A4CA78036A672849D39975C06173FDAC73E6A732ACCB2E
+ FF887D77BA3D8E56A34643438A92ABCA1332F8C01AAB537AD721AD8E46DBB6742FE7C6
+ 9BDDA9D6FC3139081839AD702979018E41C60BCA2650C682DD003BD05C8AE3622761EB
+ 775BFCB89EEC67A12211FC67700DD0C62D499C0E75A7084E618F4B141461ACA2387380
+ 98947E8EBCDC86440426A8DB0F5737724218E75084E5C0A8CC96BFD842FEE6712B12B9
+ A1EF5A506577C7DDC1CD7905F7A853588452CD4A17707546DB6039C90AB82FA17026AD
+ B035C329AF7309BC560B3706919A2770337E008C14936F30900FCF541FAE7050A49A6B
+ CA80DDF0695D3A885EBD1AAA80009C9F06D72D10FAD4A1A8908832E151B668575678CC
+ FB67A4A34B6489CE3CC5865A5AD290853B12668401076A6355837359C27229B748E400
+ 2BC24506E42DA05DE5562107138DDBC13B99421C784CACA035766C040C9B8A5925666A
+ C218E7E1B300D3B5CC0D826F9E36871C860E7497804652F12D65BC2610FD5A3BD6AC4B
+ B0C38262C719EF66868CD4245F67C623CD5B7FAD28674E21564826A0D5B95E8125B03C
+ 9C99EB4ADD7B74AC16BC1CCF613453143F935A0AB34222FB6C079A4C372AC1632770FA
+ 8B30FA9B6399DCBAFA67723C760378DB081FCD8C825B18F45721550FBB86E747C1E7B0
+ 2A68A3796266C11FC3444D38CBE0B72D9D885C5C77F0AE48A038B7EE2CA97B1C126333
+ A9130DA1BDB94C6317660655C0F09D8C130A72ACA784176D4ADE57161B6801333A11C3
+ E119CA2757BBEB08B5112AF06965452C1CD797165E51209BF04C6F90B3373F2CC9E02B
+ 1A1594D4895B4C18C4774D222C0505BABEA18216642E7B7CBA796ACBC5C82354152ECB
+ 765B2D56F10E925F57BC45ED1421638AF87B8C125A74473B78D026295F341315D7A1A6
+ B1B2EA946817222338E8342C093CD5FC393F1A92931C92678766D2A465E5A4C5A90C35
+ 758C20BE0AAB6A8E0752250607DCB0603018CF4F07390AA328CF2C8364AA63FB25C815
+ 8A37A69716E743FE47303B498968E095226E59A24E4761676060504C5B0ABB5F0548DB
+ 3650854FB1AB66061426C3DBB177EFB1C0ADED3C142405C0CF7756A50776EBB76D4882
+ 44AD008ABB3766594071C38A835CC477C01A169E0C6AFA43AB81037A6E9606CB234590
+ 77DA8CC72F7C98732A56D557201B2C46E29460C37A3BD808C0E7BD346951292BFB51BE
+ 81C3A384B3277912CCCB521CB0BC81C76565CA65DF354680A1A243915655CA311374C4
+ E998977DB488A79B63864C440C8EC0E59F9C169A181AC48CCED41722FBC16D8DC22179
+ C3988237EF7E75467DC5AAC434AD6498690F28407A46015491BD0EC779AB079A9C0194
+ 5C0B3DF39036F3A0BFE80CB1DF898B24A1354B0BE35560EA0DBB12C30935BF047ACF36
+ 1CAC11B8D3C1D1C624B16F76EC3A80783C3742E195B031943C9A9A21702399BF9A4A25
+ 848A8951DFB047FCBC4ADBDD79C73EC27F6348281072BD670831BA5B414945CC12423F
+ 2D5C2CF34C9F4C841AD620B665623CD74CCFC162E0AD04BD0646F581C372EBA355DA8A
+ 64CA92BE1056B2CFA7B46A3CE8B663A26CB4AFC5A5ED35A405AD3B3A66B47A859A458A
+ C6F1BF3518575209D91CD2311777DEA1A14D196E50388AC7A2E2599221FF2697F5129F
+ E6A5FC6B89AB1667AAD7179A99111CBD874E3D18699DBC03A601E82E160547C2AA2962
+ 972B5AFD1EA74ECE3C67599693448760CB383FF044F8F716C37493865B419872B60173
+ 360AC74CCC31035C23A380D7660B536105ABA2CB2598F2434631C733E4952398A182C7
+ 99C732BE69FBCC94796781AFA137D27080FCE314B9590A8F48261A3FC7CB94A2094535
+ E9712A29E02BA50C3BDA4D8B76F68BEE95907BB72A6913829245C7B9EBC86778994FFC
+ 183EB423B9C48AF1A3A149621868CB984A67CAA8A8987DA6983337418E50217F0780C5
+ 95BA39845A724A0400DA35FD0E308D2250F83723B009D41818C38156B96C5C6ACDBD59
+ 2BED95D67E939486A16565005EF105D55D7983E534F1E8767814B5C141867A0AC7CBE2
+ 97CD39885BF837C9602BFD4344158F304B1BBC91F832B291214AAA0BE47661168F16D9
+ 229A1A4B53B0BEC7C657729D0D6365A51C4A7919CC49B7D88DA619A5B40FB082A33C26
+ BE6100C5D183D2A72634AC46D314825B190B4AAF27573844E0CCCB21C669513A5279AC
+ 0B5F1588D48C01167478E940BC62247A772065E80F339B708651740B8DB2955F3BA78F
+ 50C2E5C645F995BCBCCFB466E0390DF2A595B69193FF3ADF1422D41A0833940355DDC4
+ 8DD93960B0A4D9681A5BD54234DB94B24C44B2EFC9A90731978B9B4E2D12E4C253A58A
+ 947651658FA949A267323A79C4875488A7F9C0D22EB743EF6A39EE30E3423B69116778
+ 27BC3C2001154027381843E4C58B0B43B59EF317DEC146A278176649902DC68245406C
+ 4835A56BB0174A30C50CD59598F873A979A6F15612B5044798C1AAEEB540883A33766B
+ B274A1B390BCB8AFC0C9C11A14A4D5568F237A9EC3232AA782BEFE6BBF2F8385B5C5E5
+ 133232907BAF963789F24B3EE989DC78C3AD0F59045B7ACF66340FDA655442A19AADA6
+ 697175013FB0668C45153B61EF722C2CBF571AE3810801A3B1567CD79749C33955A4B4
+ 13DCC989F24EA4AAFE80A2C3A24925574E422C11BA8735E9C96E9929DE9D263DA7ACD0
+ 8A80A5BACA156C11161B3A7D0C56BADE20385C51A30941C16D4849EFCC89D479ADC6A9
+ C06FC383AD900BA03750EC3BA81F97916D90FBC6582DE92CDF3E7C7DF5C9621CA99CCA
+ 47D72A171C8C945E6891E421C87CAF523776874A3C441C2A824704ACDC5D384F65958D
+ 47A46DEB079A1B895F0D37D9CF36F6622A1D19109FB1933B52B4D9D27183496547B179
+ 4CDC675437C90C0C36C38F12A23D70B6D83540CC395BBA1B1885A3B8EB582D0A5C294E
+ 0048E7A94BC1A2E17F89DA710887C3B8241DB4D0891564D939932C047FB28A2180B878
+ F5BC142EB152E49411C8C1AB33A568E401BB827AD4E7B7B04A89236C400B233006A89A
+ 77CC362F5F63D57715A85EC08BB175348FA305876CD3A282547A3502FD14AB85004BEB
+ 50EB6C8B2F5E217FF086C86473F1B34672FB9CBFA63BE1DB8A13DC76A9CB30C6FEA0A2
+ 5C828D8A6B6FB725569B888692B46DAEC53332A9AF9B61B1FC92851A0233384A9735B8
+ 6F076A05F44C97DA491C69AAD8622CEC7530C0BD13CA98B91E58BC12297CA2C2B37CDC
+ E455EB5F45B962B404EC9D9ADA018C9243AA1C5DB1F39D31391BF62AB800F85D6BAB5C
+ 503A078F0E1B47A9475FF068E159DED6A0D5C8291D6054524B0A8064D9DA18A39#)))
diff --git a/tests/openpgp/privkeys/F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59.key b/tests/openpgp/privkeys/F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59.key
new file mode 100644
index 000000000..7f51be489
--- /dev/null
+++ b/tests/openpgp/privkeys/F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59.key
@@ -0,0 +1,5 @@
+Created: 20240419T125029
+Key: (private-key (ecc (curve Ed25519)(flags eddsa)(q
+ #40F0C11FA63250E08BD9D0E766417EA5F4E4366B7D60692A442F71E37CFB19EAE4#)
+ (d #A2319B2E7599FD1AA04578C01EFAECC82B1EDFA8FAB85928244BABB0733653B0#)
+ ))
diff --git a/tests/openpgp/samplekeys/README b/tests/openpgp/samplekeys/README
index 682dfc06e..88361ee30 100644
--- a/tests/openpgp/samplekeys/README
+++ b/tests/openpgp/samplekeys/README
@@ -23,10 +23,15 @@ rsa-primary-auth-only.pub.asc rsa2408 primary only, usage: cert,auth
rsa-primary-auth-only.sec.asc Ditto but the secret keyblock.
v5-sample-1-pub.asc A version 5 key (ed25519/cert,sign,v5+cv25519/v5)
v5-sample-1-sec.asc Ditto, but the secret keyblock (unprotected).
+pqc-sample-1.key.asc ky768_cv25519 public key. [*]
+pqc-sample-2.key.asc ky1024_cv448 public key. [*]
+pqc-sample-3.key.asc ky768_bp256 public key. [*]
+pqc-sample-4.key.asc ky1024_bp384 public key. [*]
+pqc-sample-5.key.asc ky1024_bp384 public key. [*]
Notes:
-
+- A [*] marks public keys with their private parts in ../privkeys.
- pgp-desktop-skr.asc is a secret keyblock without the uid and subkey
binding signatures. When exporting a secret key from PGP desktop
such a file is created which is then directly followed by a separate
diff --git a/tests/openpgp/samplekeys/pqc-sample-1.key.asc b/tests/openpgp/samplekeys/pqc-sample-1.key.asc
new file mode 100644
index 000000000..984495514
--- /dev/null
+++ b/tests/openpgp/samplekeys/pqc-sample-1.key.asc
@@ -0,0 +1,46 @@
+sec ed25519 2024-04-19 [SC]
+ 652B01FF34D43EA62C5DC897E47CC8B150A7A02E
+ Keygrip = DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93
+uid [ultimate] pqc-sample-1
+ssb ky768_cv25519 2024-04-19 [E]
+ CF06288CAAAA850A8B5B2927C8C14C7F0A8906AAEA320DE12A0A15F8E8746216
+ Keygrip = 2F4CD0990D56D41A74456668469E3139A7960CD4,
+ 8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Zup3
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/samplekeys/pqc-sample-2.key.asc b/tests/openpgp/samplekeys/pqc-sample-2.key.asc
new file mode 100644
index 000000000..d803e0320
--- /dev/null
+++ b/tests/openpgp/samplekeys/pqc-sample-2.key.asc
@@ -0,0 +1,55 @@
+sec ed25519 2024-04-19 [SC]
+ 6BF41D6AC221F5223C2DEEE320E629089768AD93
+ Keygrip = F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59
+uid [ultimate] pqc-sample-2
+ssb ky1024_cv448 2024-04-19 [E]
+ 2D0F59CAFD12DBD9DF9EFD602D7E8F8C2121A5D1841174346D6C8FE8F9AA7683
+ Keygrip = 8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859,
+ A1598F57316F7FEC3F946895E35A7D2EAE8D3A13
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+lUaDFf52BzCT6VOhK7yR8Ac=
+=MDdc
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/samplekeys/pqc-sample-3.key.asc b/tests/openpgp/samplekeys/pqc-sample-3.key.asc
new file mode 100644
index 000000000..78f9a8f75
--- /dev/null
+++ b/tests/openpgp/samplekeys/pqc-sample-3.key.asc
@@ -0,0 +1,48 @@
+pub brainpoolP256r1 2024-04-23 [SC]
+ 9F7DCCABC11EFE248F48CECD6F6570B33D05BDF8
+ Keygrip = A87B85D88DB8B2B5A62A9958C8F2878F49605D09
+uid pqc-sample-3
+sub ky768_bp256 2024-04-23 [E]
+ B4707EA9BF0FF29F65190D779BE6064181208C59988A80BCD2B2177A9BBDFE22
+ Keygrip = D54E9B75C3541D95C45E430DAC9645E9FB62C668,
+ EAD718DCE3D2F33A20BFC8BA617844DEF3FFAF3A
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+x4ISI2U8yiITrTcSWAKs9A==
+=6QFw
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/samplekeys/pqc-sample-4.key.asc b/tests/openpgp/samplekeys/pqc-sample-4.key.asc
new file mode 100644
index 000000000..e913f78da
--- /dev/null
+++ b/tests/openpgp/samplekeys/pqc-sample-4.key.asc
@@ -0,0 +1,58 @@
+pub brainpoolP384r1 2024-04-23 [SC]
+ A8237D19988A8255E70D2566EC280D0923FB2DF7
+ Keygrip = 702F599E35E6E0BE68E6FDF25D887229D42780F7
+uid pqc-sample-4
+sub ky1024_bp384 2024-04-23 [E]
+ FBCD76AC9908E094D22CAE2564C9CB50EC69AACF0E3AEC91AA115CE43C71DC81
+ Keygrip = 19C87B74004E9839F3D56992B0A9943BF90B56F7,
+ 7C31A4A632A49C4E8B1C8CBA53976ADFF714510F
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+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
+=Ztpi
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/samplekeys/pqc-sample-5.key.asc b/tests/openpgp/samplekeys/pqc-sample-5.key.asc
new file mode 100644
index 000000000..6da585015
--- /dev/null
+++ b/tests/openpgp/samplekeys/pqc-sample-5.key.asc
@@ -0,0 +1,61 @@
+pub brainpoolP512r1 2024-04-23 [SC]
+ 7B3986A550E5DB116054B4B42CBE157D37FDEC1D
+ Keygrip = A1ABFD89944870D04039D40C218EE127254AEEE9
+uid pqc-sample-5
+sub ky1024_bp512 2024-04-23 [E]
+ CA44B5ED43D33290398C5D0983EE5EE4721EC5C680AEA12C2282451D3ED65F4F
+ Keygrip = 513906BEA5A40F25C9D6EBBCEF62D0784E7235A5,
+ 6EC551A7895031EE4543A1C789E16E6A6C229CFC
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mJMEZifQzRMJKyQDAwIIAQENBAMEaBxujXDe9d7WCXlyZD7OolOOpso/n4fcHksn
+03z9oylq8SnV7rMx2DbseiFcwc9BAxhNIfeqGEwe6cM4urGRR0OPTDBwXmEOFCwp
+9xLJE9ARMthi9bZdf63h4UW02fsI6LKB2pQTnRHT/cClW4XRr/Dd/gUneRFact4D
+uwmOA920DHBxYy1zYW1wbGUtNYjTBBMTCgA7FiEEezmGpVDl2xFgVLS0LL4VfTf9
+7B0FAmYn0M0CGwMFCwkIBwICIgIGFQoJCAsCBBYCAwECHgcCF4AACgkQLL4VfTf9
+7B3UcwH+JBipc+OsxxqdhGeoNrYUAmDL4NoXMAhkTYPa7Qwub48ThWz3GjFOCnqr
+dyfxBPrEjW5MjRarC2eomaWO7mGbbQH/VXLH4/pq2MGlrhpRfupidbWDmFtHH2NQ
+oXSACpYNSTAjuy72p9s4dYbMMWRl85qQxh+4PtmY5XgQXOfd0FFgF7kGuwVmJ9Dq
+HQAABrEJKyQDAwIIAQENBAMEbiaJbqyNPX8x8LV0Of/bwAeIQc73qamKsV9In+40
+6dFeIFDq/KDNTHAh5eAY9gHux+3eGqzpWeoT+EFDhhSJ3VStqk/4bl/3XjzC6mRT
+cWB13ZCLlke0UlemSuiN05DXMlueMGmAJxazdDr+en5ESVr2JcPgCcWBxj40Ghai
+PQcAAAYgvndoszgAtYOXhBSWXsQ50ppBgGVbCli6QMucKdEAiKB9ZrR65hJLmGFW
+qTR4ePvPwDUQSdLBiDXO5yut4ot6yLp/+DRa2IWx5zBAmTnFs6Glhnq3kSU48jRZ
+qjNSBOzF6UqbZRdyqaxcYKUTeqdHGZlkedekJIORcjmAeFdJOCWJbGKNoXJkGNhD
+5JRvmDii4tpbk8aAWZXNfUsm63m8vWReUrMXA5hmhssqsmoiAph5vVchKSgJbwlU
+plZU+tZlH+sRA5xuDwMXICUwNICub1oO14ahfjd5q9d1sVQHtlYMl8Qs+Gpj16oQ
+MnZ9INl+rXo+/NNG0AtN/RR/rpx7zGQiSDe2xidwduJb51bCAaWERXea6YZ5x1PC
+u6aUJdNDpRVurtF6rPC5OcSbP+g6qAxeQ5m+gcE/Ciy05rCOWIoTuJRKyfdNeVQf
+qxaRvogVb5IPqDbE1BrEllAJ+qF02ja1Uhx59DE7SYUlMRNpJhtkSPx67mudREVb
+9jR8NfK5n5UlTGAndZuZyhZlkAa60ffAsgy9v/Zqj0VOJIY7F1oLYUgwrIrLGvuT
+8dPFT3IW2qBa4hC1e1A+Rle2hwqM1EhkS3pbaPVl6fUcnxKJCsgxXtUgFfa77YnG
+kkvHVut1L7NQK8UMr6Bz4bauPdKeDJJp+LUFygZUcCEU8DuugclFsTYx6mwoskS8
+37FZtVserKwwr3hyvTyPW+oO6QVtsubIfJsgSrIQGGliF9ZI78u7TAeMFnUbA3Ar
+r0R/+3Qf2yRVr1qbymozQMW49rgnSHIwJLIOb1o9VieNvJddTqcNk5mm41VTOSCj
+xehYrVGAvUQ08+QrlxkIqlkau/PB6/JXYnyyv3QNwbiMdVGluEYvbOO1jGWjkMB8
+AaFcK8YkqwB5JNm3bdGlBgPBkieKJMyGz6qVLmas/pmoANVsRzp4d5Vfx9g8HdVI
+pXUnslkLVrbLPoUl8GmGclN5xBMPj+FVJNVpNGqvRRU43GYxSfGUbVUJvju2AmAx
++HrEshuA1mmB+FJ82vCtS/wqOzJlvaxOZRkLXXdydYluojhgbKeyFzwcTeAQWJZR
+KLyGa4zCmRBFrkcyQkPLsICOL4UfyVY3eawmlmSwGuy+9FRl/rlYTMR/OwMXlFlL
+9XSXRGsKhWdVQppziaIas1c8LYoDYjhIZFEBPWR9KIl5IAqDcsYDn6I+NYdwCECM
+fIFeVQNaW6kWW7s7pWqWJTtSbdw3/MKfFvGOfWZ2o5O4Z4SchZJ8r5lqn+OI/4gN
+VhWsZLe0JRgD15WZ0iMtVgyF9WJkPpufM/gTnQthq+mPdgQ+UWYUWgRbg+V0qrNd
+nRGaPrMQf7M4jvSDsFZyazA2wpZjAYySn9ly1ETFQ3MW10mvDRJVbxWfwCWExrhF
+a/VtwhKNymG3lOeq+2GWk1S1ptqC61Rc+iQs6ZelFoqkOSYTEWW1NPu+HxWk1EMv
+9buERqV15ShIC3w/oDKMgTTAv3eHksBZAusyR2MmrpeczwyAw5xLczKfxOo2UWSo
+SNUpvLQ5hdNbOuMLAqwFfhkQvbYW9Qp58iRBs1HHfIoXq0BS9EkwuZGvfHUSCSU8
+TSfIxRZsMoWhsdOZgbhezlzHrxG0uLOBcJY3ZuYTCmar1zZHgGfAqGRwxUIhauFZ
+NZFi9yw0JBYB5PVAh9ZKh1LDj9hcwJwMfzjOOgMg5eFrUHMC14MOoYeTd0o9e6qA
+eXGtFzMtiGLA+nV9mHgs6SdXejK0W/GO7nezk/QQYgwDCTYgRwu8kzE0ifEclocc
+QtopaQmr8WqIWVCiz4ls0Yph1Us8UpyWNVrC08aTJMOuY0yHGMPL+nNMQOePkVOh
+KGs3ngt2NhQd0gtDomtrsuA6VvAI8IaM4rlAzxCPznlUwKG5M8wV/hVuLExOTty7
+oehxCOPP8khlVIqDjnYZMVslwmU0ZRWMrkaDqgNpaHDDlzWbEYyzeqhT1GzFsFrP
+28AQyJhChAcAk0CkeToFcYsOEulfqGhaITuFWbRAIbjDpFivgcJHZ3Wr8AFdv/gg
+QnyjBiZd6a4PSuR032J9zRZ66p+3pus/Ahukp4rhESdfE6ySPiOIuAQYEwoAIBYh
+BHs5hqVQ5dsRYFS0tCy+FX03/ewdBQJmJ9DqAhsMAAoJECy+FX03/ewdgGQB/3hG
+AN5CHePZ4HY9ijl6NtptnzotFl0upj+ItZGsQAd+VroLkPI3Mk0HBecsWplYniS5
+ccBhUFTxlrDpPUXziHgB/0OtCd8cWWJtDOKs2rqdGxb+wfGKYmpOfELMIM6xkh43
+xYAjT76qD4Ht7Hf8tXBLJ3sYfcR2CCSQlDmoXrEUdFg=
+=qQEJ
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/tests/openpgp/samplemsgs/pqc-sample-1.enc.asc b/tests/openpgp/samplemsgs/pqc-sample-1.enc.asc
new file mode 100644
index 000000000..c07b46fb4
--- /dev/null
+++ b/tests/openpgp/samplemsgs/pqc-sample-1.enc.asc
@@ -0,0 +1,81 @@
+-----BEGIN PGP MESSAGE-----
+
+hQSaA88GKIyqqoUKHQEA0pRJ6Vj5C0XlgpwLd18OLgMMQJ9nw68AA2f/tCrZBVcA
+AARAdHv1SfxOewaAWAp79c8vesQ1ToGOeM/2l8LXhbCB67f5RFkdJVl9yY1WyTpz
+IHnlynbB53sNvoS2re+fKySS7fj9nE6n7+RF+NNkS3z7aSPUaJ71Yk3tYZDP+mLd
+45g4eqj8O7hpwgS0bCq4a35Oq41dNS7g2S9psgdlC7BGRnzVwPh1v5jF7PTb9WdQ
+2GCmvR4Mo87McT5YLv0GNg51aYbx6iD2clcuhBEKx85E+DMnU7+BWqC/Ly+It8d8
+/gPQha7y4ZMkfNlaHSJtcmOqS9gDek+auLYFUqfrvxo8Kmza7bdsRiN8OeP+o/06
+tPNnRkeOp94jbwUjoIbTlZn55qYD0w5FX7yfZPgfUYqEHT+R5zYU1ow3hmt+18zz
+L0bpk+GsCEfSyNHlx9R7W5MTvhjP32Xki/UZKy/4WcqiqZQbqJ7KxpE9ATl9XE+/
+5BzmMbVzdaeOgulOJiLxsvZxFhXTVWYJJMtYExzC1jRw4sic8t/PWy1sPE6un9PZ
+oBXOMSnbF2sVFueuFGH7thUI2ZI4oUBV9fM8SDUgHuw6oC3VCOtBuCJ5r6uA7ZaP
+i8U0CULEHX0sS8SHoL+QIdfG6MHM0w9zNk1d6LhVvlwyGuyHuBDjNJRoJz3URnIc
+UvUC2s60tytiuZLLuMZlUooxcDC+Fp5k2ejNP5AWfT1LQUMdV8vRGKiWaL1PbY1M
+96PqA3NDZyd9MJn3o74MEA19HPRNTInTW0xwWejZty6hTLvrBMpZSaTxFwmUuUdb
+81LES4AkeWH4SJxS8xse2dlD2JK2tYYZPGgkgj5BIAT3J4/Cy9hgdls5NFPZDNUe
+cXxz1LRPvewWxjmv7X5H6niBeHCOHXYXYbUTHw8/acDt/HEjYo6yBu3C7MXn5Ga6
+FvC9XWZAQTiicU6cF7U6/TQWQqZWhrdPyWD9/x3iUr4mJsOl3RBBT3Koz7Tyo41H
+RqweL+sCYf1tmgIUsLRVZBVOR1JNRkuW4PL0jBR/rsvDWBQShjFvWb8DiKXhm7pK
+1DSpMhiuV2BQuVnMls3aw40V9TPaq/dxqj9U/LIRW2vR9sza3ulS7UWL0ZbgLMjz
+hq0nU1XRqstTExGwlokt8TJGfsX15yIllLt6iajXD5kiTzhS2iuuXYq4Fx/LjRoQ
+W1VglExBdfy0hjFWQMoKZ0f6SjfoIdqKDZDZ1ygKB4UJW0UE0Wmhq5imY1ih/Jb3
+CR5ksXqp4QDr1oCOo4ZtDANGDOyAWAGxsBW0tRMTqcS1J5LT8RKf6wsti14EFOtp
+d/fNUvFz5RMYKdDkRb4V14iwgCsGCpShOyDorN+g4Lya3gEIKfG4Qlkg+J6N426L
+jwE1Jxx4S+sMzFii7bUQr+Pu9efh95V2Vg6JbccurqCKsOF2ksqE+1AsZiLYFqIL
+Qvj7OTbHwvKmNMBfWmCNOew/ggNeYXrXK5X4q9qQuHgFNrwJKNaSc4qft/0JJ0yF
+wBctVCPMUvkdYeCCAvSTAhek9bpOiYJgrIl6Fa3UcwEJAhCQ0BoXGut4xmSZnufk
+LZNiq7jAIbyXKcGjfUYJkv4ryEYfk+9fMM6HHXnz5wHKLb5xQMQCioJxQuZIY8ku
+p2ioOSIHLnVQg9Q9KKdt4RNpvV59Ca+PDBUXGH8167Fp+oKkix7etYsMEamXnlPg
+Hto=
+=/vwC
+-----END PGP MESSAGE-----
+
+Created with key:
+
+sec ed25519 2024-04-19 [SC] [expires: 2027-04-19]
+ 652B01FF34D43EA62C5DC897E47CC8B150A7A02E
+ Keygrip = DC60E0AE48E0F14E8FD7C9C36E18C6651E99BA93
+uid [ultimate] pqc-sample-1
+ssb ky768_cv25519 2024-04-19 [E]
+ CF06288CAAAA850A8B5B2927C8C14C7F0A8906AAEA320DE12A0A15F8E8746216
+ Keygrip = 2F4CD0990D56D41A74456668469E3139A7960CD4,8B2E1355C97C34E0AC1CBC9DFDF2526BFE8990A7
+
+Encryption with --debug=crypto diagnostics:
+
+DEK is: 85ae7493cfbafdd7282332dbf539ae7c54257c86de776fa29466378e92a110b2
+encode_session_key: encoding 32 byte DEK
+encode_session_key: [32] 85 ae 74 ... a1 10 b2
+ECC curve: 1.3.101.110
+ECC pubkey: 6438411b2e3ea2ea48b681860c2ca537978c69072cbd04a40069e122660f6f37
+ecc_mul_point info: Montgomery/Standard
+ecc_mul_point name: Curve25519
+ecc_mul_point p:+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed
+ecc_mul_point a:+01db41
+ecc_mul_point b:+01
+ecc_mul_point g.X:+09
+ecc_mul_point g.Y:+5f51e65e475f794b1fe122d388b72eb36dc2b28192839e4dd6163a5d81312c14
+ecc_mul_point g.Z:+01
+ecc_mul_point n:+1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed
+ecc_mul_point h:+08
+ecc_mul_point info: Montgomery/Standard
+ecc_mul_point name: Curve25519
+ecc_mul_point p:+7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed
+ecc_mul_point a:+01db41
+ecc_mul_point b:+01
+ecc_mul_point g.X:+09
+ecc_mul_point g.Y:+5f51e65e475f794b1fe122d388b72eb36dc2b28192839e4dd6163a5d81312c14
+ecc_mul_point g.Z:+01
+ecc_mul_point n:+1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3ed
+ecc_mul_point h:+08
+ECC ephem: d29449e958f90b45e5829c0b775f0e2e030c409f67c3af000367ffb42ad90557
+ECC ecdh: 2444b6e1183eae269c6d4d9f28cd6de1cfedf6bed90ce6dd7ea732d9503cb32b
+ECC shared: 6648e8f006898d6407cc253f6a6c47b638f5ff00c5994580b6272611a8d9ad9e
+Kyber pubkey: 0de94f420165b79701fb24a7669190cf2840ed7b96e4b088d45a9db4512117e3 …
+Kyber ephem: 747bf549fc4e7b0680580a7bf5cf2f7ac4354e818e78cff697c2d785b081ebb7 …
+Kyber shared: 0495e20570cd29d82a4933b8a133c09c39ec2a4e67aa6119cf7eccf2bf74ed40
+KEK: 4aee18ac1e35f67b8e3f5109695831fa77b426d85ed11b74390faed49f65da9e
+seskey: 85ae7493cfbafdd7282332dbf539ae7c54257c86de776fa29466378e92a110b2
+enc_seskey: 28d692738a9fb7fd09274c85c0172d5423cc52f91d61e08202f4930217a4f5ba \
+ 4e898260ac897a15ad
+Kyber/AES256.OCB encrypted for: "CF06288CAAAA850A pqc-sample-1"
diff --git a/tests/openpgp/samplemsgs/pqc-sample-2.enc.asc b/tests/openpgp/samplemsgs/pqc-sample-2.enc.asc
new file mode 100644
index 000000000..c4233ab45
--- /dev/null
+++ b/tests/openpgp/samplemsgs/pqc-sample-2.enc.asc
@@ -0,0 +1,102 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+=fcr5
+-----END PGP MESSAGE-----
+
+Created with key:
+
+sec ed25519 2024-04-19 [SC] [expires: 2027-04-19]
+ 6BF41D6AC221F5223C2DEEE320E629089768AD93
+ Keygrip = F5DB116462B7BD2FA83A4453C4DFA2AE8604FB59
+uid [ultimate] pqc-sample-2
+ssb ky1024_cv448 2024-04-19 [E]
+ 2D0F59CAFD12DBD9DF9EFD602D7E8F8C2121A5D1841174346D6C8FE8F9AA7683
+ Keygrip = 8F9ABF3E5BBFC50D168DD524EB8F7263E7B33859,A1598F57316F7FEC3F946895E35A7D2EAE8D3A13
+
+Encryption with --debug=crypto diagnostics:
+
+DEK is: 244ab936bd8c02d89486abe92a5c145fb502099445987ed21ca78fa42e7f45ea
+encode_session_key: encoding 32 byte DEK
+encode_session_key: [32] 24 4a b9 ... 7f 45 ea
+ECC curve: 1.3.101.111
+ECC pubkey: 5e42bc08be62f4d740196fc1888d18f1d1bd6d21dac63c7265be2897f1c2ce5e \
+ 9e2140aa3b65620fe0ea2fb443952821ad05967a6d32d849
+ecc_mul_point info: Montgomery/SafeCurve
+ecc_mul_point name: X448
+ecc_mul_point p:+fffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff \
+ ffffffffffffffffffffffffffffffffffffffffffffffff
+ecc_mul_point a:+98a9
+ecc_mul_point b:+01
+ecc_mul_point g.X:+05
+ecc_mul_point g.Y:+7d235d1295f5b1f66c98ab6e58326fcecbae5d34f55545d060f75dc28df3f6ed \
+ b8027e2346430d211312c4b150677af76fd7223d457b5b1a
+ecc_mul_point g.Z:+01
+ecc_mul_point n:+3fffffffffffffffffffffffffffffffffffffffffffffffffffffff7cca23e9 \
+ c44edb49aed63690216cc2728dc58f552378c292ab5844f3
+ecc_mul_point h:+04
+ecc_mul_point info: Montgomery/SafeCurve
+ecc_mul_point name: X448
+ecc_mul_point p:+fffffffffffffffffffffffffffffffffffffffffffffffffffffffeffffffff \
+ ffffffffffffffffffffffffffffffffffffffffffffffff
+ecc_mul_point a:+98a9
+ecc_mul_point b:+01
+ecc_mul_point g.X:+05
+ecc_mul_point g.Y:+7d235d1295f5b1f66c98ab6e58326fcecbae5d34f55545d060f75dc28df3f6ed \
+ b8027e2346430d211312c4b150677af76fd7223d457b5b1a
+ecc_mul_point g.Z:+01
+ecc_mul_point n:+3fffffffffffffffffffffffffffffffffffffffffffffffffffffff7cca23e9 \
+ c44edb49aed63690216cc2728dc58f552378c292ab5844f3
+ecc_mul_point h:+04
+ECC ephem: 1f774fa032dc2d041500d70400cea29dc246d89df9fee9c6c598996ef11c0005 \
+ f35b7d6cafbb57db8b88b1cd71e581b1f1c838cb5007bf51
+ECC ecdh: b8993bc015a983286618ff6ce866ef846d4cca616934afd8f1ffef9d25046620 \
+ 81bb9d8316a3ae5199720f27dcf4ac72fa9e1d71db9b1745
+ECC shared: 634b233b4674df04158bf3b3eb287b50e10819aabaaaa9750e1c603c40b244e9 \
+ a0dd353e8098adbacd277f9d79bf2bdfb4ba4401d71b871272d20c99ee3b02c1
+Kyber pubkey: 76e799415b04c5b048d8671c59439a7134263c18127971232947aa66d66df134 …
+Kyber ephem: bf2b37dd51251881092c7de9ee67e69de08b87f8f6fca812dad8d40005174f55 …
+Kyber shared: 8fd48c5489254e89bcea602904323a370050eee86240e171181e5d1602288aac
+KEK: 8595d1368fa33a7ba26810adfc1f66a688768e07c6610766d80d0dcffe1ff3c1
+seskey: 244ab936bd8c02d89486abe92a5c145fb502099445987ed21ca78fa42e7f45ea
+enc_seskey: 28093c2a75245fb24e16e2ae4bce22da587777136a4cd794f664fb7d35d45e7a \
+ e6cd3c5a831ef89377
+Kyber/AES256.OCB encrypted for: "2D0F59CAFD12DBD9 pqc-sample-2"
diff --git a/tests/openpgp/samplemsgs/pqc-sample-3.enc.asc b/tests/openpgp/samplemsgs/pqc-sample-3.enc.asc
new file mode 100644
index 000000000..6ceed5f6b
--- /dev/null
+++ b/tests/openpgp/samplemsgs/pqc-sample-3.enc.asc
@@ -0,0 +1,32 @@
+-----BEGIN PGP MESSAGE-----
+
+hQS7A7Rwfqm/D/KfHQIDBHU3DvDIzFvwqYhmBHaN2qSe8cDi8rsj8Q4aJkioD9W/
+RJwG2ca+WWpOeBt1LBrZRE2+e1303lPxbWioK/osn+0AAARAZv6eblIHDvd1SgKP
+Ta+5aYdnfSSkUVwes2RrE3g9sa1LbkHACvpyYaA1ZsKjnueqw9q0tSr3IiSQ1Pnb
+yHbokFafgSViMJPbWtWv0d+Nr8piFa8bdNVCtTfwntnHqqHfsMhdBwoH8feq028K
+yqC2kDJq/f22puO3ANOp8cwzuVGRaalDToY7U1umNV1xrv70iyOL/ZRxYIgltV0a
+ZlxZ1xLC4vRcfcczRI/N3+A9w/rBinvxw2d5GYYjRlpjw9xFU6YskbuG3XExus+C
+F0WcJ0DMduSpFpCELuqnD2RuDQKd01IHajzkLuRcBrglUC49+IBNJVNtXkHu3TVH
+OllgHFMp2GaD28uil50oQYYj89Ok7JNir17aUChGNmKVaEkheOiDgeLQKJRpRwu+
+fL4LJYdI2sXnxSUv2uO7qUAvdk5xX5L1QCe4keAF//T14iSt9q00MX+wRfsmP6WC
+nhK7DJJwjN40RcyBrSU0IUe4oR+AIzWNVJRbb1QMA6mhKDICMGknOnKAgfjPYbhp
+kw579C6MS4XxwvwyaZaUQy3loKfOwN7ahp+Hdzn9ojpzDH8WHdgl/UZjj8A6+xC0
+626exdhGm0HSbsIW5ZUa5CZfbwlgsmRDlzovymtJl6Qvqp0845m4H969wwOxM3yC
+8NTUn2yNiZA1WBlM9hHvypU6l8M+cmvLd8aP2v54e47039f+dmeZfnF4N+7C59kA
+YrUyiFmYQEZfNLQAJ4cnggLqQIkS39aYjNVDitw3xhQw9J5uaoMN819pSI4w9rp+
+20JqzRszH7dUVsIFsAwB8kc6eIuJun7sd9Z9a16vRzSP39mM4xMnjyTF0EUSG849
+7n7Kwwgi92aA+VgYCIYc4aKyBeElMTLMdCS2Zlwz3/mMEAiDn9xLE3i0anZ4AoYj
+my1A9lmOB0Ms5F6NKc08riz8/ONerbqO6ArSDo1icrARWtzRsozarPdHTE29Aq9C
+kHYQLJ1aCnUs/f3KLbJEjReXNFimR1L9jsxuof82PeJO9LUAsdUTmkfdh0Ya0gjl
+jaYMdWm7bhoOjoFWPrhBfSlF5D7CCpiFyblio0SrE4FkCawDelhQG12HfcXi/UhF
+Y10g/xnvK86ntus1Gmk/M8BLgKQq3EzWgYvlS/+fI8oNPIxZWyZjW71TAkvjxR8L
+ctnh9rvCQtq38d0lQslZUvmgFZOdPK3y3H3KOZP7vldCW4giI8Dv9fgqqLK/crlT
+WQWgtI0KIFtFeKreLupeMOFRW/cxdZ8Hr5cO8nJkQXGkc7H0Fm2b4IJl3g6h+iLe
+qiw+aEFbNE0j80WV2skRoS+YhhaESoP+Q9S6O+o0g6M9hZpGszLGN7RgUScTq9oV
+N0zMUJ1phrVR9q0DwIaxm9bnuswO/qpmkIOcO/w/eIx49HAwlzSf8em34laGJNBC
+hofsGUNKy/8tNikiJClvZU9s4kwJKOHU/UlwTZyyqHewonFrqnuNxTWPcKe+3gP1
+sxTzLo9nqC1SsWIwn53UeAEJAhDorI7/L0xtmEijEyFL73ztomomHYQkCfh1i9+z
+9z0pzPXAFv8mWqKhj/jWOlQoGSO+o3yOcsfCcHG0fRwrCi88Gqe1r5AcWEjlm3Ru
+BfsI2CQsGk6vslxsAAUx5HMajVohSl+fb4ptpPoQi4UlafSJPCxJig==
+=Cv77
+-----END PGP MESSAGE-----
diff --git a/tests/openpgp/samplemsgs/pqc-sample-4.enc.asc b/tests/openpgp/samplemsgs/pqc-sample-4.enc.asc
new file mode 100644
index 000000000..f083a1248
--- /dev/null
+++ b/tests/openpgp/samplemsgs/pqc-sample-4.enc.asc
@@ -0,0 +1,43 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+se4uGUbzOJfEhVQ7
+=rlF7
+-----END PGP MESSAGE-----
diff --git a/tests/openpgp/samplemsgs/pqc-sample-5.enc.asc b/tests/openpgp/samplemsgs/pqc-sample-5.enc.asc
new file mode 100644
index 000000000..eb20f9791
--- /dev/null
+++ b/tests/openpgp/samplemsgs/pqc-sample-5.enc.asc
@@ -0,0 +1,45 @@
+-----BEGIN PGP MESSAGE-----
+
+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
+MQHiPA1Y6KsYPhsQYg==
+=aAoH
+-----END PGP MESSAGE-----
diff --git a/tests/tpm2dtests/defs.scm b/tests/tpm2dtests/defs.scm
index 0fef71806..a913818f5 100644
--- a/tests/tpm2dtests/defs.scm
+++ b/tests/tpm2dtests/defs.scm
@@ -217,13 +217,14 @@
(define (gpg-pipe args0 args1 errfd)
(lambda (source sink)
(let* ((p (pipe))
- (task0 (spawn-process-fd `(,@GPG ,@args0)
+ (task0 (process-spawn-fd `(,@GPG ,@args0)
source (:write-end p) errfd))
(_ (close (:write-end p)))
- (task1 (spawn-process-fd `(,@GPG ,@args1)
+ (task1 (process-spawn-fd `(,@GPG ,@args1)
(:read-end p) sink errfd)))
(close (:read-end p))
- (wait-processes (list GPG GPG) (list task0 task1) #t))))
+ (process-wait task0 #t)
+ (process-wait task1 #t))))
;;
;; Do we have a software tpm