test: manual rsa
This commit is contained in:
parent
062c34b8b7
commit
0baca6aff4
2 changed files with 60 additions and 7 deletions
|
|
@ -33,15 +33,17 @@
|
||||||
do we re-implement crypto
|
do we re-implement crypto
|
||||||
or do we re-use secmodules with IPC on a Unix domain socket *)
|
or do we re-use secmodules with IPC on a Unix domain socket *)
|
||||||
|
|
||||||
|
(*
|
||||||
type key =
|
type key =
|
||||||
| Eddsa of Mirage_crypto_ec.Ed25519.(priv * pub)
|
| Eddsa of Mirage_crypto_ec.Ed25519.(priv * pub)
|
||||||
| Rsa of Mirage_crypto_pk.Rsa.(priv * pub)
|
| Rsa of Mirage_crypto_pk.Rsa.(priv * pub)
|
||||||
|
*)
|
||||||
|
|
||||||
let eddsa_online_key_device =
|
let eddsa_online_key_device =
|
||||||
let finally _key = () in
|
let finally _key = () in
|
||||||
Vif.Device.v ~name:"eddsa_online_key" ~finally [] @@ fun () ->
|
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_rng_miou_unix.(initialize (module Pfortuna))] is already done by [Vif.run] *)
|
||||||
Eddsa (Mirage_crypto_ec.Ed25519.generate ())
|
Mirage_crypto_ec.Ed25519.generate ()
|
||||||
|
|
||||||
let rsa_denomination_key_device =
|
let rsa_denomination_key_device =
|
||||||
let finally _key = () in
|
let finally _key = () in
|
||||||
|
|
@ -49,4 +51,58 @@ let rsa_denomination_key_device =
|
||||||
let open Mirage_crypto_pk.Rsa in
|
let open Mirage_crypto_pk.Rsa in
|
||||||
let rsa_keysize = 2048 in
|
let rsa_keysize = 2048 in
|
||||||
let priv = generate ~bits:rsa_keysize () in
|
let priv = generate ~bits:rsa_keysize () in
|
||||||
Rsa (priv, pub_of_priv priv)
|
(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 -> ()
|
||||||
|
|
|
||||||
|
|
@ -122,11 +122,8 @@ let () =
|
||||||
Miou_unix.run @@ fun () ->
|
Miou_unix.run @@ fun () ->
|
||||||
let env = () in
|
let env = () in
|
||||||
let devices =
|
let devices =
|
||||||
Vif.Devices.
|
let open Management in
|
||||||
[
|
Vif.Devices.[ eddsa_online_key_device; rsa_denomination_key_device; test ]
|
||||||
Management.eddsa_online_key_device
|
|
||||||
; Management.rsa_denomination_key_device
|
|
||||||
]
|
|
||||||
in
|
in
|
||||||
let middlewares = Vif.Middlewares.[] in
|
let middlewares = Vif.Middlewares.[] in
|
||||||
Vif.run ~cfg ~devices ~middlewares routes env
|
Vif.run ~cfg ~devices ~middlewares routes env
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue