This commit is contained in:
swrup 2025-11-29 17:44:02 +01:00
parent 1daf41e4b8
commit eda1f1d1e3

View file

@ -34,32 +34,28 @@ module Bin_rsa = struct
let check = function false -> Error (`Msg "invalid data") | true -> Ok () let check = function false -> Error (`Msg "invalid data") | true -> Ok ()
let z_array_to_octets (arr : Z.t array) = let z_array_to_octets (arr : Z.t array) =
let arr = let nb = Array.length arr in
Array.map (*Fmt.epr "z_array_to_octets, nb=%d@." nb;*)
(fun z -> let bits_arr = Array.map z_to_bits_be arr in
let bits = z_to_bits_be z in let len_arr = Array.map String.length bits_arr in
(String.length bits, bits)) let len = (2 * nb) + Array.fold_left ( + ) 0 len_arr in
arr
in
let len = Array.fold_left (fun acc (n, _) -> acc + n) 0 arr in
let b = Bytes.make len '\x00' in let b = Bytes.make len '\x00' in
let bits_start_pos = let pos = ref 0 in
Array.fold_left Array.iter
(fun pos (len, _bits) -> (fun len ->
Bytes.set_uint16_be b pos len; Bytes.set_uint16_be b !pos len;
pos + 2) pos := !pos + 2)
0 arr len_arr;
in Array.iteri
let _end : int = (fun i bits ->
Array.fold_left let len = len_arr.(i) in
(fun pos (len, bits) -> Bytes.blit_string bits 0 b !pos len;
Bytes.blit_string bits 0 b pos len; pos := !pos + len)
pos + len) bits_arr;
bits_start_pos arr
in
Bytes.unsafe_to_string b Bytes.unsafe_to_string b
let z_array_of_octets ~nb s = let z_array_of_octets ~nb s =
(*Fmt.epr "z_array_of_octets, nb=%d@." nb;*)
let s_len = String.length s in let s_len = String.length s in
let* () = check (s_len <= 2 * nb) in let* () = check (s_len <= 2 * nb) in
let pos = ref 0 in let pos = ref 0 in