diff --git a/test/validate_response.ml b/test/validate_response.ml index 75777211..6b65e01e 100644 --- a/test/validate_response.ml +++ b/test/validate_response.ml @@ -1,5 +1,4 @@ open Syntax -(*open Crypto*) let keys content = let open Api in @@ -74,8 +73,72 @@ let keys content = } in - (* validate denominations *) + let last_issue_date = ref Timestamp.zero in + let* () = + (* TODO parse CS *) + v.denominations + |> list_iter + (fun + (DenomGroup.Rsa + RsaDenomGroup. + { + denoms; + value; + fee_withdraw; + fee_deposit; + fee_refresh; + fee_refund; + }) + -> + let open RsaDenom in + denoms + |> list_iter + (fun + { + rsa_pub; + master_sig; + stamp_start; + stamp_expire_withdraw; + stamp_expire_deposit; + stamp_expire_legal; + lost= _; + } + -> + last_issue_date := Timestamp.max !last_issue_date stamp_start; + let denom_hash = + DenominationHash.hash + (Crypto.RsaPublicKey.to_octets rsa_pub) + in + let open Signatures.DenominationKeyValidity in + verify v.master_public_key master_sig + { + R.master= v.master_public_key; + start= stamp_start; + expire_withdraw= stamp_expire_withdraw; + expire_spend= stamp_expire_deposit; + expire_legal= stamp_expire_legal; + value; + fee_withdraw; + fee_deposit; + fee_refresh; + fee_refund; + denom_hash; + })) + in + let* () = + let last_issue_date = + v.denominations + |> List.concat_map (fun (DenomGroup.Rsa rsa_denom_group) -> + rsa_denom_group.denoms) + |> List.map (fun rsa_denom -> rsa_denom.RsaDenom.stamp_start) + |> List.fold_left Timestamp.max Timestamp.zero + in + if last_issue_date = v.list_issue_date then Ok () + else Fmt.error "list_issue_date is wrong" + in + (* validate global-fees *) + (* validate list_issue_date *) (* validate auditors *) Ok ()