+ signkey caqti

This commit is contained in:
swrup 2025-12-16 17:03:24 +01:00
parent e57b12f9d5
commit c41ca5b4e2
2 changed files with 35 additions and 31 deletions

View file

@ -42,6 +42,27 @@ module Caqti_type = struct
let wire_method = Caqti_type.string
let payto_uri = Caqti_type.string
let signkey_data =
let master_sig = Bin_sig.ExchangeSigningKeyValidity.caqti in
custom
~encode:(fun
Signkey_data.{ pub; stamp_start; stamp_expire; stamp_end; master_sig }
->
match master_sig with
| None -> Error "signkey_data master_sig is none"
| Some master_sig ->
Ok (pub, stamp_start, stamp_expire, stamp_end, master_sig))
~decode:(fun (pub, stamp_start, stamp_expire, stamp_end, master_sig) ->
Ok
{
pub;
stamp_start;
stamp_expire;
stamp_end;
master_sig= Some master_sig;
})
(t5 eddsa_pub time time time master_sig)
let account_restrictions =
custom
~encode:(fun l -> Api.encode (Jsont.list AccountRestriction.jsont) l)
@ -135,31 +156,22 @@ let preflight =
in
fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l
(* TODO return type *)
let lookup_signing_key =
let lookup_signing_key =
Caqti_type.(eddsa_pub ->? t3 time time time)
"SELECT valid_from, expire_sign, expire_legal FROM exchange_sign_keys \
WHERE exchange_pub=$1"
let find_signkey =
let find_signkey =
Caqti_type.(eddsa_pub ->? signkey_data)
"SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig \
FROM exchange_sign_keys WHERE exchange_pub=$1"
in
fun (module Conn : CONN) (exchange_pub : EddsaPublicKey.t) ->
Conn.find_opt lookup_signing_key exchange_pub
Conn.find_opt find_signkey exchange_pub
let activate_signing_key =
let insert_signkey =
let insert_signkey =
let master_sig = Bin_sig.ExchangeSigningKeyValidity.caqti in
Caqti_type.(t5 eddsa_pub time time time master_sig ->. unit)
Caqti_type.(signkey_data ->. unit)
"INSERT INTO exchange_sign_keys (exchange_pub, valid_from, expire_sign, \
expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)"
in
fun (module Conn : CONN)
~master_sig
Signkey_data.
{ pub; stamp_start; stamp_expire; stamp_end; master_sig= master_sig_opt }
->
assert (master_sig_opt = Some master_sig);
Conn.exec insert_signkey
(pub, stamp_start, stamp_expire, stamp_end, master_sig)
fun (module Conn : CONN) v -> Conn.exec insert_signkey v
(* TODO return type *)
let lookup_denomination_key =

View file

@ -92,9 +92,7 @@ let add_signkey_master_signatures conn t l =
| Some signkey ->
let sk_data = { signkey.sk_data with master_sig= Some master_sig } in
let signkey = { signkey with sk_data } in
let* () =
Pg.activate_signing_key conn ~master_sig sk_data |> unwrap_err_caqti
in
let* () = Pg.insert_signkey conn sk_data |> unwrap_err_caqti in
Hashtbl.replace t.sk_ht pub signkey;
Ok ())
l
@ -137,20 +135,14 @@ let dir = Fpath.(v "data" / "secmod ")
let db_lookup_signkey_data conn fname priv =
let pub = EddsaPrivateKey.pub_of_priv priv in
let* opt = Pg.lookup_signing_key conn pub in
let* opt = Pg.find_signkey conn pub in
match opt with
| None ->
Fmt.error_msg
"load_signkey error no associated metadata found in database for \
signkey `%s`."
"load_signkey error: no associated data found in database for signkey \
`%s`."
(Fpath.to_string fname)
| Some (stamp_start, stamp_expire, stamp_end) ->
(* TODO master_sig *)
let master_sig = None in
let v =
Signkey_data.{ pub; stamp_start; stamp_expire; stamp_end; master_sig }
in
Ok v
| Some sk_data -> Ok sk_data
let db_lookup_denom_data conn ~section_name priv =
let pub = RsaPrivateKey.pub_of_priv priv in