This commit is contained in:
parent
1faa4a84e9
commit
b89681e249
1 changed files with 17 additions and 8 deletions
|
|
@ -264,20 +264,29 @@ module GNUNET_RsaPublicKey = struct
|
|||
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? *)
|
||||
(* reverse bytes because Z.of_bits reads little endian *)
|
||||
let z_of_be_bits src pos len =
|
||||
let x = String.sub src pos len in
|
||||
let x = String.init len (fun i -> x.[len - 1 - i]) in
|
||||
Z.of_bits x
|
||||
let z_of_bits_be src pos len =
|
||||
String.sub src pos len |> rev_string len |> Z.of_bits
|
||||
|
||||
let of_pub ({ n; e } : Mirage_crypto_pk.Rsa.pub) =
|
||||
{ n_len= Z.size n; e_len= Z.size e; n; e }
|
||||
|
||||
let to_octets _pub = assert false
|
||||
let error = Error "GNUNET_RsaPublicKey.of_octets: invalid data"
|
||||
let to_octets { n_len; e_len; n; e } =
|
||||
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 error = Error "GNUNET_RsaPublicKey.of_octets: invalid data" in
|
||||
let len = String.length s in
|
||||
match len >= 4 with
|
||||
| false -> error
|
||||
|
|
@ -287,8 +296,8 @@ module GNUNET_RsaPublicKey = struct
|
|||
match len = n_len + e_len + 4 with
|
||||
| false -> error
|
||||
| true ->
|
||||
let n = z_of_be_bits s 4 n_len in
|
||||
let e = z_of_be_bits s (4 + n_len) e_len in
|
||||
let n = z_of_bits_be s 4 n_len in
|
||||
let e = z_of_bits_be s (4 + n_len) e_len in
|
||||
Ok { n_len; e_len; n; e })
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue