diff --git a/src/libopensc/card-sc-hsm.c b/src/libopensc/card-sc-hsm.c index 5676a4b3..ef2f0c17 100644 --- a/src/libopensc/card-sc-hsm.c +++ b/src/libopensc/card-sc-hsm.c @@ -1001,7 +1001,9 @@ static int sc_hsm_set_security_env(sc_card_t *card, } break; case SC_ALGORITHM_EC: - if (env->algorithm_flags & SC_ALGORITHM_ECDSA_HASH_NONE) { + if (env->operation == SC_SEC_OPERATION_DERIVE) { + priv->algorithm = ALGO_EC_DH; + } else if (env->algorithm_flags & SC_ALGORITHM_ECDSA_HASH_NONE) { priv->algorithm = ALGO_EC_RAW; } else if (env->algorithm_flags & SC_ALGORITHM_ECDSA_HASH_SHA1) { priv->algorithm = ALGO_EC_SHA1; @@ -1009,12 +1011,8 @@ static int sc_hsm_set_security_env(sc_card_t *card, priv->algorithm = ALGO_EC_SHA224; } else if (env->algorithm_flags & SC_ALGORITHM_ECDSA_HASH_SHA256) { priv->algorithm = ALGO_EC_SHA256; - } else if (env->algorithm_flags & SC_ALGORITHM_ECDH_CDH_RAW) { - if (env->operation == SC_SEC_OPERATION_DERIVE) { - priv->algorithm = ALGO_EC_DH; - } else { - priv->algorithm = ALGO_EC_RAW; - } + } else if (env->algorithm_flags & SC_ALGORITHM_ECDSA_RAW) { + priv->algorithm = ALGO_EC_RAW; } else { LOG_FUNC_RETURN(card->ctx, SC_ERROR_INVALID_ARGUMENTS); }