Apr. 29th, 2018

vitus_wagner: My photo 2005 (Default)
Пока я болел, на гитхаб прислали пулл-реквест для ctypescrypto с заголовком Add Python3 support.

"Ура, подумал я, кто-то не поленился это сделать".

Сегодня я наконец добрался и посмотрел. Человек наставил скобочки вокруг аргументов print в setup.py и решил что этого хватит.

Запускать python3 setup.py test он не пробовал.

Потому что если это сделать, то свалятся просто все тесты.

У меня там половина преобразований выходных данных сделана на методах __str__ и __unicode__, которые в python3 нужно менять соответсвенно на __bytes__ и __str__.
Плюс еще надо подумать и аккуратно решить - что делать если в некоторые методы передают питон-3ю строку - конвертировать ее в байты utf-8 или кидать TypeError. По прикладной логике бывает надо и так и так.

Ну и во всем test suite аккуратно расставить b'' перед всеми тестоввыми данными для шифрования или хэширования.


А человек надеялся отделаться тремя парами круглых скобок.
vitus_wagner: My photo 2005 (Default)
Поскольку все равно выходные, и я еще не настолько выздоровел, чтобы носиться колбасой по лесам, собрался и таки сделал ctypescrypto совместимым с python3.

Ну во всяком случае тесты проходят. В одном месте, правда пришлось изменить поведение.
Функция repr от объекта X509 теперь возвращает конструкцию, содержащую pem, а не der-представление сертификата.

А так в основном обошлось конструкициями вида

 
   def __bytes__(self): 
       ...
   def __unicode__(self):
       ...
   if sys.version[0]=='2':
       __str__ = __bytes__
   else:
       __str__ = __unicode__


и определением своих названий для того, что проверяется в isinstance.
В одном месте сделал

    if sys.version[0]=='2':
        bintype = str
        chartype = unicode
        inttype = (int, long)
     else:
        bintype = bytes
        chartype = str
        inttype = int

ну и в дальнейшем этими переменными пользуюсь.

Еще была идея определить несколько декораторов для фукнций, которые должны возвращать
строку. Чтобы в python2 они возвращали то, что вернула сишная функция как есть, а в python3 конвертили из того, что указано аргументом в юникод. Поскольку у меня, как правило, очевидно откуда конвертить - если на выходе pem или какой идентификатор алгоритма, его из ascii, если поле asn1-структуры или пароль - из utf-8.

Но пока не собрался.

Новой версии пока не выпускал. Сначала надо проверить, не сломал ли я что на Windows и 32-битных архитектурах.

А еще стал отваливаться один тест на верификацию сертификата. Когда я этот тест писал и генерировал для него сертификаты, алгоритм SHA1 считался вполне кошерным. Пришлось новые сертификаты генерировать. Интересно, доживут ли эти сертификаты до естественной смерти (в смысле notAfter)? Или за долго до 2028 года их придется менять потому что опять что-нибудь взломают?

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

June 2025

S M T W T F S
1234567
891011121314
15161718192021
22232425262728
2930     

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 1st, 2025 06:46 pm
Powered by Dreamwidth Studios