Нужно ли вызывать SHA1_Final (), если я откажусь от вычисления хеша? - PullRequest
0 голосов
/ 30 мая 2018

Это касается всей семьи SHA.

Я смотрю на страницу https://www.openssl.org/docs/man1.1.0/crypto/SHA1.html и не вижу ничего, что помешало бы мне НЕ звонить SHA1_Final() на случай, если я захочу отказатьсявычисление хэша.

Другими словами, можно ли мне это сделать:была необходимость «очистить» ctx, должен быть SHA1_Destroy(), который, конечно, отсутствует ...

1 Ответ

0 голосов
/ 30 мая 2018

Многие SHA_* методы определены здесь , то есть файл, который через препроцессор «настроен» как методы для SHA1, SHA256 ...

HASH_FINAL метод SHA1_FinalSHA256_Final).Здесь единственная операция, которая «пахнет» при очистке, это

OPENSSL_cleanse(p, HASH_CBLOCK);

, где OPENSSL_cleanse равно

OPENSSL_cleanse () заполняет ptr размера len строкой из 0

(взято из здесь ).

Но размер OPENSSL_cleanse равен HASH_CBLOCK, поэтому я скажу, что он очищает внутреннийбуфер, используемый для хранения частичных фрагментов исходных данных, которые должны быть хешированы.Объяснение: SHA1 работает с 512 битами (64 байтами) данных одновременно.Если вы попытаетесь хэшировать 70 байтов данных с SHA1_Update, то 64 байта хэшируются и 6 байтов сохраняются где-то для следующих SHA1_Update.SHA1_Final завершает использование этих байтов и затем очищает их.

...