#wire_format — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #wire_format, aggregated by home.social.
-
«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе
Эта статья про один баг совместимости, который меня озадачил. Обе стороны честно объявляют версию протокола «dap-18», а байты на проводе не сходятся. Это не туториал по крипте и не показ репозитория - история про то, что строка версии - это не контракт совместимости, и про то, как это чинить, когда наткнулся.
https://habr.com/ru/articles/1058928/
#DAP #Prio3 #VDAF #приватная_агрегация #интероп #версионирование_протоколов #wire_format #Janus #Go #HPKE
-
«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе
Эта статья про один баг совместимости, который меня озадачил. Обе стороны честно объявляют версию протокола «dap-18», а байты на проводе не сходятся. Это не туториал по крипте и не показ репозитория - история про то, что строка версии - это не контракт совместимости, и про то, как это чинить, когда наткнулся.
https://habr.com/ru/articles/1058928/
#DAP #Prio3 #VDAF #приватная_агрегация #интероп #версионирование_протоколов #wire_format #Janus #Go #HPKE
-
«dap-18» это не dap-18: номер версии протокола не фиксирует формат на проводе
Эта статья про один баг совместимости, который меня озадачил. Обе стороны честно объявляют версию протокола «dap-18», а байты на проводе не сходятся. Это не туториал по крипте и не показ репозитория - история про то, что строка версии - это не контракт совместимости, и про то, как это чинить, когда наткнулся.
https://habr.com/ru/articles/1058928/
#DAP #Prio3 #VDAF #приватная_агрегация #интероп #версионирование_протоколов #wire_format #Janus #Go #HPKE
-
Все тесты зелёные, а байты разные: как я проверяю порты бинарных форматов
У меня было полторы сотни кросс-языковых фикстур, все тесты зелёные, и я был уверен, что мой Go-порт Yjs байт-в-байт совместим с оригиналом. Потом сравнил байты напрямую с канонической реализацией, и они разъехались: семантика сходится идеально, а на проводе документ толще. Юнит-тесты, roundtrip и даже конвергенц-тесты систематически пропускают баги совместимости, когда портируешь чужой бинарный формат на другой язык. Рабочий метод один: генерировать фикстуры из канона и требовать в CI побайтового совпадения в обе стороны. Разбираю конвейер и три реальных бага из трёх своих портов (Yjs, Loro, Willow): документ в 12 раз толще канона, big-endian остров, который молча портил бы все float’ы при обмене, и дыра, через которую 9-байтный апдейт заказывал make() на 67 ТБ. Метод обобщается на любой «порт формата X на язык Y», CRDT тут просто материал.
https://habr.com/ru/articles/1049858/
#CRDT #Yjs #Loro #Go #тестовые_векторы #фикстуры #wire_format #conformance_testing #байтсовместимость #сериализация
-
Все тесты зелёные, а байты разные: как я проверяю порты бинарных форматов
У меня было полторы сотни кросс-языковых фикстур, все тесты зелёные, и я был уверен, что мой Go-порт Yjs байт-в-байт совместим с оригиналом. Потом сравнил байты напрямую с канонической реализацией, и они разъехались: семантика сходится идеально, а на проводе документ толще. Юнит-тесты, roundtrip и даже конвергенц-тесты систематически пропускают баги совместимости, когда портируешь чужой бинарный формат на другой язык. Рабочий метод один: генерировать фикстуры из канона и требовать в CI побайтового совпадения в обе стороны. Разбираю конвейер и три реальных бага из трёх своих портов (Yjs, Loro, Willow): документ в 12 раз толще канона, big-endian остров, который молча портил бы все float’ы при обмене, и дыра, через которую 9-байтный апдейт заказывал make() на 67 ТБ. Метод обобщается на любой «порт формата X на язык Y», CRDT тут просто материал.
https://habr.com/ru/articles/1049858/
#CRDT #Yjs #Loro #Go #тестовые_векторы #фикстуры #wire_format #conformance_testing #байтсовместимость #сериализация
-
Все тесты зелёные, а байты разные: как я проверяю порты бинарных форматов
У меня было полторы сотни кросс-языковых фикстур, все тесты зелёные, и я был уверен, что мой Go-порт Yjs байт-в-байт совместим с оригиналом. Потом сравнил байты напрямую с канонической реализацией, и они разъехались: семантика сходится идеально, а на проводе документ толще. Юнит-тесты, roundtrip и даже конвергенц-тесты систематически пропускают баги совместимости, когда портируешь чужой бинарный формат на другой язык. Рабочий метод один: генерировать фикстуры из канона и требовать в CI побайтового совпадения в обе стороны. Разбираю конвейер и три реальных бага из трёх своих портов (Yjs, Loro, Willow): документ в 12 раз толще канона, big-endian остров, который молча портил бы все float’ы при обмене, и дыра, через которую 9-байтный апдейт заказывал make() на 67 ТБ. Метод обобщается на любой «порт формата X на язык Y», CRDT тут просто материал.
https://habr.com/ru/articles/1049858/
#CRDT #Yjs #Loro #Go #тестовые_векторы #фикстуры #wire_format #conformance_testing #байтсовместимость #сериализация