Add README for rdsys-backend-api, lox-utils and switch to lox-zkp crate

This commit is contained in:
onyinyang 2023-11-23 11:44:05 -05:00
parent a27df0b6c6
commit 472445a9a5
No known key found for this signature in database
GPG Key ID: 156A6435430C2036
17 changed files with 82 additions and 55 deletions

32
Cargo.lock generated
View File

@ -1055,6 +1055,7 @@ dependencies = [
"hyper", "hyper",
"julianday", "julianday",
"lox-library", "lox-library",
"lox-zkp",
"lox_utils", "lox_utils",
"prometheus", "prometheus",
"prometheus-client", "prometheus-client",
@ -1067,7 +1068,6 @@ dependencies = [
"sled", "sled",
"time", "time",
"tokio", "tokio",
"zkp",
] ]
[[package]] [[package]]
@ -1082,6 +1082,7 @@ dependencies = [
"ed25519-dalek", "ed25519-dalek",
"hex_fmt", "hex_fmt",
"lazy_static", "lazy_static",
"lox-zkp",
"prometheus", "prometheus",
"rand 0.8.5", "rand 0.8.5",
"serde", "serde",
@ -1091,7 +1092,6 @@ dependencies = [
"subtle", "subtle",
"thiserror", "thiserror",
"time", "time",
"zkp",
] ]
[[package]] [[package]]
@ -1105,12 +1105,25 @@ dependencies = [
"julianday", "julianday",
"lazy_static", "lazy_static",
"lox-library", "lox-library",
"lox-zkp",
"lox_utils", "lox_utils",
"rand 0.7.3", "rand 0.7.3",
"serde_json", "serde_json",
"time", "time",
"wasm-bindgen", "wasm-bindgen",
"zkp", ]
[[package]]
name = "lox-zkp"
version = "0.8.0"
source = "git+https://gitlab.torproject.org/onyinyang/lox-zkp#10a8379081f079fc09669640f29c255897b3b454"
dependencies = [
"curve25519-dalek",
"merlin",
"rand 0.8.5",
"serde",
"serde_derive",
"thiserror",
] ]
[[package]] [[package]]
@ -2529,16 +2542,3 @@ dependencies = [
"quote", "quote",
"syn", "syn",
] ]
[[package]]
name = "zkp"
version = "0.8.0"
source = "git+https://gitlab.torproject.org/onyinyang/lox-zkp#7dc7562ecdac3a6c7c7ecc31cace192174d34778"
dependencies = [
"curve25519-dalek",
"merlin",
"rand 0.8.5",
"serde",
"serde_derive",
"thiserror",
]

View File

@ -26,7 +26,7 @@ rand = "0.8.5"
reqwest = { version = "0.11", features = ["json", "stream"]} reqwest = { version = "0.11", features = ["json", "stream"]}
serde = { version = "1.0", features = ["derive", "rc"] } serde = { version = "1.0", features = ["derive", "rc"] }
serde_with = "3.4.0" serde_with = "3.4.0"
zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" } lox-zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" }
lox-library = { path = "../lox-library", version = "0.1.0"} lox-library = { path = "../lox-library", version = "0.1.0"}
lox_utils = { path = "../lox-utils", version = "0.1.0"} lox_utils = { path = "../lox-utils", version = "0.1.0"}
rdsys_backend = { path = "../rdsys-backend-api", version = "0.2"} rdsys_backend = { path = "../rdsys-backend-api", version = "0.2"}

View File

@ -16,7 +16,7 @@ use std::{
collections::HashMap, collections::HashMap,
sync::{Arc, Mutex}, sync::{Arc, Mutex},
}; };
use zkp::ProofError; use lox_zkp::ProofError;
use crate::metrics::Metrics; use crate::metrics::Metrics;
use crate::resource_parser::{parse_into_bridgelines, sort_for_parsing}; use crate::resource_parser::{parse_into_bridgelines, sort_for_parsing};

View File

@ -31,7 +31,7 @@ time = "0.3.30"
prometheus = "0.13.3" prometheus = "0.13.3"
subtle = "2.5" subtle = "2.5"
thiserror = "1.0.50" thiserror = "1.0.50"
zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" } lox-zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" }
[features] [features]
fast = [] fast = []

View File

@ -15,7 +15,7 @@ The notation follows that of the paper "Hyphae: Social Secret Sharing"
#![allow(non_snake_case)] #![allow(non_snake_case)]
#[macro_use] #[macro_use]
extern crate zkp; extern crate lox_zkp;
pub mod bridge_table; pub mod bridge_table;
pub mod cred; pub mod cred;

View File

@ -37,9 +37,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -76,7 +76,7 @@ pub struct Request {
EncBucket: (RistrettoPoint, RistrettoPoint), EncBucket: (RistrettoPoint, RistrettoPoint),
EncBlockages: (RistrettoPoint, RistrettoPoint), EncBlockages: (RistrettoPoint, RistrettoPoint),
// The combined ZKP // The combined lox_zkp
piUser: CompactProof, piUser: CompactProof,
} }
@ -107,7 +107,7 @@ pub struct Response {
TBucket: RistrettoPoint, TBucket: RistrettoPoint,
TBlockages: RistrettoPoint, TBlockages: RistrettoPoint,
// The ZKP // The lox_zkp
piBlindIssue: CompactProof, piBlindIssue: CompactProof,
} }
@ -224,7 +224,7 @@ pub fn request(
// Form a Pedersen commitment to the MAC Q // Form a Pedersen commitment to the MAC Q
// We flip the sign of zQ from that of the Hyphae paper so that // We flip the sign of zQ from that of the Hyphae paper so that
// the ZKP has a "+" instead of a "-", as that's what the zkp // the lox_zkp has a "+" instead of a "-", as that's what the zkp
// macro supports. // macro supports.
let negzQ_lox = Scalar::random(&mut rng); let negzQ_lox = Scalar::random(&mut rng);
let CQ_lox = Q_lox - &negzQ_lox * Atable; let CQ_lox = Q_lox - &negzQ_lox * Atable;
@ -251,7 +251,7 @@ pub fn request(
// Form a Pedersen commitment to the MAC Q // Form a Pedersen commitment to the MAC Q
// We flip the sign of zQ from that of the Hyphae paper so that // We flip the sign of zQ from that of the Hyphae paper so that
// the ZKP has a "+" instead of a "-", as that's what the zkp // the lox_zkp has a "+" instead of a "-", as that's what the zkp
// macro supports. // macro supports.
let negzQ_mig = Scalar::random(&mut rng); let negzQ_mig = Scalar::random(&mut rng);
let CQ_mig = Q_mig - &negzQ_mig * Atable; let CQ_mig = Q_mig - &negzQ_mig * Atable;
@ -416,7 +416,7 @@ impl BridgeAuth {
+ self.migration_priv.x[3] * req.CToBucket + self.migration_priv.x[3] * req.CToBucket
- req.CQ_mig; - req.CQ_mig;
// Verify the ZKP // Verify the zkp
let mut transcript = Transcript::new(b"blockage migration request"); let mut transcript = Transcript::new(b"blockage migration request");
requestproof::verify_compact( requestproof::verify_compact(
&req.piUser, &req.piUser,

View File

@ -33,9 +33,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_with::serde_as; use serde_with::serde_as;
@ -69,7 +69,7 @@ pub struct Request {
D: RistrettoPoint, D: RistrettoPoint,
EncBucket: (RistrettoPoint, RistrettoPoint), EncBucket: (RistrettoPoint, RistrettoPoint),
// The combined ZKP // The combined lox_zkp
piUser: CompactProof, piUser: CompactProof,
} }
@ -158,7 +158,7 @@ pub fn request(
// Form a Pedersen commitment to the MAC Q // Form a Pedersen commitment to the MAC Q
// We flip the sign of zQ from that of the Hyphae paper so that // We flip the sign of zQ from that of the Hyphae paper so that
// the ZKP has a "+" instead of a "-", as that's what the zkp // the lox_zkp has a "+" instead of a "-", as that's what the lox_zkp
// macro supports. // macro supports.
let negzQ = Scalar::random(&mut rng); let negzQ = Scalar::random(&mut rng);
let CQ = Q - &negzQ * Atable; let CQ = Q - &negzQ * Atable;
@ -268,7 +268,7 @@ impl BridgeAuth {
+ self.lox_priv.x[6] * req.CBlockages + self.lox_priv.x[6] * req.CBlockages
- req.CQ; - req.CQ;
// Verify the ZKP // Verify the zkp
let mut transcript = Transcript::new(b"check blockage request"); let mut transcript = Transcript::new(b"check blockage request");
requestproof::verify_compact( requestproof::verify_compact(
&req.piUser, &req.piUser,

View File

@ -50,9 +50,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -43,9 +43,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -35,9 +35,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -18,9 +18,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_with::serde_as; use serde_with::serde_as;

View File

@ -26,9 +26,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};

View File

@ -32,9 +32,9 @@ use curve25519_dalek::ristretto::RistrettoPoint;
use curve25519_dalek::scalar::Scalar; use curve25519_dalek::scalar::Scalar;
use curve25519_dalek::traits::IsIdentity; use curve25519_dalek::traits::IsIdentity;
use zkp::CompactProof; use lox_zkp::CompactProof;
use zkp::ProofError; use lox_zkp::ProofError;
use zkp::Transcript; use lox_zkp::Transcript;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use serde_with::serde_as; use serde_with::serde_as;

View File

@ -0,0 +1,3 @@
# Lox Utils
This crate contains a number of helper structs and functions that are used by multiple lox crates.

View File

@ -27,7 +27,7 @@ serde_json = "1.0.108"
console_error_panic_hook = "0.1.7" console_error_panic_hook = "0.1.7"
js-sys = "0.3.65" js-sys = "0.3.65"
rand = { version = "0.7", features = ["wasm-bindgen"] } rand = { version = "0.7", features = ["wasm-bindgen"] }
zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" } lox-zkp = { git = "https://gitlab.torproject.org/onyinyang/lox-zkp", version = "0.8.0" }
[dependencies.chrono] [dependencies.chrono]
version = "0.4.31" version = "0.4.31"

View File

@ -4,6 +4,7 @@ authors = ["Cecylia Bocovich <cohosh@torproject.org>, Lindsey Tulloch <onyinyang
version = "0.2.0" version = "0.2.0"
edition = "2021" edition = "2021"
license = "MIT" license = "MIT"
description = "A backend API to receive resources from rdsys"
homepage = "https://gitlab.torproject.org/tpo/anti-censorship/lox/-/wikis/home" homepage = "https://gitlab.torproject.org/tpo/anti-censorship/lox/-/wikis/home"
keywords = ["tor", "lox", "bridges","censorship-resistance"] keywords = ["tor", "lox", "bridges","censorship-resistance"]
categories = ["api-bindings", "encoding"] categories = ["api-bindings", "encoding"]

View File

@ -1,8 +1,12 @@
# rdsys backend API # rdsys backend API
### Usage The rdsys backend API allows a process to receive resources from rdsys through either of rdsys' two endpoints.
```rust ### Usage with Stream Endpoint
To test or receive a resourcediff from rdsys, the rdsys `resource-stream` endpoint can be accessed with the following sample code:
```
use rdsys_backend::start_stream; use rdsys_backend::start_stream;
use tokio; use tokio;
@ -18,3 +22,22 @@ async fn main() {
} }
} }
``` ```
### Usage with Static Request Endpoint
To test or receive a ResourceState from rdsys, the `resources` endpoint can be accessed with the following sample code:
```
use rdsys_backend::request_resources;
use tokio;
#[tokio::main]
async fn main() {
let endpoint = String::from("http://127.0.0.1:7100/resources");
let name = String::from("https");
let token = String::from("HttpsApiTokenPlaceholder");
let types = vec![String::from("obfs4"), String::from("scramblesuit")];
let rx = request_resources(endpoint, name, token, types).await.unwrap();
println!("Received ResourceState: {:?}", rx);
}
```