From 4c02094d684f2a9ac2736a67532a8f97eeec527c Mon Sep 17 00:00:00 2001 From: Sergey Matveev Date: Wed, 6 Jan 2021 16:49:48 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=BE=D0=B1=D0=BE=D0=B2?= =?utf8?q?=D0=B0=D0=BB=20github.com/zeebo/blake3?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit И вообще впервые попробовал BLAKE3, более детально вчитываясь в его спецификацию. Очень нравится то, что и в самой спецификации и в zeebo/blake3, Rust реализации и github.com/lukechampine/blake3 очень простой интерфейс: либо хэшируй, либо хэшируй с ключом, либо ещё и учитывай контекст (то что в других хэшах было personalization string, application context). BLAKE2 вообще предоставлял возможность указывать контекст использования, но это мало кто из реализаций предоставляет в виде API. В BLAKE3 все реализации попробованные это дают. Длину хэша какую надо? А вот сколько прочитаешь из io.Reader выхлопа, столько и будет. Нужен XOF? Аналогично просто вычитывай. В общем API и простота использования и необходимая гибкость (ключи, контекст, длина хэша, XOF) -- всё очень нравится. Без ассемблерных оптимизаций (amd64), скорость BLAKE2b-256 и BLAKE3 на pure Go у меня примерно схожи. Но, zeebo/blake3 не делает никакого распараллеливания. А если ассемблерные оптимизации использовать, то BLAKE3 быстрее раза в два чем BLAKE2b (тоже с ассемблером). А ведь у него и потенциально неограниченный простор для распараллеливания из-за хэш деревьев. -- 2.48.1