#![allow(dead_code)]
#![allow(non_snake_case)]
#![allow(unused_variables)]
#![allow(unused_imports)]
#[macro_use]
extern crate lazy_static;
pub mod prelude;
pub mod crypto_systems;
pub mod Traits;
pub mod encrypt;
pub mod decrypt;
pub mod challanges;
mod brute_force;
pub mod error;
pub mod utils;
#[cfg(feature = "python-integration")]
use pyo3::{pyfunction, pymodule, types::PyModule, PyResult, Python};
#[cfg(feature = "python-integration")]
#[pymodule]
#[pyo3(name = "ferric_crypto_lib")]
fn ferric_crypto_lib(_py: Python<'_>, m: &PyModule) -> PyResult<()> {
println!("Ferric Crypto Lib Python Module Loaded");
use crate::utils::{
decode_digit, decode_list, encode_char, encode_string, num_gcd, print_info,
python_integration::factorize_n,
};
m.add_class::<crypto_systems::affine::Affine>()?;
m.add_class::<crypto_systems::ceasar::Ceasar>()?;
m.add_class::<crypto_systems::mix::Mix>()?;
m.add_class::<crypto_systems::mix::MixKey>()?;
m.add_class::<crypto_systems::mono_alphabet::Monosubstitution>()?;
m.add_class::<crypto_systems::hill_crypto::Hill>()?;
m.add_class::<crypto_systems::hill_crypto::HillDirection>()?;
m.add_class::<crypto_systems::rsa::RSA>()?;
m.add_class::<crypto_systems::des::DES>()?;
m.add_class::<crypto_systems::vigenere::Vigenere>()?;
m.add_class::<crypto_systems::vahf::Vahf>()?;
m.add_class::<utils::python_integration::PyBaseString>()?;
m.add_class::<utils::python_integration::PyEncodedString>()?;
m.add_class::<utils::BaseString>()?;
m.add_class::<utils::EncodedString>()?;
m.add_function(pyo3::wrap_pyfunction!(print_info, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(encode_string, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(encode_char, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(decode_list, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(decode_digit, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(num_gcd, m)?)?;
m.add_function(pyo3::wrap_pyfunction!(factorize_n, m)?)?;
Ok(())
}