This commit is contained in:
parent
1daf41e4b8
commit
eda1f1d1e3
1 changed files with 18 additions and 22 deletions
40
src/util.ml
40
src/util.ml
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue