OpenPGP: get flags & algorithms in pgp_get_card_features()
Extend pgp_get_card_features() to get card's flags & supported algorithms from the card: * get algorith values from "algorithm attributes" DOs 0x00c1 - 0x00c3 Signed-off-by: Peter Marschall <peter@adpm.de> git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@5495 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
parent
c46152d89b
commit
782b4efa73
@ -265,7 +265,6 @@ static int
|
|||||||
pgp_init(sc_card_t *card)
|
pgp_init(sc_card_t *card)
|
||||||
{
|
{
|
||||||
struct pgp_priv_data *priv;
|
struct pgp_priv_data *priv;
|
||||||
unsigned long flags;
|
|
||||||
sc_path_t aid;
|
sc_path_t aid;
|
||||||
sc_file_t *file = NULL;
|
sc_file_t *file = NULL;
|
||||||
struct do_info *info;
|
struct do_info *info;
|
||||||
@ -285,20 +284,6 @@ pgp_init(sc_card_t *card)
|
|||||||
|
|
||||||
card->cla = 0x00;
|
card->cla = 0x00;
|
||||||
|
|
||||||
/* Is this correct? */
|
|
||||||
/* OpenPGP card spec 1.1 & 2.0, section 2.1 */
|
|
||||||
flags = SC_ALGORITHM_RSA_RAW;
|
|
||||||
/* OpenPGP card spec 1.1 & 2.0, section 7.2.9 & 7.2.10 */
|
|
||||||
flags |= SC_ALGORITHM_RSA_PAD_PKCS1;
|
|
||||||
flags |= SC_ALGORITHM_RSA_HASH_NONE;
|
|
||||||
|
|
||||||
/* Is this correct? */
|
|
||||||
_sc_card_add_rsa_alg(card, 512, flags, 0);
|
|
||||||
_sc_card_add_rsa_alg(card, 768, flags, 0);
|
|
||||||
_sc_card_add_rsa_alg(card, 1024, flags, 0);
|
|
||||||
if (card->type == SC_CARD_TYPE_OPENPGP_V2)
|
|
||||||
_sc_card_add_rsa_alg(card, 2048, flags, 0);
|
|
||||||
|
|
||||||
/* set pointer to correct list of card objects */
|
/* set pointer to correct list of card objects */
|
||||||
priv->pgp_objects = (card->type == SC_CARD_TYPE_OPENPGP_V2)
|
priv->pgp_objects = (card->type == SC_CARD_TYPE_OPENPGP_V2)
|
||||||
? pgp2_objects : pgp1_objects;
|
? pgp2_objects : pgp1_objects;
|
||||||
@ -413,6 +398,27 @@ pgp_get_card_features(sc_card_t *card)
|
|||||||
/* 2nd byte in "CHV status bytes" DO means "max. PIN length" */
|
/* 2nd byte in "CHV status bytes" DO means "max. PIN length" */
|
||||||
card->max_pin_len = blob->data[1];
|
card->max_pin_len = blob->data[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* get supported algorithms & key lengths from "algorithm attributes" DOs */
|
||||||
|
for (i = 0x00c1; i < 0x0c3; i++) {
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
/* Is this correct? */
|
||||||
|
/* OpenPGP card spec 1.1 & 2.0, section 2.1 */
|
||||||
|
flags = SC_ALGORITHM_RSA_RAW;
|
||||||
|
/* OpenPGP card spec 1.1 & 2.0, section 7.2.9 & 7.2.10 */
|
||||||
|
flags |= SC_ALGORITHM_RSA_PAD_PKCS1;
|
||||||
|
flags |= SC_ALGORITHM_RSA_HASH_NONE;
|
||||||
|
|
||||||
|
if ((pgp_get_blob(card, blob73, i, &blob) >= 0) &&
|
||||||
|
(blob->data != NULL) && (blob->len >= 4)) {
|
||||||
|
if (blob->data[0] == 0x01) { /* Algorithm ID [RFC4880]: RSA */
|
||||||
|
unsigned int keylen = bebytes2ushort(blob->data + 1);
|
||||||
|
|
||||||
|
_sc_card_add_rsa_alg(card, keylen, flags, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return SC_SUCCESS;
|
return SC_SUCCESS;
|
||||||
|
Loading…
Reference in New Issue
Block a user