refactor: fix broken gfmil algo

This commit is contained in:
0xalivecow 2024-10-30 17:57:24 +01:00
parent ccf0b03ec0
commit 2e22bd5789
No known key found for this signature in database
3 changed files with 73 additions and 9 deletions

View file

@ -92,6 +92,10 @@ impl ByteArray {
(self.0.first().unwrap() & 1) == 1
}
pub fn msb_is_one(&self) -> bool {
(self.0.last().unwrap() & 1) == 1
}
pub fn is_empty(&self) -> bool {
for i in self.0.iter() {
if *i != 0 {

View file

@ -19,20 +19,20 @@ pub fn gfmul(poly_a: Vec<u8>, poly_b: Vec<u8>, semantic: &str) -> Result<Vec<u8>
if poly2.LSB_is_one() {
result.xor_byte_arrays(&poly1);
poly2.right_shift(semantic)?;
} else {
poly2.right_shift(semantic)?;
}
poly2.right_shift(semantic)?;
while !poly2.is_empty() {
if poly2.LSB_is_one() {
poly1.left_shift(semantic)?;
poly1.xor_byte_arrays(&red_poly_bytes);
result.xor_byte_arrays(&poly1);
} else {
poly1.left_shift(semantic)?;
poly1.left_shift(semantic)?;
if poly1.msb_is_one() {
poly1.xor_byte_arrays(&red_poly_bytes);
}
if poly2.LSB_is_one() {
result.xor_byte_arrays(&poly1);
}
poly2.right_shift(semantic)?;
}