Контекст, используемый для операции дайджеста, инициализирован для другой операции дайджеста
Этот дефект возникает при инициализации EVP_MD_CTX объект контекста для конкретной операции дайджеста, но использовать контекст для другой операции.
Например, инициализируется контекст только для создания дайджеста сообщений.
ret = EVP_DigestInit(ctx, EVP_sha256())
ret = EVP_SignFinal(&ctx, out, &out_len, pkey);
EVP_DigestUpdate работает идентично EVP_SignUpdate.Смешение различных операций в одном контексте может привести к затемнению кода. На первый взгляд трудно определить, используется ли текущий объект для создания, подписания или проверки дайджеста сообщений. Смешение также может привести к сбою в работе или неожиданному дайджесту сообщений.
После настройки контекста для определенного семейства операций используйте контекст только для этого семейства операций. Например, используйте эти пары функций для инициализации и финальных шагов.
EVP_DigestInit : EVP_DigestFinal
EVP_DigestInit_ex : EVP_DigestFinal_ex
EVP_DigestSignInit : EVP_DigestSignFinal
Если необходимо повторно использовать существующий объект контекста для другого семейства операций, повторно инициализируйте контекст.
| Группа: Криптография |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
CRYPTO_MD_BAD_FUNCTION |
| Воздействие: среднее |
| CWE ID: 310, 353, 354, 372, 573, 664 |