type rsa = { coin: Types.Config_types.Coin.t; pub: Types.RsaPublicKey.t; sign: (* TODO sig type should be string -> RsaSignature.t + b32 *) string -> string; } let hash_pub _pub = "todo public key converted to Crockford Base32" let make_rsa (coin : Types.Config_types.Coin.t) = assert (coin.cipher = `RSA); assert (Option.is_some coin.rsa_keysize); let rsa_keysize = coin.rsa_keysize |> Option.get in let open Mirage_crypto_pk.Rsa in let priv = generate ~bits:rsa_keysize () in let pub = pub_of_priv priv in let sign = decrypt ~crt_hardening:true ~mask:`Yes ~key:priv in { coin; pub; sign } let denom_device = let finally _key = () in Vif.Device.v ~name:"rsa_denom" ~finally [] @@ fun () -> let rsa_l = List.map make_rsa Config.coins in rsa_l