mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
scd:openpgp: Fix computing fingerprint for ECC with SOS.
* scd/app-openpgp.c (count_sos_bits): New. Count as sos_write does. (store_fpr): For ECC, use count_sos_bits. -- Signed-off-by: NIIBE Yutaka <gniibe@fsij.org> (cherry picked from commit 95156ef9bfb6a3a525454d50ae2f5b538ccbd774) and (cherry picked from commit f482e4bd121ff2862bfb53a82f1d5c2cf3524a10)
This commit is contained in:
parent
24033dc8ae
commit
a942986f17
@ -672,6 +672,21 @@ count_bits (const unsigned char *a, size_t len)
|
|||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned int
|
||||||
|
count_sos_bits (const unsigned char *a, size_t len)
|
||||||
|
{
|
||||||
|
unsigned int n = len * 8;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (len == 0 || *a == 0)
|
||||||
|
return n;
|
||||||
|
|
||||||
|
for (i=7; i && !(*a & (1<<i)); i--)
|
||||||
|
n--;
|
||||||
|
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
|
||||||
/* GnuPG makes special use of the login-data DO, this function parses
|
/* GnuPG makes special use of the login-data DO, this function parses
|
||||||
the login data to store the flags for later use. It may be called
|
the login data to store the flags for later use. It may be called
|
||||||
at any time and should be called after changing the login-data DO.
|
at any time and should be called after changing the login-data DO.
|
||||||
@ -845,12 +860,18 @@ store_fpr (app_t app, int keynumber, u32 timestamp, unsigned char *fpr,
|
|||||||
|
|
||||||
for (i = 0; i < argc; i++)
|
for (i = 0; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (algo == PUBKEY_ALGO_RSA || i == 1)
|
if (algo == PUBKEY_ALGO_RSA)
|
||||||
{
|
{
|
||||||
nbits = count_bits (m[i], mlen[i]);
|
nbits = count_bits (m[i], mlen[i]);
|
||||||
*p++ = nbits >> 8;
|
*p++ = nbits >> 8;
|
||||||
*p++ = nbits;
|
*p++ = nbits;
|
||||||
}
|
}
|
||||||
|
else if (i == 1)
|
||||||
|
{
|
||||||
|
nbits = count_sos_bits (m[i], mlen[i]);
|
||||||
|
*p++ = nbits >> 8;
|
||||||
|
*p++ = nbits;
|
||||||
|
}
|
||||||
memcpy (p, m[i], mlen[i]);
|
memcpy (p, m[i], mlen[i]);
|
||||||
p += mlen[i];
|
p += mlen[i];
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user