+ make_future_sk/dn

This commit is contained in:
swrup 2026-02-17 11:07:52 +01:00
parent 10d29df3c8
commit a937595d6f

View file

@ -87,23 +87,7 @@ module Make (Conn : Pg.CONN) = struct
section_name section_name
| Some dn_data -> Ok dn_data | Some dn_data -> Ok dn_data
(* (* TODO clean up *)
let pub = EddsaPrivateKey.pub_of_priv priv in
let* sk = db_lookup_signkey_data conn fname pub in
let signkey = { priv; sk_data } in
Ok (Some signkey)
*)
(*
match opt with
| None -> Ok None
| Some priv ->
(* todo: could check that coin config match db values *)
let* dn_data = db_lookup_denomination conn ~section_name priv in
Hashtbl.replace dn_section_name_ht dn_data.h_pub section_name;
let denom = { priv; dn_data } in
Ok (Some denom))
*)
let load conn = let load conn =
let error_invalid_state = let error_invalid_state =
Fmt.error "secmod load error: invalid store state." Fmt.error "secmod load error: invalid store state."
@ -187,27 +171,37 @@ module Make (Conn : Pg.CONN) = struct
Ok (Some t) Ok (Some t)
| _, _, _ -> error_invalid_state | _, _, _ -> error_invalid_state
let make_new_signkey () = (* TODO *)
let sign_with_sm_key _ = assert false
let make_future_sk t =
let start = Time.Absolute.of_ptime (Ptime_clock.now ()) in let start = Time.Absolute.of_ptime (Ptime_clock.now ()) in
let expire = let expire =
Time.Absolute.add start Config.Exchange.signkey_legal_duration Time.Absolute.add start Config.Exchange.signkey_legal_duration
in in
let stamp_start = Time.Timestamp.of_absolute start in let stamp_start = Timestamp.of_absolute start in
let stamp_expire = Time.Timestamp.of_absolute expire in let stamp_expire = Timestamp.of_absolute expire in
let stamp_end = stamp_expire in let stamp_end = stamp_expire in
let priv, pub = Mirage_crypto_ec.Ed25519.generate () in let priv, pub = Mirage_crypto_ec.Ed25519.generate () in
let master_sig = None in let signkey_secmod_sig =
let revoked_sig = None in let open Signatures.SigningKeyAnnouncement in
let sk_data = let exchange_pub = pub in
Signkey. let anchor_time = stamp_start in
{ pub; stamp_start; stamp_expire; stamp_end; master_sig; revoked_sig } let duration = Timestamp.diff stamp_start stamp_expire in
sign_f ~f:sign_with_sm_key { exchange_pub; anchor_time; duration }
in in
{ priv; sk_data } let future_sk =
Api.FutureSignKey.
{ key= pub; stamp_start; stamp_expire; stamp_end; signkey_secmod_sig }
in
Hashtbl.replace t.future_sk_ht pub future_sk;
Hashtbl.replace t.future_sk_key_ht pub priv;
()
let make_new_denom let make_future_dn t
Config.Coin. Config.Coin.
{ {
section_name= _; section_name;
value; value;
duration_withdraw; duration_withdraw;
duration_spend; duration_spend;
@ -233,31 +227,45 @@ module Make (Conn : Pg.CONN) = struct
let stamp_expire_legal = let stamp_expire_legal =
Timestamp.of_absolute @@ Absolute.add start duration_legal Timestamp.of_absolute @@ Absolute.add start duration_legal
in in
let priv, pub = RsaPrivateKey.generate ~bits:rsa_keysize () in let priv, pub = RsaPrivateKey.generate ~bits:rsa_keysize () in
let h_pub = Hash.DenominationHash.hash (RsaPublicKey.to_octets pub) in let open Api in
let master_sig = None in let rsa_denomination_key =
let revoked_sig = None in RsaDenominationKey.{ age_mask= 0; rsa_pub= pub }
let dn_data = in
Denomination. let denom_pub = DenominationKey.Rsa rsa_denomination_key in
let denom_secmod_sig =
let open Signatures.DenominationKeyAnnouncement in
let h_denom_pub =
Hash.DenominationHash.hash (RsaPublicKey.to_octets pub)
in
let h_section_name = Hash.Cstring.H64.hash section_name in
let anchor_time = stamp_start in
let duration_withdraw =
Timestamp.diff stamp_start stamp_expire_withdraw
in
sign_f ~f:sign_with_sm_key
{ h_denom_pub; h_section_name; anchor_time; duration_withdraw }
in
let future_dn =
FutureDenom.
{ {
pub; section_name;
value; value;
stamp_start; stamp_start;
stamp_expire_withdraw; stamp_expire_withdraw;
stamp_expire_deposit; stamp_expire_deposit;
stamp_expire_legal; stamp_expire_legal;
denom_pub;
fee_withdraw; fee_withdraw;
fee_deposit; fee_deposit;
fee_refresh; fee_refresh;
fee_refund; fee_refund;
age_mask= 0; denom_secmod_sig;
h_pub;
master_sig;
revoked_sig;
} }
in in
{ priv; dn_data } Hashtbl.replace t.future_dn_ht pub future_dn;
Hashtbl.replace t.future_dn_key_ht pub priv;
()
let make_new () = let make_new () =
let lock = Miou.Mutex.create () in let lock = Miou.Mutex.create () in