Выполнение хэш-операции в пустом контексте может привести к ошибкам во время выполнения
Дефект возникает только при обновлении контекста дайджеста сообщений нулевыми данными или при выполнении последнего шага над контекстом дайджеста сообщений без выполнения какого-либо шага обновления.
При использовании функций дайджеста сообщений обычно инициализируется контекст дайджеста сообщений и выполняется по крайней мере один шаг обновления для добавления данных в контекст. Затем вы подписываете, проверяете или извлекаете данные в контексте в качестве последнего шага.
Средство проверки не вызывает дефектов, если отсутствует информация о контексте. Например, если контекст передается в качестве аргумента функции, которая вызывает операцию хеширования, или если контекст объявлен вне области действия функции. Например, в этом фрагменте кода дефект не возникает.
void bar(unsigned char* src, int len, EVP_MD_CTX *ctx) {
//ctx passed as argument of bar()
EVP_DigestFinal(ctx, out_buf, &out_len); //no defect
}
EVP_MD_CTX glob_ctx;
void foo(unsigned char* src, int len) {
//glob_ctx declared outside scope of foo()
EVP_DigestFinal(&glob_ctx, out_buf, &out_len); //no defect
}Выполнение шага обновления контекста с нулевыми данными может привести к ошибке во время выполнения.
Выполнение последнего шага в контексте без данных может привести к непредвиденному поведению.
Перед подписанием, проверкой или извлечением данных в контексте выполните по крайней мере одну операцию обновления с ненулевыми данными в контексте дайджеста сообщений.
| Группа: Криптография |
| Язык: C | C++ |
| По умолчанию: Откл. |
Синтаксис командной строки:
CRYPTO_MD_NO_DATA |
| Воздействие: среднее |
| ИДЕНТИФИКАТОР CWE: 325 |