| 
					
				 | 
			
			
				@@ -388,27 +388,46 @@ pub fn new_negative_report_key(db: &Db, date: u32) -> Option<PublicKey> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/// Receive an encrypted negative report. Attempt to decrypt it and if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-/// successful, add it to the database to be processed later. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-pub fn handle_encrypted_negative_report(db: &Db, enc_report: EncryptedNegativeReport) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// If we have a key for the requested day, return the secret part. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+pub fn get_negative_report_secret_key(db: &Db, date: u32) -> Option<StaticSecret> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if db.contains_key("nr-keys").unwrap() { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         let nr_keys: BTreeMap<u32, StaticSecret> = 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             match bincode::deserialize(&db.get("nr-keys").unwrap().unwrap()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Ok(map) => map, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 Err(_) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if nr_keys.contains_key(&enc_report.date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let secret = nr_keys.get(&enc_report.date).unwrap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            let nr = match enc_report.decrypt(&secret) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Ok(nr) => nr, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                Err(_) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                    return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    return None; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             }; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            save_negative_report_to_process(&db, nr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if nr_keys.contains_key(&date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            let secret = nr_keys.get(&date).unwrap(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Some(secret.clone()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        None 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// If we have a key for the requested day, return the public part. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+pub fn get_negative_report_public_key(db: &Db, date: u32) -> Option<PublicKey> { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    match get_negative_report_secret_key(&db, date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Some(secret) => Some(PublicKey::from(&secret)), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        None => None, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// Receive an encrypted negative report. Attempt to decrypt it and if 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+/// successful, add it to the database to be processed later. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+pub fn handle_encrypted_negative_report(db: &Db, enc_report: EncryptedNegativeReport) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    match get_negative_report_secret_key(&db, enc_report.date) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        Some(secret) => match enc_report.decrypt(&secret) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Ok(nr) => { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                save_negative_report_to_process(&db, nr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            Err(_) => {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        }, 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        None => {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 |