This commit is contained in:
swrup 2025-11-28 19:17:25 +01:00
parent ab82a357a9
commit 31a89f3a25
7 changed files with 32 additions and 14 deletions

1
future_keys.json Normal file
View file

@ -0,0 +1 @@
{"future_denoms":[{"section_name":"kudo_1","value":"EUR:0.01","stamp_start":{"t_s":1764354917.5913634},"stamp_expire_withdraw":{"t_s":1795890917.5913634},"stamp_expire_deposit":{"t_s":1795890917.5913634},"stamp_expire_legal":{"t_s":1795890917.5913634},"denom_pub":{"cipher":"RSA","age_mask":0,"rsa_pub":"0400026BC7HB7T66EDP1HNZWXJJAB06HQRZY754YF3HM4EBSHS9QXR0MAV9EAEWS5B1CBDK2H4CEPN25WN5NVZJNYXE1T6BEMSTZPB94T4KBQ8NCW3RPNVQQFGCB2ZAMM7A86DGF2G2PEGBG33AJEK6PZKE32ZFMP85N5Q5XAD4Q5YA76JSXC6CGMS7788V46N0K62R9ZWMFFP3G0Z5WF2FEFEYNTT9YYCVJEXH8PASR2Q298RXD6XKKY5ECM5AFHMG0EX6W7VHQYXN0B3GEEYN12FDSFND6TQKFKHA8SYR1FDRTJAD1YETJ3A3NF5CKNNDF6W47CWFCXANBX46JWPABVD9CQCHHGQ4V76A04C15GE8Z8F149DRHED2ANSNBK9ESDH3HANBJYY4R6KBE07GQXXNRWT6V0000000004002==="},"fee_withdraw":"EUR:0.00","fee_deposit":"EUR:0.00","fee_refresh":"EUR:0.00","fee_refund":"EUR:0.00","denom_secmod_sig":"SHC57K2Y60JK01KEJ54HZ1JXABKQEJVGD65M3YGM1B1M8H9860YZ0ZZT9BSX1S2DH0W91BY459YMYAW5BXVN0GY981QKK7MSWX1AA2G="},{"section_name":"kudo_2","value":"EUR:0.02","stamp_start":{"t_s":1764354917.6133766},"stamp_expire_withdraw":{"t_s":1795890917.6133766},"stamp_expire_deposit":{"t_s":1795890917.6133766},"stamp_expire_legal":{"t_s":1795890917.6133766},"denom_pub":{"cipher":"RSA","age_mask":0,"rsa_pub":"0400025RMH02FW6EF0T1SHQY4HPYBP8VGKS6Q24M8PP89J8KT6KGS44K9CR5P0TNZPGAZJ2W1Y2FGAK5V2E9DT5JTGEJHMDX4ZWXMVNQDXJ129A1C0ZCH2CA1MDYTAQARN5QH31ZN797G2QPPT2Y0F4SNDZ00ZKYHDP4JWEWC064M795N1T06B0WJYDQV7GAJ76TY7H2EHK5KP4F3K7EYKMDF9B90B4S3ZKHK16PQGZSCE4T3N80SH8HMRMDQAS5CBM9HHX5ECXXQR1DCXVDH6B838FWH5TP67X0SARPCGNXHHK06PF3Z03WWVWDPK9D82CGYQ591RRXAVYY6XXHAR4X5JNHKYVHQSKYNBHW13F8DMTZFKTKHA6ZWJT7VCWNASCJ6S9VPE98C07ZP89DSABWYBY5E9S50000000004002==="},"fee_withdraw":"EUR:0.00","fee_deposit":"EUR:0.00","fee_refresh":"EUR:0.00","fee_refund":"EUR:0.00","denom_secmod_sig":"67BFH8B6RVSWV3RNKW1S6Q70RZR1SG1AEBSQ6CPKA7A85XY9A3FKKB02P2C10M45G0WMPPRYBYVG9F6KASG5YSR1QHW5NDEAB7GSC0G="}],"future_signkeys":[{"key":"KCG1XC4HWVR98NRX918JK8V0GXS759954M5G1GZ1XJT68WREZWHG====","stamp_start":{"t_s":1764354917.591289},"stamp_expire":{"t_s":1795890917.591289},"stamp_end":{"t_s":1795890917.591289},"signkey_secmod_sig":"E4K25ER4G4Y90KGH9T05F9XQPTA1ECHK1YZVA6FS6VG9H68XYAKRFWCMGKG3AB4CQS9HX0D43R8WWXTEX5D9F0QEBQ3E72ANT26KW00="}],"master_pub":"SJ0NYND22VQP3MP7FM754RDX8HCKVWAXTHY9SQNBTPRJZ2SPM2S0====","denom_secmod_public_key":"1V9HCTYFN18MM143K6TNPQBH5QKV2YXMA7W81R1W1NDKP21N5XPG====","signkey_secmod_public_key":"238VV3ZGC9DHP3VG98V19HNTD437F2BWRJWFZFAW6Q92N8ZNFCXG===="}

1
master_signatures.json Normal file
View file

@ -0,0 +1 @@
{"denom_sigs":[{"h_denom_pub":"H73GDS5MNZW1DQ62T524225X6K25Q0EXPYC6CP4S2AEQX1J2C4RND2KYZQX7EXTBG0BDW6T1HANKXBVH5SB1D8QCTE8YRVC040CR1CG=","master_sig":"J50WKZ51X21H24H2JSK8MGFJ1MF36R9M471PJ3NDQZYF7B8E2ZP9J960Q66Q5HNZ23SRF6DN5V0M0DWRPDY6X2WC96XGB0DBYFFKR38="},{"h_denom_pub":"QHFW8B4RF5JXG0JVF9E5F3D3JW9869QB55ZZ1G2NPEGMBGNH59QBPPT15SB1S3KXBN3VRJ2BKM6J8RXG2YAZJGPQS5T2MKVSADPWRX0=","master_sig":"7JHYST7T2499DM113TWE41W36TY7WG07BPB6QW7V13YKS1877RPV9HYTQ5Q8RMAG95BTR578GCJQQ96RY9JBDKW161GX8F59P7T8C3G="}],"signkey_sigs":[{"key":"KCG1XC4HWVR98NRX918JK8V0GXS759954M5G1GZ1XJT68WREZWHG====","master_sig":"9GVHW3QH80Q1XFSDQ1SJDPQPPXN16T1TR8JGGH98KCN30P76J3EXJ15SS93E910QEPTB4W96FGVK40PX7CZWDZT4M8QZFSH3N0V8210="}]}

View file

@ -92,6 +92,13 @@ let of_string =
let jsont = Jsont.of_of_string ~kind:"Amount" of_string ~enc:to_string let jsont = Jsont.of_of_string ~kind:"Amount" of_string ~enc:to_string
let currency_len = 12 let currency_len = 12
let pad_currency s =
let len = String.length s in
assert (len <= 11);
let b = Bytes.make 12 '\x00' in
Bytes.blit_string s 0 b 0 len;
Bytes.to_string b
let bin = let bin =
let open Bin in let open Bin in
record (fun _value _fraction _currency -> record (fun _value _fraction _currency ->
@ -99,7 +106,7 @@ let bin =
assert false) assert false)
|+ field neint64 (fun t -> t.value) |+ field neint64 (fun t -> t.value)
|+ field neint32 (fun t -> t.fraction) |+ field neint32 (fun t -> t.fraction)
|+ field (bytes currency_len) (fun t -> t.currency) |+ field (bytes currency_len) (fun t -> pad_currency t.currency)
|> sealr |> sealr
let bin_nbo = let bin_nbo =
@ -107,5 +114,5 @@ let bin_nbo =
record (fun _value _fraction _currency -> assert false) record (fun _value _fraction _currency -> assert false)
|+ field beint64 (fun t -> t.value) |+ field beint64 (fun t -> t.value)
|+ field beint32 (fun t -> t.fraction) |+ field beint32 (fun t -> t.fraction)
|+ field (bytes currency_len) (fun t -> t.currency) |+ field (bytes currency_len) (fun t -> pad_currency t.currency)
|> sealr |> sealr

View file

@ -38,7 +38,7 @@ end = struct
type t = B32.t type t = B32.t
let hash s = let hash s =
let open Digestif.SHA256 in let open Digestif.SHA512 in
s |> digest_string |> to_raw_string s |> digest_string |> to_raw_string
let jsont = Jsont.of_of_string ~kind:"HashCode" B32.decode ~enc:B32.encode let jsont = Jsont.of_of_string ~kind:"HashCode" B32.decode ~enc:B32.encode

View file

@ -120,7 +120,11 @@ module Hash_64 = struct
| false -> Fmt.failwith "Hash.of_octets failure: data is not 64 bytes" | false -> Fmt.failwith "Hash.of_octets failure: data is not 64 bytes"
| true -> Digestif.SHA512.of_raw_string s | true -> Digestif.SHA512.of_raw_string s
let to_octets = Digestif.SHA512.to_raw_string let to_octets v =
let s = Digestif.SHA512.to_raw_string v in
match String.length s = 64 with
| false -> Fmt.failwith "Hash.to_octets failure: data is not 64 bytes"
| true -> s
let bin = let bin =
let open Bin in let open Bin in

View file

@ -113,17 +113,19 @@ module RsaPublicKey = struct
String.sub src pos len |> rev_string len |> Z.of_bits String.sub src pos len |> rev_string len |> Z.of_bits
let to_octets ({ n; e } : Mirage_crypto_pk.Rsa.pub) = let to_octets ({ n; e } : Mirage_crypto_pk.Rsa.pub) =
let n_len = Z.size n in let n = Z.to_bits n in
let e_len = Z.size e in let e = Z.to_bits e in
let n_len = String.length n in
let e_len = String.length e in
let len = 4 + n_len + e_len in let len = 4 + n_len + e_len in
let b = Bytes.make len '\x00' in let b = Bytes.make len '\x00' in
Bytes.set_uint16_be b 0 n_len; Bytes.set_uint16_be b 0 n_len;
Bytes.set_uint16_be b 2 e_len; Bytes.set_uint16_be b 2 e_len;
let n = Z.to_bits n |> rev_string n_len in let n = rev_string n_len n in
let e = Z.to_bits e |> rev_string e_len in let e = rev_string e_len e in
Bytes.blit_string n 0 b 4 n_len; Bytes.blit_string n 0 b 4 n_len;
Bytes.blit_string e 0 b (4 + n_len) e_len; Bytes.blit_string e 0 b (4 + n_len) e_len;
Bytes.unsafe_to_string b Bytes.to_string b
let of_octets = let of_octets =
let check = function let check = function
@ -131,8 +133,6 @@ module RsaPublicKey = struct
| true -> Ok () | true -> Ok ()
in in
fun s -> fun s ->
Result.get_ok
@@
let open Syntax in let open Syntax in
let len = String.length s in let len = String.length s in
let* () = check (len >= 4) in let* () = check (len >= 4) in
@ -142,6 +142,11 @@ module RsaPublicKey = struct
let n = z_of_bits_be s 4 n_len in let n = z_of_bits_be s 4 n_len in
let e = z_of_bits_be s (4 + n_len) e_len in let e = z_of_bits_be s (4 + n_len) e_len in
Mirage_crypto_pk.Rsa.pub ~n ~e |> unwrap_err_msg Mirage_crypto_pk.Rsa.pub ~n ~e |> unwrap_err_msg
let of_octets s =
match of_octets s with
| Error e -> Fmt.failwith "RsaPublicKey.of_octets failure: %s@." e
| Ok v -> v
end end
include Binary include Binary

View file

@ -25,11 +25,11 @@ let denom_signature ~master_key
Crypto.RsaPublicKey.to_octets pub Crypto.RsaPublicKey.to_octets pub
in in
let h_denom_pub = Api.HashCode.hash pub_octets in let h_denom_pub = Api.HashCode.hash pub_octets in
let master = Crypto.EddsaPrivateKey.(pub_of_priv master_key) in
let denom_hash = Bin_type.DenominationHash.hash pub_octets in
let master_sig = let master_sig =
let open Bin_type in (*let open Bin_type in*)
let open Bin_signature.DenominationKeyValidityPS in let open Bin_signature.DenominationKeyValidityPS in
let master = Crypto.EddsaPrivateKey.(pub_of_priv master_key) in
let denom_hash = DenominationHash.hash pub_octets in
{ {
master; master;
start= stamp_start; start= stamp_start;