diff --git a/a.output b/a.output new file mode 100644 index 00000000..53eb1eba Binary files /dev/null and b/a.output differ diff --git a/b.output b/b.output new file mode 100644 index 00000000..668632f2 Binary files /dev/null and b/b.output differ diff --git a/src/binary_formats.ml b/src/binary_formats.ml index f51dc198..181a9b4f 100644 --- a/src/binary_formats.ml +++ b/src/binary_formats.ml @@ -451,15 +451,29 @@ module WithdrawConfirmationPS = struct noreveal_index: int32; } - let size = Purpose.size + HashPlanchetsP.size + int32_size - let purpose = Purpose.make ~size Taler_signatures.exchange_confirm_withdraw + (*let size = Purpose.size + HashPlanchetsP.size + int32_size*) - let bin = - let open Bin in - record (fun _urpose h_planchets noreveal_index -> - { h_planchets; noreveal_index }) - |+ field Purpose.bin (Fun.const purpose) - |+ field HashPlanchetsP.bin (fun t -> t.h_planchets) - |+ field beint32 (fun t -> t.noreveal_index) - |> sealr + open Bin + + let rec bin = + lazy + (record (fun _purpose h_planchets noreveal_index -> + { h_planchets; noreveal_index }) + |+ field Purpose.bin (fun _t -> Lazy.force purpose) + |+ field HashPlanchetsP.bin (fun t -> t.h_planchets) + |+ field beint32 (fun t -> t.noreveal_index) + |> sealr) + + and size = + lazy + (let size_t = Size.of_value (Size.size_of (Lazy.force bin)) in + match size_t with + | Static n -> n + | Dynamic _ | Unknown -> + Fmt.failwith "size_of failure: size is not Static") + + and purpose = + lazy + (let size = Lazy.force size in + Purpose.make ~size Taler_signatures.exchange_confirm_withdraw) end diff --git a/test/test.ml b/test/test.ml index 5629d120..367af4b6 100644 --- a/test/test.ml +++ b/test/test.ml @@ -76,12 +76,12 @@ let () = let open Binary_formats.WithdrawConfirmationPS in let str64 = String.init 64 (fun i -> Char.unsafe_chr (i + 1)) in let dummy_t = { h_planchets= { v= { v= str64 } }; noreveal_index= 0_l } in + let bin = Lazy.force bin in + let size = Lazy.force size in let size' = Bin.size_of_value bin dummy_t |> Option.get in assert (size = size'); assert (size = 76); - (* for cmp test with signatures.c output + (* for cmp test with signatures.c output *) let raw_str = Bin.to_string bin dummy_t in - Printf.printf "%s" raw_str; - *) - () + Printf.printf "%s" raw_str; ()