11use std:: collections:: HashMap ;
22
3- use base64:: { prelude:: BASE64_STANDARD , Engine } ;
43use itertools:: Itertools ;
54use num_bigint:: RandBigInt ;
65use rand:: rngs:: OsRng ;
76use serde:: { Deserialize , Serialize } ;
87
98use crate :: {
109 backends:: plonky2:: {
10+ deserialize_bytes,
1111 error:: { Error , Result } ,
1212 primitives:: {
1313 ec:: {
@@ -16,6 +16,7 @@ use crate::{
1616 } ,
1717 merkletree:: MerkleTree ,
1818 } ,
19+ serialize_bytes,
1920 } ,
2021 constants:: MAX_DEPTH ,
2122 middleware:: {
@@ -71,8 +72,9 @@ pub struct SignedPod {
7172
7273#[ derive( Serialize , Deserialize ) ]
7374struct Data {
74- signer_signature : String ,
75- dict : Dictionary ,
75+ signer : String ,
76+ signature : String ,
77+ kvs : Dictionary ,
7678}
7779
7880impl SignedPod {
@@ -116,30 +118,28 @@ impl SignedPod {
116118
117119 pub ( crate ) fn deserialize ( id : PodId , data : serde_json:: Value ) -> Result < Box < dyn Pod > > {
118120 let data: Data = serde_json:: from_value ( data) ?;
119- let signer_signature_bytes =
120- BASE64_STANDARD
121- . decode ( & data. signer_signature )
122- . map_err ( |e| {
123- Error :: custom ( format ! (
124- "Failed to decode signer_signature from base64: {}. Value: {}" ,
125- e, data. signer_signature
126- ) )
127- } ) ?;
128-
129- if signer_signature_bytes. len ( ) != 160 {
121+ let signer_bytes = deserialize_bytes ( & data. signer ) ?;
122+ let signature_bytes = deserialize_bytes ( & data. signature ) ?;
123+
124+ if signer_bytes. len ( ) != 80 {
125+ return Err ( Error :: custom (
126+ "Invalid byte encoding of signed POD signer." . to_string ( ) ,
127+ ) ) ;
128+ }
129+ if signature_bytes. len ( ) != 80 {
130130 return Err ( Error :: custom (
131- "Invalid byte encoding of signed POD signer_signature ." . to_string ( ) ,
131+ "Invalid byte encoding of signed POD signature ." . to_string ( ) ,
132132 ) ) ;
133133 }
134134
135- let signer = Point :: from_bytes ( & signer_signature_bytes [ .. 80 ] ) ?;
136- let signature = Signature :: from_bytes ( & signer_signature_bytes [ 80 .. ] ) ?;
135+ let signer = Point :: from_bytes ( & signer_bytes ) ?;
136+ let signature = Signature :: from_bytes ( & signature_bytes ) ?;
137137
138138 Ok ( Box :: new ( Self {
139139 id,
140140 signature,
141141 signer,
142- dict : data. dict ,
142+ dict : data. kvs ,
143143 } ) )
144144 }
145145}
@@ -174,11 +174,12 @@ impl Pod for SignedPod {
174174 }
175175
176176 fn serialize_data ( & self ) -> serde_json:: Value {
177- let signer_signature_bytes = [ self . signer . as_bytes ( ) , self . signature . as_bytes ( ) ] . concat ( ) ;
178- let signer_signature = BASE64_STANDARD . encode ( & signer_signature_bytes ) ;
177+ let signer = serialize_bytes ( & self . signer . as_bytes ( ) ) ;
178+ let signature = serialize_bytes ( & self . signature . as_bytes ( ) ) ;
179179 serde_json:: to_value ( Data {
180- signer_signature,
181- dict : self . dict . clone ( ) ,
180+ signer,
181+ signature,
182+ kvs : self . dict . clone ( ) ,
182183 } )
183184 . expect ( "serialization to json" )
184185 }
0 commit comments