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 z_array_to_octets (arr : Z.t array) =
let arr =
Array.map
(fun z ->
let bits = z_to_bits_be z in
(String.length bits, bits))
arr
in
let len = Array.fold_left (fun acc (n, _) -> acc + n) 0 arr in
let nb = Array.length arr in
(*Fmt.epr "z_array_to_octets, nb=%d@." nb;*)
let bits_arr = Array.map z_to_bits_be arr in
let len_arr = Array.map String.length bits_arr in
let len = (2 * nb) + Array.fold_left ( + ) 0 len_arr in
let b = Bytes.make len '\x00' in
let bits_start_pos =
Array.fold_left
(fun pos (len, _bits) ->
Bytes.set_uint16_be b pos len;
pos + 2)
0 arr
in
let _end : int =
Array.fold_left
(fun pos (len, bits) ->
Bytes.blit_string bits 0 b pos len;
pos + len)
bits_start_pos arr
in
let pos = ref 0 in
Array.iter
(fun len ->
Bytes.set_uint16_be b !pos len;
pos := !pos + 2)
len_arr;
Array.iteri
(fun i bits ->
let len = len_arr.(i) in
Bytes.blit_string bits 0 b !pos len;
pos := !pos + len)
bits_arr;
Bytes.unsafe_to_string b
let z_array_of_octets ~nb s =
(*Fmt.epr "z_array_of_octets, nb=%d@." nb;*)
let s_len = String.length s in
let* () = check (s_len <= 2 * nb) in
let pos = ref 0 in