]> Sergey Matveev's repositories - stargrave-blog.git/commitdiff
Попробовал github.com/zeebo/blake3
authorSergey Matveev <stargrave@stargrave.org>
Wed, 6 Jan 2021 13:49:48 +0000 (16:49 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Wed, 6 Jan 2021 13:49:48 +0000 (16:49 +0300)
И вообще впервые попробовал 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 (тоже с ассемблером). А ведь у
него и потенциально неограниченный простор для распараллеливания из-за
хэш деревьев.


No differences found