Compare commits

..

No commits in common. "cc86baa4b59f0cbbb0895c3da2d77d6ad4ffa9e3" and "50ce57765db3335a0bfd933b1aa3c25b88e64497" have entirely different histories.

2 changed files with 12 additions and 20 deletions

View File

@ -65,8 +65,6 @@ pub struct BridgeInfo {
pub fingerprint: [u8; 20],
/// nickname of bridge (probably not necessary)
pub nickname: String,
/// first Julian date we started collecting data on this bridge
pub first_seen: u32,
/// flag indicating whether the bridge is believed to be blocked
pub is_blocked: bool,
/// map of dates to data for that day
@ -78,7 +76,6 @@ impl BridgeInfo {
Self {
fingerprint: fingerprint,
nickname: nickname,
first_seen: get_date(),
is_blocked: false,
info_by_day: HashMap::<u32, DailyBridgeInfo>::new(),
}
@ -92,7 +89,6 @@ impl fmt::Display for BridgeInfo {
array_bytes::bytes2hex("", self.fingerprint).as_str()
);
str.push_str(format!("nickname: {}\n", self.nickname).as_str());
str.push_str(format!("first_seen: {}\n", self.first_seen).as_str());
str.push_str(format!("is_blocked: {}\n", self.is_blocked).as_str());
str.push_str("info_by_day:");
for day in self.info_by_day.keys() {
@ -115,8 +111,8 @@ pub struct DailyBridgeInfo {
/// Map of country codes and how many users (rounded up to a multiple of
/// 8) have connected to that bridge during the day.
pub bridge_ips: BTreeMap<String, u32>,
/// Map of negative reports to count of negative reports received
pub negative_reports: BTreeMap<SerializableNegativeReport, u32>,
/// Set of negative reports received during this day
pub negative_reports: Vec<SerializableNegativeReport>,
/// Set of positive reports received during this day
pub positive_reports: Vec<SerializablePositiveReport>,
// We don't care about ordering of the reports, but I'm using vectors for
@ -131,7 +127,7 @@ impl DailyBridgeInfo {
pub fn new() -> Self {
Self {
bridge_ips: BTreeMap::<String, u32>::new(),
negative_reports: BTreeMap::<SerializableNegativeReport, u32>::new(),
negative_reports: Vec::<SerializableNegativeReport>::new(),
positive_reports: Vec::<SerializablePositiveReport>::new(),
}
}
@ -195,7 +191,7 @@ pub fn add_extra_info_to_db(db: &Db, extra_info: ExtraInfo) {
// No existing entry; make a new one.
let daily_bridge_info = DailyBridgeInfo {
bridge_ips: extra_info.bridge_ips,
negative_reports: BTreeMap::<SerializableNegativeReport, u32>::new(),
negative_reports: Vec::<SerializableNegativeReport>::new(),
positive_reports: Vec::<SerializablePositiveReport>::new(),
};
bridge_info

View File

@ -12,7 +12,6 @@ pub enum NegativeReportError {
DateInFuture,
FailedToDeserialize, // couldn't deserialize to SerializableNegativeReport
InvalidCountryCode,
MissingCountryCode,
}
/// A report that the user was unable to connect to the bridge
@ -21,7 +20,7 @@ pub struct NegativeReport {
pub fingerprint: [u8; 20],
/// some way to prove knowledge of bridge
bridge_pok: ProofOfBridgeKnowledge,
/// user's country code
/// user's country code, may be an empty string
pub country: String,
/// today's Julian date
pub date: u32,
@ -88,7 +87,7 @@ impl NegativeReport {
ProofOfBridgeKnowledge::HashOfBridgeLine(pok) => {
let hash = HashOfBridgeLine::new(bl);
hash == pok
}
},
_ => false,
}
}
@ -99,7 +98,7 @@ impl NegativeReport {
ProofOfBridgeKnowledge::HashOfBucket(pok) => {
let hash = HashOfBucket::new(bucket);
hash == pok
}
},
_ => false,
}
}
@ -107,7 +106,7 @@ impl NegativeReport {
/// (De)serializable negative report object which must be consumed by the
/// checking function before it can be used
#[derive(Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
#[derive(Deserialize, Serialize)]
pub struct SerializableNegativeReport {
pub fingerprint: [u8; 20],
bridge_pok: ProofOfBridgeKnowledge,
@ -117,10 +116,7 @@ pub struct SerializableNegativeReport {
impl SerializableNegativeReport {
pub fn to_report(self) -> Result<NegativeReport, NegativeReportError> {
if self.country == "" {
return Err(NegativeReportError::MissingCountryCode);
}
if !COUNTRY_CODES.contains(self.country.as_str()) {
if self.country != "" && !COUNTRY_CODES.contains(self.country.as_str()) {
return Err(NegativeReportError::InvalidCountryCode);
}
if self.date > get_date().into() {
@ -136,7 +132,7 @@ impl SerializableNegativeReport {
}
/// Proof that the user knows (and should be able to access) a given bridge
#[derive(Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
#[derive(Serialize, Deserialize)]
pub enum ProofOfBridgeKnowledge {
/// Hash of bridge line as proof of knowledge of bridge line
HashOfBridgeLine(HashOfBridgeLine),
@ -145,7 +141,7 @@ pub enum ProofOfBridgeKnowledge {
}
/// Hash of bridge line to prove knowledge of that bridge
#[derive(Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
#[derive(PartialEq, Serialize, Deserialize)]
pub struct HashOfBridgeLine {
hash: [u8; 32],
}
@ -160,7 +156,7 @@ impl HashOfBridgeLine {
}
/// Hash of bucket ID to prove knowledge of bridges in that bucket
#[derive(Eq, PartialEq, Ord, PartialOrd, Serialize, Deserialize)]
#[derive(PartialEq, Serialize, Deserialize)]
pub struct HashOfBucket {
hash: [u8; 32],
}