Протокол Google Cast v2 широко переработан и поэтому уже хорошо известен. Хорошим примером этого является репозиторий библиотеки Cast v2 Node на GitHub , который включает подробное описание протокола cast v2.
Однако, когда я писал собственную реализацию протокола на Java с использованием Netty, я понял, что ответное сообщение аутентификации намного сложнее, чем описано в связанном репозитории.
Согласно хранилищу сообщение должно выглядеть так:
message AuthResponse {
required bytes signature = 1;
required bytes client_auth_certificate = 2;
repeated bytes client_ca = 3;
}
Однако клиент отправляет еще 3 поля. У них есть индексы 4, 6 и 7.
Поле 4 относится к проводному типу VARINT
и, насколько мне известно, обозначает алгоритм Signature для устройства с поддержкой Cast (Chromecast Gen2 и Chromecast Audio).
Поле 6 также имеет тип VARINT
, но я понятия не имею, что оно означает. Во время тестирования оно всегда имело значение 0. (Может быть, оно обозначает сертификат client_ca
, используемый для подписи client_auth_certificate
?)
Поле 7 имеет тип провода LENGTH_DELIMITED
. Это определенно не строка в кодировке UTF-8, поскольку ее распечатка приводит к нечитаемому беспорядку Однако распечатанная последовательность содержит полный адрес, который также использовался в client_ca
и client_auth_certificate
, поэтому я считаю, что это как-то связано с этим. Я уже проверял, может ли это быть сертификат или ключ RSA, но оба теста были отрицательными. Файл, содержащий необработанную последовательность байтов, можно найти здесь .
Это подводит меня, наконец, к моему вопросу:
Знаете ли вы, что означают поля 6 и 7? Предположения, основанные на структуре файла, также высоко ценятся.