93 lines
2.6 KiB
OCaml
93 lines
2.6 KiB
OCaml
open Bos.OS
|
|
open Syntax
|
|
open Crypto
|
|
|
|
let read fname =
|
|
let* b = File.exists fname in
|
|
match b with
|
|
| false -> Ok None
|
|
| true ->
|
|
let+ content = File.read fname in
|
|
Some content
|
|
|
|
let read_eddsa fname =
|
|
let+ content_opt = read fname in
|
|
Option.map EddsaPrivateKey.of_octets content_opt
|
|
|
|
let read_rsa fname =
|
|
let+ content_opt = read fname in
|
|
Option.map RsaPrivateKey.of_octets content_opt
|
|
|
|
let write_eddsa fname priv = EddsaPrivateKey.to_octets priv |> File.write fname
|
|
let write_rsa fname priv = RsaPrivateKey.to_octets priv |> File.write fname
|
|
|
|
let load_signkey conn fname =
|
|
let* opt = read_eddsa fname in
|
|
match opt with
|
|
| None -> Ok None
|
|
| Some priv -> (
|
|
let pub = EddsaPrivateKey.pub_of_priv priv in
|
|
let* opt = Pg.lookup_signing_key conn pub in
|
|
match opt with
|
|
| None ->
|
|
Fmt.error_msg
|
|
"load_signkey error no associated metadata 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.
|
|
{ pub; priv; stamp_start; stamp_expire; stamp_end; master_sig }
|
|
in
|
|
Ok (Some v))
|
|
|
|
let load_denom conn ~section_name fname =
|
|
let* opt = read_rsa fname in
|
|
match opt with
|
|
| None -> Ok None
|
|
| Some priv -> (
|
|
let pub = RsaPrivateKey.pub_of_priv priv in
|
|
let h_pub = Bin_type.DenominationHash.hash (RsaPublicKey.to_octets pub) in
|
|
let* opt = Pg.lookup_denomination_key conn h_pub in
|
|
match opt with
|
|
| None ->
|
|
Fmt.error_msg
|
|
"load_denom error no associated metadata found in database for \
|
|
denom `%s`."
|
|
(Fpath.to_string fname)
|
|
| Some
|
|
( stamp_start,
|
|
stamp_expire_withdraw,
|
|
stamp_expire_deposit,
|
|
stamp_expire_legal,
|
|
value,
|
|
fee_withdraw,
|
|
fee_deposit,
|
|
fee_refresh,
|
|
fee_refund,
|
|
age_mask ) ->
|
|
(* TODO master_sig *)
|
|
let master_sig = None in
|
|
let v =
|
|
Denomination.
|
|
{
|
|
pub;
|
|
priv;
|
|
section_name;
|
|
value;
|
|
stamp_start;
|
|
stamp_expire_withdraw;
|
|
stamp_expire_deposit;
|
|
stamp_expire_legal;
|
|
fee_withdraw;
|
|
fee_deposit;
|
|
fee_refresh;
|
|
fee_refund;
|
|
age_mask;
|
|
h_pub;
|
|
master_sig;
|
|
}
|
|
in
|
|
Ok (Some v))
|