Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
70 commits
Select commit Hold shift + click to select a range
46a3a8a
Started stubbing out Whiteflag message processing.
Romulus10 Mar 2, 2022
be23843
Added passing tests.
Romulus10 Mar 3, 2022
0840733
More set up for auth messages, but still not passing tests.
Romulus10 Mar 4, 2022
6d29d46
Merged.
Romulus10 Mar 4, 2022
e146444
Passing tests for compiling auth messages.
Romulus10 Mar 4, 2022
6f6e275
Fixed a formatting failure.
Romulus10 Mar 4, 2022
495dd3e
brought in various encoding kinds from whiteflag
Mar 11, 2022
2f0868d
organizing and adding binary encoding method
Mar 11, 2022
a8b4492
adding decode
Mar 11, 2022
2835d10
adding hexadecimal encoding function
Mar 12, 2022
20c82fa
adding decode bdx
Mar 18, 2022
38acb38
fixing function names + using Vec<char> as base implementation
Mar 21, 2022
ce9b6b1
working on latlong implementation
Mar 21, 2022
305a5d6
adding common functions
Mar 21, 2022
86fc9c0
making vec u8 instead of u32
Mar 21, 2022
c5a0270
adding latlong encode
Mar 21, 2022
623c587
moving to top
Mar 21, 2022
7ec6c1e
adding general encode method
Mar 21, 2022
0f31199
adding general decoding method
Mar 21, 2022
3509ef3
shift_right tests are passing
Mar 21, 2022
4cba424
shift left tests are passing
Mar 21, 2022
d6149be
supporting backwards shift
Mar 21, 2022
0223473
adding Field and a definition
Mar 25, 2022
91e9560
adding the remaining definitions
Mar 25, 2022
d17a877
fixing test file
Mar 25, 2022
f44f1ca
adding message type and from_code implementation
Mar 26, 2022
60d0054
adding needed methods to Field
Mar 28, 2022
60809b4
differentiating using a separate type between a field definition and …
Mar 28, 2022
e1b4dec
adding more functions to field and segment
Mar 29, 2022
ef47a89
fixing various build errors
Mar 29, 2022
ddab8e7
obsolete lifetime declaration
Mar 29, 2022
6cd0e50
fixing reference and ownership issues
Mar 29, 2022
6f9056a
making some progress with compile function
Mar 29, 2022
e04cda5
implementing clippy suggestions
Mar 29, 2022
81b344b
nearly done with compile method
Mar 29, 2022
9bfba3e
moving WhiteflagMesage into core mod
Mar 29, 2022
78f09a5
adding important common method and testing to ensure it works
Mar 30, 2022
87800f6
integrating encoding into Field + using AsRef<str> + adding some miss…
Mar 30, 2022
c15f4b2
including message in module
Mar 30, 2022
f44db6f
vector needs to be filled with init values
Mar 31, 2022
01c0e92
generalizing string input
Mar 31, 2022
51693c4
test builds
Mar 31, 2022
5656dc5
fixing issue with removing invalid hexadecimal characters and turning…
Mar 31, 2022
ed79a25
fixing datetime encoding
Mar 31, 2022
b186420
removing look aheads and look behinds
Mar 31, 2022
58e75b0
allowing none for regex and making methods more flexible
Mar 31, 2022
17e6e19
removing old code
Mar 31, 2022
59ef891
moving some functions into common
Mar 31, 2022
2b8d09e
beginning to add field tests
Mar 31, 2022
cbe901a
fmt
Mar 31, 2022
52b7940
better to accept &[u8]
Mar 31, 2022
58b126a
adding more tests
Mar 31, 2022
f7847b2
removing 0x from hexadecimal strings
Mar 31, 2022
b65eb8b
adding the remaining tests for field codec
Mar 31, 2022
67138c0
properly calculating bit_length and propagating up through encoding p…
Mar 31, 2022
09fa821
preferring &[u8] as input type for u8 arrays
Mar 31, 2022
02faf69
adding apend_bits method and ran the first successful whiteflag messa…
Mar 31, 2022
ea7414e
reorganizing tests
Mar 31, 2022
1b86146
simplifying extraction of message_type
Mar 31, 2022
b4f0f80
adding missing methods for decoding
Apr 2, 2022
be3a9d4
wrapping up decode method
Apr 2, 2022
e1f2fd7
decode test passing
Apr 2, 2022
238c80b
algorithm porting error
Apr 2, 2022
86d445c
fmt
Apr 2, 2022
0fcfe42
adding authentication decode test
Apr 2, 2022
72f4900
encode authentication message test passes
Apr 2, 2022
6a0c4a0
Started on correcting a few warnings.
Romulus10 Apr 3, 2022
8da77af
Local variable naming convention.
Romulus10 Apr 3, 2022
957fe3a
Because we're using an enum, we shouldn't need a default case.
Romulus10 Apr 3, 2022
c223119
cleaning up compiler warnings
Apr 3, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -25,4 +25,5 @@ thiserror = "1.0.30"
parking_lot = "0.12.0"
x25519-dalek = "2.0.0-pre.1"
rand_core = "0.6.3"
sp-keyring = "5.0.0"
sp-keyring = "5.0.0"
regex = "1.5.5"
2 changes: 2 additions & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ pub mod database;
pub mod dh_tools;
pub mod fennel;
pub mod rsa_tools;
pub mod whiteflag;

use codec::{Decode, Encode};

Expand All @@ -11,6 +12,7 @@ pub use crate::database::*;
pub use crate::dh_tools::*;
pub use crate::fennel::*;
pub use crate::rsa_tools::*;
pub use crate::whiteflag::*;

/// The FennelServerPacket struct is used for carrying formatted messages between the server and client.
#[derive(Copy, Clone, Encode, Decode, Debug)]
Expand Down
5 changes: 5 additions & 0 deletions src/whiteflag/mod.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#[cfg(test)]
mod tests;

pub mod wf_codec;
pub mod wf_core;
69 changes: 69 additions & 0 deletions src/whiteflag/tests.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
use crate::whiteflag::wf_core::message::WhiteflagMessage;

#[cfg(test)]
#[test]
fn test_create_new_message() {
let mut message = WhiteflagMessage::new("S".to_string());
assert_eq!(message.message_type, "S");
assert!(message.is_valid());

assert_eq!("WF", message.prefix);
assert_eq!("1", message.version);
assert_eq!("S", message.message_code);

assert!(message.set_encryption_indicator("1".to_string()));
assert!(!message.set_encryption_indicator("2".to_string()));

/* Verify body fields */
assert!(message.set_subject_code("10".to_string()));
assert!(!message.set_subject_code("20".to_string()));
assert!(message.set_object_type("21".to_string()));
assert!(!message.set_object_type("22".to_string()));

/* Verify metadata */
assert_eq!(None, message.set_transaction_hash("a1b2c3".to_string()));
assert_eq!(
"a1b2c3",
message.set_transaction_hash("d4e5f6".to_string()).unwrap()
);
assert_eq!(None, message.set_originator_address("abc123".to_string()));
assert_eq!("abc123", message.get_originator_address());
}

#[test]
fn test_compile_auth_message() {
let field_values = vec![
"WF",
"1",
"0",
"0",
"A",
"0",
"0000000000000000000000000000000000000000000000000000000000000000",
"1",
"b01218a30dd3c23d050af254bfcce31a715fecdff6a23fd59609612e6e0ef263",
];

let message = WhiteflagMessage::compile_auth_message(field_values.clone()).unwrap();

assert_eq!("A", message.message_type());
assert_eq!(field_values[0], message.prefix());
assert_eq!(field_values[1], message.version());
assert_eq!(field_values[2], message.get_encryption_indicator());
assert_eq!(field_values[3], message.duress_indictor());
assert_eq!(field_values[4], message.message_code());
assert_eq!(field_values[5], message.reference_indicator());
assert_eq!(field_values[6], message.referenced_message());
assert_eq!(field_values[7], message.verification_method());
assert_eq!(field_values[8], message.verification_data());
assert!(message.is_valid());
}

#[test]
fn test_serialize_auth_message() {}

#[test]
fn test_deserialize_auth_message() {}

#[test]
fn test_decode_auth_message() {}
44 changes: 44 additions & 0 deletions src/whiteflag/wf_codec/binary.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
use super::constants::BYTE;

pub fn encode_binary<T: AsRef<str>>(binary_str: T) -> Vec<u8> {
let bit_length: usize = binary_str.as_ref().len();
let byte_length: usize = (bit_length / BYTE)
+ (match bit_length % BYTE == 0 {
true => 0,
false => 1,
});
let mut buffer = vec![0; byte_length];

for bit_index in 0..bit_length {
if binary_str
.as_ref()
.chars()
.nth(bit_index)
.expect("something wrong")
== '1'
{
let byte_cursor: usize = bit_index / BYTE;
let bit_position: usize = bit_index % BYTE;
buffer[byte_cursor] |= 0x80 >> bit_position;
}
}

buffer
}

pub fn decode_binary(buffer: &[u8], bit_length: usize) -> String {
let mut data: Vec<char> = Vec::new();

for bit_index in 0..bit_length {
let byte_cursor: usize = bit_index / BYTE;
let bit_position: usize = bit_index % BYTE;

if (buffer[byte_cursor] >> (BYTE - bit_position - 1) & 1) == 1 {
data.push('1');
} else {
data.push('0');
}
}

data.into_iter().collect() //to lower?
}
Loading