Skip to content

Instantly share code, notes, and snippets.

@lborg019
Last active June 21, 2017 17:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save lborg019/9d6956d91b9d3ccaf6ae4bb9c2d933ba to your computer and use it in GitHub Desktop.
Save lborg019/9d6956d91b9d3ccaf6ae4bb9c2d933ba to your computer and use it in GitHub Desktop.
Rust switchboxes.
fn main()
{
//switch boxes
let sbox_zero = [[1,0,3,2],
[3,2,1,0],
[0,2,1,3],
[3,1,3,2]];
let sbox_one = [[0,1,2,3],
[2,0,1,3],
[3,0,1,0],
[2,1,0,3]];
let byte = 0b1111_0000;
let mut result = 0b0000_0000;
/* * * * * * *
* SBOX ZERO *
* * * * * * */
let mut temp = 0;
// row:
if byte & (1 << 4) == 0b0001_0000 { temp = temp | 1 << 0; }
if byte & (1 << 7) == 0b1000_0000 { temp = temp | 1 << 1; }
let s_zero_row = temp;
// column:
temp = 0; // (reset)
if byte & (1 << 6) == 0b0100_0000 { temp = temp | 1 << 1; }
if byte & (1 << 5) == 0b0010_0000 { temp = temp | 1 << 0; }
let s_zero_col = temp;
/* * * * * * *
* SBOX ONE *
* * * * * * */
// row:
temp = 0;
if byte & (1 << 3) == 0b0000_1000 { temp = temp | 1 << 1; }
if byte & (1 << 0) == 0b0000_0001 { temp = temp | 1 << 0; }
let s_one_row = temp;
// column:
temp = 0;
if byte & (1 << 2) == 0b0000_0100 { temp = temp | 1 << 1; }
if byte & (1 << 1) == 0b0000_0010 { temp = temp | 1 << 0; }
let s_one_col = temp;
let sbox_zero_val = sbox_zero[s_zero_row][s_zero_col]; //2 bits
let sbox_one_val = sbox_one [s_one_row] [s_one_col]; //2 bits
//join sbox_zero_val and sbox_one_val bits:
// set bit 0
if sbox_one_val & (1 << 0) == 0b0000_0001 { result = result | 1 << 0; }
// set bit 1
if sbox_one_val & (1 << 1) == 0b0000_0010 { result = result | 1 << 1; }
// set bit 2
if sbox_zero_val & (1 << 0) == 0b0000_0001 { result = result | 1 << 2; }
//set bit 3
if sbox_zero_val & (1 << 1) == 0b0000_0010 { result = result | 1 << 3; }
println!("byte: {:08b}", byte);
println!("switchbox-0: {:02b}, switchbox-1: {:02b}", sbox_zero_val, sbox_one_val);
println!("result: {:04b}", result);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment