git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2460 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
nils 2005-08-03 18:29:21 +00:00
parent d443d373a4
commit 4dd3c3f382
3 changed files with 21 additions and 24 deletions

View File

@ -132,7 +132,7 @@ static long t1, t2, tot_read = 0, tot_dur = 0, dur;
#define BELPIC_KEY_REF_NONREP 0x83 #define BELPIC_KEY_REF_NONREP 0x83
/* Used for a trick in select file and read binary */ /* Used for a trick in select file and read binary */
static size_t next_idx = -1; static size_t next_idx = (size_t)-1;
static struct sc_atr_table belpic_atrs[] = { static struct sc_atr_table belpic_atrs[] = {
/* Applet V1.1 */ /* Applet V1.1 */
@ -817,7 +817,7 @@ static int get_language(sc_card_t *card)
#endif /* GET_LANG_FROM_CARD */ #endif /* GET_LANG_FROM_CARD */
static scconf_block *get_belpic_conf(sc_context_t *ctx, char *name) static scconf_block *get_belpic_conf(sc_context_t *ctx, const char *name)
{ {
scconf_block *conf_block = NULL, **blocks; scconf_block *conf_block = NULL, **blocks;
int i; int i;
@ -1089,7 +1089,7 @@ static int belpic_select_file(sc_card_t *card,
if (r) if (r)
SC_FUNC_RETURN(card->ctx, 2, r); SC_FUNC_RETURN(card->ctx, 2, r);
next_idx = -1; /* reset */ next_idx = (size_t)-1; /* reset */
if (file_out != NULL) { if (file_out != NULL) {
file = sc_file_new(); file = sc_file_new();

View File

@ -104,7 +104,7 @@ static int my_pin_cmd(sc_card_t * card, struct sc_pin_cmd_data * data,
memset(newpin, 0xff, sizeof(newpin)); memset(newpin, 0xff, sizeof(newpin));
if (data->pin1.data && data->pin1.len < 8 && data->pin1.len > 0) { if (data->pin1.data && data->pin1.len < 8 && data->pin1.len > 0) {
memcpy(newpin,data->pin1.data, data->pin1.len); memcpy(newpin,data->pin1.data, (size_t)data->pin1.len);
newpin[data->pin1.len] = 0x00; newpin[data->pin1.len] = 0x00;
sc_debug(card->ctx, "pin len=%d", data->pin1.len); sc_debug(card->ctx, "pin len=%d", data->pin1.len);
@ -123,9 +123,6 @@ static int my_pin_cmd(sc_card_t * card, struct sc_pin_cmd_data * data,
} }
SC_FUNC_RETURN(card->ctx, 2, r); SC_FUNC_RETURN(card->ctx, 2, r);
return r;
} }
@ -203,7 +200,7 @@ static int sc_pkcs15emu_gemsafe_init(sc_pkcs15_card_t *p15card)
u8 sysrec[7]; u8 sysrec[7];
int num_keyinfo = 0; int num_keyinfo = 0;
keyinfo keyinfo[8]; /* will loook for 8 keys */ keyinfo kinfo[8]; /* will loook for 8 keys */
u8 modulus_buf[ 1 + 1024 / 8]; /* tag+modulus */ u8 modulus_buf[ 1 + 1024 / 8]; /* tag+modulus */
u8 *cp; u8 *cp;
char buf[256]; char buf[256];
@ -269,26 +266,26 @@ static int sc_pkcs15emu_gemsafe_init(sc_pkcs15_card_t *p15card)
} }
switch (sysrec[1]) { switch (sysrec[1]) {
case 0x00: keyinfo[num_keyinfo].modulus_len = 512 / 8; break; case 0x00: kinfo[num_keyinfo].modulus_len = 512 / 8; break;
case 0x10: keyinfo[num_keyinfo].modulus_len = 768 / 8; break; case 0x10: kinfo[num_keyinfo].modulus_len = 768 / 8; break;
case 0x11: keyinfo[num_keyinfo].modulus_len = 1024 / 8; break; case 0x11: kinfo[num_keyinfo].modulus_len = 1024 / 8; break;
default: default:
sc_error(card->ctx, "Unsupported modulus length"); sc_error(card->ctx, "Unsupported modulus length");
continue; continue;
} }
keyinfo[num_keyinfo].fileid = i; kinfo[num_keyinfo].fileid = i;
sc_pkcs15_format_id("NONE", &keyinfo[num_keyinfo].id); sc_pkcs15_format_id("NONE", &kinfo[num_keyinfo].id);
sc_debug(card->ctx,"reading modulus"); sc_debug(card->ctx,"reading modulus");
r = sc_read_record(card, 2, modulus_buf, r = sc_read_record(card, 2, modulus_buf,
keyinfo[num_keyinfo].modulus_len+1, SC_RECORD_BY_REC_NR); kinfo[num_keyinfo].modulus_len+1, SC_RECORD_BY_REC_NR);
if (r < 0) if (r < 0)
continue; continue;
/* need to reverse the modulus skiping the tag */ /* need to reverse the modulus skiping the tag */
j = keyinfo[num_keyinfo].modulus_len; j = kinfo[num_keyinfo].modulus_len;
cp = keyinfo[num_keyinfo].modulus; cp = kinfo[num_keyinfo].modulus;
while (j--) while (j--)
*cp++ = modulus_buf[j + 1]; *cp++ = modulus_buf[j + 1];
num_keyinfo++; num_keyinfo++;
@ -401,10 +398,10 @@ static int sc_pkcs15emu_gemsafe_init(sc_pkcs15_card_t *p15card)
return SC_ERROR_INTERNAL; return SC_ERROR_INTERNAL;
for (j = 0; j < num_keyinfo; j++) { for (j = 0; j < num_keyinfo; j++) {
if (cert_out->key.u.rsa.modulus.len == keyinfo[j].modulus_len && if (cert_out->key.u.rsa.modulus.len == kinfo[j].modulus_len &&
memcmp(cert_out->key.u.rsa.modulus.data, memcmp(cert_out->key.u.rsa.modulus.data,
&keyinfo[j].modulus, cert_out->key.u.rsa.modulus.len) == 0) { &kinfo[j].modulus, cert_out->key.u.rsa.modulus.len) == 0) {
memcpy(&keyinfo[j].id, &cert_info.id, sizeof(sc_pkcs15_id_t)); memcpy(&kinfo[j].id, &cert_info.id, sizeof(sc_pkcs15_id_t));
sc_debug(card->ctx, "found match"); sc_debug(card->ctx, "found match");
} }
} }
@ -478,11 +475,11 @@ static int sc_pkcs15emu_gemsafe_init(sc_pkcs15_card_t *p15card)
/* This allows us to have a card with a key but no cert */ /* This allows us to have a card with a key but no cert */
for (j = 0; j < num_keyinfo; j++) { for (j = 0; j < num_keyinfo; j++) {
if (sc_pkcs15_compare_id(&keyinfo[j].id, &prkey_info.id)) { if (sc_pkcs15_compare_id(&kinfo[j].id, &prkey_info.id)) {
sc_debug(card->ctx, "found key in file %d for id %d", sc_debug(card->ctx, "found key in file %d for id %d",
keyinfo[j].fileid, prkey_info.id); kinfo[j].fileid, prkey_info.id);
prkey_info.path.value[4] = keyinfo[j].fileid >> 8; prkey_info.path.value[4] = kinfo[j].fileid >> 8;
prkey_info.path.value[5] = keyinfo[j].fileid & 0xff; prkey_info.path.value[5] = kinfo[j].fileid & 0xff;
break; break;
} }
} }

View File

@ -87,7 +87,7 @@ sc_pkcs15emu_openpgp_init(sc_pkcs15_card_t *p15card)
if ((r = read_file(card, "004f", buffer, sizeof(buffer))) < 0) if ((r = read_file(card, "004f", buffer, sizeof(buffer))) < 0)
goto failed; goto failed;
sc_bin_to_hex(buffer, r, string, sizeof(string), 0); sc_bin_to_hex(buffer, (size_t)r, string, sizeof(string), 0);
set_string(&p15card->serial_number, string); set_string(&p15card->serial_number, string);
p15card->version = (buffer[6] << 8) | buffer[7]; p15card->version = (buffer[6] << 8) | buffer[7];