Skip to content

Commit 8536382

Browse files
authored
feat: support measurement hashing while measurement submission (#19)
* feat: support measurement hashing while measurement submission * feat: use string for submission content payload
1 parent d6faec0 commit 8536382

2 files changed

Lines changed: 13 additions & 15 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

ooniprobe-ffi/src/userauth.rs

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ use base64::prelude::BASE64_STANDARD;
44
use base64::Engine;
55
use bincode;
66
use cmz::cmz_group_init;
7-
use curve25519_dalek::{ristretto::RistrettoPoint as G, RistrettoPoint};
8-
use ooniauth_core::registration::UserAuthCredential;
7+
use curve25519_dalek::{ristretto::RistrettoPoint as G};
8+
use ooniauth_core::{
9+
registration::UserAuthCredential,
10+
submit::{digest_point, submit_measurement_hash}
11+
};
912
use serde::{Deserialize, Serialize};
10-
use sha2::{Digest, Sha256, Sha512};
13+
use sha2::{Sha512};
1114

1215
use crate::client::build_client;
1316
use crate::errors::OoniError;
@@ -55,7 +58,7 @@ struct RegistrationResponse {
5558
#[derive(Serialize, Deserialize)]
5659
struct SubmitMeasurementPayload {
5760
format: String,
58-
content: serde_json::Value,
61+
content: String,
5962
nym: Option<String>,
6063
zkp_request: Option<String>,
6164
manifest_version: Option<String>,
@@ -90,13 +93,6 @@ fn decode_credential(credential: &str) -> Result<UserAuthCredential, OoniError>
9093
bincode::deserialize(&cred_bytes).map_err(Into::into)
9194
}
9295

93-
fn digest_point(point: RistrettoPoint) -> [u8; 32] {
94-
let digest = Sha256::digest(point.compress().as_bytes());
95-
let mut out = [0u8; 32];
96-
out.copy_from_slice(&digest);
97-
out
98-
}
99-
10096
pub fn get_probe_id(
10197
credential_b64: String,
10298
probe_asn: String,
@@ -194,7 +190,6 @@ pub fn userauth_submit(
194190
probe_asn: String,
195191
credential_config: Option<CredentialConfig>,
196192
) -> Result<CredentialResult, OoniError> {
197-
let measurement_content: serde_json::Value = serde_json::from_str(&content)?;
198193
let (submit_payload, auth_state) = match credential_config {
199194
Some(config) => {
200195
// Initialize user state
@@ -204,12 +199,15 @@ pub fn userauth_submit(
204199
let credential = decode_credential(&config.credential)?;
205200
user_state.set_credential(credential);
206201

202+
let measurement_hash = submit_measurement_hash(content.as_bytes());
203+
207204
// Create submit request
208205
let mut rng = rand::thread_rng();
209206
let ((submit_request, submit_state), probe_id) = user_state.submit_request(
210207
&mut rng,
211208
probe_cc.clone(),
212209
probe_asn.clone(),
210+
&measurement_hash,
213211
Range {
214212
start: config.age_range.min,
215213
end: config.age_range.max,
@@ -224,7 +222,7 @@ pub fn userauth_submit(
224222

225223
let payload = SubmitMeasurementPayload {
226224
format: "json".to_string(),
227-
content: measurement_content,
225+
content: content,
228226
nym: Some(b64_encode(&probe_id)),
229227
zkp_request: Some(b64_encode(&request_bytes)),
230228
manifest_version: Some(config.manifest_version),
@@ -236,7 +234,7 @@ pub fn userauth_submit(
236234
None => {
237235
let payload = SubmitMeasurementPayload {
238236
format: "json".to_string(),
239-
content: measurement_content,
237+
content: content,
240238
nym: None,
241239
zkp_request: None,
242240
manifest_version: None,

0 commit comments

Comments
 (0)