+ signkey caqti
This commit is contained in:
parent
e57b12f9d5
commit
c41ca5b4e2
2 changed files with 35 additions and 31 deletions
48
src/pg.ml
48
src/pg.ml
|
|
@ -42,6 +42,27 @@ module Caqti_type = struct
|
||||||
let wire_method = Caqti_type.string
|
let wire_method = Caqti_type.string
|
||||||
let payto_uri = 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 =
|
let account_restrictions =
|
||||||
custom
|
custom
|
||||||
~encode:(fun l -> Api.encode (Jsont.list AccountRestriction.jsont) l)
|
~encode:(fun l -> Api.encode (Jsont.list AccountRestriction.jsont) l)
|
||||||
|
|
@ -135,31 +156,22 @@ let preflight =
|
||||||
in
|
in
|
||||||
fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l
|
fun (module Conn : CONN) -> Syntax.list_iter (fun p -> Conn.exec p ()) l
|
||||||
|
|
||||||
(* TODO return type *)
|
let find_signkey =
|
||||||
let lookup_signing_key =
|
let find_signkey =
|
||||||
let lookup_signing_key =
|
Caqti_type.(eddsa_pub ->? signkey_data)
|
||||||
Caqti_type.(eddsa_pub ->? t3 time time time)
|
"SELECT exchange_pub, valid_from, expire_sign, expire_legal, master_sig \
|
||||||
"SELECT valid_from, expire_sign, expire_legal FROM exchange_sign_keys \
|
FROM exchange_sign_keys WHERE exchange_pub=$1"
|
||||||
WHERE exchange_pub=$1"
|
|
||||||
in
|
in
|
||||||
fun (module Conn : CONN) (exchange_pub : EddsaPublicKey.t) ->
|
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
|
let insert_signkey =
|
||||||
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, \
|
"INSERT INTO exchange_sign_keys (exchange_pub, valid_from, expire_sign, \
|
||||||
expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)"
|
expire_legal, master_sig) VALUES ($1, $2, $3, $4, $5)"
|
||||||
in
|
in
|
||||||
fun (module Conn : CONN)
|
fun (module Conn : CONN) v -> Conn.exec insert_signkey v
|
||||||
~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)
|
|
||||||
|
|
||||||
(* TODO return type *)
|
(* TODO return type *)
|
||||||
let lookup_denomination_key =
|
let lookup_denomination_key =
|
||||||
|
|
|
||||||
|
|
@ -92,9 +92,7 @@ let add_signkey_master_signatures conn t l =
|
||||||
| Some signkey ->
|
| Some signkey ->
|
||||||
let sk_data = { signkey.sk_data with master_sig= Some master_sig } in
|
let sk_data = { signkey.sk_data with master_sig= Some master_sig } in
|
||||||
let signkey = { signkey with sk_data } in
|
let signkey = { signkey with sk_data } in
|
||||||
let* () =
|
let* () = Pg.insert_signkey conn sk_data |> unwrap_err_caqti in
|
||||||
Pg.activate_signing_key conn ~master_sig sk_data |> unwrap_err_caqti
|
|
||||||
in
|
|
||||||
Hashtbl.replace t.sk_ht pub signkey;
|
Hashtbl.replace t.sk_ht pub signkey;
|
||||||
Ok ())
|
Ok ())
|
||||||
l
|
l
|
||||||
|
|
@ -137,20 +135,14 @@ let dir = Fpath.(v "data" / "secmod ")
|
||||||
|
|
||||||
let db_lookup_signkey_data conn fname priv =
|
let db_lookup_signkey_data conn fname priv =
|
||||||
let pub = EddsaPrivateKey.pub_of_priv priv in
|
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
|
match opt with
|
||||||
| None ->
|
| None ->
|
||||||
Fmt.error_msg
|
Fmt.error_msg
|
||||||
"load_signkey error no associated metadata found in database for \
|
"load_signkey error: no associated data found in database for signkey \
|
||||||
signkey `%s`."
|
`%s`."
|
||||||
(Fpath.to_string fname)
|
(Fpath.to_string fname)
|
||||||
| Some (stamp_start, stamp_expire, stamp_end) ->
|
| Some sk_data -> Ok sk_data
|
||||||
(* TODO master_sig *)
|
|
||||||
let master_sig = None in
|
|
||||||
let v =
|
|
||||||
Signkey_data.{ pub; stamp_start; stamp_expire; stamp_end; master_sig }
|
|
||||||
in
|
|
||||||
Ok v
|
|
||||||
|
|
||||||
let db_lookup_denom_data conn ~section_name priv =
|
let db_lookup_denom_data conn ~section_name priv =
|
||||||
let pub = RsaPrivateKey.pub_of_priv priv in
|
let pub = RsaPrivateKey.pub_of_priv priv in
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue