Select Git revision

Henrik Tjäder authored
main.rs 5.07 KiB
#![allow(dead_code)]
static ABC: [u32; 4] = [0x9fdd9158,
0x85715808,
0xac73323a,
0];
static mut PLAIN: [u8; 132] = [0; 132];
static CODED: [u32; 132] =
[ 0x015e7a47,
0x2ef84ebb,
0x177a8db4,
0x1b722ff9,
0x5dc7cff0,
0x5dc9dea6,
0x1da0c15a,
0xe4c236a2,
0x3d16b0d0,
0x1f397842,
0xaae0d2ba,
0x11246674,
0x0845317f,
0xd5512dad,
0xb6184977,
0xd293a53e,
0x7d9c2716,
0xd917eae6,
0xd8852384,
0x286e46f9,
0xce566029,
0xcefe7daf,
0x62d726d4,
0x0dbaeb2d,
0x95f57c60,
0xed515141,
0x29b77d0f,
0x9f7b8d0c,
0x45a8395a,
0xfead2b72,
0x883d434c,
0xed8ddf60,
0xe51e65e4,
0x19bf6bb1,
0xfeb505ec,
0x662aa23c,
0xf6827cf8,
0xd1dc7a5c,
0x4fa5b066,
0x7ddd25a4,
0xa8ba8e8a,
0x72846227,
0xf8f636fb,
0x2b389a9c,
0xe4038bf6,
0x6e169877,
0xad028132,
0x84dbfe8c,
0x243762ff,
0x59c8f80c,
0xb6e0db4b,
0xedb8cab7,
0xcd4b39f6,
0xaf263741,
0x18d9965f,
0x1ab1f037,
0x5b458792,
0xc94d960d,
0xd45cedea,
0x2160aca3,
0x93c77766,
0x2d66e105,
0x9ff74d4f,
0x6dc22f21,
0x6b03d689,
0x5fc48de0,
0x1138f000,
0xccb58e57,
0xf9c8e200,
0x7ab26e3c,
0xc61dcb3e,
0x6aefccb0,
0x7a452f05,
0xa5cf0731,
0xa249383f,
0x628fe534,
0xcad81710,
0x7f616276,
0x3ce18308,
0xed4857ff,
0xd1e5b1d1,
0xc2e84dc2,
0xaa003742,
0xaf637488,
0x831afc48,
0x287a69a0,
0x6e04546e,
0x13dffa07,
0x3232fb10,
0xd69e2e09,
0x355d8dc7,
0xef902301,
0x9a89ac15,
0x967dc900,
0x08dc2b1c,
0x6b5be690,
0x894b0e02,
0xe26af9af,
0xa6fd3b23,
0xfcf213e5,
0x85217608,
0x7fd3be8b,
0xa2e757fb,
0x3717a341,
0x85ee426d,
0x394bb856,
0x12ac98c3,
0xec7d4ab5,
0x721b6989,
0x30e36360,
0xaa018403,
0x9ee61196,
0xa8697adc,
0x51e9d65a,
0x11023594,
0xc4c4b36b,
0xda80bf7a,
0xbd5a645e,
0x18cea918,
0xa723dda8,
0x0126c05e,
0x2962d48a,
0xd5f7d312,
0xb8947041,
0x7c1e2e9a,
0x945eeac3,
0x7110fb1c,
0xa7bc72cc,
0xdf47dfbb,
0x09a1c6c8,
0xc2e41061,
0];
///
/// Count the number of zeroes
///
fn count_zero(num: u32) -> u32 {
let mut count_zero = 0;
let mut count_one = 0;
for x in 0..32 {
if num % 2 == 0 {
count_zero += 1;
} else {
count_one += 1;
}
num << 1;
}
count_zero ^ count_one
}
///
/// Modify the seed for decoding
///
fn codgen(seed: &mut u32) -> u32 {
let n: u32;
let (x, y): (u32, u32);
n = count_zero(*seed);
println!("Seed:\n{:b}", *seed);
// Inte OK än
x = seed.rotate_left(2);
println!("{:b}", x);
// Fungerade fint
y = *seed >> 6;
*seed = x ^ y ^ n;
(*seed) ^ 0x464b713e
}
///
/// Decodes a string
///
fn decode(coded: &[u32], plain: &mut[u8], seed: &mut u32) -> u32 {
let x = 3;
x
}
fn main() {
println!("Time to decode!");
//let mut seed = 0x0e0657c1;
let mut seed = 0x3e944b9f;
//decode(&CODED, unsafe { &mut PLAIN }, &mut seed);
//
codgen(&mut seed);
println!("Ran codgen, new seed: {:x}", seed);
}
/*
# Group 1's Codeword Generator Subroutine (pseudocode)
# (remember: "seed" is a global variable, UNSIGNED INTEGER;
# you may implement local variables in registers or on the stack;
# result returned in v0; preserve all except t regs)
#
# FUNCTION codgen(): UNSIGNED INTEGER;
# LOCAL SIGNED INTEGER n;
# LOCAL UNSIGNED INTEGER x, y;
# BEGIN
# n := [count the number of 0's in word "seed"];
# x := [rotate "seed" left by 30 bits];
# y := [shift "seed" right-ARITHMETIC by 6 bits];
# seed := x XOR y XOR n;
# RETURN( seed XOR 0x464b713e );
# END;
#
# hint: if "seed" is initialized to 0x3e944b9f,
# the first five calls will generate these values:
# 0x891432f9, 0x4aa1dccc, 0xc54270fa, 0x9885155f, 0xce83d1b8, ...
# your code is to be written farther down (see comment below).
# Group 1's Recursive Decoding Subroutine (pseudocode)
# (for "decode", all four local variables must be implemented ON THE
# STACK, and NOT in registers; implement the code literally,.
# no optimizations. We're trying to teach you something.
# remember: result returned in v0; preserve all except t regs)
#
# FUNCTION decode( wordarr, bytearr ): UNSIGNED INTEGER;
# (wordarr, bytearr passed by reference)
# LOCAL UNSIGNED INTEGER m, r, x, y;
# BEGIN
# x := ONE'S-COMPLEMENT of codgen();
# IF ([contents of word at "wordarr"] = 0) THEN
# [byte pointed to by "bytearr"] := 0;
# r := x;
# ELSE
# y := decode( wordarr+, bytearr+ ); # "k+" means "successor in k"
# m := ( x - y ) - [contents of word at "wordarr"];
# [byte pointed to by "bytearr"] := [the eight bits at "m"<20:13>];
# r := TWO'S-COMPLEMENT OF codgen();
# r := x + y + m + r + 5;
# ENDIF;
# RETURN( r );
# END;
*/