pkcs15: when setting object data's path, use, if available, the AID from 'DiscretionaryDataObject'
git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5111 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
47f997983e
commit
e7790508f6
|
@ -250,9 +250,16 @@ int sc_pkcs15_decode_cdf_entry(struct sc_pkcs15_card *p15card,
|
||||||
if (r == SC_ERROR_ASN1_END_OF_CONTENTS)
|
if (r == SC_ERROR_ASN1_END_OF_CONTENTS)
|
||||||
return r;
|
return r;
|
||||||
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "ASN.1 decoding failed");
|
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "ASN.1 decoding failed");
|
||||||
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
|
||||||
if (r < 0)
|
if (!p15card->app || !p15card->app->ddo.aid.len) {
|
||||||
return r;
|
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
||||||
|
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "Cannot make absolute path");
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info.path.aid = p15card->app->ddo.aid;
|
||||||
|
}
|
||||||
|
sc_debug(ctx, SC_LOG_DEBUG_ASN1, "Certificate path '%s'", sc_print_path(&info.path));
|
||||||
|
|
||||||
obj->type = SC_PKCS15_TYPE_CERT_X509;
|
obj->type = SC_PKCS15_TYPE_CERT_X509;
|
||||||
obj->data = malloc(sizeof(info));
|
obj->data = malloc(sizeof(info));
|
||||||
if (obj->data == NULL)
|
if (obj->data == NULL)
|
||||||
|
|
|
@ -113,9 +113,16 @@ int sc_pkcs15_decode_dodf_entry(struct sc_pkcs15_card *p15card,
|
||||||
if (r == SC_ERROR_ASN1_END_OF_CONTENTS)
|
if (r == SC_ERROR_ASN1_END_OF_CONTENTS)
|
||||||
return r;
|
return r;
|
||||||
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "ASN.1 decoding failed");
|
SC_TEST_RET(ctx, SC_LOG_DEBUG_NORMAL, r, "ASN.1 decoding failed");
|
||||||
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
|
||||||
if (r < 0)
|
if (!p15card->app || !p15card->app->ddo.aid.len) {
|
||||||
return r;
|
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
info.path.aid = p15card->app->ddo.aid;
|
||||||
|
}
|
||||||
|
|
||||||
obj->type = SC_PKCS15_TYPE_DATA_OBJECT;
|
obj->type = SC_PKCS15_TYPE_DATA_OBJECT;
|
||||||
obj->data = malloc(sizeof(info));
|
obj->data = malloc(sizeof(info));
|
||||||
if (obj->data == NULL)
|
if (obj->data == NULL)
|
||||||
|
|
|
@ -205,12 +205,19 @@ int sc_pkcs15_decode_prkdf_entry(struct sc_pkcs15_card *p15card,
|
||||||
sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Neither RSA or DSA or GOSTR3410 key in PrKDF entry.");
|
sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Neither RSA or DSA or GOSTR3410 key in PrKDF entry.");
|
||||||
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_INVALID_ASN1_OBJECT);
|
SC_FUNC_RETURN(ctx, SC_LOG_DEBUG_NORMAL, SC_ERROR_INVALID_ASN1_OBJECT);
|
||||||
}
|
}
|
||||||
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
|
||||||
if (r < 0) {
|
if (!p15card->app || !p15card->app->ddo.aid.len) {
|
||||||
if (info.params)
|
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
||||||
free(info.params);
|
if (r < 0) {
|
||||||
return r;
|
if (info.params)
|
||||||
|
free(info.params);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
info.path.aid = p15card->app->ddo.aid;
|
||||||
|
}
|
||||||
|
sc_debug(ctx, SC_LOG_DEBUG_ASN1, "PrivKey path '%s'", sc_print_path(&info.path));
|
||||||
|
|
||||||
/* OpenSC 0.11.4 and older encoded "keyReference" as a negative
|
/* OpenSC 0.11.4 and older encoded "keyReference" as a negative
|
||||||
value. Fixed in 0.11.5 we need to add a hack, so old cards
|
value. Fixed in 0.11.5 we need to add a hack, so old cards
|
||||||
|
|
|
@ -201,12 +201,18 @@ int sc_pkcs15_decode_pukdf_entry(struct sc_pkcs15_card *p15card,
|
||||||
} else {
|
} else {
|
||||||
obj->type = SC_PKCS15_TYPE_PUBKEY_DSA;
|
obj->type = SC_PKCS15_TYPE_PUBKEY_DSA;
|
||||||
}
|
}
|
||||||
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
if (!p15card->app || !p15card->app->ddo.aid.len) {
|
||||||
if (r < 0) {
|
r = sc_pkcs15_make_absolute_path(&p15card->file_app->path, &info.path);
|
||||||
if (info.params)
|
if (r < 0) {
|
||||||
free(info.params);
|
if (info.params)
|
||||||
return r;
|
free(info.params);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
info.path.aid = p15card->app->ddo.aid;
|
||||||
|
}
|
||||||
|
sc_debug(ctx, SC_LOG_DEBUG_ASN1, "PubKey path '%s'", sc_print_path(&info.path));
|
||||||
|
|
||||||
/* OpenSC 0.11.4 and older encoded "keyReference" as a negative
|
/* OpenSC 0.11.4 and older encoded "keyReference" as a negative
|
||||||
value. Fixed in 0.11.5 we need to add a hack, so old cards
|
value. Fixed in 0.11.5 we need to add a hack, so old cards
|
||||||
|
|
Loading…
Reference in New Issue