Манипулирование 80-битным типом данных в C - PullRequest
8 голосов
/ 24 марта 2012

Я реализую некоторый криптографический алгоритм в C, который включает 80-битный ключ.Конкретная операция включает в себя поворот, сдвиг ключа x количество битов.

Я пробовал длинный двойной тип, который, если я не ошибаюсь, равен 80 битам, но он не работает с оператором bithift.

Единственная альтернатива, которую я могу придумать, этоиспользовать массив из 10 элементов с некоторыми сложными циклами и if-else.

У меня вопрос, есть ли какой-то простой и эффективный способ сделать это.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 24 марта 2012

Здесь что-то немного запутано. Если я вас правильно понимаю, вы используете «мягкий» процессор на ПЛИС.

  1. Традиционно люди используют FPGA для создания своих собственных регистров сдвига через VHDL / Verilog. Такие алгоритмы довольно безболезненны в реализации и очень быстры. Вернувшись в университет, я сделал это для криптографического проекта.

  2. Кроме того, в упомянутой вами статье говорится о 128-битном ключе. Это было бы значительно проще реализовать?

4 голосов
/ 24 марта 2012

К сожалению, вам нужна библиотека Bignum. Хотя нативные типы данных C поддерживают 80-разрядные числа с плавающей запятой, на самом деле они не выполняют то, что вам нужно.

Можно связать что-то вроде GMP или даже использовать менее желательные подходы, такие как массив из 10 символов или два числа с длинными и короткими (64-битные и 16-битные целые числа).

Ни то, ни другое не очень красиво, но они работают, и если вы планируете использовать это для чего-либо, кроме класса, GMP - путь. В противном случае вы можете столкнуться с целым беспорядком временных атак, которые вы можете закодировать, но это может стать очень неприятным, очень быстрым.

...