init
This commit is contained in:
commit
099cd80670
48 changed files with 4951 additions and 0 deletions
93
src/data_file.ml
Normal file
93
src/data_file.ml
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
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))
|
||||
Loading…
Add table
Add a link
Reference in a new issue