aboutsummaryrefslogtreecommitdiffstats
path: root/scd
diff options
context:
space:
mode:
Diffstat (limited to 'scd')
-rw-r--r--scd/apdu.c39
-rw-r--r--scd/app-openpgp.c3
-rw-r--r--scd/ccid-driver.c3
-rw-r--r--scd/pcsc-wrapper.c5
4 files changed, 24 insertions, 26 deletions
diff --git a/scd/apdu.c b/scd/apdu.c
index 90281205c..5ce7f946d 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -58,6 +58,7 @@
#include "scdaemon.h"
#include "exechelp.h"
#endif /* GNUPG_MAJOR_VERSION != 1 */
+#include "../include/host2net.h"
#include "iso7816.h"
#include "apdu.h"
@@ -1013,15 +1014,14 @@ pcsc_get_status_wrapped (int slot, unsigned int *status)
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
goto command_failed;
}
len -= 4; /* Already read the error code. */
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
{
log_error ("pcsc_status failed: %s (0x%lx)\n",
@@ -1181,15 +1181,14 @@ pcsc_send_apdu_wrapped (int slot, unsigned char *apdu, size_t apdulen,
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
goto command_failed;
}
len -= 4; /* Already read the error code. */
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
{
log_error ("pcsc_transmit failed: %s (0x%lx)\n",
@@ -1321,15 +1320,14 @@ control_pcsc_wrapped (int slot, pcsc_dword_t ioctl_code,
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
goto command_failed;
}
len -= 4; /* Already read the error code. */
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
{
log_error ("pcsc_control failed: %s (0x%lx)\n",
@@ -1458,15 +1456,14 @@ close_pcsc_reader_wrapped (int slot)
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
goto command_failed;
}
len -= 4; /* Already read the error code. */
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
log_error ("pcsc_close failed: %s (0x%lx)\n",
pcsc_error_string (err), err);
@@ -1647,7 +1644,7 @@ reset_pcsc_reader_wrapped (int slot)
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
@@ -1661,8 +1658,7 @@ reset_pcsc_reader_wrapped (int slot)
sw = SW_HOST_GENERAL_ERROR;
goto command_failed;
}
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
{
log_error ("PC/SC RESET failed: %s (0x%lx)\n",
@@ -1753,9 +1749,9 @@ pcsc_vendor_specific_init (int slot)
if (l == 1)
v = p[0];
else if (l == 2)
- v = ((p[0] << 8) | p[1]);
+ v = buf16_to_uint (p);
else if (l == 4)
- v = ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
+ v = buf32_to_uint (p);
if (code == FEATURE_VERIFY_PIN_DIRECT)
reader_table[slot].pcsc.verify_ioctl = v;
@@ -1814,9 +1810,9 @@ pcsc_vendor_specific_init (int slot)
if (l == 1)
v = p[0];
else if (l == 2)
- v = ((p[1] << 8) | p[0]);
+ v = (((unsigned int)p[1] << 8) | p[0]);
else if (l == 4)
- v = ((p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
+ v = (((unsigned int)p[3] << 24) | (p[2] << 16) | (p[1] << 8) | p[0]);
if (tag == PCSCv2_PART10_PROPERTY_bMinPINSize)
reader_table[slot].pcsc.pinmin = v;
@@ -2112,7 +2108,7 @@ open_pcsc_reader_wrapped (const char *portstr)
i? strerror (errno) : "premature EOF");
goto command_failed;
}
- len = (msgbuf[1] << 24) | (msgbuf[2] << 16) | (msgbuf[3] << 8 ) | msgbuf[4];
+ len = buf32_to_size_t (msgbuf+1);
if (msgbuf[0] != 0x81 || len < 4)
{
log_error ("invalid response header from PC/SC received\n");
@@ -2125,8 +2121,7 @@ open_pcsc_reader_wrapped (const char *portstr)
(unsigned long)len);
goto command_failed;
}
- err = PCSC_ERR_MASK ((msgbuf[5] << 24) | (msgbuf[6] << 16)
- | (msgbuf[7] << 8 ) | msgbuf[8]);
+ err = PCSC_ERR_MASK (buf32_to_ulong (msgbuf+5));
if (err)
{
diff --git a/scd/app-openpgp.c b/scd/app-openpgp.c
index fc69fdb77..2e7a9fce7 100644
--- a/scd/app-openpgp.c
+++ b/scd/app-openpgp.c
@@ -66,6 +66,7 @@
#include "iso7816.h"
#include "app-common.h"
#include "tlv.h"
+#include "../include/host2net.h"
/* A table describing the DOs of the card. */
@@ -805,7 +806,7 @@ send_fprtime_if_not_null (ctrl_t ctrl, const char *keyword,
char numbuf1[50], numbuf2[50];
unsigned long value;
- value = (stamp[0] << 24) | (stamp[1]<<16) | (stamp[2]<<8) | stamp[3];
+ value = buf32_to_ulong (stamp);
if (!value)
return;
sprintf (numbuf1, "%d", number);
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c
index c4c0d9c54..a179aa890 100644
--- a/scd/ccid-driver.c
+++ b/scd/ccid-driver.c
@@ -94,6 +94,7 @@
#include "scdaemon.h"
#include "iso7816.h"
#include "ccid-driver.h"
+#include "../include/host2net.h"
#define DRVNAME "ccid-driver: "
@@ -317,7 +318,7 @@ static int send_escape_cmd (ccid_driver_t handle, const unsigned char *data,
static unsigned int
convert_le_u32 (const unsigned char *buf)
{
- return buf[0] | (buf[1] << 8) | (buf[2] << 16) | (buf[3] << 24);
+ return buf[0] | (buf[1] << 8) | (buf[2] << 16) | ((unsigned int)buf[3] << 24);
}
diff --git a/scd/pcsc-wrapper.c b/scd/pcsc-wrapper.c
index 0d572d2c1..4dc44eef9 100644
--- a/scd/pcsc-wrapper.c
+++ b/scd/pcsc-wrapper.c
@@ -273,7 +273,7 @@ read_32 (FILE *fp)
fprintf (stderr, PGM ": premature EOF while parsing request\n");
exit (1);
}
- return (c1 << 24) | (c2 << 16) | (c3 << 8) | c4;
+ return ((unsigned long)c1 << 24) | (c2 << 16) | (c3 << 8) | c4;
}
@@ -760,7 +760,8 @@ handle_control (unsigned char *argbuf, size_t arglen)
if (arglen < 4)
bad_request ("CONTROL");
- ioctl_code = (argbuf[0] << 24) | (argbuf[1] << 16) | (argbuf[2] << 8) | argbuf[3];
+ ioctl_code = (((pcsc_dword_t)argbuf[0] << 24)
+ | (argbuf[1] << 16) | (argbuf[2] << 8) | argbuf[3]);
argbuf += 4;
arglen -= 4;