This commit is contained in:
swrup 2025-10-18 16:44:32 +02:00
parent 1faa4a84e9
commit 12a8857d2d

View file

@ -264,20 +264,29 @@ module GNUNET_RsaPublicKey = struct
e: Z.t; e: Z.t;
} }
let rev_string len s = String.init len (fun i -> s.[len - 1 - i])
(* todo: need to strip leading zeros or something? *) (* todo: need to strip leading zeros or something? *)
(* reverse bytes because Z.of_bits reads little endian *) (* reverse bytes because Z.of_bits reads little endian *)
let z_of_be_bits src pos len = let z_of_bits_be src pos len =
let x = String.sub src pos len in String.sub src pos len |> rev_string len |> Z.of_bits
let x = String.init len (fun i -> x.[len - 1 - i]) in
Z.of_bits x
let of_pub ({ n; e } : Mirage_crypto_pk.Rsa.pub) = let of_pub ({ n; e } : Mirage_crypto_pk.Rsa.pub) =
{ n_len= Z.size n; e_len= Z.size e; n; e } { n_len= Z.size n; e_len= Z.size e; n; e }
let to_octets _pub = assert false let to_octets { n_len; e_len; n; e } =
let error = Error "GNUNET_RsaPublicKey.of_octets: invalid data" let len = 4 + n_len + e_len in
let b = Bytes.make len '\x00' in
Bytes.set_uint16_be b 0 n_len;
Bytes.set_uint16_be b 2 e_len;
let n = Z.to_bits n |> rev_string n_len in
let e = Z.to_bits e |> rev_string e_len in
Bytes.blit_string n 0 b 4 n_len;
Bytes.blit_string e 0 b (4 + n_len) e_len;
Bytes.unsafe_to_string b
let of_octets s = let of_octets s =
let error = Error "GNUNET_RsaPublicKey.of_octets: invalid data" in
let len = String.length s in let len = String.length s in
match len >= 4 with match len >= 4 with
| false -> error | false -> error
@ -287,8 +296,8 @@ module GNUNET_RsaPublicKey = struct
match len = n_len + e_len + 4 with match len = n_len + e_len + 4 with
| false -> error | false -> error
| true -> | true ->
let n = z_of_be_bits s 4 n_len in let n = z_of_bits_be s 4 n_len in
let e = z_of_be_bits s (4 + n_len) e_len in let e = z_of_bits_be s (4 + n_len) e_len in
Ok { n_len; e_len; n; e }) Ok { n_len; e_len; n; e })
end end