|
@@ -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 => {}
|
|
|
}
|
|
|
}
|
|
|
|