Я пытаюсь переписать некоторый JS (который использует библиотеку SJCL) в Python, используя pycrypto. У меня возникли проблемы, выяснить, как реализовать следующий кодРеализация SJCL .frombits в python
aes = new sjcl.cipher.aes(this.key);
bits = sjcl.codec.utf8String.toBits(text);
cipher = sjcl.mode.ccm.encrypt(aes, bits, iv);
cipherIV = sjcl.bitArray.concat(iv, cipher);
return sjcl.codec.base64.fromBits(cipherIV);
Мой вопрос не является криптография, но путь библиотека обрабатывает преобразования fromBits. По SJCL документы:
Большинство наших криптографических примитивов работают с массивами 4-байтовых слов внутренне, но многие из них могут принимать аргументы, которые не кратен 4 байта. Эта библиотека кодирует массивы битов (размер которых не должен быть кратным 8 бит) в качестве массивов 32-битных слов. Биты упакованы, big-endian, в массив слов, 32 бита за раз. Поскольку слова представляют собой числа с плавающей запятой с двойной точностью, они соответствуют некоторым дополнительным данным. Мы используем это (в частном, возможно изменяющемся порядке) для кодирования количества бит, фактически присутствующих в последнем слове массива.
Для меня это, кажется, подразумевает, что преобразование в битовый массив добавляет на какую-то дополнительную информацию, которую я обеспокоен будет распространена во время Concat операции. Кроме того, после concat результат возвращается как строка base64. Я не уверен в правильных параметрах упаковки «struct», чтобы воспроизвести это.