diff --git a/src/libopensc/card-asepcos.c b/src/libopensc/card-asepcos.c index fe459fa5..37fbabfe 100644 --- a/src/libopensc/card-asepcos.c +++ b/src/libopensc/card-asepcos.c @@ -96,9 +96,7 @@ static int asepcos_init(sc_card_t *card) _sc_card_add_rsa_alg(card, 1792, flags, 0); _sc_card_add_rsa_alg(card, 2048, flags, 0); - card->caps |= SC_CARD_CAP_RSA_2048 - | SC_CARD_CAP_APDU_EXT - | SC_CARD_CAP_USE_FCI_AC; + card->caps |= SC_CARD_CAP_APDU_EXT | SC_CARD_CAP_USE_FCI_AC; return SC_SUCCESS; } diff --git a/src/libopensc/card-authentic.c b/src/libopensc/card-authentic.c index 8bdef96e..ba66622a 100644 --- a/src/libopensc/card-authentic.c +++ b/src/libopensc/card-authentic.c @@ -431,7 +431,6 @@ authentic_init_oberthur_authentic_3_2(struct sc_card *card) _sc_card_add_rsa_alg(card, 2048, flags, 0x10001); card->caps = SC_CARD_CAP_RNG; - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; card->caps |= SC_CARD_CAP_USE_FCI_AC; diff --git a/src/libopensc/card-cardos.c b/src/libopensc/card-cardos.c index db677089..c5a0af18 100644 --- a/src/libopensc/card-cardos.c +++ b/src/libopensc/card-cardos.c @@ -155,7 +155,7 @@ static int cardos_have_2048bit_package(sc_card_t *card) static int cardos_init(sc_card_t *card) { - unsigned long flags; + unsigned long flags, rsa_2048 = 0; card->name = "CardOS M4"; card->cla = 0x00; @@ -175,17 +175,17 @@ static int cardos_init(sc_card_t *card) if (r < 0) return r; if (r == 1) - card->caps |= SC_CARD_CAP_RSA_2048; + rsa_2048 = 1; card->caps |= SC_CARD_CAP_APDU_EXT; } else if (card->type == SC_CARD_TYPE_CARDOS_M4_3 || card->type == SC_CARD_TYPE_CARDOS_M4_2B || card->type == SC_CARD_TYPE_CARDOS_M4_2C || card->type == SC_CARD_TYPE_CARDOS_M4_4) { - card->caps |= SC_CARD_CAP_RSA_2048; + rsa_2048 = 1; card->caps |= SC_CARD_CAP_APDU_EXT; } - if (card->caps & SC_CARD_CAP_RSA_2048) { + if (rsa_2048 == 1) { _sc_card_add_rsa_alg(card, 1280, flags, 0); _sc_card_add_rsa_alg(card, 1536, flags, 0); _sc_card_add_rsa_alg(card, 1792, flags, 0); diff --git a/src/libopensc/card-iasecc.c b/src/libopensc/card-iasecc.c index 8fb368bb..70c8828a 100644 --- a/src/libopensc/card-iasecc.c +++ b/src/libopensc/card-iasecc.c @@ -359,7 +359,6 @@ iasecc_init_gemalto(struct sc_card *card) _sc_card_add_rsa_alg(card, 2048, flags, 0x10001); card->caps = SC_CARD_CAP_RNG; - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; card->caps |= SC_CARD_CAP_USE_FCI_AC; @@ -429,7 +428,6 @@ iasecc_init_oberthur(struct sc_card *card) _sc_card_add_rsa_alg(card, 2048, flags, 0x10001); card->caps = SC_CARD_CAP_RNG; - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; card->caps |= SC_CARD_CAP_USE_FCI_AC; @@ -470,7 +468,6 @@ iasecc_init_sagem(struct sc_card *card) _sc_card_add_rsa_alg(card, 2048, flags, 0x10001); card->caps = SC_CARD_CAP_RNG; - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; card->caps |= SC_CARD_CAP_USE_FCI_AC; diff --git a/src/libopensc/card-muscle.c b/src/libopensc/card-muscle.c index 339afc60..5ff8167c 100644 --- a/src/libopensc/card-muscle.c +++ b/src/libopensc/card-muscle.c @@ -475,11 +475,9 @@ static int muscle_init(sc_card_t *card) /* Card type detection */ _sc_match_atr(card, muscle_atrs, &card->type); if(card->type == SC_CARD_TYPE_MUSCLE_ETOKEN_72K) { - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; } if(card->type == SC_CARD_TYPE_MUSCLE_JCOP241) { - card->caps |= SC_CARD_CAP_RSA_2048; card->caps |= SC_CARD_CAP_APDU_EXT; } diff --git a/src/libopensc/card-rtecp.c b/src/libopensc/card-rtecp.c index 283d4d07..c9be1507 100644 --- a/src/libopensc/card-rtecp.c +++ b/src/libopensc/card-rtecp.c @@ -66,7 +66,7 @@ static int rtecp_init(sc_card_t *card) unsigned long flags; assert(card && card->ctx); - card->caps |= SC_CARD_CAP_RSA_2048 | SC_CARD_CAP_NO_FCI | SC_CARD_CAP_RNG; + card->caps |= SC_CARD_CAP_NO_FCI | SC_CARD_CAP_RNG; card->cla = 0; flags = SC_ALGORITHM_RSA_RAW | SC_ALGORITHM_ONBOARD_KEY_GEN diff --git a/src/libopensc/card-tcos.c b/src/libopensc/card-tcos.c index b985314b..b3f6ac60 100644 --- a/src/libopensc/card-tcos.c +++ b/src/libopensc/card-tcos.c @@ -99,7 +99,7 @@ static int tcos_init(sc_card_t *card) _sc_card_add_rsa_alg(card, 1024, flags, 0); if (card->type == SC_CARD_TYPE_TCOS_V3) { - card->caps |= SC_CARD_CAP_RSA_2048|SC_CARD_CAP_APDU_EXT; + card->caps |= SC_CARD_CAP_APDU_EXT; _sc_card_add_rsa_alg(card, 1280, flags, 0); _sc_card_add_rsa_alg(card, 1536, flags, 0); _sc_card_add_rsa_alg(card, 1792, flags, 0); diff --git a/src/libopensc/opensc.h b/src/libopensc/opensc.h index 9f02d60b..ba6bfc3d 100644 --- a/src/libopensc/opensc.h +++ b/src/libopensc/opensc.h @@ -432,9 +432,6 @@ struct sc_reader_operations { * instead of relying on the ACL info in the profile files. */ #define SC_CARD_CAP_USE_FCI_AC 0x00000010 -/* The card supports 2048 bit RSA keys */ -#define SC_CARD_CAP_RSA_2048 0x00000020 - /* D-TRUST CardOS cards special flags */ #define SC_CARD_CAP_ONLY_RAW_HASH 0x00000040 #define SC_CARD_CAP_ONLY_RAW_HASH_STRIPPED 0x00000080 diff --git a/src/pkcs15init/pkcs15-cardos.c b/src/pkcs15init/pkcs15-cardos.c index c503a610..a8689259 100644 --- a/src/pkcs15init/pkcs15-cardos.c +++ b/src/pkcs15init/pkcs15-cardos.c @@ -326,7 +326,7 @@ cardos_generate_key(sc_profile_t *profile, sc_pkcs15_card_t *p15card, if (obj->type != SC_PKCS15_TYPE_PRKEY_RSA) return SC_ERROR_NOT_SUPPORTED; - rsa_max_size = (p15card->card->caps & SC_CARD_CAP_RSA_2048) ? 2048 : 1024; + rsa_max_size = (sc_card_find_rsa_alg(p15card->card, 2048) != NULL) ? 2048 : 1024; keybits = key_info->modulus_length & ~7UL; if (keybits > rsa_max_size) { sc_debug(ctx, SC_LOG_DEBUG_NORMAL, "Unable to generate key, max size is %lu",