Я думаю, что я понимаю, почему вы не понимаете, почему мне нужно reserialize.
Вы думаете, что подпись применяется на "serialized_payment_details", Который, как вы сказали, только один байт [] клякса.
Но подпись не делается на "serialized_payment_details" но в целом "платежный запрос",
Для того, чтобы подписать запрос платежа, то же самое: вы сериализации PaymentDetails в двоичную, войдите в двоичном вы сериализованную и хранить двоичный вы сериализованную в сообщении PaymentRequest.
Так что, если я вас правильно понимаю, ваше предложение является неправильным. Вы не подпишете двоичные файлы по PaymentDetails. Вы должны подписать сообщение всего PaymentRequest без подписи.
Это означает, что после того, как вы храните информацию о платеже в PaymentRequest, вам необходимо сериализовать PaymentRequest, получить подпись, десериализацию, вставлять подписи, reserialize.
С другой стороны, приемник должен: десериализации, удалить подпись, сериализация, проверить подпись против целого двоичного файла.
Этот процесс / сериализации Deserialize есть где много ошибок лжи. Поскольку некоторые реализации Protobuf будет удалить (или добавить) значение по умолчанию.
Это означает, что конкретная реализация будет казаться хорошо работать, но не в состоянии сделать это с другими реализациями, что создает проблемы реализации, трудно обнаружить.
Это является не средним невозможно сделать хорошую реализацию, но не так легко, как это выглядит.
Я добавил несколько тестовых векторов, которые должны проверить против этого типа задач, но имеющий канонический способом выражения сериализованную paymentrequest будет лучше.
Простейшим примером является payment_details_version, Гэвин сделать вид, в сериализованном PaymentRequest. Моя Protobuf версия, по умолчанию, раздеть его.
Я поддерживаю оба, но оба правильно? Из спецификации, кажется, и все в порядке.