@@ -304,6 +304,10 @@ async fn leader_upload(version: DapVersion) {
304304 report_metadata : ReportMetadata {
305305 id : ReportId ( [ 1 ; 16 ] ) ,
306306 time : t. now ,
307+ public_extensions : match version {
308+ DapVersion :: Draft09 => None ,
309+ DapVersion :: Latest => Some ( Vec :: new ( ) ) ,
310+ } ,
307311 } ,
308312 public_share : b"public share" . to_vec ( ) ,
309313 encrypted_input_shares : [
@@ -424,6 +428,10 @@ async fn leader_upload_taskprov() {
424428 t. now ,
425429 & task_id,
426430 DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
431+ match version {
432+ DapVersion :: Draft09 => None ,
433+ DapVersion :: Latest => Some ( vec ! [ ] ) ,
434+ } ,
427435 vec ! [ Extension :: Taskprov ] ,
428436 version,
429437 )
@@ -451,6 +459,10 @@ async fn leader_upload_taskprov() {
451459 t. now ,
452460 & task_id,
453461 DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
462+ match version {
463+ DapVersion :: Draft09 => None ,
464+ DapVersion :: Latest => Some ( vec ! [ ] ) ,
465+ } ,
454466 vec ! [ Extension :: Taskprov ] ,
455467 version,
456468 )
@@ -516,6 +528,10 @@ async fn leader_upload_taskprov_wrong_version(version: DapVersion) {
516528 t. now ,
517529 & task_id,
518530 DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
531+ match version {
532+ DapVersion :: Draft09 => None ,
533+ DapVersion :: Latest => Some ( vec ! [ ] ) ,
534+ } ,
519535 vec ! [ Extension :: Taskprov ] ,
520536 version,
521537 )
@@ -541,6 +557,100 @@ async fn leader_upload_taskprov_wrong_version(version: DapVersion) {
541557
542558async_test_versions ! ( leader_upload_taskprov_wrong_version) ;
543559
560+ #[ tokio:: test]
561+ async fn leader_upload_taksprov_public_errors ( ) {
562+ let version = DapVersion :: Latest ;
563+ let t = TestRunner :: default_with_version ( version) . await ;
564+ let client = t. http_client ( ) ;
565+ let hpke_config_list = t. get_hpke_configs ( version, client) . await . unwrap ( ) ;
566+
567+ let ( task_config, task_id, taskprov_advertisement) = DapTaskParameters {
568+ version,
569+ min_batch_size : 10 ,
570+ query : DapBatchMode :: TimeInterval ,
571+ leader_url : t. task_config . leader_url . clone ( ) ,
572+ helper_url : t. task_config . helper_url . clone ( ) ,
573+ ..Default :: default ( )
574+ }
575+ . to_config_with_taskprov (
576+ b"cool task" . to_vec ( ) ,
577+ t. now ,
578+ daphne:: roles:: aggregator:: TaskprovConfig {
579+ hpke_collector_config : & t. taskprov_collector_hpke_receiver . config ,
580+ vdaf_verify_key_init : & t. taskprov_vdaf_verify_key_init ,
581+ } ,
582+ )
583+ . unwrap ( ) ;
584+
585+ // Repeated public extension
586+ let report = task_config
587+ . vdaf
588+ . produce_report_with_extensions (
589+ & hpke_config_list,
590+ t. now + 1 ,
591+ & task_id,
592+ DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
593+ Some ( vec ! [ Extension :: Taskprov , Extension :: Taskprov ] ) ,
594+ vec ! [ ] ,
595+ version,
596+ )
597+ . unwrap ( ) ;
598+ t. leader_request_expect_abort (
599+ client,
600+ None ,
601+ & format ! ( "tasks/{}/reports" , task_id. to_base64url( ) ) ,
602+ & http:: Method :: POST ,
603+ DapMediaType :: Report ,
604+ Some (
605+ & taskprov_advertisement
606+ . serialize_to_header_value ( version)
607+ . unwrap ( ) ,
608+ ) ,
609+ report. get_encoded_with_param ( & version) . unwrap ( ) ,
610+ 400 ,
611+ "invalidMessage" ,
612+ )
613+ . await
614+ . unwrap ( ) ;
615+
616+ // Unsupported public extension
617+ let report = task_config
618+ . vdaf
619+ . produce_report_with_extensions (
620+ & hpke_config_list,
621+ t. now + 1 ,
622+ & task_id,
623+ DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
624+ Some ( vec ! [
625+ Extension :: Taskprov ,
626+ Extension :: NotImplemented {
627+ typ: 3 ,
628+ payload: b"ignore" . to_vec( ) ,
629+ } ,
630+ ] ) ,
631+ vec ! [ ] ,
632+ version,
633+ )
634+ . unwrap ( ) ;
635+ t. leader_request_expect_abort (
636+ client,
637+ None ,
638+ & format ! ( "tasks/{}/reports" , task_id. to_base64url( ) ) ,
639+ & http:: Method :: POST ,
640+ DapMediaType :: Report ,
641+ Some (
642+ & taskprov_advertisement
643+ . serialize_to_header_value ( version)
644+ . unwrap ( ) ,
645+ ) ,
646+ report. get_encoded_with_param ( & version) . unwrap ( ) ,
647+ 400 ,
648+ "unsupportedExtension" ,
649+ )
650+ . await
651+ . unwrap ( ) ;
652+ }
653+
544654async fn internal_leader_process ( version : DapVersion ) {
545655 let t = TestRunner :: default_with_version ( version) . await ;
546656 let path = t. upload_path ( ) ;
@@ -1408,6 +1518,10 @@ async fn leader_collect_taskprov_ok(version: DapVersion) {
14081518 now,
14091519 & task_id,
14101520 DapMeasurement :: U32Vec ( vec ! [ 1 ; 10 ] ) ,
1521+ match version {
1522+ DapVersion :: Draft09 => None ,
1523+ DapVersion :: Latest => Some ( vec ! [ ] ) ,
1524+ } ,
14111525 extensions,
14121526 version,
14131527 )
0 commit comments