mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-24 15:17:02 +01:00
gpg: Implement the fix-up of zero for SOS.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
ac977526ac
commit
b73fef0376
23
g10/pkglue.c
23
g10/pkglue.c
@ -152,6 +152,7 @@ pk_verify (pubkey_algo_t pkalgo, gcry_mpi_t hash,
|
|||||||
gcry_mpi_t s = data[1];
|
gcry_mpi_t s = data[1];
|
||||||
size_t rlen, slen, n; /* (bytes) */
|
size_t rlen, slen, n; /* (bytes) */
|
||||||
char buf[64];
|
char buf[64];
|
||||||
|
unsigned int nbits;
|
||||||
|
|
||||||
log_assert (neededfixedlen <= sizeof buf);
|
log_assert (neededfixedlen <= sizeof buf);
|
||||||
|
|
||||||
@ -182,6 +183,17 @@ pk_verify (pubkey_algo_t pkalgo, gcry_mpi_t hash,
|
|||||||
memset (buf, 0, neededfixedlen - n);
|
memset (buf, 0, neededfixedlen - n);
|
||||||
r = gcry_mpi_set_opaque_copy (NULL, buf, neededfixedlen * 8);
|
r = gcry_mpi_set_opaque_copy (NULL, buf, neededfixedlen * 8);
|
||||||
}
|
}
|
||||||
|
else if (rlen < neededfixedlen
|
||||||
|
&& gcry_mpi_get_flag (r, GCRYMPI_FLAG_OPAQUE))
|
||||||
|
{
|
||||||
|
const unsigned char *p;
|
||||||
|
|
||||||
|
p = gcry_mpi_get_opaque (r, &nbits);
|
||||||
|
n = (nbits+7)/8;
|
||||||
|
memcpy (buf + (neededfixedlen - n), p, n);
|
||||||
|
memset (buf, 0, neededfixedlen - n);
|
||||||
|
gcry_mpi_set_opaque_copy (r, buf, neededfixedlen * 8);
|
||||||
|
}
|
||||||
if (slen < neededfixedlen
|
if (slen < neededfixedlen
|
||||||
&& !gcry_mpi_get_flag (s, GCRYMPI_FLAG_OPAQUE)
|
&& !gcry_mpi_get_flag (s, GCRYMPI_FLAG_OPAQUE)
|
||||||
&& !(rc=gcry_mpi_print (GCRYMPI_FMT_USG, buf, sizeof buf, &n, s)))
|
&& !(rc=gcry_mpi_print (GCRYMPI_FMT_USG, buf, sizeof buf, &n, s)))
|
||||||
@ -191,6 +203,17 @@ pk_verify (pubkey_algo_t pkalgo, gcry_mpi_t hash,
|
|||||||
memset (buf, 0, neededfixedlen - n);
|
memset (buf, 0, neededfixedlen - n);
|
||||||
s = gcry_mpi_set_opaque_copy (NULL, buf, neededfixedlen * 8);
|
s = gcry_mpi_set_opaque_copy (NULL, buf, neededfixedlen * 8);
|
||||||
}
|
}
|
||||||
|
else if (slen < neededfixedlen
|
||||||
|
&& gcry_mpi_get_flag (s, GCRYMPI_FLAG_OPAQUE))
|
||||||
|
{
|
||||||
|
const unsigned char *p;
|
||||||
|
|
||||||
|
p = gcry_mpi_get_opaque (s, &nbits);
|
||||||
|
n = (nbits+7)/8;
|
||||||
|
memcpy (buf + (neededfixedlen - n), p, n);
|
||||||
|
memset (buf, 0, neededfixedlen - n);
|
||||||
|
gcry_mpi_set_opaque_copy (s, buf, neededfixedlen * 8);
|
||||||
|
}
|
||||||
|
|
||||||
if (!rc)
|
if (!rc)
|
||||||
rc = gcry_sexp_build (&s_sig, NULL,
|
rc = gcry_sexp_build (&s_sig, NULL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user