Хобрук: Ваш путь к мастерству в программировании

alloc_ahash против alloc_shash в криптобиблиотеках Linux

В чем разница между библиотеками Linux CRYPTO:

  • крипто_аллок_хэш (...);
  • крипто_аллок_ахаш (...);
  • крипто_аллок_шаш (...);

Я бы предположил, что "a" означает асинхронный, а "s" — синхронный.

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

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


  • Почему ты должен угадывать? Почему бы вам не посмотреть документацию? 25.11.2015
  • Я не могу найти никакой документации об этом. 25.11.2015
  • Вы правы насчет этого. Многие API, используемые в ядре Linux, плохо документированы. Но стоит попробовать посмотреть сами исходники. Иногда документация приходит в виде комментариев. 25.11.2015

Ответы:


1

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
  • Как насчет 'crypto_alloc_hash', это будет синхронно или асинхронно? 26.11.2015
  • Пожалуйста, смотрите редактирование. Возможно, разработчик хотел придать аналогичную структуру ahash и shash. Честно говоря, я не думаю, что это полностью отвечает на ваш вопрос, но это будет основой для дальнейшего изучения. 26.11.2015
  • Может быть полезно: набрав cat /proc/crypto, вы можете найти список доступных криптоалгоритмов с полем «тип», которое должно указывать, какой тип функции использовать (например, в случае HMAC(SHA-1 ), «тип» — «шаш»). 26.11.2015
  • Не уверена !! Почему бы вам не использовать ahash() для вычисления SHA1? Тип, который вы видите в /proc/crypto, просто означает, что HMAC скомпилирован как синхронный хэш. Я думаю, это не должно быть ограничением на использование ahash() для вычисления HMAC в вашей собственной программе. 26.11.2015
  • Новые материалы

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..

    React on Rails
    Основное приложение Reverb - это всеми любимый монолит Rails. Он отлично обслуживает наш API и уровень просмотра трафика. По мере роста мы добавляли больше интерактивных элементов..

    Что такое гибкие методологии разработки программного обеспечения
    Что представляют собой гибкие методологии разработки программного обеспечения в 2023 году Agile-методологии разработки программного обеспечения заключаются в следующем: И. Введение A...