I got a solution for my problem by Xiaolan Lee.
I should have written the testp.proto file this way:

    message my_mess {
      message data {
        optional uint64 x = 1;
        optional uint64 y = 2;
        optional uint64 z = 3;
      }
        optional data a_data = 1
        optional bytes signature = 2;
    }

Then it works.

On Saturday, January 17, 2015 at 1:05:27 AM UTC+2, realcr wrote:
>
> Hi Group,
> I am trying to serialize/deserialize a sub message using Protobuf.
> The reasons for this is signing. I want to be able to sign part of my 
> message. To be able to do that, I need to canonicalize it somehow.
>
> If it matters, I use protbuf 3.0.0-alpha (With the proto2 language) with 
> Python3.4.
>
> Example file: testp.proto
>
>     package my_package;
>     
>     message my_mess {
>       message data {
>         optional uint64 x = 1;
>         optional uint64 y = 2;
>         optional uint64 z = 3;
>       }
>         optional bytes signature = 4;
>     }
>
> In this example, I want to sign the data part of the message. Therefore I 
> want to serialize only my_mess.data, sign it, put the signature into 
> my_mess.signature, and then serialize the full message my_mess.
>
> Compiling testp.proto:
>
>     $ protoc -I=. --python_out=. testp.proto 
>     [libprotobuf WARNING google/protobuf/compiler/parser.cc:471] No syntax 
> specified for the proto file. Please use 'syntax = "proto2";' or 'syntax = 
> "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
>
> I noticed that mm.data have the methods SerializeToString and 
> SerializePartialToString.
> However, it seems like it is not possible to run them directly. Here are 
> my naive attempts:
>
>     $ ipython
>     
>     In [1]: import testp_pb2
>     In [2]: mm = testp_pb2.my_mess()
>     In [3]: mm.data.x = 1
>     In [4]: mm.data.y = 2
>     In [5]: mm.data.z = 3
>     In [6]: mm.data.SerializeToString()
>     
> ---------------------------------------------------------------------------
>     TypeError                                 Traceback (most recent call 
> last)
>     <ipython-input-6-faa8e25906ca> in <module>()
>     ----> 1 mm.data.SerializeToString()
>     
>     TypeError: SerializeToString() missing 1 required positional argument: 
> 'self'
>     
>     In [7]: mm.data.SerializePartialToString()
>     
> ---------------------------------------------------------------------------
>     TypeError                                 Traceback (most recent call 
> last)
>     <ipython-input-7-4b2c1ff0b1c9> in <module>()
>     ----> 1 mm.data.SerializePartialToString()
>     
>     TypeError: SerializePartialToString() missing 1 required positional 
> argument: 'self'
>
>
> I was wondering if there is some simple solution I'm missing. I am open to 
> other suggestions, if you have an idea of signing just a part of the 
> message in an elegant way.
>
> Note that this question was cross posted at:
>
> http://stackoverflow.com/questions/27958571/serializing-part-of-a-message-with-protobuf
> However I got no response in there.
>
> Thank you for your help.
> Regards,
> real.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to