Выполнение хэш- операция в пустом контексте может привести к ошибкам времени выполнения
Дефект возникает, когда вы только обновляете контекст дайджеста сообщений с помощью нулевых данных или вы выполняете последний шаг в контексте дайджеста сообщений, не выполняя никакого шага обновления.
Когда вы используете функции дайджеста сообщений, вы обычно инициализируете контекст дайджеста сообщений и выполняете по крайней мере один шаг обновления, чтобы добавить данные в контекст. Затем вы подписываете, проверяете или извлекаете данные в контексте в качестве последнего шага.
Проверка не поднимает дефект, если нет доступной информации о контексте. Например, если контекст передается как аргумент функции, которая вызывает операцию хеширования, или если контекст объявлен вне возможностей функции. Для примера в этом фрагменте кода дефект не возникает.
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 |