mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-03 22:56:33 +02:00
Use inline functions to convert buffer data to scalars.
* include/host2net.h (buf16_to_ulong, buf16_to_uint): New.
(buf16_to_ushort, buf16_to_u16): New.
(buf32_to_size_t, buf32_to_ulong, buf32_to_uint, buf32_to_u32): New.
--
This fixes sign extension on shift problems. Hanno Böck found a case
with an invalid read due to this problem. To fix that almost all uses
of "<< 24" and "<< 8" are changed by this patch to use an inline
function from host2net.h.
(back ported from commit 2183683bd6
)
Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
parent
b62395cf59
commit
3627123dc8
20 changed files with 310 additions and 275 deletions
32
g10/keyid.c
32
g10/keyid.c
|
@ -34,6 +34,7 @@
|
|||
#include "keydb.h"
|
||||
#include "i18n.h"
|
||||
#include "rmd160.h"
|
||||
#include "host2net.h"
|
||||
|
||||
int
|
||||
pubkey_letter( int algo )
|
||||
|
@ -175,9 +176,9 @@ v3_keyid (gcry_mpi_t a, u32 *ki)
|
|||
else
|
||||
{
|
||||
p = buffer + nbytes - 8;
|
||||
ki[0] = (p[0] << 24) | (p[1] <<16) | (p[2] << 8) | p[3];
|
||||
ki[0] = buf32_to_u32 (p);
|
||||
p += 4;
|
||||
ki[1] = (p[0] << 24) | (p[1] <<16) | (p[2] << 8) | p[3];
|
||||
ki[1] = buf32_to_u32 (p);
|
||||
}
|
||||
xfree (buffer);
|
||||
return ki[1];
|
||||
|
@ -271,15 +272,8 @@ keystr_from_desc(KEYDB_SEARCH_DESC *desc)
|
|||
{
|
||||
u32 keyid[2];
|
||||
|
||||
keyid[0] = ((unsigned char)desc->u.fpr[12] << 24
|
||||
| (unsigned char)desc->u.fpr[13] << 16
|
||||
| (unsigned char)desc->u.fpr[14] << 8
|
||||
| (unsigned char)desc->u.fpr[15]);
|
||||
keyid[1] = ((unsigned char)desc->u.fpr[16] << 24
|
||||
| (unsigned char)desc->u.fpr[17] << 16
|
||||
| (unsigned char)desc->u.fpr[18] << 8
|
||||
| (unsigned char)desc->u.fpr[19]);
|
||||
|
||||
keyid[0] = buf32_to_u32 (desc->u.fpr+12);
|
||||
keyid[1] = buf32_to_u32 (desc->u.fpr+16);
|
||||
return keystr(keyid);
|
||||
}
|
||||
|
||||
|
@ -331,8 +325,8 @@ keyid_from_sk( PKT_secret_key *sk, u32 *keyid )
|
|||
if(md)
|
||||
{
|
||||
dp = gcry_md_read (md, 0);
|
||||
keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
|
||||
keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
|
||||
keyid[0] = buf32_to_u32 (dp+12);
|
||||
keyid[1] = buf32_to_u32 (dp+16);
|
||||
lowbits = keyid[1];
|
||||
gcry_md_close (md);
|
||||
sk->keyid[0] = keyid[0];
|
||||
|
@ -386,8 +380,8 @@ keyid_from_pk( PKT_public_key *pk, u32 *keyid )
|
|||
if(md)
|
||||
{
|
||||
dp = gcry_md_read ( md, 0 );
|
||||
keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
|
||||
keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
|
||||
keyid[0] = buf32_to_u32 (dp+12);
|
||||
keyid[1] = buf32_to_u32 (dp+16);
|
||||
lowbits = keyid[1];
|
||||
gcry_md_close (md);
|
||||
pk->keyid[0] = keyid[0];
|
||||
|
@ -430,8 +424,8 @@ keyid_from_fingerprint( const byte *fprint, size_t fprint_len, u32 *keyid )
|
|||
}
|
||||
else {
|
||||
const byte *dp = fprint;
|
||||
keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
|
||||
keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
|
||||
keyid[0] = buf32_to_u32 (dp+12);
|
||||
keyid[1] = buf32_to_u32 (dp+16);
|
||||
}
|
||||
|
||||
return keyid[1];
|
||||
|
@ -721,8 +715,8 @@ fingerprint_from_pk( PKT_public_key *pk, byte *array, size_t *ret_len )
|
|||
if (!array)
|
||||
array = xmalloc ( len );
|
||||
memcpy (array, dp, len );
|
||||
pk->keyid[0] = dp[12] << 24 | dp[13] << 16 | dp[14] << 8 | dp[15] ;
|
||||
pk->keyid[1] = dp[16] << 24 | dp[17] << 16 | dp[18] << 8 | dp[19] ;
|
||||
pk->keyid[0] = buf32_to_u32 (dp+12);
|
||||
pk->keyid[1] = buf32_to_u32 (dp+16);
|
||||
gcry_md_close( md);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue