mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-09 12:54:23 +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];
|
||||
size_t rlen, slen, n; /* (bytes) */
|
||||
char buf[64];
|
||||
unsigned int nbits;
|
||||
|
||||
log_assert (neededfixedlen <= sizeof buf);
|
||||
|
||||
@ -182,6 +183,17 @@ pk_verify (pubkey_algo_t pkalgo, gcry_mpi_t hash,
|
||||
memset (buf, 0, neededfixedlen - n);
|
||||
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
|
||||
&& !gcry_mpi_get_flag (s, GCRYMPI_FLAG_OPAQUE)
|
||||
&& !(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);
|
||||
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)
|
||||
rc = gcry_sexp_build (&s_sig, NULL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user