Байтовый объект, содержащий произвольное количество бит - PullRequest
2 голосов
/ 01 октября 2019

В настоящее время я реализую платформу для сравнения времени выполнения различных криптографических алгоритмов в Python3. Одним из требований этой платформы является использование тестовых векторов, предусмотренных в проекте NESSIE . При проверке тестовых векторов я понял, что есть такие векторы, как

Set 2, vector#  3:
message=3 zero bits
hash=88BAD9D59A0A5195FAF7961BB6625486816C1430

Этот тестовый вектор требует ввода 3 нулевых битов, то есть '000', что вызывает проблему, библиотеку, которую я использую Криптография реализует функцию SHA-1, которая принимает только как вход a байт тип данных.

Я читаю документацию по Python и яЯ не смог найти способ сгенерировать объект байтов только с 3 битами, я смог создать их только с 8,16 и т. д. битами. Я знаю, что это правильная структура байта, но, есть ли способ создать или разрезать объект байта, чтобы он содержал только 3 бита?

Если нет способа сделать это,Вы знаете о другой библиотеке криптографии, где эти случаи могут быть выполнены? (Мне не разрешено внедрять свои собственные.)

1 Ответ

0 голосов
/ 01 октября 2019

Нет, вы не можете разрезать байт. Байт состоит из 8 бит, предполагая, что байт является октетом, как во всех современных системах. Конечно, есть способ представить 3 бита, например, используя специальную структуру данных или просто добавив целое число, которое определяет количество используемых битов.

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

К сожалению, я не нашел ни одного утверждения из NIST по этому поводу, дажеесли это совершенно очевидно, например, из библиотек, совместимых с FIPS.

...