On Tue, 2010-09-28 at 15:47 +0300, Martin Paljak wrote:
> Hello,
> On Sep 28, 2010, at 3:30 PM, Andre Zepezauer wrote:
> > personally I would like to keep this patch specific to the separation of
> > attributes from (public) TokenInfo and (internal) sc_pkcs15_card
> > structure. Fixing the use of tokeninfo->version is another task and
> > therefore I would suggest a separate patch for that one.
> Fine.
>
> > The matter of renaming the flags related to TokenInfo sounds easy at
> > first. But trying to do it the right way has taken some time. Here is
> > what I found:
> >
> > 1. Every data type directly related to PKCS#15 is prefixed with
> > sc_pkcs15. Upper case is used for constants.
> > 2. Every function operating on data types from 1) is prefixed with
> > sc_pkcs15 too.
> >
> > 3. Two conventions are used for the naming of PKCS#15 flags:
> > a) [SC_PKCS15] + [name of ASN1 type with last letter stripped] + [name of
> > flag]
> > (i.e. SC_PKCS15_PIN_FLAG_CASE_SENSITIVE)
> > b) [SC_PKCS15] + [PR + name of ASN1 type with "FLAGS" stripped] + [name
> > of flag]
> > (i.e. SC_PKCS15_PRKEY_USAGE_ENCRYPT, SC_PKCS15_PRKEY_ACCESS_EXTRACTABLE
> >
> > 4. Everything dealing with card I/O has prefix of "sc" but not "sc_pkcs15"
> >
> > Conclusion: For the new names of flags, I would prefer convention b) but
> > without the misleading "PR" letters. For example SC_PKCS15_TOKEN_READONLY.
> Yes, that would make sense.
Attached is the final patch. Naming of flags as mentioned above. All
changes were trivial with the exception of pkcs15init/pkcs15-oberthur.c
Kind Regards
Andre Zepezauer
Index: src/tools/pkcs15-crypt.c
===================================================================
--- src/tools/pkcs15-crypt.c (revision 4779)
+++ src/tools/pkcs15-crypt.c (working copy)
@@ -583,7 +583,7 @@
goto end;
}
if (verbose)
- fprintf(stderr, "Found %s!\n", p15card->label);
+ fprintf(stderr, "Found %s!\n", p15card->tokeninfo->label);
if (do_decipher) {
if ((err = get_key(SC_PKCS15_PRKEY_USAGE_DECRYPT, &key))
Index: src/tools/pkcs15-init.c
===================================================================
--- src/tools/pkcs15-init.c (revision 4779)
+++ src/tools/pkcs15-init.c (working copy)
@@ -462,7 +462,7 @@
* sure we're not messing things up */
if (verbose)
- printf("Found %s\n", p15card->label);
+ printf("Found %s\n", p15card->tokeninfo->label);
sc_pkcs15init_set_p15card(profile, p15card);
@@ -627,7 +627,7 @@
p15card = sc_pkcs15_card_new();
p15card->card = in_card;
- p15card->label = strdup("Dummy PKCS#15 object");
+ p15card->tokeninfo->label = strdup("Dummy PKCS#15 object");
ignore_cmdline_pins++;
r = sc_pkcs15init_erase_card(p15card, profile);
Index: src/tools/pkcs15-tool.c
===================================================================
--- src/tools/pkcs15-tool.c (revision 4779)
+++ src/tools/pkcs15-tool.c (working copy)
@@ -1105,17 +1105,17 @@
int i, count = 0;
- printf("PKCS#15 Card [%s]:\n", p15card->label);
- printf("\tVersion : %d\n", p15card->version);
- printf("\tSerial number : %s\n", p15card->serial_number);
- printf("\tManufacturer ID: %s\n", p15card->manufacturer_id);
- if (p15card->last_update)
- printf("\tLast update : %s\n", p15card->last_update);
- if (p15card->preferred_language)
- printf("\tLanguage : %s\n", p15card->preferred_language);
+ printf("PKCS#15 Card [%s]:\n", p15card->tokeninfo->label);
+ printf("\tVersion : %d\n", p15card->tokeninfo->version);
+ printf("\tSerial number : %s\n", p15card->tokeninfo->serial_number);
+ printf("\tManufacturer ID: %s\n", p15card->tokeninfo->manufacturer_id);
+ if (p15card->tokeninfo->last_update)
+ printf("\tLast update : %s\n", p15card->tokeninfo->last_update);
+ if (p15card->tokeninfo->preferred_language)
+ printf("\tLanguage : %s\n", p15card->tokeninfo->preferred_language);
printf("\tFlags : ");
for (i = 0; i < 4; i++) {
- if ((p15card->flags >> i) & 1) {
+ if ((p15card->tokeninfo->flags >> i) & 1) {
if (count)
printf(", ");
printf("%s", flags[i]);
@@ -1731,7 +1731,7 @@
if (opt_no_cache)
p15card->opts.use_file_cache = 0;
if (verbose)
- fprintf(stderr, "Found %s!\n", p15card->label);
+ fprintf(stderr, "Found %s!\n", p15card->tokeninfo->label);
if (do_verify_pin)
if ((err = verify_pin()))
Index: src/pkcs11/framework-pkcs15.c
===================================================================
--- src/pkcs11/framework-pkcs15.c (revision 4779)
+++ src/pkcs11/framework-pkcs15.c (working copy)
@@ -192,7 +192,7 @@
static void pkcs15_init_token_info(struct sc_pkcs15_card *p15card, CK_TOKEN_INFO_PTR pToken)
{
- strcpy_bp(pToken->manufacturerID, p15card->manufacturer_id, 32);
+ strcpy_bp(pToken->manufacturerID, p15card->tokeninfo->manufacturer_id, 32);
if (p15card->flags & SC_PKCS15_CARD_FLAG_EMULATED)
strcpy_bp(pToken->model, "PKCS#15 emulated", 16);
else
@@ -203,14 +203,12 @@
* _Assuming_ that the serial number is a Big Endian counter, this
* will assure that the serial within each type of card will be
* unique in pkcs11 (at least for the first 8^16 cards :-) */
- if (p15card->serial_number != NULL) {
- int sn_start = strlen(p15card->serial_number) - 16;
+ if (p15card->tokeninfo->serial_number != NULL) {
+ int sn_start = strlen(p15card->tokeninfo->serial_number) - 16;
if (sn_start < 0)
sn_start = 0;
- strcpy_bp(pToken->serialNumber,
- p15card->serial_number + sn_start,
- 16);
+ strcpy_bp(pToken->serialNumber, p15card->tokeninfo->serial_number + sn_start, 16);
}
pToken->ulMaxSessionCount = CK_EFFECTIVELY_INFINITE;
@@ -791,13 +789,13 @@
if (auth->label[0]) {
snprintf(tmp, sizeof(tmp), "%s (%s)",
- p15card->label, auth->label);
+ p15card->tokeninfo->label, auth->label);
} else {
- snprintf(tmp, sizeof(tmp), "%s", p15card->label);
+ snprintf(tmp, sizeof(tmp), "%s", p15card->tokeninfo->label);
}
slot->token_info.flags |= CKF_LOGIN_REQUIRED;
} else
- snprintf(tmp, sizeof(tmp), "%s", p15card->label);
+ snprintf(tmp, sizeof(tmp), "%s", p15card->tokeninfo->label);
strcpy_bp(slot->token_info.label, tmp, 32);
if (pin_info && pin_info->magic == SC_PKCS15_PIN_MAGIC) {
Index: src/tests/print.c
===================================================================
--- src/tests/print.c (revision 4779)
+++ src/tests/print.c (working copy)
@@ -25,15 +25,15 @@
int i, count = 0;
assert(mycard != NULL);
- printf("PKCS#15 Card [%s]:\n", mycard->label);
- printf("\tVersion : %d\n", mycard->version);
- printf("\tSerial number : %s\n", mycard->serial_number);
- printf("\tManufacturer ID: %s\n", mycard->manufacturer_id);
- if (mycard->preferred_language)
- printf("\tLanguage : %s\n", mycard->preferred_language);
+ printf("PKCS#15 Card [%s]:\n", mycard->tokeninfo->label);
+ printf("\tVersion : %d\n", mycard->tokeninfo->version);
+ printf("\tSerial number : %s\n", mycard->tokeninfo->serial_number);
+ printf("\tManufacturer ID: %s\n", mycard->tokeninfo->manufacturer_id);
+ if (mycard->tokeninfo->preferred_language)
+ printf("\tLanguage : %s\n", mycard->tokeninfo->preferred_language);
printf("\tFlags : ");
for (i = 0; i < 4; i++) {
- if ((mycard->flags >> i) & 1) {
+ if ((mycard->tokeninfo->flags >> i) & 1) {
if (count)
printf(", ");
printf("%s", flags[i]);
Index: src/pkcs15init/pkcs15-oberthur.c
===================================================================
--- src/pkcs15init/pkcs15-oberthur.c (revision 4779)
+++ src/pkcs15init/pkcs15-oberthur.c (working copy)
@@ -61,14 +61,12 @@
static int
cosm_write_tokeninfo (struct sc_pkcs15_card *p15card, struct sc_profile *profile,
- char *label, unsigned p15_flags)
+ char *label, unsigned p15card_flags, unsigned tinfo_flags)
{
struct sc_context *ctx = p15card->card->ctx;
struct sc_file *file = NULL;
- unsigned mask = SC_PKCS15_CARD_FLAG_PRN_GENERATION
- | SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED
- | SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED
- | SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED;
+ unsigned int p15card_mask = SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED | SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED;
+ unsigned int tinfo_mask = SC_PKCS15_TOKEN_PRN_GENERATION | SC_PKCS15_TOKEN_LOGIN_REQUIRED;
int rv, flags = 0;
size_t sz;
char *buffer = NULL;
@@ -77,7 +75,7 @@
return SC_ERROR_INVALID_ARGUMENTS;
SC_FUNC_CALLED(ctx, SC_LOG_DEBUG_VERBOSE);
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "cosm_write_tokeninfo() label '%s'; flags 0x%X", label, p15_flags);
+ sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "cosm_write_tokeninfo() label '%s'; p15card_flags 0x%X; tinfo_flags 0x%X", label, p15card_flags, tinfo_flags);
if (sc_profile_get_file(profile, COSM_TITLE"-token-info", &file))
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_INCONSISTENT_PROFILE, "Cannot find "COSM_TITLE"-token-info");
@@ -90,10 +88,10 @@
if (label)
strncpy(buffer, label, file->size - 4);
- else if (p15card->label)
- snprintf(buffer, file->size - 4, "%s", p15card->label);
- else if (profile->p15_spec && profile->p15_spec->label)
- snprintf(buffer, file->size - 4, "%s", profile->p15_spec->label);
+ else if (p15card->tokeninfo->label)
+ snprintf(buffer, file->size - 4, "%s", p15card->tokeninfo->label);
+ else if (profile->p15_spec && profile->p15_spec->tokeninfo->label)
+ snprintf(buffer, file->size - 4, "%s", profile->p15_spec->tokeninfo->label);
else
snprintf(buffer, file->size - 4, "OpenSC-Token");
@@ -101,16 +99,16 @@
if (sz < file->size - 4)
memset(buffer + sz, ' ', file->size - sz);
- if (p15_flags & SC_PKCS15_CARD_FLAG_PRN_GENERATION)
+ if (tinfo_flags & SC_PKCS15_TOKEN_PRN_GENERATION)
flags |= COSM_TOKEN_FLAG_PRN_GENERATION;
- if (p15_flags & SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED)
+ if (tinfo_flags & SC_PKCS15_TOKEN_LOGIN_REQUIRED)
flags |= COSM_TOKEN_FLAG_LOGIN_REQUIRED;
- if (p15_flags & SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED)
+ if (p15card_flags & SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED)
flags |= COSM_TOKEN_FLAG_USER_PIN_INITIALIZED;
- if (p15_flags & SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED)
+ if (p15card_flags & SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED)
flags |= COSM_TOKEN_FLAG_TOKEN_INITIALIZED;
sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "cosm_write_tokeninfo() token label '%s'; oberthur flags 0x%X", buffer, flags);
@@ -123,10 +121,13 @@
if (rv > 0)
rv = 0;
- p15card->flags = (p15card->flags & ~mask) | p15_flags;
+ p15card->flags = (p15card->flags & ~p15card_mask) | p15card_flags;
+ p15card->tokeninfo->flags = (p15card->tokeninfo->flags & ~tinfo_mask) | tinfo_flags;
- if (profile->p15_spec)
- profile->p15_spec->flags = (profile->p15_spec->flags & ~mask) | p15_flags;
+ if (profile->p15_spec) {
+ profile->p15_spec->flags = (profile->p15_spec->flags & ~p15card_mask) | p15card_flags;
+ profile->p15_spec->tokeninfo->flags = (profile->p15_spec->tokeninfo->flags & ~tinfo_mask) | tinfo_flags;
+ }
free(buffer);
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, rv);
@@ -282,7 +283,7 @@
}
rv = cosm_write_tokeninfo(p15card, profile, NULL,
- SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED | SC_PKCS15_CARD_FLAG_PRN_GENERATION);
+ SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED, SC_PKCS15_TOKEN_PRN_GENERATION);
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, rv);
}
@@ -386,10 +387,8 @@
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, rv, "cosm_update_pin() failed to change PIN");
rv = cosm_write_tokeninfo(p15card, profile, NULL,
- SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED
- | SC_PKCS15_CARD_FLAG_PRN_GENERATION
- | SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED
- | SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED);
+ SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED | SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED,
+ SC_PKCS15_TOKEN_PRN_GENERATION | SC_PKCS15_TOKEN_LOGIN_REQUIRED);
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, rv, "cosm_update_pin() failed to update tokeninfo");
}
@@ -839,10 +838,10 @@
memcpy(buf, tinfo->label, label_len);
memset(buf + label_len, ' ', file->size - 4 - label_len);
- if (p15card->flags & SC_PKCS15_CARD_FLAG_PRN_GENERATION)
+ if (p15card->tokeninfo->flags & SC_PKCS15_TOKEN_PRN_GENERATION)
flags |= 0x01;
- if (p15card->flags & SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED)
+ if (p15card->tokeninfo->flags & SC_PKCS15_TOKEN_LOGIN_REQUIRED)
flags |= 0x04;
if (p15card->flags & SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED)
Index: src/pkcs15init/profile.c
===================================================================
--- src/pkcs15init/profile.c (revision 4779)
+++ src/pkcs15init/profile.c (working copy)
@@ -283,11 +283,11 @@
pro->pkcs15.do_last_update = 1;
if (p15card) {
- p15card->label = strdup("OpenSC Card");
- p15card->manufacturer_id = strdup("OpenSC Project");
- p15card->serial_number = strdup("0000");
- p15card->flags = SC_PKCS15_CARD_FLAG_EID_COMPLIANT;
- p15card->version = 1;
+ p15card->tokeninfo->label = strdup("OpenSC Card");
+ p15card->tokeninfo->manufacturer_id = strdup("OpenSC Project");
+ p15card->tokeninfo->serial_number = strdup("0000");
+ p15card->tokeninfo->flags = SC_PKCS15_TOKEN_EID_COMPLIANT;
+ p15card->tokeninfo->version = 1;
/* Set up EF(TokenInfo) and EF(ODF) */
p15card->file_tokeninfo = init_file(SC_FILE_TYPE_WORKING_EF);
@@ -822,7 +822,7 @@
{
struct sc_pkcs15_card *p15card = cur->profile->p15_spec;
- return setstr(&p15card->label, argv[0]);
+ return setstr(&p15card->tokeninfo->label, argv[0]);
}
static int
@@ -830,7 +830,7 @@
{
struct sc_pkcs15_card *p15card = cur->profile->p15_spec;
- return setstr(&p15card->manufacturer_id, argv[0]);
+ return setstr(&p15card->tokeninfo->manufacturer_id, argv[0]);
}
/*
Index: src/pkcs15init/pkcs15-lib.c
===================================================================
--- src/pkcs15init/pkcs15-lib.c (revision 4779)
+++ src/pkcs15init/pkcs15-lib.c (working copy)
@@ -781,11 +781,11 @@
}
if (args->label) {
- if (p15card->label)
- free(p15card->label);
- p15card->label = strdup(args->label);
+ if (p15card->tokeninfo->label)
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = strdup(args->label);
}
- app->label = strdup(p15card->label);
+ app->label = strdup(p15card->tokeninfo->label);
/* See if we've set an SO PIN */
r = sc_pkcs15init_add_object(p15card, profile, SC_PKCS15_AODF, pin_obj);
@@ -2408,21 +2408,13 @@
int r;
/* set lastUpdate field */
- if (p15card->last_update != NULL)
- free(p15card->last_update);
- p15card->last_update = get_generalized_time(card->ctx);
- if (p15card->last_update == NULL)
+ if (p15card->tokeninfo->last_update != NULL)
+ free(p15card->tokeninfo->last_update);
+ p15card->tokeninfo->last_update = get_generalized_time(card->ctx);
+ if (p15card->tokeninfo->last_update == NULL)
return SC_ERROR_INTERNAL;
- /* create a temporary tokeninfo structure */
- tokeninfo.version = p15card->version;
- /* ugly opensc hack, we use the some high flags internaly */
- tokeninfo.flags = p15card->flags & 0xffffff;
- tokeninfo.label = p15card->label;
- tokeninfo.serial_number = p15card->serial_number;
- tokeninfo.manufacturer_id = p15card->manufacturer_id;
- tokeninfo.last_update = p15card->last_update;
- tokeninfo.preferred_language = p15card->preferred_language;
+ tokeninfo = *(p15card->tokeninfo);
if (profile->ops->emu_update_tokeninfo)
return profile->ops->emu_update_tokeninfo(profile, p15card, &tokeninfo);
@@ -3443,15 +3435,14 @@
int
sc_pkcs15init_get_manufacturer(struct sc_profile *profile, const char **res)
{
- *res = profile->p15_spec->manufacturer_id;
+ *res = profile->p15_spec->tokeninfo->manufacturer_id;
return 0;
}
-
int
sc_pkcs15init_get_serial(struct sc_profile *profile, const char **res)
{
- *res = profile->p15_spec->serial_number;
+ *res = profile->p15_spec->tokeninfo->serial_number;
return 0;
}
@@ -3459,9 +3450,9 @@
int
sc_pkcs15init_set_serial(struct sc_profile *profile, const char *serial)
{
- if (profile->p15_spec->serial_number)
- free(profile->p15_spec->serial_number);
- profile->p15_spec->serial_number = strdup(serial);
+ if (profile->p15_spec->tokeninfo->serial_number)
+ free(profile->p15_spec->tokeninfo->serial_number);
+ profile->p15_spec->tokeninfo->serial_number = strdup(serial);
return 0;
}
@@ -3470,7 +3461,7 @@
int
sc_pkcs15init_get_label(struct sc_profile *profile, const char **res)
{
- *res = profile->p15_spec->label;
+ *res = profile->p15_spec->tokeninfo->label;
return 0;
}
Index: src/libopensc/pkcs15-oberthur.c
===================================================================
--- src/libopensc/pkcs15-oberthur.c (revision 4779)
+++ src/libopensc/pkcs15-oberthur.c (working copy)
@@ -360,14 +360,14 @@
flags = *(buff + 0x22) * 0x100 + *(buff + 0x23);
- p15card->label = strdup(label);
- p15card->manufacturer_id = strdup("Oberthur/OpenSC");
+ p15card->tokeninfo->label = strdup(label);
+ p15card->tokeninfo->manufacturer_id = strdup("Oberthur/OpenSC");
if (flags & 0x01)
- p15card->flags |= SC_PKCS15_CARD_FLAG_PRN_GENERATION;
+ p15card->tokeninfo->flags |= SC_PKCS15_TOKEN_PRN_GENERATION;
if (flags & 0x04)
- p15card->flags |= SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED;
+ p15card->tokeninfo->flags |= SC_PKCS15_TOKEN_LOGIN_REQUIRED;
if (flags & 0x0C)
p15card->flags |= SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED;
@@ -375,8 +375,8 @@
if (flags & 0x0400)
p15card->flags |= SC_PKCS15_CARD_FLAG_TOKEN_INITIALIZED;
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "label %s", p15card->label);
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "manufacturer_id %s", p15card->manufacturer_id);
+ sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "label %s", p15card->tokeninfo->label);
+ sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "manufacturer_id %s", p15card->tokeninfo->manufacturer_id);
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, SC_SUCCESS);
}
@@ -508,7 +508,7 @@
break;
/* There are some private keys, so set LOGIN_REQUIRED flag */
- p15card->flags |= SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED;
+ p15card->tokeninfo->flags |= SC_PKCS15_TOKEN_LOGIN_REQUIRED;
rv = sc_pkcs15emu_oberthur_add_prvkey(p15card, file_id, size);
if (rv == SC_ERROR_SECURITY_STATUS_NOT_SATISFIED && postpone_allowed) {
@@ -530,7 +530,7 @@
break;
/* There are private data objects, so set LOGIN_REQUIRED flag */
- p15card->flags |= SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED;
+ p15card->tokeninfo->flags |= SC_PKCS15_TOKEN_LOGIN_REQUIRED;
rv = sc_pkcs15emu_oberthur_add_data(p15card, file_id, size, 1);
if (rv == SC_ERROR_SECURITY_STATUS_NOT_SATISFIED && postpone_allowed) {
@@ -938,12 +938,12 @@
SC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);
sc_bin_to_hex(card->serialnr.value, card->serialnr.len, serial, sizeof(serial), 0);
- p15card->serial_number = strdup(serial);
+ p15card->tokeninfo->serial_number = strdup(serial);
p15card->ops.parse_df = sc_awp_parse_df;
p15card->ops.clear = sc_awp_clear;
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Oberthur init: serial %s", p15card->serial_number);
+ sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Oberthur init: serial %s", p15card->tokeninfo->serial_number);
sc_format_path(AWP_PIN_DF, &path);
rv = sc_select_file(card, &path, NULL);
Index: src/libopensc/pkcs15-cache.c
===================================================================
--- src/libopensc/pkcs15-cache.c (revision 4779)
+++ src/libopensc/pkcs15-cache.c (working copy)
@@ -58,14 +58,14 @@
}
for (i = 0; i < pathlen; i++)
sprintf(pathname + 2*i, "%02X", pathptr[i]);
- if (p15card->serial_number != NULL) {
- if (p15card->last_update != NULL)
+ if (p15card->tokeninfo->serial_number != NULL) {
+ if (p15card->tokeninfo->last_update != NULL)
r = snprintf(buf, bufsize, "%s/%s_%s_%s", dir,
- p15card->serial_number, p15card->last_update,
+ p15card->tokeninfo->serial_number, p15card->tokeninfo->last_update,
pathname);
else
r = snprintf(buf, bufsize, "%s/%s_DATE_%s", dir,
- p15card->serial_number, pathname);
+ p15card->tokeninfo->serial_number, pathname);
if (r < 0)
return SC_ERROR_BUFFER_TOO_SMALL;
} else
Index: src/libopensc/pkcs15-openpgp.c
===================================================================
--- src/libopensc/pkcs15-openpgp.c (revision 4779)
+++ src/libopensc/pkcs15-openpgp.c (working copy)
@@ -87,23 +87,23 @@
size_t length;
int r, i;
- set_string(&p15card->label, "OpenPGP Card");
- set_string(&p15card->manufacturer_id, "OpenPGP project");
+ set_string(&p15card->tokeninfo->label, "OpenPGP Card");
+ set_string(&p15card->tokeninfo->manufacturer_id, "OpenPGP project");
if ((r = read_file(card, "004f", buffer, sizeof(buffer))) < 0)
goto failed;
sc_bin_to_hex(buffer, (size_t)r, string, sizeof(string), 0);
- set_string(&p15card->serial_number, string);
- p15card->version = (buffer[6] << 8) | buffer[7];
+ set_string(&p15card->tokeninfo->serial_number, string);
+ p15card->tokeninfo->version = (buffer[6] << 8) | buffer[7];
- p15card->flags = SC_PKCS15_CARD_FLAG_PRN_GENERATION | SC_PKCS15_CARD_FLAG_EID_COMPLIANT;
+ p15card->tokeninfo->flags = SC_PKCS15_TOKEN_PRN_GENERATION | SC_PKCS15_TOKEN_EID_COMPLIANT;
/* Extract preferred language */
r = read_file(card, "00655f2d", string, sizeof(string)-1);
if (r < 0)
goto failed;
string[r] = '\0';
- set_string(&p15card->preferred_language, string);
+ set_string(&p15card->tokeninfo->preferred_language, string);
/* Get Application Related Data (006E) */
if ((r = sc_get_data(card, 0x006E, buffer, sizeof(buffer))) < 0)
Index: src/libopensc/pkcs15-postecert.c
===================================================================
--- src/libopensc/pkcs15-postecert.c (revision 4779)
+++ src/libopensc/pkcs15-postecert.c (working copy)
@@ -193,9 +193,9 @@
goto failed;
}
- set_string(&p15card->label, "Postecert & Cnipa Card");
- set_string(&p15card->manufacturer_id, "Postecert");
- set_string(&p15card->serial_number, "0000");
+ set_string(&p15card->tokeninfo->label, "Postecert & Cnipa Card");
+ set_string(&p15card->tokeninfo->manufacturer_id, "Postecert");
+ set_string(&p15card->tokeninfo->serial_number, "0000");
sc_read_binary(card, 0, certlen, 2, 0);
Index: src/libopensc/pkcs15-tcos.c
===================================================================
--- src/libopensc/pkcs15-tcos.c (revision 4779)
+++ src/libopensc/pkcs15-tcos.c (working copy)
@@ -279,8 +279,8 @@
sprintf(dir,"%04X", f->id);
sc_file_free(f);
- p15card->manufacturer_id = strdup("TeleSec GmbH");
- p15card->label = strdup(card->type==SC_CARD_TYPE_TCOS_V3 ? "NetKey V3 Card" : "NetKey Card");
+ p15card->tokeninfo->manufacturer_id = strdup("TeleSec GmbH");
+ p15card->tokeninfo->label = strdup(card->type==SC_CARD_TYPE_TCOS_V3 ? "NetKey V3 Card" : "NetKey Card");
keylen= card->type==SC_CARD_TYPE_TCOS_V3 ? 2048 : 1024;
c_auth= card->type==SC_CARD_TYPE_TCOS_V3 ? "C500" : "C100";
@@ -360,8 +360,8 @@
sc_pkcs15_card_t *p15card
){
if(insert_cert(p15card,"8000DF01C000", 0x45, 1, "Signatur Zertifikat")) return 1;
- p15card->manufacturer_id = strdup("Deutsche Post");
- p15card->label = strdup("SignTrust Card");
+ p15card->tokeninfo->manufacturer_id = strdup("Deutsche Post");
+ p15card->tokeninfo->label = strdup("SignTrust Card");
insert_cert(p15card,"800082008220", 0x46, 1, "Verschluesselungs Zertifikat");
insert_cert(p15card,"800083008320", 0x47, 1, "Authentifizierungs Zertifikat");
@@ -390,8 +390,8 @@
sc_pkcs15_card_t *p15card
){
if(insert_cert(p15card,"3000C500", 0x45, 0, "Signatur Zertifikat")) return 1;
- p15card->manufacturer_id = strdup("DATEV");
- p15card->label = strdup("DATEV Classic");
+ p15card->tokeninfo->manufacturer_id = strdup("DATEV");
+ p15card->tokeninfo->label = strdup("DATEV Classic");
insert_cert(p15card,"DF02C200", 0x46, 0, "Verschluesselungs Zertifikat");
insert_cert(p15card,"DF02C500", 0x47, 0, "Authentifizierungs Zertifikat");
@@ -412,8 +412,8 @@
sc_pkcs15_card_t *p15card
){
if(!insert_cert(p15card,"41004352", 0x45, 1, "Zertifikat 1")){
- p15card->manufacturer_id = strdup("JLU Giessen");
- p15card->label = strdup("JLU Giessen Card");
+ p15card->tokeninfo->manufacturer_id = strdup("JLU Giessen");
+ p15card->tokeninfo->label = strdup("JLU Giessen Card");
insert_cert(p15card,"41004353", 0x46, 1, "Zertifikat 2");
insert_cert(p15card,"41004354", 0x47, 1, "Zertifikat 3");
@@ -422,8 +422,8 @@
insert_key(p15card,"41005105", 0x47, 0x85, 1024, 1, "Schluessel 3");
} else if(!insert_cert(p15card,"41014352", 0x45, 1, "Zertifikat 1")){
- p15card->manufacturer_id = strdup("TU Darmstadt");
- p15card->label = strdup("TUD Card");
+ p15card->tokeninfo->manufacturer_id = strdup("TU Darmstadt");
+ p15card->tokeninfo->label = strdup("TUD Card");
insert_cert(p15card,"41014353", 0x46, 1, "Zertifikat 2");
insert_cert(p15card,"41014354", 0x47, 1, "Zertifikat 3");
@@ -467,7 +467,7 @@
}
sc_bin_to_hex(serialnr.value, serialnr.len , serial, sizeof(serial), 0);
serial[19] = '\0';
- p15card->serial_number = strdup(serial);
+ p15card->tokeninfo->serial_number = strdup(serial);
if(!detect_netkey(p15card)) return SC_SUCCESS;
if(!detect_signtrust(p15card)) return SC_SUCCESS;
Index: src/libopensc/pkcs15-esinit.c
===================================================================
--- src/libopensc/pkcs15-esinit.c (revision 4779)
+++ src/libopensc/pkcs15-esinit.c (working copy)
@@ -56,20 +56,20 @@
r = sc_bin_to_hex(serial.value, serial.len, buf, sizeof(buf), 0);
if (r != SC_SUCCESS)
return SC_ERROR_INTERNAL;
- if (p15card->serial_number)
- free(p15card->serial_number);
- p15card->serial_number = malloc(strlen(buf) + 1);
- if (!p15card->serial_number)
+ if (p15card->tokeninfo->serial_number)
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = malloc(strlen(buf) + 1);
+ if (!p15card->tokeninfo->serial_number)
return SC_ERROR_INTERNAL;
- strcpy(p15card->serial_number, buf);
+ strcpy(p15card->tokeninfo->serial_number, buf);
/* the manufacturer ID, in this case Giesecke & Devrient GmbH */
- if (p15card->manufacturer_id)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = malloc(strlen(MANU_ID) + 1);
- if (!p15card->manufacturer_id)
+ if (p15card->tokeninfo->manufacturer_id)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = malloc(strlen(MANU_ID) + 1);
+ if (!p15card->tokeninfo->manufacturer_id)
return SC_ERROR_INTERNAL;
- strcpy(p15card->manufacturer_id, MANU_ID);
+ strcpy(p15card->tokeninfo->manufacturer_id, MANU_ID);
return SC_SUCCESS;
}
Index: src/libopensc/pkcs15-piv.c
===================================================================
--- src/libopensc/pkcs15-piv.c (revision 4779)
+++ src/libopensc/pkcs15-piv.c (working copy)
@@ -433,8 +433,8 @@
/* could read this off card if needed */
/* CSP does not like a - in the name */
- p15card->label = strdup("PIV_II");
- p15card->manufacturer_id = strdup(MANU_ID);
+ p15card->tokeninfo->label = strdup("PIV_II");
+ p15card->tokeninfo->manufacturer_id = strdup(MANU_ID);
/*
* get serial number
@@ -446,10 +446,10 @@
r = sc_card_ctl(card, SC_CARDCTL_GET_SERIALNR, &serial);
if (r < 0) {
sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL,"sc_card_ctl rc=%d",r);
- p15card->serial_number = strdup("00000000");
+ p15card->tokeninfo->serial_number = strdup("00000000");
} else {
sc_bin_to_hex(serial.value, serial.len, buf, sizeof(buf), 0);
- p15card->serial_number = strdup(buf);
+ p15card->tokeninfo->serial_number = strdup(buf);
}
sc_debug(card->ctx, SC_LOG_DEBUG_NORMAL, "PIV-II adding objects...");
Index: src/libopensc/pkcs15.c
===================================================================
--- src/libopensc/pkcs15.c (revision 4779)
+++ src/libopensc/pkcs15.c (working copy)
@@ -458,6 +458,13 @@
p15card = calloc(1, sizeof(struct sc_pkcs15_card));
if (p15card == NULL)
return NULL;
+
+ p15card->tokeninfo = calloc(1, sizeof(struct sc_pkcs15_tokeninfo));
+ if (p15card->tokeninfo == NULL) {
+ free(p15card);
+ return NULL;
+ }
+
p15card->magic = SC_PKCS15_CARD_MAGIC;
return p15card;
}
@@ -493,21 +500,22 @@
if (p15card->file_unusedspace != NULL)
sc_file_free(p15card->file_unusedspace);
p15card->magic = 0;
- if (p15card->label != NULL)
- free(p15card->label);
- if (p15card->serial_number != NULL)
- free(p15card->serial_number);
- if (p15card->manufacturer_id != NULL)
- free(p15card->manufacturer_id);
- if (p15card->last_update != NULL)
- free(p15card->last_update);
- if (p15card->preferred_language != NULL)
- free(p15card->preferred_language);
- if (p15card->seInfo != NULL) {
- for (i = 0; i < p15card->num_seInfo; i++)
- free(p15card->seInfo[i]);
- free(p15card->seInfo);
+ if (p15card->tokeninfo->label != NULL)
+ free(p15card->tokeninfo->label);
+ if (p15card->tokeninfo->serial_number != NULL)
+ free(p15card->tokeninfo->serial_number);
+ if (p15card->tokeninfo->manufacturer_id != NULL)
+ free(p15card->tokeninfo->manufacturer_id);
+ if (p15card->tokeninfo->last_update != NULL)
+ free(p15card->tokeninfo->last_update);
+ if (p15card->tokeninfo->preferred_language != NULL)
+ free(p15card->tokeninfo->preferred_language);
+ if (p15card->tokeninfo->seInfo != NULL) {
+ for (i = 0; i < p15card->tokeninfo->num_seInfo; i++)
+ free(p15card->tokeninfo->seInfo[i]);
+ free(p15card->tokeninfo->seInfo);
}
+ free(p15card->tokeninfo);
free(p15card);
}
@@ -519,8 +527,9 @@
if (p15card->ops.clear)
p15card->ops.clear(p15card);
- p15card->version = 0;
- p15card->flags = 0;
+ p15card->flags = 0;
+ p15card->tokeninfo->version = 0;
+ p15card->tokeninfo->flags = 0;
while (p15card->obj_list) {
struct sc_pkcs15_object *obj = p15card->obj_list;
@@ -547,33 +556,33 @@
sc_file_free(p15card->file_unusedspace);
p15card->file_unusedspace = NULL;
}
- if (p15card->label != NULL) {
- free(p15card->label);
- p15card->label = NULL;
+ if (p15card->tokeninfo->label != NULL) {
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = NULL;
}
- if (p15card->serial_number != NULL) {
- free(p15card->serial_number);
- p15card->serial_number = NULL;
+ if (p15card->tokeninfo->serial_number != NULL) {
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = NULL;
}
- if (p15card->manufacturer_id != NULL) {
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = NULL;
+ if (p15card->tokeninfo->manufacturer_id != NULL) {
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = NULL;
}
- if (p15card->last_update != NULL) {
- free(p15card->last_update);
- p15card->last_update = NULL;
+ if (p15card->tokeninfo->last_update != NULL) {
+ free(p15card->tokeninfo->last_update);
+ p15card->tokeninfo->last_update = NULL;
}
- if (p15card->preferred_language != NULL) {
- free(p15card->preferred_language);
- p15card->preferred_language = NULL;
+ if (p15card->tokeninfo->preferred_language != NULL) {
+ free(p15card->tokeninfo->preferred_language);
+ p15card->tokeninfo->preferred_language = NULL;
}
- if (p15card->seInfo != NULL) {
+ if (p15card->tokeninfo->seInfo != NULL) {
size_t i;
- for (i = 0; i < p15card->num_seInfo; i++)
- free(p15card->seInfo[i]);
- free(p15card->seInfo);
- p15card->seInfo = NULL;
- p15card->num_seInfo = 0;
+ for (i = 0; i < p15card->tokeninfo->num_seInfo; i++)
+ free(p15card->tokeninfo->seInfo[i]);
+ free(p15card->tokeninfo->seInfo);
+ p15card->tokeninfo->seInfo = NULL;
+ p15card->tokeninfo->num_seInfo = 0;
}
}
@@ -724,31 +733,19 @@
err = sc_pkcs15_parse_tokeninfo(ctx, &tokeninfo, buf, (size_t)err);
if (err != SC_SUCCESS)
goto end;
- p15card->version = tokeninfo.version;
- p15card->label = tokeninfo.label;
- p15card->serial_number = tokeninfo.serial_number;
- p15card->manufacturer_id = tokeninfo.manufacturer_id;
- p15card->last_update = tokeninfo.last_update;
- p15card->flags = tokeninfo.flags;
- p15card->preferred_language = tokeninfo.preferred_language;
- p15card->seInfo = tokeninfo.seInfo;
- p15card->num_seInfo = tokeninfo.num_seInfo;
- memcpy(&p15card->supported_algos, &tokeninfo.supported_algos, sizeof(p15card->supported_algos));
- for (ii=0; ii<SC_MAX_SUPPORTED_ALGORITHMS && p15card->supported_algos[ii].reference; ii++)
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "algo[%i]: ref:0x%X;mech:0x%X;op:0x%X;algo_ref:0x%X", ii,
- p15card->supported_algos[ii].reference, p15card->supported_algos[ii].mechanism,
- p15card->supported_algos[ii].operations, p15card->supported_algos[ii].algo_ref);
+ *(p15card->tokeninfo) = tokeninfo;
- if (!p15card->serial_number && card->serialnr.len) {
+ if (!p15card->tokeninfo->serial_number && card->serialnr.len) {
char *serial = calloc(1, card->serialnr.len*2 + 1);
size_t ii;
for(ii=0;ii<card->serialnr.len;ii++)
sprintf(serial + ii*2, "%02X", *(card->serialnr.value + ii));
- p15card->serial_number = serial;
- sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "p15card->serial_number %s", p15card->serial_number);
+ p15card->tokeninfo->serial_number = serial;
+ sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "p15card->tokeninfo->serial_number %s",
+ p15card->tokeninfo->serial_number);
}
ok = 1;
@@ -834,12 +831,12 @@
if (strcmp(p15card->card->driver->short_name,"cardos") == 0) {
/* D-Trust cards (D-TRUST, D-SIGN) */
- if (strstr(p15card->label,"D-TRUST") != NULL
- || strstr(p15card->label,"D-SIGN") != NULL) {
+ if (strstr(p15card->tokeninfo->label,"D-TRUST") != NULL
+ || strstr(p15card->tokeninfo->label,"D-SIGN") != NULL) {
/* D-TRUST Card 2.0 2cc (standard cards, which always add
* SHA1 prefix itself */
- if (strstr(p15card->label, "2cc") != NULL) {
+ if (strstr(p15card->tokeninfo->label, "2cc") != NULL) {
p15card->card->caps |= SC_CARD_CAP_ONLY_RAW_HASH_STRIPPED;
sc_debug(p15card->card->ctx, SC_LOG_DEBUG_NORMAL, "D-TRUST 2cc card detected, only SHA1 works with this card");
/* XXX: add detection when other hash than SHA1 is used with
@@ -849,7 +846,7 @@
/* D-SIGN multicard 2.0 2ca (cards working with all types of hashes
* and no addition of prefix) */
- else if (strstr(p15card->label, "2ca") != NULL) {
+ else if (strstr(p15card->tokeninfo->label, "2ca") != NULL) {
p15card->card->caps |= SC_CARD_CAP_ONLY_RAW_HASH;
sc_debug(p15card->card->ctx, SC_LOG_DEBUG_NORMAL, "D-TRUST 2ca card detected");
}
Index: src/libopensc/pkcs15.h
===================================================================
--- src/libopensc/pkcs15.h (revision 4779)
+++ src/libopensc/pkcs15.h (working copy)
@@ -434,21 +434,14 @@
typedef struct sc_pkcs15_card {
sc_card_t *card;
- char *label;
- /* fields from TokenInfo: */
- int version;
- char *serial_number, *manufacturer_id;
- char *last_update;
unsigned int flags;
- struct sc_supported_algo_info supported_algos[SC_MAX_SUPPORTED_ALGORITHMS];
-
sc_file_t *file_app;
sc_file_t *file_tokeninfo, *file_odf, *file_unusedspace;
struct sc_pkcs15_df *df_list;
struct sc_pkcs15_object *obj_list;
- int record_lengths[SC_PKCS15_DF_TYPE_COUNT];
+ sc_pkcs15_tokeninfo_t *tokeninfo;
sc_pkcs15_unusedspace_t *unusedspace_list;
int unusedspace_read;
@@ -458,22 +451,22 @@
int pin_cache_counter;
} opts;
- sc_pkcs15_sec_env_info_t **seInfo;
- size_t num_seInfo;
unsigned int magic;
void *dll_handle; /* shared lib for emulated cards */
- char *preferred_language;
struct sc_pkcs15_operations ops;
} sc_pkcs15_card_t;
-#define SC_PKCS15_CARD_FLAG_READONLY 0x01
-#define SC_PKCS15_CARD_FLAG_LOGIN_REQUIRED 0x02 /* Don't use */
-#define SC_PKCS15_CARD_FLAG_PRN_GENERATION 0x04
-#define SC_PKCS15_CARD_FLAG_EID_COMPLIANT 0x08
+/* flags suitable for sc_pkcs15_tokeninfo_t */
+#define SC_PKCS15_TOKEN_READONLY 0x01
+#define SC_PKCS15_TOKEN_LOGIN_REQUIRED 0x02 /* Don't use */
+#define SC_PKCS15_TOKEN_PRN_GENERATION 0x04
+#define SC_PKCS15_TOKEN_EID_COMPLIANT 0x08
+
+/* flags suitable for sc_pkcs15_card_t */
#define SC_PKCS15_CARD_FLAG_EMULATED 0x02000000
#define SC_PKCS15_CARD_FLAG_FIX_INTEGERS 0x04000000
#define SC_PKCS15_CARD_FLAG_USER_PIN_INITIALIZED 0x08000000
Index: src/libopensc/pkcs15-infocamere.c
===================================================================
--- src/libopensc/pkcs15-infocamere.c (revision 4779)
+++ src/libopensc/pkcs15-infocamere.c (working copy)
@@ -287,16 +287,16 @@
return SC_ERROR_WRONG_CARD;
}
- set_string(&p15card->serial_number, serial);
+ set_string(&p15card->tokeninfo->serial_number, serial);
if (ef_gdo[len_iccsn + 6] == 0x02)
- set_string(&p15card->label, "Infocamere 1202 Card");
+ set_string(&p15card->tokeninfo->label, "Infocamere 1202 Card");
else {
- set_string(&p15card->label, "Infocamere 1203 Card");
+ set_string(&p15card->tokeninfo->label, "Infocamere 1203 Card");
change_sign = 1;
}
- set_string(&p15card->manufacturer_id, "Infocamere");
+ set_string(&p15card->tokeninfo->manufacturer_id, "Infocamere");
authority = 0;
@@ -599,9 +599,9 @@
sc_read_binary(card, 15, serial, 15, 0);
serial[15] = '\0';
- set_string(&p15card->serial_number, (char *)serial);
- set_string(&p15card->label, "Infocamere 1400 Card");
- set_string(&p15card->manufacturer_id, "Infocamere");
+ set_string(&p15card->tokeninfo->serial_number, (char *)serial);
+ set_string(&p15card->tokeninfo->label, "Infocamere 1400 Card");
+ set_string(&p15card->tokeninfo->manufacturer_id, "Infocamere");
if ((r = loadCertificate(p15card, 0, certPath[0], certLabel[0])) !=
SC_SUCCESS) {
@@ -724,9 +724,9 @@
sc_read_binary(card, 30, serial, 16, 0);
serial[16] = '\0';
- set_string(&p15card->serial_number, (char *) serial);
- set_string(&p15card->label, "Infocamere 1600 Card");
- set_string(&p15card->manufacturer_id, "Infocamere");
+ set_string(&p15card->tokeninfo->serial_number, (char *) serial);
+ set_string(&p15card->tokeninfo->label, "Infocamere 1600 Card");
+ set_string(&p15card->tokeninfo->manufacturer_id, "Infocamere");
/* Adding certificates.
* Certificates are stored in a ZLib compressed form with
Index: src/libopensc/pkcs15-actalis.c
===================================================================
--- src/libopensc/pkcs15-actalis.c (revision 4779)
+++ src/libopensc/pkcs15-actalis.c (working copy)
@@ -191,9 +191,9 @@
return SC_ERROR_WRONG_CARD;
- set_string(&p15card->label, "Actalis");
- set_string(&p15card->manufacturer_id, "Actalis");
- set_string(&p15card->serial_number, (char *)serial);
+ set_string(&p15card->tokeninfo->label, "Actalis");
+ set_string(&p15card->tokeninfo->manufacturer_id, "Actalis");
+ set_string(&p15card->tokeninfo->serial_number, (char *)serial);
#ifdef ENABLE_ZLIB
for (i = 0; i < 3; i++) {
Index: src/libopensc/pkcs15-starcert.c
===================================================================
--- src/libopensc/pkcs15-starcert.c (revision 4779)
+++ src/libopensc/pkcs15-starcert.c (working copy)
@@ -165,21 +165,21 @@
r = sc_bin_to_hex(serial.value, serial.len, buf, sizeof(buf), 0);
if (r != SC_SUCCESS)
return SC_ERROR_INTERNAL;
- if (p15card->serial_number)
- free(p15card->serial_number);
- p15card->serial_number = malloc(strlen(buf) + 1);
- if (!p15card->serial_number)
+ if (p15card->tokeninfo->serial_number)
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = malloc(strlen(buf) + 1);
+ if (!p15card->tokeninfo->serial_number)
return SC_ERROR_INTERNAL;
- strcpy(p15card->serial_number, buf);
+ strcpy(p15card->tokeninfo->serial_number, buf);
/* the TokenInfo version number */
- p15card->version = 0;
+ p15card->tokeninfo->version = 0;
/* the manufacturer ID, in this case Giesecke & Devrient GmbH */
- if (p15card->manufacturer_id)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = malloc(strlen(MANU_ID) + 1);
- if (!p15card->manufacturer_id)
+ if (p15card->tokeninfo->manufacturer_id)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = malloc(strlen(MANU_ID) + 1);
+ if (!p15card->tokeninfo->manufacturer_id)
return SC_ERROR_INTERNAL;
- strcpy(p15card->manufacturer_id, MANU_ID);
+ strcpy(p15card->tokeninfo->manufacturer_id, MANU_ID);
/* set certs */
for (i = 0; certs[i].label; i++) {
Index: src/libopensc/pkcs15-tccardos.c
===================================================================
--- src/libopensc/pkcs15-tccardos.c (revision 4779)
+++ src/libopensc/pkcs15-tccardos.c (working copy)
@@ -306,27 +306,27 @@
if (r != SC_SUCCESS)
return r;
/* set card label */
- if (p15card->label != NULL)
- free(p15card->label);
- p15card->label = strdup(TC_CARDOS_LABEL);
- if (p15card->label == NULL)
+ if (p15card->tokeninfo->label != NULL)
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = strdup(TC_CARDOS_LABEL);
+ if (p15card->tokeninfo->label == NULL)
return SC_ERROR_OUT_OF_MEMORY;
/* set the manufacturer ID */
- if (p15card->manufacturer_id != NULL)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = strdup(MANU_ID);
- if (p15card->manufacturer_id == NULL)
+ if (p15card->tokeninfo->manufacturer_id != NULL)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = strdup(MANU_ID);
+ if (p15card->tokeninfo->manufacturer_id == NULL)
return SC_ERROR_OUT_OF_MEMORY;
/* set the serial number */
r = read_file(p15card->card, "3F002F02", gdo, &gdo_len);
if (r != SC_SUCCESS)
return SC_ERROR_INTERNAL;
sc_bin_to_hex(gdo + 7, 8, hex_buf, sizeof(hex_buf), 0);
- p15card->serial_number = strdup(hex_buf);
- if (p15card->serial_number == NULL)
+ p15card->tokeninfo->serial_number = strdup(hex_buf);
+ if (p15card->tokeninfo->serial_number == NULL)
return SC_ERROR_OUT_OF_MEMORY;
/* the TokenInfo version number */
- p15card->version = 0;
+ p15card->tokeninfo->version = 0;
/* select the application DF */
sc_format_path(TC_CARDOS_APP_DF, &path);
r = sc_select_file(card, &path, &file);
Index: src/libopensc/pkcs15-atrust-acos.c
===================================================================
--- src/libopensc/pkcs15-atrust-acos.c (revision 4779)
+++ src/libopensc/pkcs15-atrust-acos.c (working copy)
@@ -173,31 +173,31 @@
r = sc_bin_to_hex(buf, 8, buf2, sizeof(buf2), 0);
if (r != SC_SUCCESS)
return SC_ERROR_INTERNAL;
- if (p15card->serial_number)
- free(p15card->serial_number);
- p15card->serial_number = malloc(strlen(buf2) + 1);
- if (!p15card->serial_number)
+ if (p15card->tokeninfo->serial_number)
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = malloc(strlen(buf2) + 1);
+ if (!p15card->tokeninfo->serial_number)
return SC_ERROR_INTERNAL;
- strcpy(p15card->serial_number, buf2);
+ strcpy(p15card->tokeninfo->serial_number, buf2);
/* the TokenInfo version number */
- p15card->version = 0;
+ p15card->tokeninfo->version = 0;
/* manufacturer ID */
- if (p15card->manufacturer_id)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = malloc(strlen(MANU_ID) + 1);
- if (!p15card->manufacturer_id)
+ if (p15card->tokeninfo->manufacturer_id)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = malloc(strlen(MANU_ID) + 1);
+ if (!p15card->tokeninfo->manufacturer_id)
return SC_ERROR_INTERNAL;
- strcpy(p15card->manufacturer_id, MANU_ID);
+ strcpy(p15card->tokeninfo->manufacturer_id, MANU_ID);
/* card label */
- if (p15card->label)
- free(p15card->label);
- p15card->label = malloc(strlen(CARD_LABEL) + 1);
- if (!p15card->label)
+ if (p15card->tokeninfo->label)
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = malloc(strlen(CARD_LABEL) + 1);
+ if (!p15card->tokeninfo->label)
return SC_ERROR_INTERNAL;
- strcpy(p15card->label, CARD_LABEL);
+ strcpy(p15card->tokeninfo->label, CARD_LABEL);
/* set certs */
for (i = 0; certs[i].label; i++) {
Index: src/libopensc/pkcs15-gemsafeV1.c
===================================================================
--- src/libopensc/pkcs15-gemsafeV1.c (revision 4779)
+++ src/libopensc/pkcs15-gemsafeV1.c (working copy)
@@ -231,19 +231,19 @@
sc_debug(p15card->card->ctx, SC_LOG_DEBUG_NORMAL, "%s: Setting pkcs15 parameters\n", fn_name);
- if (p15card->label)
- free(p15card->label);
- p15card->label = malloc(strlen(APPLET_NAME) + 1);
- if (!p15card->label)
+ if (p15card->tokeninfo->label)
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = malloc(strlen(APPLET_NAME) + 1);
+ if (!p15card->tokeninfo->label)
return SC_ERROR_INTERNAL;
- strcpy(p15card->label, APPLET_NAME);
+ strcpy(p15card->tokeninfo->label, APPLET_NAME);
- if (p15card->serial_number)
- free(p15card->serial_number);
- p15card->serial_number = malloc(strlen(DRIVER_SERIAL_NUMBER) + 1);
- if (!p15card->serial_number)
+ if (p15card->tokeninfo->serial_number)
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = malloc(strlen(DRIVER_SERIAL_NUMBER) + 1);
+ if (!p15card->tokeninfo->serial_number)
return SC_ERROR_INTERNAL;
- strcpy(p15card->serial_number, DRIVER_SERIAL_NUMBER);
+ strcpy(p15card->tokeninfo->serial_number, DRIVER_SERIAL_NUMBER);
/* the GemSAFE applet version number */
sc_format_apdu(card, &apdu, SC_APDU_CASE_2_SHORT, 0xca, 0xdf, 0x03);
@@ -264,15 +264,15 @@
version = strtod( (const char *)(apdu.resp + 4), &endptr);
sc_debug(p15card->card->ctx, SC_LOG_DEBUG_NORMAL, "%s: version (float): %f, version (int): %d\n",
fn_name, version, (int)version);
- p15card->version = (int)version;
+ p15card->tokeninfo->version = (int)version;
/* the manufacturer ID, in this case GemPlus */
- if (p15card->manufacturer_id)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = malloc(strlen(MANU_ID) + 1);
- if (!p15card->manufacturer_id)
+ if (p15card->tokeninfo->manufacturer_id)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = malloc(strlen(MANU_ID) + 1);
+ if (!p15card->tokeninfo->manufacturer_id)
return SC_ERROR_INTERNAL;
- strcpy(p15card->manufacturer_id, MANU_ID);
+ strcpy(p15card->tokeninfo->manufacturer_id, MANU_ID);
/* set certs */
sc_debug(p15card->card->ctx, SC_LOG_DEBUG_NORMAL, "%s: Setting certificate\n", fn_name);
Index: src/libopensc/pkcs15-pteid.c
===================================================================
--- src/libopensc/pkcs15-pteid.c (revision 4779)
+++ src/libopensc/pkcs15-pteid.c (working copy)
@@ -83,16 +83,9 @@
r = sc_pkcs15_parse_tokeninfo(ctx, &tokeninfo, buf, (size_t) r);
if (r != SC_SUCCESS)
goto end;
- p15card->version = tokeninfo.version;
- p15card->label = tokeninfo.label;
- p15card->serial_number = tokeninfo.serial_number;
- p15card->manufacturer_id = tokeninfo.manufacturer_id;
- p15card->last_update = tokeninfo.last_update;
- p15card->flags = tokeninfo.flags;
- p15card->preferred_language = tokeninfo.preferred_language;
- p15card->seInfo = tokeninfo.seInfo;
- p15card->num_seInfo = tokeninfo.num_seInfo;
+ *(p15card->tokeninfo) = tokeninfo;
+
/* Card type detection */
if (card->type == SC_CARD_TYPE_IAS_PTEID)
type = IAS_CARD;
@@ -103,9 +96,9 @@
goto end;
}
- p15card->flags = SC_PKCS15_CARD_FLAG_PRN_GENERATION
- | SC_PKCS15_CARD_FLAG_EID_COMPLIANT
- | SC_PKCS15_CARD_FLAG_READONLY;
+ p15card->tokeninfo->flags = SC_PKCS15_TOKEN_PRN_GENERATION
+ | SC_PKCS15_TOKEN_EID_COMPLIANT
+ | SC_PKCS15_TOKEN_READONLY;
/* TODO: Use the cardholder's name? */
/* TODO: Use Portuguese descriptions? */
Index: src/libopensc/pkcs15-gemsafeGPK.c
===================================================================
--- src/libopensc/pkcs15-gemsafeGPK.c (revision 4779)
+++ src/libopensc/pkcs15-gemsafeGPK.c (working copy)
@@ -219,14 +219,14 @@
/* could read this off card if needed */
- p15card->label = strdup("GemSAFE");
- p15card->manufacturer_id = strdup(MANU_ID);
+ p15card->tokeninfo->label = strdup("GemSAFE");
+ p15card->tokeninfo->manufacturer_id = strdup(MANU_ID);
/* get serial number */
r = sc_card_ctl(card, SC_CARDCTL_GET_SERIALNR, &serial);
r = sc_bin_to_hex(serial.value, serial.len, buf, sizeof(buf), 0);
if (r != SC_SUCCESS)
return SC_ERROR_INTERNAL;
- p15card->serial_number = strdup(buf);
+ p15card->tokeninfo->serial_number = strdup(buf);
/* test if we have a gemsafe app df */
memset(&path, 0, sizeof(path));
Index: src/libopensc/pkcs15-esteid.c
===================================================================
--- src/libopensc/pkcs15-esteid.c (revision 4779)
+++ src/libopensc/pkcs15-esteid.c (working copy)
@@ -72,9 +72,9 @@
int r, i, flags;
sc_path_t tmppath;
- set_string (&p15card->label, "ID-kaart");
- set_string (&p15card->manufacturer_id, "AS Sertifitseerimiskeskus");
- p15card->version = 2; /* Increases as the code changes for EstEID happen, not only in this file */
+ set_string (&p15card->tokeninfo->label, "ID-kaart");
+ set_string (&p15card->tokeninfo->manufacturer_id, "AS Sertifitseerimiskeskus");
+ p15card->tokeninfo->version = 2; /* Increases as the code changes for EstEID happen, not only in this file */
/* Select application directory */
sc_format_path ("3f00eeee5044", &tmppath);
@@ -85,7 +85,7 @@
r = sc_read_record (card, SC_ESTEID_PD_DOCUMENT_NR, buff, sizeof(buff), SC_RECORD_BY_REC_NR);
SC_TEST_RET(card->ctx, SC_LOG_DEBUG_NORMAL, r, "read document number failed");
buff[r] = '\0';
- set_string (&p15card->serial_number, (const char *) buff);
+ set_string (&p15card->tokeninfo->serial_number, (const char *) buff);
#ifdef ENABLE_ICONV
/* Read the name of the cardholder and convert it into UTF-8 */
@@ -116,11 +116,11 @@
*outptr = '\0';
iconv_close(iso_utf);
snprintf(label, sizeof(label), "%s %s", name1, name2);
- set_string (&p15card->label, label);
+ set_string (&p15card->tokeninfo->label, label);
#endif
- p15card->flags = SC_PKCS15_CARD_FLAG_PRN_GENERATION
- | SC_PKCS15_CARD_FLAG_EID_COMPLIANT
- | SC_PKCS15_CARD_FLAG_READONLY;
+ p15card->tokeninfo->flags = SC_PKCS15_TOKEN_PRN_GENERATION
+ | SC_PKCS15_TOKEN_EID_COMPLIANT
+ | SC_PKCS15_TOKEN_READONLY;
/* EstEID uses 1024b RSA */
card->algorithm_count = 0;
Index: src/libopensc/pkcs15-itacns.c
===================================================================
--- src/libopensc/pkcs15-itacns.c (revision 4779)
+++ src/libopensc/pkcs15-itacns.c (working copy)
@@ -505,7 +505,7 @@
sc_pkcs15_free_data_object(p15_personaldata);
return SC_SUCCESS;
}
- set_string(&p15card->label, fullname);
+ set_string(&p15card->tokeninfo->label, fullname);
}
sc_pkcs15_free_data_object(p15_personaldata);
return SC_SUCCESS;
@@ -703,7 +703,7 @@
SC_FUNC_CALLED(p15card->card->ctx, 1);
- set_string(&p15card->label, p15card->card->name);
+ set_string(&p15card->tokeninfo->label, p15card->card->name);
if(p15card->card->drv_data) {
unsigned int mask_code, ic_code;
char buffer[256];
@@ -718,8 +718,8 @@
snprintf(buffer, sizeof(buffer), "IC: %s; mask: %s",
iso7816_ic_manufacturers[ic_code],
itacns_mask_manufacturers[mask_code]);
- set_string(&p15card->manufacturer_id, buffer);
- p15card->version = (data->os_version_h << 8
+ set_string(&p15card->tokeninfo->manufacturer_id, buffer);
+ p15card->tokeninfo->version = (data->os_version_h << 8
| data->os_version_l);
}
@@ -732,7 +732,7 @@
if (bytes < 0) return bytes;
if (bytes > 16) return -1;
serial[bytes] = '\0';
- set_string(&p15card->serial_number, (char*)serial);
+ set_string(&p15card->tokeninfo->serial_number, (char*)serial);
}
/* Is the card a CIE v1? */
Index: src/libopensc/pkcs15-westcos.c
===================================================================
--- src/libopensc/pkcs15-westcos.c (revision 4779)
+++ src/libopensc/pkcs15-westcos.c (working copy)
@@ -47,22 +47,22 @@
if (file)
sc_file_free(file);
file = NULL;
- if (p15card->label != NULL)
- free(p15card->label);
- p15card->label = strdup("westcos");
- if (p15card->manufacturer_id != NULL)
- free(p15card->manufacturer_id);
- p15card->manufacturer_id = strdup("CEV");
+ if (p15card->tokeninfo->label != NULL)
+ free(p15card->tokeninfo->label);
+ p15card->tokeninfo->label = strdup("westcos");
+ if (p15card->tokeninfo->manufacturer_id != NULL)
+ free(p15card->tokeninfo->manufacturer_id);
+ p15card->tokeninfo->manufacturer_id = strdup("CEV");
/* get serial number */
r = sc_card_ctl(card, SC_CARDCTL_GET_SERIALNR, &serial);
r = sc_bin_to_hex(serial.value, serial.len, buf, sizeof(buf), 0);
if (r)
goto out;
- if (p15card->serial_number != NULL)
- free(p15card->serial_number);
- p15card->serial_number = strdup(buf);
- p15card->version = buf[6];
+ if (p15card->tokeninfo->serial_number != NULL)
+ free(p15card->tokeninfo->serial_number);
+ p15card->tokeninfo->serial_number = strdup(buf);
+ p15card->tokeninfo->version = buf[6];
sc_format_path("AAAA", &path);
r = sc_select_file(card, &path, &file);
if (r)
_______________________________________________
opensc-devel mailing list
[email protected]
http://www.opensc-project.org/mailman/listinfo/opensc-devel