Add EXPIRY_DATE constant and fixup cloned vectors
This commit is contained in:
parent
93ce3e41b7
commit
f52c6f515a
|
@ -103,7 +103,6 @@ mod tests {
|
||||||
|
|
||||||
impl LoxClient for LoxClientMock {
|
impl LoxClient for LoxClientMock {
|
||||||
fn invite(&self) -> Request<Body> {
|
fn invite(&self) -> Request<Body> {
|
||||||
|
|
||||||
Request::builder()
|
Request::builder()
|
||||||
.method("POST")
|
.method("POST")
|
||||||
.uri("http://localhost/invite")
|
.uri("http://localhost/invite")
|
||||||
|
@ -111,7 +110,6 @@ mod tests {
|
||||||
.unwrap()
|
.unwrap()
|
||||||
}
|
}
|
||||||
fn reachability(&self) -> Request<Body> {
|
fn reachability(&self) -> Request<Body> {
|
||||||
|
|
||||||
Request::builder()
|
Request::builder()
|
||||||
.method("POST")
|
.method("POST")
|
||||||
.uri("http://localhost/reachability")
|
.uri("http://localhost/reachability")
|
||||||
|
@ -120,7 +118,6 @@ mod tests {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pubkeys(&self) -> Request<Body> {
|
fn pubkeys(&self) -> Request<Body> {
|
||||||
|
|
||||||
Request::builder()
|
Request::builder()
|
||||||
.method("POST")
|
.method("POST")
|
||||||
.uri("http://localhost/pubkeys")
|
.uri("http://localhost/pubkeys")
|
||||||
|
|
|
@ -260,11 +260,10 @@ pub struct BridgeTable {
|
||||||
pub recycleable_keys: Vec<u32>,
|
pub recycleable_keys: Vec<u32>,
|
||||||
// We maintain a list of keys that have been blocked (bucket_id: u32), as well as the
|
// We maintain a list of keys that have been blocked (bucket_id: u32), as well as the
|
||||||
// time (julian_date: u32) of their blocking so that they can be repurposed with new
|
// time (julian_date: u32) of their blocking so that they can be repurposed with new
|
||||||
// buckets eventually
|
// buckets after the EXPIRY_DATE
|
||||||
pub blocked_keys: Vec<(u32, u32)>,
|
pub blocked_keys: Vec<(u32, u32)>,
|
||||||
// Similarly, we maintain a list of open entry buckets (bucket_id: u32) and the time they were
|
// Similarly, we maintain a list of open entry buckets (bucket_id: u32) and the time they were
|
||||||
// created (julian_date: u32) so they will be listed as expired after some amount of time
|
// created (julian_date: u32) so they will be listed as expired after the EXPIRY_DATE
|
||||||
// (e.g., 511 days, which is the maximum time an open-invitation credential would still be valid)
|
|
||||||
// TODO: add open entry buckets to the open_inv_keys only once they have been distributed
|
// TODO: add open entry buckets to the open_inv_keys only once they have been distributed
|
||||||
pub open_inv_keys: Vec<(u32, u32)>,
|
pub open_inv_keys: Vec<(u32, u32)>,
|
||||||
/// The date the buckets were last encrypted to make the encbucket.
|
/// The date the buckets were last encrypted to make the encbucket.
|
||||||
|
|
|
@ -60,6 +60,11 @@ lazy_static! {
|
||||||
dalek_constants::RISTRETTO_BASEPOINT_TABLE;
|
dalek_constants::RISTRETTO_BASEPOINT_TABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// EXPIRY_DATE is set to EXPIRY_DATE days for open-entry and blocked buckets in order to match
|
||||||
|
// the expiry date for Lox credentials. This particular value (EXPIRY_DATE) is chosen because
|
||||||
|
// values that are 2^k − 1 make range proofs more efficient, but this can be changed to any value
|
||||||
|
pub const EXPIRY_DATE: u32 = 511;
|
||||||
|
|
||||||
#[derive(PartialEq, Eq)]
|
#[derive(PartialEq, Eq)]
|
||||||
pub enum ReplaceSuccess {
|
pub enum ReplaceSuccess {
|
||||||
NotFound = 0,
|
NotFound = 0,
|
||||||
|
@ -664,12 +669,8 @@ impl BridgeAuth {
|
||||||
// This should include buckets that have been blocked for a sufficiently long period
|
// This should include buckets that have been blocked for a sufficiently long period
|
||||||
// that we no longer want to allow migration to, or else, open-entry buckets that
|
// that we no longer want to allow migration to, or else, open-entry buckets that
|
||||||
// have been unblocked long enough to become trusted and who's users' credentials
|
// have been unblocked long enough to become trusted and who's users' credentials
|
||||||
// would have expired (after 511 days)
|
// would have expired (after EXPIRY_DATE)
|
||||||
pub fn clean_up_expired_buckets(&mut self, bdb: &mut BridgeDb) {
|
pub fn clean_up_expired_buckets(&mut self, bdb: &mut BridgeDb) {
|
||||||
// Consider including migration tables and check age of from buckets
|
|
||||||
// If an open-invitation bucket is more than 511 days old, it should be recycled
|
|
||||||
// If a blocked bridge is more than 511 (the maximum validity of a credential in days) days old, it should also be recycled
|
|
||||||
|
|
||||||
// First check if there are any blocked indexes that are old enough to be replaced
|
// First check if there are any blocked indexes that are old enough to be replaced
|
||||||
self.clean_up_blocked();
|
self.clean_up_blocked();
|
||||||
// Next do the same for open_invitations buckets
|
// Next do the same for open_invitations buckets
|
||||||
|
@ -682,14 +683,12 @@ impl BridgeAuth {
|
||||||
.bridge_table
|
.bridge_table
|
||||||
.blocked_keys
|
.blocked_keys
|
||||||
.iter()
|
.iter()
|
||||||
.any(|&x| x.1 + 511 < self.today())
|
.any(|&x| x.1 + EXPIRY_DATE < self.today())
|
||||||
//Perhaps 511 should be changed to an earlier time
|
|
||||||
{
|
{
|
||||||
let blocked_keys_clone = self.bridge_table.blocked_keys.clone();
|
// If there are expired blockages, separate them from the fresh blockages
|
||||||
// If so, separate them from the fresh blockages
|
let (expired, fresh): (Vec<(u32, u32)>, Vec<(u32, u32)>) = self.bridge_table.blocked_keys
|
||||||
let (expired, fresh): (Vec<(u32, u32)>, Vec<(u32, u32)>) = blocked_keys_clone
|
.iter()
|
||||||
.into_iter()
|
.partition(|&x| x.1 + EXPIRY_DATE < self.today());
|
||||||
.partition(|&x| x.1 + 511 < self.today());
|
|
||||||
for item in expired {
|
for item in expired {
|
||||||
let new_item = item.0;
|
let new_item = item.0;
|
||||||
// check each single bridge line and ensure none are still marked as reachable.
|
// check each single bridge line and ensure none are still marked as reachable.
|
||||||
|
@ -716,6 +715,12 @@ impl BridgeAuth {
|
||||||
self.bridge_table.keys.remove(&new_item);
|
self.bridge_table.keys.remove(&new_item);
|
||||||
//and add them to the recyclable keys
|
//and add them to the recyclable keys
|
||||||
self.bridge_table.recycleable_keys.push(new_item);
|
self.bridge_table.recycleable_keys.push(new_item);
|
||||||
|
// Remove the expired blocked bucket from the blockage migration table,
|
||||||
|
// assuming that anyone that has still not attempted to migrate from their
|
||||||
|
// blocked bridge after the EXPIRY_DATE probably doesn't still need to migrate.
|
||||||
|
self.blockage_migration_table
|
||||||
|
.table
|
||||||
|
.retain(|&k, _| k != new_item);
|
||||||
}
|
}
|
||||||
// Finally, update the blocked_keys vector to only include the fresh keys
|
// Finally, update the blocked_keys vector to only include the fresh keys
|
||||||
self.bridge_table.blocked_keys = fresh
|
self.bridge_table.blocked_keys = fresh
|
||||||
|
@ -729,14 +734,13 @@ impl BridgeAuth {
|
||||||
.bridge_table
|
.bridge_table
|
||||||
.open_inv_keys
|
.open_inv_keys
|
||||||
.iter()
|
.iter()
|
||||||
.any(|&x| x.1 + 511 < self.today())
|
.any(|&x| x.1 + EXPIRY_DATE < self.today())
|
||||||
//Perhaps 511 should be changed to an earlier time
|
//Perhaps EXPIRY_DATE should be changed to an earlier time
|
||||||
{
|
{
|
||||||
let open_inv_keys_clone = self.bridge_table.open_inv_keys.clone();
|
|
||||||
// If so, separate them from the fresh open invitation indexes
|
// If so, separate them from the fresh open invitation indexes
|
||||||
let (expired, fresh): (Vec<(u32, u32)>, Vec<(u32, u32)>) = open_inv_keys_clone
|
let (expired, fresh): (Vec<(u32, u32)>, Vec<(u32, u32)>) = self.bridge_table.open_inv_keys
|
||||||
.into_iter()
|
.iter()
|
||||||
.partition(|&x| x.1 + 511 < self.today());
|
.partition(|&x| x.1 + EXPIRY_DATE < self.today());
|
||||||
for item in expired {
|
for item in expired {
|
||||||
let new_item = item.0;
|
let new_item = item.0;
|
||||||
bdb.remove_openinv(&new_item);
|
bdb.remove_openinv(&new_item);
|
||||||
|
|
Loading…
Reference in New Issue