@@ -29,18 +29,18 @@ let aead_crypto_predicate_communication_layer_reqres #cusages a #config = {
2929 pred = ( fun tr key_usage key nonce msg ad ->
3030 ( match parse authenticated_data ad with
3131 | None -> False
32- | Some { server } -> ( exists request .
32+ | Some { client ; server } -> ( exists request .
3333 match parse a msg with
3434 | None -> False
3535 | Some response ->
36- event_triggered tr server ( CommServerSendResponse server request response key <: communication_reqres_event a )
36+ event_triggered tr server ( CommServerSendResponse client server request response key <: communication_reqres_event a )
3737 )
3838 )
3939 );
4040 pred_later = ( fun tr1 tr2 key_usage key nonce msg ad -> (
4141 match parse authenticated_data ad with
4242 | None -> assert ( False )
43- | Some { server } -> ()
43+ | Some { client ; server } -> ()
4444 ))
4545}
4646# pop - options
@@ -93,10 +93,10 @@ let state_predicate_communication_layer_reqres {|crypto_invariants|} (a:Type) {|
9393 is_secret ( comm_label client server ) tr key /\
9494 key ` has_usage tr ` ( AeadKey ( comm_layer_aead_tag a ) empty )
9595 )
96- | ServerReceiveRequest { request ; key } -> (
96+ | ServerReceiveRequest { client ; request ; key } -> (
9797 let server = prin in
9898 is_knowable_by ( principal_label server ) tr key /\
99- is_well_formed a ( is_knowable_by ( principal_label server ) tr ) request /\
99+ is_well_formed a ( is_knowable_by ( get_label tr key ) tr ) request /\
100100 key ` has_usage tr ` ( AeadKey ( comm_layer_aead_tag a ) empty )
101101 )
102102 | ClientReceiveResponse { server ; response ; key } -> (
@@ -156,6 +156,20 @@ class comm_reqres_preds (a:Type) {| comm_layer_reqres_config a |} = {
156156 send_request_pred tr2 client server request key_label
157157 )
158158 ;
159+ authenticated_request_pred : tr : trace -> client : principal -> server : principal -> request : a -> key_label : label -> prop ;
160+ authenticated_request_pred_later :
161+ tr1 : trace -> tr2 : trace ->
162+ client : principal -> server : principal -> request : a -> key_label : label ->
163+ Lemma
164+ ( requires
165+ authenticated_request_pred tr1 client server request key_label /\
166+ is_well_formed a ( bytes_well_formed tr1 ) request /\
167+ tr1 <$ tr2
168+ )
169+ ( ensures
170+ authenticated_request_pred tr2 client server request key_label
171+ )
172+ ;
159173 // TODO rename to response_pred
160174 send_response_pred : tr : trace -> server : principal -> request : a -> response : a -> key_label : label -> prop ;
161175 send_response_pred_later :
@@ -181,35 +195,40 @@ let event_predicate_communication_layer_reqres
181195 event_predicate ( communication_reqres_event a ) =
182196 fun tr prin e ->
183197 ( match e with
184- | CommClientSendRequest client server request key -> (
198+ | CommClientSendRequest authenticated client server request key -> (
185199 rand_just_generated tr key /\
186200 is_well_formed a ( is_knowable_by ( get_label tr key ) tr ) request /\
187201 is_secret ( comm_label client server ) tr key /\
188202 key ` has_usage tr ` ( AeadKey ( comm_layer_aead_tag a ) empty ) /\
189203 crpreds . send_request_pred tr client server request ( get_label tr key )
190204 )
191- | CommServerReceiveRequest server request key -> (
205+ | CommServerReceiveRequest client server request key -> (
192206 is_knowable_by ( principal_label server ) tr key /\
193207 is_well_formed a ( is_knowable_by ( get_label tr key ) tr ) request /\
194208 key ` has_usage tr ` ( AeadKey ( comm_layer_aead_tag a ) empty ) /\
195- (
196- ( exists client . event_triggered tr client ( CommClientSendRequest client server request key <: communication_reqres_event a )) \/
197- ( is_publishable tr key /\ is_well_formed a ( is_publishable tr ) request )
209+ ( match client with
210+ | None -> (
211+ ( exists client . event_triggered tr client ( CommClientSendRequest Unauthenticated client server request key <: communication_reqres_event a )) \/
212+ ( is_publishable tr key /\ is_well_formed a ( is_publishable tr ) request )
198213 )
214+ | Some client -> (
215+ event_triggered tr client ( CommClientSendRequest Authenticated client server request key <: communication_reqres_event a ) \/
216+ is_corrupt tr ( long_term_key_label client )
217+ ))
199218 )
200- | CommServerSendResponse server request response key -> (
201- event_triggered tr server ( CommServerReceiveRequest server request key <: communication_reqres_event a ) /\
219+ | CommServerSendResponse client server request response key -> (
220+ event_triggered tr server ( CommServerReceiveRequest client server request key <: communication_reqres_event a ) /\
202221 is_well_formed a ( bytes_well_formed tr ) request /\
203222 is_well_formed a ( bytes_well_formed tr ) response /\
204223 bytes_well_formed tr key /\
205224 crpreds . send_response_pred tr server request response ( get_label tr key )
206225 )
207- | CommClientReceiveResponse client server request response key -> (
208- is_well_formed a ( is_knowable_by ( get_label tr key ) tr ) response /\
209- is_secret ( comm_label client server ) tr key /\
210- event_triggered tr client ( CommClientSendRequest client server request key <: communication_reqres_event a ) /\
211- ( event_triggered tr server ( CommServerSendResponse server request response key <: communication_reqres_event a ) \/
212- ( is_publishable tr key /\ is_well_formed a ( is_publishable tr ) response ))
226+ | CommClientReceiveResponse client response req_meta_data -> (
227+ is_well_formed a ( is_knowable_by ( comm_label client req_meta_data . server ) tr ) response /\
228+ is_secret ( comm_label client req_meta_data . server ) tr req_meta_data . key /\
229+ event_triggered tr client ( CommClientSendRequest ( request_authenticated req_meta_data ) client req_meta_data . server req_meta_data . request req_meta_data . key <: communication_reqres_event a ) /\
230+ ( event_triggered tr req_meta_data . server ( CommServerSendResponse req_meta_data . client req_meta_data . server req_meta_data . request response req_meta_data . key <: communication_reqres_event a ) \/
231+ is_corrupt tr ( principal_label client ) \/ is_corrupt tr ( principal_label req_meta_data . server ))
213232 )
214233 )
215234# pop - options
@@ -225,12 +244,19 @@ let comm_core_higher_layer_event_preds_reqres #cinvs a #config = {
225244 send_conf = ( fun tr client server ( com_msg_t : comm_message_t ) ->
226245 match com_msg_t with
227246 | RequestMessage { request ; key } -> (
228- parse_and_pred ( fun request_parsed -> event_triggered tr client ( CommClientSendRequest client server request_parsed key <: communication_reqres_event a )) request
247+ parse_and_pred ( fun request_parsed -> event_triggered tr client ( CommClientSendRequest Unauthenticated client server request_parsed key <: communication_reqres_event a )) request
248+ )
249+ | _ -> False
250+ );
251+ send_conf_later = ( fun tr1 tr2 client server msg -> ());
252+ send_conf_auth = ( fun tr client server ( com_msg_t : comm_message_t ) ->
253+ match com_msg_t with
254+ | RequestMessage { request ; key } -> (
255+ parse_and_pred ( fun request_parsed -> event_triggered tr client ( CommClientSendRequest Authenticated client server request_parsed key <: communication_reqres_event a )) request
229256 )
230257 | _ -> False
231258 );
232- send_conf_later = ( fun tr1 tr2 client server msg -> ()
233- )
259+ send_conf_auth_later = ( fun tr1 tr2 client server msg -> ());
234260}
235261# pop - options
236262
0 commit comments