Repository: cloudflare/daphne
Pull request #135 (2022-10-11 15:24:18)

Update DAP references to 02
Partially addresses #100.
Based on #134 (merge that first).


Patch:
diff --git a/README.md b/README.md
index edb88a3..f50e4a1 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@ Daphne is a Rust implementation of the Distributed Aggregation Protocol
 ([DAP](https://datatracker.ietf.org/doc/draft-ietf-ppm-dap/)) standard. DAP is
 under active development in the PPM working group of the IETF.
 
-Daphne currently implements draft-ietf-ppm-dap-01.
+Daphne currently implements draft-ietf-ppm-dap-02.
 
 This software is intended to support experimental DAP deployments and is not yet
 suitable for use in production. Daphne will evolve along with the DAP draft:
diff --git a/daphne/src/auth.rs b/daphne/src/auth.rs
index 9097ce8..8cb0baa 100644
--- a/daphne/src/auth.rs
+++ b/daphne/src/auth.rs
@@ -16,7 +16,7 @@ use prio::codec::Decode;
 use serde::{Deserialize, Serialize};
 use std::io::Cursor;
 
-/// A bearer token used for authorizing DAP requests as specified in draft-ietf-ppm-dap-01.
+/// A bearer token used for authorizing DAP requests as specified in draft-ietf-ppm-dap-02.
 #[derive(Clone, Debug, Deserialize, Serialize)]
 pub struct BearerToken(String);
 
diff --git a/daphne/src/lib.rs b/daphne/src/lib.rs
index 929d57e..2d7f382 100644
--- a/daphne/src/lib.rs
+++ b/daphne/src/lib.rs
@@ -6,7 +6,7 @@
 //! PPM working group of the IETF. See [`VdafConfig`] for a listing of supported
 //! [VDAFs](https://github.com/cfrg/draft-irtf-cfrg-vdaf).
 //!
-//! Daphne implements draft-ietf-ppm-dap-01.
+//! Daphne implements draft-ietf-ppm-dap-02.
 //!
 //! Daphne does not provide the complete, end-to-end functionality of any party in the protocol.
 //! Instead, it defines traits for the functionalities that a concrete instantiation of the
@@ -267,8 +267,8 @@ pub struct ProblemDetails {
 /// DAP version used for a task.
 #[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
 pub enum DapVersion {
-    #[serde(rename = "v01")]
-    Draft01,
+    #[serde(rename = "v02")]
+    Draft02,
 
     #[serde(other)]
     Unknown,
@@ -277,7 +277,7 @@ pub enum DapVersion {
 impl From<&str> for DapVersion {
     fn from(version: &str) -> Self {
         match version {
-            "v01" => DapVersion::Draft01,
+            "v02" => DapVersion::Draft02,
             _ => DapVersion::Unknown,
         }
     }
@@ -286,7 +286,7 @@ impl From<&str> for DapVersion {
 impl AsRef<str> for DapVersion {
     fn as_ref(&self) -> &str {
         match self {
-            DapVersion::Draft01 => "v01",
+            DapVersion::Draft02 => "v02",
             _ => panic!("tried to construct string from unknown DAP version"),
         }
     }
diff --git a/daphne/src/messages.rs b/daphne/src/messages.rs
index 43bf4d6..ba8131f 100644
--- a/daphne/src/messages.rs
+++ b/daphne/src/messages.rs
@@ -301,8 +301,8 @@ impl Decode for AggregateContinueReq {
 /// Transition message. This conveyes a message sent from one Aggregator to another during the
 /// preparation phase of VDAF evaluation.
 //
-// TODO spec: This is called `PrepareStep` in draft-ietf-ppm-dap-01. This is confusing because it
-// overloads a term used in draft-irtf-cfrg-draft-01.
+// TODO spec: This is called `PrepareStep` in draft-ietf-ppm-dap-02. This is confusing because it
+// overloads a term used in draft-irtf-cfrg-draft-02.
 #[derive(Clone, Debug, PartialEq, Eq)]
 pub struct Transition {
     pub nonce: Nonce,
@@ -745,7 +745,7 @@ pub struct HpkeConfig {
     // doesn't implement Debug. Eventually we'll replace rust-hpke with a more ergonomic
     // implementation that does. For now we'll eat the copy.
     #[serde(with = "hex")]
-    pub(crate) public_key: Vec<u8>,
+    pub public_key: Vec<u8>,
 }
 
 impl AsRef<HpkeConfig> for HpkeConfig {
diff --git a/daphne_worker/src/dap.rs b/daphne_worker/src/dap.rs
index d2455ec..ea248cd 100644
--- a/daphne_worker/src/dap.rs
+++ b/daphne_worker/src/dap.rs
@@ -4,7 +4,7 @@
 //! Implementation of DAP Aggregator roles for Daphne-Worker.
 //!
 //! Daphne-Worker uses bearer tokens for DAP request authorization as specified in
-//! draft-ietf-ppm-dap-01.
+//! draft-ietf-ppm-dap-02.
 
 use crate::{
     config::{


Test patch:
diff --git a/daphne/dapf/dapf_test.sh b/daphne/dapf/dapf_test.sh
index 09fc266..6dc5c3b 100644
--- a/daphne/dapf/dapf_test.sh
+++ b/daphne/dapf/dapf_test.sh
@@ -70,8 +70,8 @@ for i in {1..10}; do
         dapf \
             --task-id "$TASK_ID" \
             upload \
-                --leader-url "$LEADER_BASE_URL/v01/" \
-                --helper-url "$HELPER_BASE_URL/v01/" \
+                --leader-url "$LEADER_BASE_URL/v02/" \
+                --helper-url "$HELPER_BASE_URL/v02/" \
                 --vdaf "$VDAF_CONFIG"
 done
 
@@ -81,7 +81,7 @@ collect_uri=$(echo $batch_interval | \
         --task-id "$TASK_ID" \
         --bearer-token "$COLLECTOR_BEARER_TOKEN" \
         collect \
-            --leader-url "$LEADER_BASE_URL/v01/"
+            --leader-url "$LEADER_BASE_URL/v02/"
 :)
 
 # TODO(cjpatton) Remove this once aggregation jobs are scheduled automatically
diff --git a/daphne/src/roles_test.rs b/daphne/src/roles_test.rs
index 1d1e8ff..4e35713 100644
--- a/daphne/src/roles_test.rs
+++ b/daphne/src/roles_test.rs
@@ -72,10 +72,10 @@ impl Test {
 
         // Task Parameters that the Leader and Helper must agree on.
         let vdaf_config = VdafConfig::Prio3(Prio3Config::Count);
-        let leader_url = Url::parse("https://leader.biz/v01/").unwrap();
-        let helper_url = Url::parse("http://helper.com:8788/v01/").unwrap();
+        let leader_url = Url::parse("https://leader.biz/v02/").unwrap();
+        let helper_url = Url::parse("http://helper.com:8788/v02/").unwrap();
         let time_precision = 3600;
-        let version = DapVersion::Draft01;
+        let version = DapVersion::Draft02;
         let collector_hpke_receiver_config =
             HpkeReceiverConfig::gen(rng.gen(), HpkeKemId::X25519HkdfSha256);
 
@@ -526,11 +526,11 @@ async fn http_get_hpke_config_unrecognized_task() {
     let mut rng = thread_rng();
     let task_id = Id(rng.gen());
     let req = DapRequest {
-        version: DapVersion::Draft01,
+        version: DapVersion::Draft02,
         media_type: Some(MEDIA_TYPE_HPKE_CONFIG),
         payload: Vec::new(),
         url: Url::parse(&format!(
-            "http://aggregator.biz/v01/hpke_config?task_id={}",
+            "http://aggregator.biz/v02/hpke_config?task_id={}",
             task_id.to_base64url()
         ))
         .unwrap(),
@@ -547,10 +547,10 @@ async fn http_get_hpke_config_unrecognized_task() {
 async fn http_get_hpke_config_missing_task_id() {
     let t = Test::new();
     let req = DapRequest {
-        version: DapVersion::Draft01,
+        version: DapVersion::Draft02,
         media_type: Some(MEDIA_TYPE_HPKE_CONFIG),
         payload: Vec::new(),
-        url: Url::parse("http://aggregator.biz/v01/hpke_config").unwrap(),
+        url: Url::parse("http://aggregator.biz/v02/hpke_config").unwrap(),
         sender_auth: None,
     };
 
diff --git a/daphne_worker/src/config_test.rs b/daphne_worker/src/config_test.rs
index 3083a9d..8952aed 100644
--- a/daphne_worker/src/config_test.rs
+++ b/daphne_worker/src/config_test.rs
@@ -14,9 +14,9 @@ pub const GLOBAL_CONFIG: &str = r#"{
 
 const DAP_TASK_LIST: &str = r#"{
     "f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f": {
-        "version": "v01",
-        "leader_url": "https://leader.biz/v01/",
-        "helper_url": "http://helper.com:8788/v01/",
+        "version": "v02",
+        "leader_url": "https://leader.biz/v02/",
+        "helper_url": "http://helper.com:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -40,9 +40,9 @@ const DAP_TASK_LIST: &str = r#"{
         "vdaf_verify_key": "1fd8d30dc0e0b7ac81f0050fcab0782d"
 },
     "aaaabe3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
-        "helper_url": "http://helper:8788/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
+        "helper_url": "http://helper:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -93,6 +93,6 @@ fn parse_static_config() {
     let durable_name = config.durable_name_report_store(&task_config, &task_id.to_hex(), &metadata);
     assert_eq!(
         durable_name,
-        "v01/task/f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f/epoch/00000000001637193600/shard/1"
+        "v02/task/f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f/epoch/00000000001637193600/shard/1"
     );
 }
diff --git a/daphne_worker/src/durable/mod_test.rs b/daphne_worker/src/durable/mod_test.rs
index 5ce9466..f55b960 100644
--- a/daphne_worker/src/durable/mod_test.rs
+++ b/daphne_worker/src/durable/mod_test.rs
@@ -21,18 +21,18 @@ fn durable_name() {
     assert_eq!(durable_name_queue(shard), "queue/1234");
 
     assert_eq!(
-        durable_name_report_store(&DapVersion::Draft01, &id1.to_hex(), time, shard),
-        "v01/task/1111111111111111111111111111111111111111111111111111111111111111/epoch/00000000001664850074/shard/1234",
+        durable_name_report_store(&DapVersion::Draft02, &id1.to_hex(), time, shard),
+        "v02/task/1111111111111111111111111111111111111111111111111111111111111111/epoch/00000000001664850074/shard/1234",
     );
 
     assert_eq!(
-        durable_name_agg_store(&DapVersion::Draft01, &id1.to_hex(), &DapBatchBucket::FixedSize{ batch_id: &id2 }),
-        "v01/task/1111111111111111111111111111111111111111111111111111111111111111/batch/2222222222222222222222222222222222222222222222222222222222222222",
+        durable_name_agg_store(&DapVersion::Draft02, &id1.to_hex(), &DapBatchBucket::FixedSize{ batch_id: &id2 }),
+        "v02/task/1111111111111111111111111111111111111111111111111111111111111111/batch/2222222222222222222222222222222222222222222222222222222222222222",
     );
 
     assert_eq!(
-        durable_name_agg_store(&DapVersion::Draft01, &id1.to_hex(), &DapBatchBucket::TimeInterval{ batch_window: time }),
-        "v01/task/1111111111111111111111111111111111111111111111111111111111111111/window/1664850074",
+        durable_name_agg_store(&DapVersion::Draft02, &id1.to_hex(), &DapBatchBucket::TimeInterval{ batch_window: time }),
+        "v02/task/1111111111111111111111111111111111111111111111111111111111111111/window/1664850074",
     );
 }
 
diff --git a/daphne_worker_test/helper.env b/daphne_worker_test/helper.env
index b182f9b..771958d 100644
--- a/daphne_worker_test/helper.env
+++ b/daphne_worker_test/helper.env
@@ -15,7 +15,7 @@ DAP_HELPER_STATE_STORE_GARBAGE_COLLECT_AFTER_SECS = '10'
 #
 # NOTE(nakatsuka-y) The leader_url and helper_url must end with a "/".
 # When adding paths, they must not start with a "/".
-DAP_TASK_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":{"version":"v01","leader_url":"http://leader:8787/v01/","helper_url":"http://helper:8788/v01/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"1fd8d30dc0e0b7ac81f0050fcab0782d"},"6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":{"version":"v01","leader_url":"http://leader:8787/v01/","helper_url":"http://helper:8788/v01/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"fixed_size":{"min_batch_size":10,"max_batch_size":12}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"d4c0fd634e80005dc514eb4c9538fbf7"}}'
+DAP_TASK_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":{"version":"v02","leader_url":"http://leader:8787/v02/","helper_url":"http://helper:8788/v02/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"1fd8d30dc0e0b7ac81f0050fcab0782d"},"6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":{"version":"v02","leader_url":"http://leader:8787/v02/","helper_url":"http://helper:8788/v02/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"fixed_size":{"min_batch_size":10,"max_batch_size":12}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"d4c0fd634e80005dc514eb4c9538fbf7"}}'
 
 # TODO Just one token per deployment.
 DAP_LEADER_BEARER_TOKEN_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":"This is an auth token ivA1e7LpnySDNn1AulaZggFLQ1n7jZ8GWOUO7GY4hgs=","6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":"This is yet another bearer token"}'
diff --git a/daphne_worker_test/leader.env b/daphne_worker_test/leader.env
index f4e8b78..b6d2b71 100644
--- a/daphne_worker_test/leader.env
+++ b/daphne_worker_test/leader.env
@@ -19,7 +19,7 @@ DAP_COLLECT_ID_KEY = "b416a85d280591d6da14e5b75a7d6e31"
 #
 # NOTE(nakatsuka-y) The leader_url and helper_url must end with a "/".
 # When adding paths, they must not start with a "/".
-DAP_TASK_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":{"version":"v01","leader_url":"http://leader:8787/v01/","helper_url":"http://helper:8788/v01/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"1fd8d30dc0e0b7ac81f0050fcab0782d"},"410d5e0abd94a88b8435a192cc458cc1667da2989827584cbf8a591626d5a61f":{"version":"v01","leader_url":"http://leader:8787/v01/","helper_url":"http://127.0.0.1:9788/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"01d6232e33fe7e63b4531e3706efa8cc"},"6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":{"version":"v01","leader_url":"http://leader:8787/v01/","helper_url":"http://helper:8788/v01/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"fixed_size":{"min_batch_size":10,"max_batch_size":12}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"d4c0fd634e80005dc514eb4c9538fbf7"}}'
+DAP_TASK_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":{"version":"v02","leader_url":"http://leader:8787/v02/","helper_url":"http://helper:8788/v02/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"1fd8d30dc0e0b7ac81f0050fcab0782d"},"410d5e0abd94a88b8435a192cc458cc1667da2989827584cbf8a591626d5a61f":{"version":"v02","leader_url":"http://leader:8787/v02/","helper_url":"http://127.0.0.1:9788/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"time_interval":{"min_batch_size":10}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"01d6232e33fe7e63b4531e3706efa8cc"},"6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":{"version":"v02","leader_url":"http://leader:8787/v02/","helper_url":"http://helper:8788/v02/","collector_hpke_config":{"id":23,"kem_id":"X25519HkdfSha256","kdf_id":"HkdfSha256","aead_id":"Aes128Gcm","public_key":"ec6427a49c8e9245307cc757dbdcf5d287c7a74075141af9fa566c293a52ee7c"},"time_precision":3600,"query":{"fixed_size":{"min_batch_size":10,"max_batch_size":12}},"vdaf":{"prio3":{"sum":{"bits":10}}},"vdaf_verify_key":"d4c0fd634e80005dc514eb4c9538fbf7"}}'
 
 # TODO Just one token per deployment.
 DAP_LEADER_BEARER_TOKEN_LIST = '{"f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f":"This is an auth token ivA1e7LpnySDNn1AulaZggFLQ1n7jZ8GWOUO7GY4hgs=","410d5e0abd94a88b8435a192cc458cc1667da2989827584cbf8a591626d5a61f":"This is a differnt token 72938088f14b7ef318ef42ba72395a22","6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378":"This is yet another bearer token"}'
diff --git a/daphne_worker_test/tests/test_runner.rs b/daphne_worker_test/tests/test_runner.rs
index 58daf36..78501a1 100644
--- a/daphne_worker_test/tests/test_runner.rs
+++ b/daphne_worker_test/tests/test_runner.rs
@@ -45,9 +45,9 @@ pub const GLOBAL_CONFIG: &str = r#"{
 // When adding paths, they must not start with a "/".
 const LEADER_TASK_LIST: &str = r#"{
     "f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
-        "helper_url": "http://helper:8788/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
+        "helper_url": "http://helper:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -71,8 +71,8 @@ const LEADER_TASK_LIST: &str = r#"{
         "vdaf_verify_key": "1fd8d30dc0e0b7ac81f0050fcab0782d"
     },
     "410d5e0abd94a88b8435a192cc458cc1667da2989827584cbf8a591626d5a61f": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
         "helper_url": "http://127.0.0.1:9788/",
         "collector_hpke_config": {
             "id": 23,
@@ -97,9 +97,9 @@ const LEADER_TASK_LIST: &str = r#"{
         "vdaf_verify_key": "01d6232e33fe7e63b4531e3706efa8cc"
     },
     "6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
-        "helper_url": "http://helper:8788/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
+        "helper_url": "http://helper:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -133,9 +133,9 @@ const LEADER_TASK_LIST: &str = r#"{
 // When adding paths, they must not start with a "/".
 const HELPER_TASK_LIST: &str = r#"{
     "f285be3caf948fcfc36b7d32181c14db95c55f04f55a2db2ee439c5879264e1f": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
-        "helper_url": "http://helper:8788/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
+        "helper_url": "http://helper:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -159,9 +159,9 @@ const HELPER_TASK_LIST: &str = r#"{
         "vdaf_verify_key": "1fd8d30dc0e0b7ac81f0050fcab0782d"
     },
     "6d2ef497d369fd2e72d96c47e5c28496800f5e546e912554d0df83bf24a25378": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
-        "helper_url": "http://helper:8788/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
+        "helper_url": "http://helper:8788/v02/",
         "collector_hpke_config": {
             "id": 23,
             "kem_id": "X25519HkdfSha256",
@@ -189,8 +189,8 @@ const HELPER_TASK_LIST: &str = r#"{
 
 pub(crate) const JANUS_HELPER_TASK_LIST: &str = r#"{
     "410d5e0abd94a88b8435a192cc458cc1667da2989827584cbf8a591626d5a61f": {
-        "version": "v01",
-        "leader_url": "http://leader:8787/v01/",
+        "version": "v02",
+        "leader_url": "http://leader:8787/v02/",
         "helper_url": "http://127.0.0.1:9788/",
          "collector_hpke_config": {
             "id": 23,
@@ -485,7 +485,7 @@ impl TestRunner {
         client: &reqwest::Client,
         report_sel: &DaphneWorkerReportSelector,
     ) -> DapLeaderProcessTelemetry {
-        // Replace path "/v01" with "/internal/process".
+        // Replace path "/v02" with "/internal/process".
         let mut url = self.leader_url.clone();
         url.set_path("internal/process");
 
@@ -705,7 +705,7 @@ async fn post_internal_delete_all(
     base_url: &Url,
     batch_interval: &Interval,
 ) {
-    // Replace path "/v01" with "/internal/delete_all".
+    // Replace path "/v02" with "/internal/delete_all".
     let mut url = base_url.clone();
     url.set_path("internal/delete_all");