aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <gniibe@fsij.org>2020-11-02 11:27:26 +0900
committerNIIBE Yutaka <gniibe@fsij.org>2020-11-02 11:27:26 +0900
commit029ba6dc961c683d6683c97667d3c0e103738aa4 (patch)
tree4be02e200c0dc1aa93422afea736eb2b8d223ecd
parent21d8927f794bd901b13feaaac6d31d463349a64f (diff)
downloadgnupg-029ba6dc961c683d6683c97667d3c0e103738aa4.tar.gz
gpg: Fix check_signature2 for opaque MPI.
* g10/sig-check.c (check_signature2): Handle the case of opaque MPI. Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
-rw-r--r--g10/sig-check.c23
1 files changed, 21 insertions, 2 deletions
diff --git a/g10/sig-check.c b/g10/sig-check.c
index 4e593858f..438fc0cf9 100644
--- a/g10/sig-check.c
+++ b/g10/sig-check.c
@@ -255,7 +255,14 @@ check_signature2 (ctrl_t ctrl,
nbytes = 6;
for (i=0; i < nsig; i++ )
{
- if (gcry_mpi_print (GCRYMPI_FMT_PGP, NULL, 0, &n, sig->data[i]))
+ if (gcry_mpi_get_flag (sig->data[i], GCRYMPI_FLAG_OPAQUE))
+ {
+ unsigned int nbits;
+
+ gcry_mpi_get_opaque (sig->data[i], &nbits);
+ n = (nbits+7)/8 + 2;
+ }
+ else if (gcry_mpi_print (GCRYMPI_FMT_PGP, NULL, 0, &n, sig->data[i]))
BUG();
nbytes += n;
}
@@ -276,7 +283,19 @@ check_signature2 (ctrl_t ctrl,
nbytes -= 6;
for (i=0; i < nsig; i++ )
{
- if (gcry_mpi_print (GCRYMPI_FMT_PGP, p, nbytes, &n, sig->data[i]))
+ if (gcry_mpi_get_flag (sig->data[i], GCRYMPI_FLAG_OPAQUE))
+ {
+ const byte *sigdata;
+ unsigned int nbits;
+
+ sigdata = gcry_mpi_get_opaque (sig->data[i], &nbits);
+ n = (nbits+7)/8;
+ p[0] = nbits >> 8;
+ p[1] = (nbits & 0xff);
+ memcpy (p+2, sigdata, n);
+ n += 2;
+ }
+ else if (gcry_mpi_print (GCRYMPI_FMT_PGP, p, nbytes, &n, sig->data[i]))
BUG();
p += n;
nbytes -= n;