diff --git a/src/util.ml b/src/util.ml index 35fad636..8d5d1f8b 100644 --- a/src/util.ml +++ b/src/util.ml @@ -57,7 +57,7 @@ module Bin_rsa = struct 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* () = check (s_len > 2 * nb) in let pos = ref 0 in let len_arr = Array.init nb (fun _i -> @@ -66,8 +66,8 @@ module Bin_rsa = struct len) in let* () = - let total_len = (2 * nb) + Array.fold_left ( + ) 0 len_arr in - check (s_len = total_len) + let len = (2 * nb) + Array.fold_left ( + ) 0 len_arr in + check (s_len = len) in let z_arr = Array.init nb (fun i -> @@ -81,36 +81,6 @@ module Bin_rsa = struct open Internal - module Implementation_1 = struct - let pub_to_octets ({ n; e } : Mirage_crypto_pk.Rsa.pub) = - let n = z_to_bits_be n in - let e = z_to_bits_be e in - let n_len = String.length n in - let e_len = String.length e in - 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; - 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 pub_of_octets s = - let pub_of_octets s = - let len = String.length s in - let* () = check (len >= 4) in - let n_len = String.get_uint16_be s 0 in - let e_len = String.get_uint16_be s 2 in - let* () = check (len = n_len + e_len + 4) 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 - Mirage_crypto_pk.Rsa.pub ~n ~e - in - match pub_of_octets s with - | Error (`Msg e) -> Fmt.failwith "rsa pub_of_octets failure: %s@." e - | Ok v -> v - end - let pub_to_octets ({ n; e } : Mirage_crypto_pk.Rsa.pub) = z_array_to_octets [| n; e |] @@ -121,7 +91,7 @@ module Bin_rsa = struct | [| n; e |] -> let* pub = Mirage_crypto_pk.Rsa.pub ~n ~e in Ok pub - | _ -> Fmt.error_msg "rsa pub_of_octets invalid data" + | _ -> assert false in match pub_of_octets s with | Error (`Msg e) -> Fmt.failwith "rsa pub_of_octets failure: %s@." e @@ -138,7 +108,7 @@ module Bin_rsa = struct | [| e; d; n; p; q; dp; dq; q' |] -> let* priv = Mirage_crypto_pk.Rsa.priv ~e ~d ~n ~p ~q ~dp ~dq ~q' in Ok priv - | _ -> Fmt.error_msg "rsa priv_of_octets invalid data" + | _ -> assert false in match priv_of_octets s with | Error (`Msg e) -> Fmt.failwith "rsa priv_of_octets failure: %s@." e diff --git a/test/test.ml b/test/test.ml index 7d6b9785..4e9efd4d 100644 --- a/test/test.ml +++ b/test/test.ml @@ -1,3 +1,20 @@ +let () = Mirage_crypto_rng_unix.use_default () + +let () = + let priv = Mirage_crypto_pk.Rsa.generate ~bits:2048 () in + let pub = Mirage_crypto_pk.Rsa.pub_of_priv priv in + let () = + let open Crypto.RsaPrivateKey in + let priv' = priv |> to_octets |> of_octets in + assert (to_octets priv = to_octets priv') + in + let () = + let open Crypto.RsaPublicKey in + let pub' = pub |> to_octets |> of_octets in + assert (to_octets pub = to_octets pub') + in + () + let () = let open Api in let check jsont s =