SO Question1 & SO Question2 — хорошая отправная точка для вас.
Нет ничего, что называлось бы асинхронными и синхронными функциями. Все функции (вызываемые) должны возвращаться вызывающим.
Но есть асинхронные и синхронные операции.
crypto_alloc_ahash()
и crypto_alloc_shash()
отличаются тем, что первые состоят из асинхронных операций, а вторые — из синхронных.
В случае первого функция при вызове немедленно возвращается в основную программу, оставляя свои операции для завершения. Когда операции завершены, они обычно используют СИГНАЛЫ/ПРЕРЫВАНИЯ, чтобы сообщить основной программе, что они завершены. Вы можете увидеть реализацию здесь и отрывок приведен ниже.
struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type,
u32 mask)
{
return crypto_alloc_tfm(alg_name, &crypto_ahash_type, type, mask);
}
В последнем случае основная программа (вызывающий объект) должна дождаться завершения операции в функции, чтобы продолжить. Я не могу придумать конкретных сценариев, в которых синхронизация обязательна в этом контексте. Вы можете увидеть реализацию здесь
На самом деле обе функции выглядят одинаково, но по типу возвращаемых ими значений.
Обычно асинхронные варианты функций — это то, на что следует обращать внимание из соображений скорости вашей программы. Также вы не можете делать асинхронные вызовы из вариантов синхронизации по очевидным причинам.
Изменить :
crypto_alloc_hash — это синхронный хеш, и я не смог найти разницу между хэшем и шашом.
Оба возвращают выделенный дескриптор шифра в случае успеха; IS_ERR имеет значение true в случае ошибки, PTR_ERR возвращает код ошибки.
См. shash и хеш.
25.11.2015
ahash
иshash
. Честно говоря, я не думаю, что это полностью отвечает на ваш вопрос, но это будет основой для дальнейшего изучения. 26.11.2015cat /proc/crypto
, вы можете найти список доступных криптоалгоритмов с полем «тип», которое должно указывать, какой тип функции использовать (например, в случае HMAC(SHA-1 ), «тип» — «шаш»). 26.11.2015ahash()
для вычисления HMAC в вашей собственной программе. 26.11.2015