Cleanup westcos driver to remove warnings - by François Leblanc.
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@3786 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
268755c4d6
commit
5926c08c91
|
@ -144,19 +144,12 @@ static int westcos_check_sw(sc_card_t * card, unsigned int sw1,
|
|||
return iso_ops->check_sw(card, sw1, sw2);
|
||||
}
|
||||
|
||||
typedef struct mon_atr {
|
||||
size_t len;
|
||||
int flags;
|
||||
u8 *atr, *mask;
|
||||
} mon_atr_t;
|
||||
|
||||
static mon_atr_t atrs[] = {
|
||||
{13, 0x00,
|
||||
"\x3f\x69\x00\x00\x00\x64\x01\x00\x00\x00\x80\x90\x00",
|
||||
"\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\xf0\xff\xff"},
|
||||
{12, JAVACARD,
|
||||
"\x3b\x95\x94\x80\x1F\xC3\x80\x73\xC8\x21\x13\x54",
|
||||
"\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"}
|
||||
static struct sc_atr_table westcos_atrs[] = {
|
||||
/* westcos 2ko */
|
||||
{ "3F:69:00:00:00:64:01:00:00:00:80:90:00", "ff:ff:ff:ff:ff:ff:ff:00:00:00:f0:ff:ff", NULL, 0x00, 0, NULL },
|
||||
/* westcos applet */
|
||||
{ "3B:95:94:80:1F:C3:80:73:C8:21:13:54", "ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff", NULL, JAVACARD, 0, NULL },
|
||||
{ NULL, NULL, NULL, 0, 0, NULL }
|
||||
};
|
||||
|
||||
static int westcos_finish(sc_card_t * card)
|
||||
|
@ -172,63 +165,39 @@ static int westcos_finish(sc_card_t * card)
|
|||
|
||||
static int westcos_match_card(sc_card_t * card)
|
||||
{
|
||||
u8 *p, j;
|
||||
size_t i;
|
||||
mon_atr_t *matr;
|
||||
if (card->ctx->debug >= 1)
|
||||
sc_debug(card->ctx, "westcos_match_card %d, %X:%X:%X\n",
|
||||
card->atr_len, card->atr[0], card->atr[1],
|
||||
card->atr[2]);
|
||||
for (i = 0; i < sizeof(atrs) / sizeof(*atrs); i++) {
|
||||
matr = &atrs[i];
|
||||
if (matr->len != card->atr_len)
|
||||
continue;
|
||||
p = card->atr;
|
||||
for (j = 0; j < card->atr_len; j++) {
|
||||
if (((matr->mask[j]) & (*p)) != (matr->atr[j]))
|
||||
break;
|
||||
p++;
|
||||
if (*p == ':')
|
||||
p++;
|
||||
}
|
||||
if (j >= card->atr_len) {
|
||||
if (matr->flags & JAVACARD) {
|
||||
int r;
|
||||
sc_apdu_t apdu;
|
||||
u8 aid[] = {
|
||||
0xA0, 0x00, 0xCE, 0x00, 0x07, 0x01
|
||||
};
|
||||
sc_format_apdu(card, &apdu,
|
||||
SC_APDU_CASE_3_SHORT, 0xA4, 0x04,
|
||||
0);
|
||||
apdu.cla = 0x00;
|
||||
apdu.lc = sizeof(aid);
|
||||
apdu.datalen = sizeof(aid);
|
||||
apdu.data = aid;
|
||||
sc_ctx_suppress_errors_on(card->ctx);
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
sc_ctx_suppress_errors_off(card->ctx);
|
||||
if (r)
|
||||
continue;
|
||||
sc_ctx_suppress_errors_on(card->ctx);
|
||||
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||||
sc_ctx_suppress_errors_off(card->ctx);
|
||||
if (r)
|
||||
continue;
|
||||
}
|
||||
card->drv_data = malloc(sizeof(priv_data_t));
|
||||
if (card->drv_data == NULL)
|
||||
return SC_ERROR_OUT_OF_MEMORY;
|
||||
memset(card->drv_data, 0, sizeof(card->drv_data));
|
||||
if (matr->flags & JAVACARD) {
|
||||
priv_data_t *priv_data =
|
||||
(priv_data_t *) card->drv_data;
|
||||
priv_data->flags |= JAVACARD;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
int i;
|
||||
|
||||
i = _sc_match_atr(card, westcos_atrs, &card->type);
|
||||
if (i < 0)
|
||||
return 0;
|
||||
|
||||
/* JAVACARD, look for westcos applet */
|
||||
if (i == 1) {
|
||||
int r;
|
||||
sc_apdu_t apdu;
|
||||
u8 aid[] = {
|
||||
0xA0, 0x00, 0xCE, 0x00, 0x07, 0x01
|
||||
};
|
||||
sc_format_apdu(card, &apdu,
|
||||
SC_APDU_CASE_3_SHORT, 0xA4, 0x04,
|
||||
0);
|
||||
apdu.cla = 0x00;
|
||||
apdu.lc = sizeof(aid);
|
||||
apdu.datalen = sizeof(aid);
|
||||
apdu.data = aid;
|
||||
sc_ctx_suppress_errors_on(card->ctx);
|
||||
r = sc_transmit_apdu(card, &apdu);
|
||||
sc_ctx_suppress_errors_off(card->ctx);
|
||||
if (r)
|
||||
return 0;
|
||||
sc_ctx_suppress_errors_on(card->ctx);
|
||||
r = sc_check_sw(card, apdu.sw1, apdu.sw2);
|
||||
sc_ctx_suppress_errors_off(card->ctx);
|
||||
if (r)
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int westcos_init(sc_card_t * card)
|
||||
|
@ -236,8 +205,19 @@ static int westcos_init(sc_card_t * card)
|
|||
int r;
|
||||
const char *default_key;
|
||||
unsigned long exponent, flags;
|
||||
if (card == NULL || card->drv_data == NULL)
|
||||
if (card == NULL)// || card->drv_data == NULL)
|
||||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
|
||||
card->drv_data = malloc(sizeof(priv_data_t));
|
||||
if (card->drv_data == NULL)
|
||||
return SC_ERROR_OUT_OF_MEMORY;
|
||||
memset(card->drv_data, 0, sizeof(card->drv_data));
|
||||
if (card->type & JAVACARD) {
|
||||
priv_data_t *priv_data =
|
||||
(priv_data_t *) card->drv_data;
|
||||
priv_data->flags |= JAVACARD;
|
||||
}
|
||||
|
||||
card->cla = 0x00;
|
||||
card->max_send_size = 240;
|
||||
card->max_recv_size = 240;
|
||||
|
@ -264,9 +244,9 @@ static int westcos_init(sc_card_t * card)
|
|||
priv_data_t *priv_data = (priv_data_t *) (card->drv_data);
|
||||
priv_data->default_key.key_reference = 0;
|
||||
priv_data->default_key.key_len =
|
||||
sizeof(priv_data->default_key.key_value);
|
||||
sizeof(priv_data->default_key.key_value);
|
||||
r = sc_hex_to_bin(default_key, priv_data->default_key.key_value,
|
||||
&(priv_data->default_key.key_len));
|
||||
&(priv_data->default_key.key_len));
|
||||
if (r)
|
||||
return (r);
|
||||
}
|
||||
|
|
|
@ -488,8 +488,8 @@ typedef struct sc_cardctl_asepcos_activate_file {
|
|||
|
||||
typedef struct {
|
||||
int key_reference;
|
||||
int key_len; //8, 16 or 24
|
||||
u8 key_value[24];
|
||||
size_t key_len; //8, 16 or 24
|
||||
u8 key_value[24];
|
||||
}sc_autkey_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
@ -32,7 +32,7 @@ static int sc_pkcs15emu_westcos_init(sc_pkcs15_card_t * p15card)
|
|||
{
|
||||
int i, r;
|
||||
int modulus_length = 0, usage = 0;
|
||||
u8 buf[256];
|
||||
char buf[256];
|
||||
sc_card_t *card = p15card->card;
|
||||
sc_context_t *ctx = card->ctx;
|
||||
sc_serial_number_t serial;
|
||||
|
|
|
@ -268,9 +268,9 @@ static int westcos_pkcs15init_generate_key(sc_profile_t *profile,
|
|||
#ifndef ENABLE_OPENSSL
|
||||
return SC_ERROR_NOT_SUPPORTED;
|
||||
#else
|
||||
int r = SC_ERROR_UNKNOWN;
|
||||
long lg;
|
||||
char *p;
|
||||
int r = SC_ERROR_UNKNOWN;
|
||||
long lg;
|
||||
u8 *p;
|
||||
sc_pkcs15_prkey_info_t *key_info = (sc_pkcs15_prkey_info_t *) obj->data;
|
||||
RSA *rsa = NULL;
|
||||
BIGNUM *bn = NULL;
|
||||
|
|
|
@ -62,9 +62,7 @@ static int new_pin = 0;
|
|||
static int debloque = 0;
|
||||
|
||||
static char *get_filename = NULL;
|
||||
static char *get_path = NULL;
|
||||
static char *put_filename = NULL;
|
||||
static char *put_path = NULL;
|
||||
|
||||
static int do_convert_bignum(sc_pkcs15_bignum_t *dst, BIGNUM *src)
|
||||
{
|
||||
|
@ -90,7 +88,7 @@ static void print_openssl_erreur(void)
|
|||
fprintf(stderr, "%s\n", ERR_error_string(r, NULL));
|
||||
}
|
||||
|
||||
static verify_pin(sc_card_t *card, int pin_reference, char *pin_value)
|
||||
static int verify_pin(sc_card_t *card, int pin_reference, char *pin_value)
|
||||
{
|
||||
int r, tries_left = -1;
|
||||
struct sc_pin_cmd_data data;
|
||||
|
@ -117,7 +115,7 @@ static verify_pin(sc_card_t *card, int pin_reference, char *pin_value)
|
|||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
data.pin1.data = pin_value;
|
||||
data.pin1.data = (u8*)pin_value;
|
||||
data.pin1.len = strlen(pin_value);
|
||||
}
|
||||
|
||||
|
@ -140,7 +138,7 @@ static verify_pin(sc_card_t *card, int pin_reference, char *pin_value)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static change_pin(sc_card_t *card,
|
||||
static int change_pin(sc_card_t *card,
|
||||
int pin_reference,
|
||||
char *pin_value1,
|
||||
char *pin_value2)
|
||||
|
@ -170,10 +168,10 @@ static change_pin(sc_card_t *card,
|
|||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
data.pin1.data = pin_value1;
|
||||
data.pin1.data = (u8*)pin_value1;
|
||||
data.pin1.len = strlen(pin_value1);
|
||||
|
||||
data.pin2.data = pin_value2;
|
||||
data.pin2.data = (u8*)pin_value2;
|
||||
data.pin2.len = strlen(pin_value2);
|
||||
|
||||
}
|
||||
|
@ -198,7 +196,7 @@ static change_pin(sc_card_t *card,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static debloque_pin(sc_card_t *card,
|
||||
static int debloque_pin(sc_card_t *card,
|
||||
int pin_reference,
|
||||
char *puk_value,
|
||||
char *pin_value)
|
||||
|
@ -228,10 +226,10 @@ static debloque_pin(sc_card_t *card,
|
|||
return SC_ERROR_INVALID_ARGUMENTS;
|
||||
}
|
||||
|
||||
data.pin1.data = puk_value;
|
||||
data.pin1.data = (u8*)puk_value;
|
||||
data.pin1.len = strlen(puk_value);
|
||||
|
||||
data.pin2.data = pin_value;
|
||||
data.pin2.data = (u8*)pin_value;
|
||||
data.pin2.len = strlen(pin_value);
|
||||
|
||||
}
|
||||
|
@ -353,7 +351,7 @@ int main(int argc, char *argv[])
|
|||
{
|
||||
int r;
|
||||
int i = 1;
|
||||
u8 *p;
|
||||
char *p;
|
||||
int card_presente = 0;
|
||||
sc_context_param_t ctx_param;
|
||||
sc_reader_t *lecteur = NULL;
|
||||
|
@ -593,7 +591,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
pin_cmd.encoding = SC_PIN_ENCODING_GLP;
|
||||
pin_cmd.len = strlen(pin);
|
||||
pin_cmd.data = pin;
|
||||
pin_cmd.data = (u8*)pin;
|
||||
pin_cmd.max_length = 8;
|
||||
|
||||
ck.new_key.key_len = sc_build_pin(ck.new_key.key_value,
|
||||
|
@ -617,7 +615,7 @@ int main(int argc, char *argv[])
|
|||
|
||||
puk_cmd.encoding = SC_PIN_ENCODING_GLP;
|
||||
puk_cmd.len = strlen(puk);
|
||||
puk_cmd.data = puk;
|
||||
puk_cmd.data = (u8*)puk;
|
||||
puk_cmd.max_length = 8;
|
||||
|
||||
ck.new_key.key_len = sc_build_pin(ck.new_key.key_value,
|
||||
|
@ -655,10 +653,11 @@ int main(int argc, char *argv[])
|
|||
|
||||
if(keylen)
|
||||
{
|
||||
int lg;
|
||||
size_t lg;
|
||||
struct sc_pkcs15_pubkey key;
|
||||
struct sc_pkcs15_pubkey_rsa *dst = &(key.u.rsa);
|
||||
|
||||
u8 *pdata;
|
||||
|
||||
memset(&key, 0, sizeof(key));
|
||||
key.algorithm = SC_ALGORITHM_RSA;
|
||||
|
||||
|
@ -691,7 +690,7 @@ int main(int argc, char *argv[])
|
|||
#endif
|
||||
{
|
||||
fprintf(stderr,
|
||||
"RSA_generate_key_ex return %d\n", ERR_get_error());
|
||||
"RSA_generate_key_ex return %ld\n", ERR_get_error());
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
@ -700,11 +699,11 @@ int main(int argc, char *argv[])
|
|||
if(!i2d_RSAPrivateKey_bio(mem, rsa))
|
||||
{
|
||||
fprintf(stderr,
|
||||
"i2d_RSAPrivateKey_bio return %d\n", ERR_get_error());
|
||||
"i2d_RSAPrivateKey_bio return %ld\n", ERR_get_error());
|
||||
goto out;
|
||||
}
|
||||
|
||||
lg = BIO_get_mem_data(mem, &p);
|
||||
lg = BIO_get_mem_data(mem, &pdata);
|
||||
|
||||
sc_format_path("0001", &path);
|
||||
sc_ctx_suppress_errors_on(ctx);
|
||||
|
@ -756,7 +755,7 @@ int main(int argc, char *argv[])
|
|||
printf("Private key length is %d\n", lg);
|
||||
|
||||
printf("Write private key.\n");
|
||||
r = sc_update_binary(card,0,p,lg,0);
|
||||
r = sc_update_binary(card,0,pdata,lg,0);
|
||||
if(r<0) goto out;
|
||||
printf("Private key correctly written.\n");
|
||||
|
||||
|
@ -767,7 +766,7 @@ int main(int argc, char *argv[])
|
|||
|| !do_convert_bignum(&dst->exponent, rsa->e))
|
||||
goto out;
|
||||
|
||||
r = sc_pkcs15_encode_pubkey(ctx, &key, &p, &lg);
|
||||
r = sc_pkcs15_encode_pubkey(ctx, &key, &pdata, &lg);
|
||||
if(r) goto out;
|
||||
|
||||
printf("Public key length %d\n", lg);
|
||||
|
@ -777,7 +776,7 @@ int main(int argc, char *argv[])
|
|||
if(r) goto out;
|
||||
|
||||
printf("Write public key.\n");
|
||||
r = sc_update_binary(card,0,p,lg,0);
|
||||
r = sc_update_binary(card,0,pdata,lg,0);
|
||||
if(r<0) goto out;
|
||||
printf("Public key correctly written.\n");
|
||||
|
||||
|
@ -785,9 +784,10 @@ int main(int argc, char *argv[])
|
|||
|
||||
if(cert)
|
||||
{
|
||||
BIO *bio;
|
||||
X509 *xp;
|
||||
|
||||
BIO *bio;
|
||||
X509 *xp;
|
||||
u8 *pdata;
|
||||
|
||||
bio = BIO_new(BIO_s_file());
|
||||
if (BIO_read_filename(bio, cert) <= 0)
|
||||
{
|
||||
|
@ -804,7 +804,7 @@ int main(int argc, char *argv[])
|
|||
}
|
||||
else
|
||||
{
|
||||
int lg = cert2der(xp, &p);
|
||||
int lg = cert2der(xp, &pdata);
|
||||
|
||||
sc_format_path("0002", &path);
|
||||
r = sc_select_file(card, &path, NULL);
|
||||
|
@ -813,14 +813,14 @@ int main(int argc, char *argv[])
|
|||
/* FIXME: verifier taille fichier compatible... */
|
||||
printf("Write certificate %s.\n", cert);
|
||||
|
||||
r = sc_update_binary(card,0,p,lg,0);
|
||||
r = sc_update_binary(card,0,pdata,lg,0);
|
||||
if(r<0)
|
||||
{
|
||||
if(p) free(p);
|
||||
if(pdata) free(pdata);
|
||||
goto out;
|
||||
}
|
||||
if(xp) X509_free(xp);
|
||||
if(p) free(p);
|
||||
if(pdata) free(pdata);
|
||||
|
||||
printf("Certificate correctly written.\n");
|
||||
}
|
||||
|
@ -956,5 +956,6 @@ out:
|
|||
if (ctx)
|
||||
sc_release_context(ctx);
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue