From 897b4bf117836cc37b5b7bc3ce4fd5f48f80ec94 Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Mon, 17 Feb 2020 20:51:02 +0300 Subject: [PATCH] =?utf8?q?=D0=97=D0=B0=D1=80=D0=B5=D0=BB=D0=B8=D0=B7=D0=B8?= =?utf8?q?=D0=BB=20PyDERASN=207.2?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit https://lists.cypherpunks.ru/pipermail/pyderasn-devel/2020-February/000040.html На самом деле ещё вчера я полностью реализовал двухпроходное кодирование DER: проходим по всем объектам в детерминированном порядке, высчитываем кто сколько будет занимать места, запоминаем (кому надо) какую длину надо будет закодировать, затем бежим уже второй раз, на лету сразу записывая в некий writer все получающиеся закодированные значения. Изменений в коде -- минимум. Но производительность существенно упала, а я надеялся, что за счёт меньших пертурбаций с памятью, будет лучше. В итоге забросил идею. А потом осенило: это ж позволит потокового (почти, с сохранением state от первого прохода) записывать данные, а применяя mmap-ы и итераторы, позволит формировать сколько угодно огромные DER-ы. Сегодня сделал двухпроходное кодирование как альтернативу обычному, всё работает, легко сделать многогигабайтный DER без проблем или с миллионами элементов, в Python-е почти не отжирая память. -- 2.50.0