add --postgres-password cmdline arg + make keys

This commit is contained in:
swrup 2026-05-12 04:10:43 +02:00 committed by Swrup
parent 42b7e13eae
commit 6cb6a96784
11 changed files with 84 additions and 53 deletions

2
.gitignore vendored
View file

@ -2,4 +2,4 @@ _build
_dbinit_sql _dbinit_sql
vendors vendors
assets assets
secmod.fat keys

View file

@ -1,4 +1,4 @@
storage=secmod.fat storage=./keys/secmod.fat
service=tap0 service=tap0
setup-switch: setup-switch:
@ -15,12 +15,22 @@ clean:
rm -rf _build/ rm -rf _build/
rm -rf vendors/ rm -rf vendors/
assets: keys:
@cp -r default/assets ./ @mkdir -p keys
@dune exec tools/offline.exe -- generate-eddsa-key --output ./keys/master
@read -sp "Enter postgres password: " POSTGRES_PASSWORD; \
echo; \
printf $${POSTGRES_PASSWORD} > ./keys/postgres_password
secmod.fat: secmod.fat:
mfat make --sectors=2048 $(storage) mfat make --sectors=2048 $(storage)
assets:
@cp -r default/assets ./
config:
@sed "s/%%MASTER_PUBLIC_KEY%%/$$(cat ./keys/master.pub)/" -i assets/mte.conf
src/manifest.json: src/manifest.json:
@dune exec src/mte.exe > src/manifest.json @dune exec src/mte.exe > src/manifest.json
@ -29,4 +39,5 @@ build: vendors
@dune build --workspace dune-workspace.solo5 src/mte.exe @dune build --workspace dune-workspace.solo5 src/mte.exe
run: build run: build
@solo5-hvt --block:storage=$(storage) --net:service=$(service) -- ./_build/solo5/src/mte.exe @solo5-hvt --block:storage=$(storage) --net:service=$(service) -- ./_build/solo5/src/mte.exe \
--postgres-password=$$(cat ./keys/postgres_password)

View file

@ -7,28 +7,6 @@ fractional_normal_digits= 2
fractional_trailing_zero_digits= 2 fractional_trailing_zero_digits= 2
alt_unit_names= "{"0":"ク","3":"kク"}" alt_unit_names= "{"0":"ク","3":"kク"}"
[exchange]
currency = KUDOS
currency_round_unit = KUDOS:0.01
db = postgres
attribute_encryption_key = "deadbeef"
port = 3434
bind_to = localhost
master_public_key = "SJ0NYND22VQP3MP7FM754RDX8HCKVWAXTHY9SQNBTPRJZ2SPM2S0"
stefan_abs = KUDOS:0.00
stefan_log = KUDOS:0.00
stefan_lin = 0.00
aggregator_idle_sleep_interval = "1 hour"
closer_idle_sleep_interval = "1 hour"
transfer_idle_sleep_interval = "1 hour"
wirewatch_idle_sleep_interval = "1 hour"
signkey_legal_duration = "1 year"
max_keys_caching = "4 weeks"
enable_kyc = NO
terms_etag = "0"
privacy_etag = "0"
base_url = "http://10.0.0.2:3434/"
[exchangedb] [exchangedb]
idle_reserve_expiration_time = "1 year 2 weeks 3 hours 4 minutes 5 seconds" idle_reserve_expiration_time = "1 year 2 weeks 3 hours 4 minutes 5 seconds"
legal_reserve_expiration_time = "1 year" legal_reserve_expiration_time = "1 year"
@ -36,9 +14,6 @@ aggregator_shift = "1 year"
max_aml_program_runtime = "1 year" max_aml_program_runtime = "1 year"
default_purse_limit = 9999 default_purse_limit = 9999
[exchangedb-postgres]
config = "pgx://mte:hunter2@10.0.0.1:5432/taler-exchange"
[taler-exchange-secmod-rsa] [taler-exchange-secmod-rsa]
lookahead_sign = "1 year" lookahead_sign = "1 year"
overlap_duration = "1 hour" overlap_duration = "1 hour"
@ -74,3 +49,25 @@ fee_refund= KUDOS:0.00
cipher= RSA cipher= RSA
rsa_keysize= 2048 rsa_keysize= 2048
age_restricted= NO age_restricted= NO
[exchange]
currency = KUDOS
currency_round_unit = KUDOS:0.01
db = postgres
stefan_abs = KUDOS:0.00
stefan_log = KUDOS:0.00
stefan_lin = 0.00
aggregator_idle_sleep_interval = "1 hour"
closer_idle_sleep_interval = "1 hour"
transfer_idle_sleep_interval = "1 hour"
wirewatch_idle_sleep_interval = "1 hour"
signkey_legal_duration = "1 year"
max_keys_caching = "4 weeks"
enable_kyc = NO
terms_etag = "0"
privacy_etag = "0"
bind_to = 10.0.0.2
port = 3434
base_url = "http://10.0.0.2/"
attribute_encryption_key = "deadbeef"
master_public_key = "%%MASTER_PUBLIC_KEY%%"

Binary file not shown.

View file

@ -62,10 +62,6 @@ module Exchangedb = struct
let default_purse_limit = get "default_purse_limit" |> int let default_purse_limit = get "default_purse_limit" |> int
end end
module Exchangedb_postgres = struct
let config = get config ~section:"exchangedb-postgres" ~field:"config" |> uri
end
module Currency = struct module Currency = struct
type t = { type t = {
enabled: [ `YES | `NO ]; enabled: [ `YES | `NO ];

View file

@ -4,4 +4,5 @@ type t = {
tcp: Mnet.TCP.state; tcp: Mnet.TCP.state;
dns: Mnet_dns.t; dns: Mnet_dns.t;
fs: Fat.t; fs: Fat.t;
db_uri: Uri.t;
} }

View file

@ -50,10 +50,9 @@ let routes =
module RNG = Mirage_crypto_rng.Fortuna module RNG = Mirage_crypto_rng.Fortuna
let t0 = Mkernel.clock_monotonic () let run postgres_password =
let () =
let ( let@ ) finally fn = Fun.protect ~finally fn in let ( let@ ) finally fn = Fun.protect ~finally fn in
let t0 = Mkernel.clock_monotonic () in
Log_reporter.setup ~t0; Log_reporter.setup ~t0;
let rng = let rng =
let rng () = Mirage_crypto_rng_mkernel.initialize (module RNG) in let rng () = Mirage_crypto_rng_mkernel.initialize (module RNG) in
@ -81,6 +80,30 @@ let () =
Vifu.Devices.[ Mte_device.sm_eddsa; Mte_device.sm_rsa; Mte_device.pool ] Vifu.Devices.[ Mte_device.sm_eddsa; Mte_device.sm_rsa; Mte_device.pool ]
in in
let handlers = [ Mte_handler.not_implemented_route ] in let handlers = [ Mte_handler.not_implemented_route ] in
let env = { Env.sw; stack; tcp; dns; fs } in let env =
let db_uri =
Uri.of_string
@@ Fmt.str "pgx://mte:%s@10.0.0.1:5432/taler-exchange" postgres_password
in
{ Env.sw; stack; tcp; dns; fs; db_uri }
in
Logs.info (fun m -> m "Starting MTE server"); Logs.info (fun m -> m "Starting MTE server");
Vifu.run ~cfg ~devices ~handlers tcp routes env Vifu.run ~cfg ~devices ~handlers tcp routes env
open Cmdliner
(* todo: tls *)
let postgres_password =
let doc = "PostgreSQL password." in
let open Arg in
required & opt (some string) None & info [ "postgres-password" ] ~doc
let term =
let open Term in
const run $ postgres_password
let cmd =
let info = Cmd.info "blame" in
Cmd.v info term
let () = Cmd.(exit @@ eval cmd)

View file

@ -9,9 +9,8 @@ let sm_rsa =
Vifu.Device.v ~name:"secmod-rsa" ~finally [] f Vifu.Device.v ~name:"secmod-rsa" ~finally [] f
let pool : (Env.t, Pg.pool) Vifu.Device.device = let pool : (Env.t, Pg.pool) Vifu.Device.device =
let f { Env.sw; stack; tcp; dns; fs= _ } = let f { Env.sw; stack; tcp; dns; db_uri; fs= _ } =
Logs.info (fun m -> m "Connecting to database"); Logs.info (fun m -> m "Connecting to database");
let db_uri = Config.Exchangedb_postgres.config in
let post_connect conn = Pg.preflight conn in let post_connect conn = Pg.preflight conn in
match Caqti_mnet.connect_pool ~post_connect ~sw stack tcp dns db_uri with match Caqti_mnet.connect_pool ~post_connect ~sw stack tcp dns db_uri with
| Error e -> | Error e ->

View file

@ -4,14 +4,20 @@ set -e
a="/tmp/a.json" a="/tmp/a.json"
b="/tmp/b.json" b="/tmp/b.json"
url="http://10.0.0.2:3434"
auditor_pub="A17JXR3E6J4CXDPYT7S1H25PGJ3ABS26TQ38654QCX0TB59RPMF0"
master_key="./default/master_offline_private_key"
zero_kudos="KUDOS:0.0" zero_kudos="KUDOS:0.0"
# TODO launch mte.exe and kill it a then end with its PID url="http://10.0.0.2:3434"
if [ ! -d ./keys ]; then
echo "./keys folder not found"
exit 1
fi
master_key="./keys/master"
#auditor_pub=$(cat "./keys/auditor_0.pub")
auditor_pub="BQCHC907487KZD5BYD7S8AV2RY8Z5QZSJQVM4JJ8VBH17SPET2BG"
# TODO launch mte.exe and kill it a then end with its PID
mte-offline-tool() { mte-offline-tool() {
dune exec mte-offline-tool -- "$@" > /dev/null dune exec mte-offline-tool -- "$@" > /dev/null
} }

View file

@ -85,10 +85,8 @@ let url =
let doc = "url" in let doc = "url" in
Arg.(required & opt (some string) None & info [ "url" ] ~doc) Arg.(required & opt (some string) None & info [ "url" ] ~doc)
let setup_cmd = let generate_eddsa_key_cmd =
let doc = let doc = "Generate a Ed25519 key pair" in
"Generate offline master keys, write private and public key to file"
in
let output = let output =
let doc = "private key output file" in let doc = "private key output file" in
Arg.(required & opt (some filepath) None & info [ "o"; "output" ] ~doc) Arg.(required & opt (some filepath) None & info [ "o"; "output" ] ~doc)
@ -100,11 +98,11 @@ let setup_cmd =
in in
Arg.(value & opt (some filepath) None & info [ "output-pubkey" ] ~doc) Arg.(value & opt (some filepath) None & info [ "output-pubkey" ] ~doc)
in in
Cmd.make (Cmd.info "setup" ~doc) Cmd.make (Cmd.info "generate-eddsa-key" ~doc)
@@ @@
let+ output = output and+ output_pubkey = output_pubkey in let+ output = output and+ output_pubkey = output_pubkey in
let output_pubkey = Option.value ~default:(output ^ ".pub") output_pubkey in let output_pubkey = Option.value ~default:(output ^ ".pub") output_pubkey in
setup ~output ~output_pubkey generate_eddsa_key ~output ~output_pubkey
let download_cmd = let download_cmd =
let doc = let doc =
@ -333,7 +331,7 @@ let cli =
in in
Cmd.group info Cmd.group info
[ [
setup_cmd; generate_eddsa_key_cmd;
download_cmd; download_cmd;
sign_cmd; sign_cmd;
upload_cmd; upload_cmd;

View file

@ -201,7 +201,7 @@ let upload ~input ~url =
% ("@" ^ input) % ("@" ^ input)
% url) % url)
let setup ~output ~output_pubkey = let generate_eddsa_key ~output ~output_pubkey =
Result.unwrap_err Result.unwrap_err
@@ @@
let priv, pub = Mirage_crypto_ec.Ed25519.generate () in let priv, pub = Mirage_crypto_ec.Ed25519.generate () in