diff --git a/src/management.ml b/src/management.ml index 699917d3..320efa92 100644 --- a/src/management.ml +++ b/src/management.ml @@ -33,17 +33,15 @@ do we re-implement crypto or do we re-use secmodules with IPC on a Unix domain socket *) -(* type key = | Eddsa of Mirage_crypto_ec.Ed25519.(priv * pub) | Rsa of Mirage_crypto_pk.Rsa.(priv * pub) - *) let eddsa_online_key_device = let finally _key = () in Vif.Device.v ~name:"eddsa_online_key" ~finally [] @@ fun () -> (* [Mirage_crypto_rng_miou_unix.(initialize (module Pfortuna))] is already done by [Vif.run] *) - Mirage_crypto_ec.Ed25519.generate () + Eddsa (Mirage_crypto_ec.Ed25519.generate ()) let rsa_denomination_key_device = let finally _key = () in @@ -51,58 +49,4 @@ let rsa_denomination_key_device = let open Mirage_crypto_pk.Rsa in let rsa_keysize = 2048 in let priv = generate ~bits:rsa_keysize () in - (priv, pub_of_priv priv) - -(* full-domain-hash ; not impl *) -let fdh m = Fun.id m - -let mod_inverse a n = - let open Z in - (* extended Euclidean algorithm: returns (g, x, y) s.t. ax + by = g = gcd(a,b) *) - let rec extended_gcd a b = - if equal b zero then (a, one, zero) - else - let q, r = ediv_rem a b in - let g, x1, y1 = extended_gcd b r in - (g, y1, sub x1 (mul q y1)) - in - (* modular inverse of a modulo n, if it exists *) - let mod_inverse a n = - let g, x, _ = extended_gcd a n in - if not (equal g one) then Fmt.failwith "no inverse" - else - (* normalize result into [0, n-1] *) - erem (add x n) n - in - mod_inverse a n - -let test = - let finally _key = () in - Vif.Device.v ~name:"test" ~finally - [ Vif.Device.value rsa_denomination_key_device ] - @@ fun (priv, pub) -> - let { e; n } : Mirage_crypto_pk.Rsa.pub = pub in - let d = priv.d in - (* client *) - let m = "uhuh ~~!" |> Z.of_bits in - let f = fdh m in - assert (Z.lt f n); - (* random blinding factor *) - (* should be in Z_n *) - let b = "qwertyuiop" |> Z.of_bits in - assert (Z.(lt (abs b) n)); - let b_inv = mod_inverse b n in - assert (Z.(equal Z.one (b * b_inv mod n))); - let f' = Z.(f * powm b e n mod n) in - Fmt.pr "@. ok step 1. @."; - (* server *) - let s' = Z.(powm f' d n) in - Fmt.pr "@. ok step 2. @."; - (* client *) - let s = Z.(s' * b_inv mod n) in - let m' = Z.(powm s e n) in - Fmt.pr "m : `%s`@." (Z.to_string m); - Fmt.pr "m': `%s`@." (Z.to_string m'); - let msg_txt = Z.to_bits m' in - Fmt.pr "msg_txt: `%s`@." msg_txt; - fun _key -> () + Rsa (priv, pub_of_priv priv) diff --git a/src/mte.ml b/src/mte.ml index 78adcbcb..e0cca800 100644 --- a/src/mte.ml +++ b/src/mte.ml @@ -122,8 +122,11 @@ let () = Miou_unix.run @@ fun () -> let env = () in let devices = - let open Management in - Vif.Devices.[ eddsa_online_key_device; rsa_denomination_key_device; test ] + Vif.Devices. + [ + Management.eddsa_online_key_device + ; Management.rsa_denomination_key_device + ] in let middlewares = Vif.Middlewares.[] in Vif.run ~cfg ~devices ~middlewares routes env