Выполнение хэш- операция в пустом контексте может привести к ошибкам времени выполнения
Дефект возникает, когда вы только обновляете контекст дайджеста сообщений с помощью нулевых данных или вы выполняете последний шаг в контексте дайджеста сообщений, не выполняя никакого шага обновления.
Когда вы используете функции дайджеста сообщений, вы обычно инициализируете контекст дайджеста сообщений и выполняете по крайней мере один шаг обновления, чтобы добавить данные в контекст. Затем вы подписываете, проверяете или извлекаете данные в контексте в качестве последнего шага.
Проверка не поднимает дефект, если нет доступной информации о контексте. Например, если контекст передается как аргумент функции, которая вызывает операцию хеширования, или если контекст объявлен вне возможностей функции. Для примера в этом фрагменте кода дефект не возникает.
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++ |
| По умолчанию: Off |
Синтаксис командной строки
: CRYPTO_MD_NO_DATA |
| Влияние: Средний |
| ИДЕНТИФИКАТОР CWE: 325 |