[pkg-opensc-commit] [opensc] 186/295: card-epass2003: Fixed plaintext communication and ATR mask (#967)
Eric Dorland
eric at moszumanska.debian.org
Sat Jun 24 21:11:30 UTC 2017
This is an automated email from the git hooks/post-receive script.
eric pushed a commit to branch master
in repository opensc.
commit 45e1732bb5b020ceaf1892527c784294b28b67a8
Author: Feitian Technologies <hongbin at ftsafe.com>
Date: Mon Mar 6 19:40:00 2017 +0800
card-epass2003: Fixed plaintext communication and ATR mask (#967)
The old code only support encrypted communication for ePass2003 USB PKI
Token, now add plaintext communication support, the code now can using
ePass2003 USB PKI Token and ePass2003 PKI applet with java card.
The last mask code has issue, cannot show the OEM ID and SN, not modify
it. the rule made by Feitian only.
---
src/libopensc/card-entersafe.c | 10 +++++-----
src/libopensc/card-epass2003.c | 23 ++++++++++++++++++-----
2 files changed, 23 insertions(+), 10 deletions(-)
diff --git a/src/libopensc/card-entersafe.c b/src/libopensc/card-entersafe.c
index 6e18252..7aecf1a 100644
--- a/src/libopensc/card-entersafe.c
+++ b/src/libopensc/card-entersafe.c
@@ -49,23 +49,23 @@ static struct sc_atr_table entersafe_atrs[] = {
"EJAVA/PK-01C-T0",SC_CARD_TYPE_ENTERSAFE_EJAVA_PK_01C_T0,0,NULL},
{
"3B:FC:18:00:00:81:31:80:45:90:67:46:4A:21:28:8C:58:00:00:00:00:B7",
- "ff:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff",
+ "ff:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:00",
"EJAVA/H10CR/PK-01C-T1",SC_CARD_TYPE_ENTERSAFE_EJAVA_H10CR_PK_01C_T1,0,NULL},
{
"3B:FC:18:00:00:81:31:80:45:90:67:46:4A:20:25:c3:30:00:00:00:00",
- "ff:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff",
+ "ff:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:00:00:00:00",
"EJAVA/D11CR/PK-01C-T1",SC_CARD_TYPE_ENTERSAFE_EJAVA_D11CR_PK_01C_T1,0,NULL},
{
"3B:FC:18:00:00:81:31:80:45:90:67:46:4A:00:6A:04:24:00:00:00:00:20",
- "ff:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff",
+ "ff:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:00",
"EJAVA/C21C/PK-01C-T1",SC_CARD_TYPE_ENTERSAFE_EJAVA_C21C_PK_01C_T1,0,NULL},
{
"3B:FC:18:00:00:81:31:80:45:90:67:46:4A:00:68:08:04:00:00:00:00:0E",
- "ff:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff",
+ "ff:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:00",
"EJAVA/A22CR/PK-01C-T1",SC_CARD_TYPE_ENTERSAFE_EJAVA_A22CR_PK_01C_T1,0,NULL},
{
"3B:FC:18:00:00:81:31:80:45:90:67:46:4A:10:27:61:30:00:00:00:00:0C",
- "ff:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff",
+ "ff:00:00:00:00:00:00:00:00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:00",
"EJAVA/A40CR/PK-01C-T1",SC_CARD_TYPE_ENTERSAFE_EJAVA_A40CR_PK_01C_T1,0,NULL},
{
"3b:fc:18:00:00:81:31:80:45:90:67:46:4a:00:68:08:06:00:00:00:00:0c",
diff --git a/src/libopensc/card-epass2003.c b/src/libopensc/card-epass2003.c
index e702b71..2a0a7ff 100644
--- a/src/libopensc/card-epass2003.c
+++ b/src/libopensc/card-epass2003.c
@@ -865,9 +865,9 @@ epass2003_sm_wrap_apdu(struct sc_card *card, struct sc_apdu *plain, struct sc_ap
case 0x00:
case 0x04:
sm->datalen = plain->datalen;
- sm->data = plain->data;
+ memcpy((void *)sm->data, plain->data, plain->datalen);
sm->resplen = plain->resplen;
- sm->resp = plain->resp;
+ memcpy(sm->resp, plain->resp, plain->resplen);
break;
case 0x0C:
memset(buf, 0, sizeof(buf));
@@ -996,13 +996,18 @@ epass2003_sm_free_wrapped_apdu(struct sc_card *card,
if (!(*sm_apdu))
LOG_FUNC_RETURN(ctx, SC_SUCCESS);
+
if (plain)
rv = epass2003_sm_unwrap_apdu(card, *sm_apdu, plain);
- if ((*sm_apdu)->data)
- free((unsigned char *) (*sm_apdu)->data);
- if ((*sm_apdu)->resp)
+ if ((*sm_apdu)->data) {
+ unsigned char * p = (unsigned char *)((*sm_apdu)->data);
+ free(p);
+ }
+ if ((*sm_apdu)->resp) {
free((*sm_apdu)->resp);
+ }
+
free(*sm_apdu);
*sm_apdu = NULL;
@@ -1056,6 +1061,7 @@ err:
free((unsigned char *) apdu->data);
free(apdu->resp);
free(apdu);
+ apdu = NULL;
}
LOG_FUNC_RETURN(ctx, rv);
}
@@ -1157,6 +1163,13 @@ epass2003_init(struct sc_card *card)
else
exdata->smtype = KEY_TYPE_DES;
+ if (0x84 == data[14]) {
+ if (0x00 == data[16]) {
+ exdata->sm = SM_PLAIN;
+ }
+ }
+
+
/* mutual authentication */
card->max_recv_size = 0xD8;
card->max_send_size = 0xE8;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-opensc/opensc.git
More information about the pkg-opensc-commit
mailing list