Skip to content

Commit a9f0780

Browse files
committed
Add inner loop for message data digest
TODO: Reactor hmac api
1 parent c811db9 commit a9f0780

File tree

3 files changed

+50
-14
lines changed

3 files changed

+50
-14
lines changed

bbr_cli/src/api/hmacsha256/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use sodiumoxide::crypto::auth::hmacsha256;
22
// use utils::byte_array::_clone_into_array;
3+
// TODO: FIXME: REFACTOR THIS!
34

45
// TODO: FIXME: I don't like how we convert slices to array.
56
// TODO: FIXME: Size checking and keys validation.

bbr_cli/src/api/mod.rs

+45-10
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub fn insert_meta(conn: &SqliteConnection, input: &PathBuf) -> Result<(Vec<u8>)
5353

5454
let mut bag_info = hash::BagInfo::new();
5555
bag_info.set_name(name.clone());
56-
bag_info.set_stamp(timestamp.clone());
56+
bag_info.set_timestamp(timestamp.clone());
5757
let bbr_nonce = HMACSHA256::generate_key();
5858
let bbr_digest =
5959
HMACSHA256::create_tag(&bag_info.write_to_bytes().unwrap(), &bbr_nonce).to_vec();
@@ -97,24 +97,59 @@ pub fn convert(input: PathBuf) -> Result<(), Box<dyn std::error::Error>> {
9797
.load::<topic::Topic>(&conn)
9898
.expect("Error loading topics");
9999

100-
let mut hmac_key = HMACSHA256::clone_key_from_slice(bbr_digest.as_slice());
100+
let mut topic_nonce = HMACSHA256::clone_key_from_slice(bbr_digest.as_slice());
101101
for topic_result in topic_results {
102-
let mut topic_format = hash::TopicFormat::new();
103-
topic_format.set_serialization_type(topic_result.serialization_type.clone());
104-
topic_format.set_serialization_format(topic_result.serialization_format.clone());
105-
let tag = HMACSHA256::create_tag(&topic_format.write_to_bytes().unwrap(), &hmac_key);
102+
println!("Found topic {:?}", &topic_result.name);
103+
let mut topic_info = hash::TopicInfo::new();
104+
topic_info.set_serialization_type(topic_result.serialization_type.clone());
105+
topic_info.set_serialization_format(topic_result.serialization_format.clone());
106+
let topic_digest = HMACSHA256::clone_key_from_slice(
107+
&HMACSHA256::create_tag(&topic_info.write_to_bytes().unwrap(), &topic_nonce));
106108

107109
let topic_form = topic::TopicForm {
108110
id: topic_result.id,
109-
bbr_nonce: hmac_key.get_bytes().to_vec(),
110-
bbr_digest: tag.to_vec(),
111+
bbr_nonce: topic_nonce.get_bytes().to_vec(),
112+
bbr_digest: topic_digest.get_bytes().to_vec(),
111113
};
112114
// topic_form.save_changes(&conn)?;
113115
diesel::update(&topic_form)
114116
.set(&topic_form)
115117
.execute(&conn)?;
116-
println!("Found topic {:?}", &topic_result.name);
117-
hmac_key = HMACSHA256::clone_key_from_slice(&tag);
118+
119+
use crate::schema::messages::dsl::topic_id;
120+
let message_results = messages::table
121+
.filter(topic_id.eq(topic_result.id))
122+
.load::<message::Message>(&conn)
123+
.expect("Error loading messages");
124+
125+
let mut message_nonce = HMACSHA256::clone_key_from_slice(&topic_digest.get_bytes());
126+
for message_result in message_results {
127+
println!("Found message {:?}", &message_result.id);
128+
let mut message_info = hash::MessageInfo::new();
129+
message_info.set_timestamp(message_result.timestamp.clone());
130+
let message_info = message_info.write_to_bytes().unwrap();
131+
// message_info.append(&message_result.data);
132+
let message_digest = HMACSHA256::clone_key_from_slice(
133+
&HMACSHA256::create_tag(
134+
&message_info.as_slice(),
135+
&message_nonce));
136+
137+
let topic_form = topic::TopicForm {
138+
id: message_result.id,
139+
bbr_nonce: message_nonce.get_bytes().to_vec(),
140+
bbr_digest: message_digest.get_bytes().to_vec(),
141+
};
142+
// topic_form.save_changes(&conn)?;
143+
diesel::update(&topic_form)
144+
.set(&topic_form)
145+
.execute(&conn)?;
146+
message_nonce = HMACSHA256::clone_key_from_slice(&message_digest.get_bytes());
147+
}
148+
149+
let mut topic_meta = hash::TopicMeta::new();
150+
topic_meta.set_name(topic_result.name.clone());
151+
topic_nonce = HMACSHA256::clone_key_from_slice(
152+
&HMACSHA256::create_tag(&topic_meta.write_to_bytes().unwrap(), &topic_digest));
118153
}
119154

120155
println!("Done");

bbr_protobuf/proto/bbr/hash.proto

+4-4
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@
1616
syntax = "proto3";
1717

1818

19-
message TopicFormat {
19+
message TopicInfo {
2020
string serialization_type = 1;
2121
string serialization_format = 2;
2222
}
2323

24-
message TopicInfo {
24+
message TopicMeta {
2525
string name = 1;
2626
// string id = 2;
2727
}
2828

2929
message MessageInfo {
30-
int64 stamp = 1;
30+
int64 timestamp = 1;
3131
// bytes data = 2;
3232
}
3333

3434
message BagInfo {
3535
string name = 1;
36-
int64 stamp = 2;
36+
int64 timestamp = 2;
3737
// bytes data = 2;
3838
}

0 commit comments

Comments
 (0)