pub fn main()
{
find_maximum();
test();
biguint_random_number_main();
}
pub fn find_maximum()
{
println!("find_maximum()");
use cryptocol::define_utypes_with;
define_utypes_with!(u128);
let a_biguint = U256::from_uint(123_u8);
let mut exp = U256::one();
loop {
let b = a_biguint.pow(&exp);
if b.is_overflow()
{
println!("Maximum i is {}", exp);
break;
}
exp.wrapping_add_assign_uint(1_u8);
}
println!("---------------------------");
}
pub fn test()
{
println!("test()");
use cryptocol::number::*;
use cryptocol::define_utypes_with;
define_utypes_with!(u8);
let a = 128_u8;
let b = a << 1;
println!("b = {}", b);
let p = U256::from_uint(12345678901234567890123456789_u128);
let q = U256::from_uint(12345678901234567890_u128);
let r = p.gcd(&q);
println!("{} , {} => {}", p, q, r);
let a_biguint = U256::from_uint(254_u8);
let b = U256::from_uint(123_u8);
let c = a_biguint.divide_fully(&b);
let d = a_biguint.divide_fully_uint(123_u8);
let aa = LongerUnion::new_with(254_u128);
let bb = LongerUnion::new_with(123_u128);
let cc = aa % bb;
println!("c: {} {}", c.0, c.1);
println!("d: {} {}", d.0, d.1);
println!("{}", cc);
let e = a_biguint.divide_fully_uint(4_u8);
println!("{:?} {:?}", e.0, e.1);
println!("a_biguint == b {}", a_biguint == b);
println!("a_biguint != b {}", a_biguint != b);
println!("a_biguint > b {}", a_biguint > b);
println!("a_biguint >= b {}", a_biguint >= b);
println!("a_biguint < b {}", a_biguint < b);
println!("a_biguint <= b {}", a_biguint <= b);
}
fn biguint_random_number_main()
{
biguint_any();
biguint_any_odd();
biguint_any_less_than();
biguint_any_odd_less_than();
biguint_any_with_msb_set();
biguint_any_odd_with_msb_set();
biguint_any_prime_using_miller_rabin();
biguint_random();
biguint_random_odd();
biguint_random_less_than();
biguint_random_odd_less_than();
biguint_random_with_msb_set();
biguint_random_odd_with_msb_set();
biguint_random_prime_using_miller_rabin();
biguint_is_prime_using_miller_rabin();
}
fn biguint_any()
{
println!("biguint_any");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u128);
let any: U1024 = Any::new().random_biguint();
println!("Random Number: {}", any);
println!("---------------------------");
}
fn biguint_any_odd()
{
println!("biguint_any_odd");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u64);
let any: U1024 = Any::new().random_odd_biguint();
println!("Random Odd Number: {}", any);
assert!(any.is_odd());
println!("---------------------------");
}
fn biguint_any_less_than()
{
println!("biguint_any_less_than");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u32);
let ceiling = U1024::max() / U1024::from_uint::<u32>(3);
let any = Any::new().random_under_biguint(&ceiling).unwrap();
println!("Random Number less than {} is {}", ceiling, any);
assert!(any < ceiling);
println!("---------------------------");
}
fn biguint_any_odd_less_than()
{
println!("biguint_any_odd_less_than");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u16);
let ceiling = U1024::max() / U1024::from_uint::<u32>(3);
let any = Any::new().random_odd_under_biguint(&ceiling).unwrap();
println!("Random Odd Number less than {} is {}", ceiling, any);
assert!(any < ceiling);
assert!(any.is_odd());
println!("---------------------------");
}
fn biguint_any_with_msb_set()
{
println!("biguint_any_with_msb_set");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u8);
let any = Any::new().random_with_msb_set_biguint();
println!("Random Number = {}", any);
println!("1024-bit Random Number = {}", any);
assert!(any > U1024::submax(1023));
println!("---------------------------");
}
fn biguint_any_odd_with_msb_set()
{
println!("biguint_any_odd_with_msb_set");
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u128);
let any = Any::new().random_odd_with_msb_set_biguint();
println!("Random Number = {}", any);
println!("1024-bit Random Odd Number = {}", any);
assert!(any > U1024::submax(1023));
assert!(any.is_odd());
println!("---------------------------");
}
fn biguint_any_prime_using_miller_rabin()
{
println!("biguint_any_prime_using_miller_rabin");
use cryptocol::number::BigUInt_Prime;
use cryptocol::random::Any;
use cryptocol::define_utypes_with;
define_utypes_with!(u64);
let any: U1024 = Any::new().random_prime_using_miller_rabin_biguint(5);
println!("Random Prime Number = {}", any);
assert!(any.is_prime_using_miller_rabin(5));
println!("---------------------------");
}
fn biguint_random()
{
println!("biguint_random");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u64);
let rand: U512 = Random::new().random_biguint();
println!("Random Number: {}", rand);
println!("---------------------------");
}
fn biguint_random_odd()
{
println!("biguint_random_odd");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u128);
let rand: U1024 = Random::new().random_odd_biguint();
println!("Random Odd Number: {}", rand);
assert!(rand.is_odd());
println!("---------------------------");
}
fn biguint_random_less_than()
{
println!("biguint_random_less_than");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u32);
let ceiling = U1024::max() / U1024::from_uint::<u32>(3);
let rand = Random::new().random_odd_under_biguint(&ceiling).unwrap();
println!("Random Number less than {} is {}", ceiling, rand);
assert!(rand < ceiling);
println!("---------------------------");
}
fn biguint_random_odd_less_than()
{
println!("biguint_random_odd_less_than");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u16);
let ceiling = U1024::max() / U1024::from_uint::<u32>(3);
let rand = Random::new().random_odd_under_biguint(&ceiling).unwrap();
println!("Random Odd Number less than {} is {}", ceiling, rand);
assert!(rand < ceiling);
assert!(rand.is_odd());
println!("---------------------------");
}
fn biguint_random_with_msb_set()
{
println!("biguint_random_with_msb_set");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u8);
let mut rand = Random::new();
let num: U1024 = rand.random_biguint();
let num2: U1024 = rand.random_with_msb_set_biguint();
println!("Random Number = {}", num);
println!("1024-bit Random Number = {}", num2);
assert!(num2 > U1024::submax(1023));
println!("---------------------------");
}
fn biguint_random_odd_with_msb_set()
{
println!("biguint_random_odd_with_msb_set");
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u128);
let mut rand = Random::new();
let num: U1024 = rand.random_biguint();
let num2: U1024 = rand.random_odd_with_msb_set_biguint();
println!("Random Number = {}", num);
println!("1024-bit Random Odd Number = {}", num2);
assert!(num2 > U1024::submax(1023));
assert!(num2.is_odd());
println!("---------------------------");
}
fn biguint_random_prime_using_miller_rabin()
{
println!("biguint_random_prime_using_miller_rabin");
use cryptocol::number::BigUInt_Prime;
use cryptocol::random::Random;
use cryptocol::define_utypes_with;
define_utypes_with!(u64);
let rand: U1024 = Random::new().random_prime_using_miller_rabin_biguint(5);
assert!(rand.is_prime_using_miller_rabin(5));
println!("Random Prime Number = {}", rand);
println!("---------------------------");
}
fn biguint_is_prime_using_miller_rabin()
{
println!("biguint_is_prime_using_miller_rabin");
use cryptocol::number::BigUInt_Prime;
use cryptocol::define_utypes_with;
define_utypes_with!(u16);
let num = U1024::from_string("157847659859841049478697210209054499132116730052547470511818639401226705057924429751936169954758794979780692256039595351594450957429818931145981533862363167515145703012676459279601554094177152095755375227908501443524236048737351327752857335149319939532219166843564206337168180636940438709755340632429325500479").unwrap();
let yes = num.is_prime_using_miller_rabin(5);
println!("Is {} a prime number? => {}", num, yes);
println!("---------------------------");
}