1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
#![feature(test)] //! This crate tries to break SHA256. (But fails unfortunately). //! //! It implements SHA-256 in the most inefficient fashion ever. Usually, SHA-256 //! operates on integers with 32 bits (u32). This implementation uses one double (f64) //! for each bit of each integer, thereby allowing to use 8 fuzzy input bits for each input byte. //! //! [Term](term/struct.Term.html) represents a fuzzy bit either as a settable bit (constant or symbolic) //! or as a bitwise combination of other `Term`s, thereby creating a treelike graph of `Term`s. //! These terms are evaluated lazily. //! //! [U](u/struct.U.html) combines 32 `Term`s and represents a fuzzy integer. //! U also implements _high level_ operations like shifting, rotating, adding. //! These operations will be transformed into fuzzy lazily evaluated bit operations. //! //! [Sha256](sha/struct.Sha256.html) uses these `U`s to calculate the SHA-256 //! algorithm. //! //! [Linopt](linopt/struct.Linopt.html) uses the fuzzy `Sha256` to try to break it. //! No chance. extern crate arrayvec; extern crate data_encoding; extern crate byteorder; extern crate test; pub mod util; pub mod term; pub mod u; pub mod sha; pub mod linopt;