26 lines
1.2 KiB
OCaml
26 lines
1.2 KiB
OCaml
|
|
let start () =
|
||
|
|
Logs.info (fun m -> m "using Fortuna, entropy sources: %a"
|
||
|
|
Fmt.(list ~sep:(any ", ") Mirage_crypto_rng.Entropy.pp_source)
|
||
|
|
(Mirage_crypto_rng.Entropy.sources ())) ;
|
||
|
|
Logs.info (fun m -> m "64 byte random:@ %a" (Ohex.pp_hexdump ())
|
||
|
|
(Mirage_crypto_rng.generate 64)) ;
|
||
|
|
let n = Bytes.(unsafe_to_string (create 32)) in
|
||
|
|
let key = Mirage_crypto.Chacha20.of_secret n
|
||
|
|
and nonce = Bytes.(unsafe_to_string (create 12))
|
||
|
|
in
|
||
|
|
Logs.info (fun m -> m "Chacha20/Poly1305 of 32*0, key 32*0, nonce 12*0: %a"
|
||
|
|
(Ohex.pp_hexdump ())
|
||
|
|
(Mirage_crypto.Chacha20.authenticate_encrypt ~key ~nonce n));
|
||
|
|
let key = Mirage_crypto_pk.Rsa.generate ~bits:4096 () in
|
||
|
|
let signature =
|
||
|
|
Mirage_crypto_pk.Rsa.PKCS1.sign ~hash:`SHA256 ~key (`Message n)
|
||
|
|
in
|
||
|
|
let verified =
|
||
|
|
let key = Mirage_crypto_pk.Rsa.pub_of_priv key in
|
||
|
|
let hashp = function `SHA256 -> true | _ -> false in
|
||
|
|
Mirage_crypto_pk.Rsa.PKCS1.verify ~hashp ~key ~signature (`Message n)
|
||
|
|
in
|
||
|
|
Logs.info (fun m -> m "Generated a RSA key of %d bits (sign + verify %B)"
|
||
|
|
(Mirage_crypto_pk.Rsa.priv_bits key) verified);
|
||
|
|
Lwt.return_unit
|