2015-11-25 6 views
2

В библиотеках Linux CRYPTO, в чем разница между:alloc_ahash против alloc_shash в Linux Crypto библиотеки

  • crypto_alloc_hash (...);
  • crypto_alloc_ahash (...);
  • crypto_alloc_shash (...);

Я бы предположил, что «а» означает асинхронный и «синхронный».

Если это так, что это означает с точки зрения выбора реализации?

(Я пытаюсь найти правильный способ вычисления значения HMAC (SHA1) при обработке TCP-пакета с использованием библиотек CRYPTO).

+1

Почему вы должны угадывать?Почему вы не смотрите на документацию? – sjsam

+0

Я не могу найти документацию об этом. –

+1

Ты прав. Многие из apis, используемые в ядре Linux, плохо документированы. Но стоит попробовать посмотреть исходные файлы. Иногда документация приходит в виде комментариев. – sjsam

ответ

1

SO Question1 & SO Question2 - отличная отправная точка для вас.

Нет ничего, что называется асинхронными и синхронными функциями. Все функции (вызовы) должны возвращаться к вызывающим.

Но есть асинхронные и синхронные операции.

crypto_alloc_ahash() & crypto_alloc_shash() отличается тем, что первые состоят из асинхронных операций и последние состоят из синхронных операций.

В случае первой функция, когда вызываемый возвращается немедленно к основной программе, оставив после завершения операции. Когда операции завершаются, они обычно используют СИГНАЛЫ/ПРЕРЫВАНИЯ, чтобы основная программа знала, что они были выполнены. Вы можете увидеть реализацию here, а выдержка приведена ниже.

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); 
} 

В случае последнего основной программы (вызывающей) должен ждать операции в функции завершения, чтобы продолжить. Я не могу придумать конкретные сценарии , где синхронизация является обязательной в этом контексте. Вы можете увидеть реализацию here

Действительно обе функции выглядят одинаково, но для типа возвращаемых значений.
Асинхронные варианты функций - это, как правило, то, что вы должны искать в скорости вашей программы. Также вы не можете делать асинхронные вызовы из вариантов синхронизации по понятным причинам.

Edit:

crypto_alloc_hash является синхронным хэш, и я не мог узнать разницу между хэш и Шаш.

Оба возвращают выделенную рукоятку шифрования в случае успеха; IS_ERR является истинным в случае ошибки, PTR_ERR возвращает код ошибки.

См. shash vs hash.

+0

Как насчет 'crypto_alloc_hash', будет ли это синхронно или асинхронно? –

+0

См. Редактирование. Возможно, разработчик хотел создать аналогичную структуру для «ahash» и «shash». Я, честно говоря, не думаю, что это полностью отвечает на ваш вопрос, но это будет основой для вас наступить дальше и исследовать дальше. – sjsam

+0

Может быть полезно: набрав «cat/proc/crypto», вы можете найти список доступных криптоалгоритмов с «типом», который должен * указывать, какую функцию использовать (например, в случае HMAC (SHA) -1), «тип» - «shash»). –