prime_len   = 0060
input_len   = big_mul( $prime_len, 02 )
input_len   = big_add( $input_len, 07 )
input_len   = big_div( $input_len, 08 )

e           = 03
rgen_p:
    
p       = prime_gen_bit( $prime_len )
    
tmpp    = big_sub( $p, 01 )

    
x       = big_mod( $tmpp, $e )
    
if $x == 00
        
goto rgen_p
    
endif

rgen_q:
    
q       = prime_gen_bit( $prime_len )
    
tmpq    = big_sub( $q, 01 )
    
x       = big_mod( $tmpq, $e )
    
if $x == 00
        
goto rgen_q
    
endif

dec_indent
// std keypair
n       = big_mul( $p, $q )

fn      = big_mul( $tmpp, $tmpq )

d       = big_mod_inv( $e, $fn )


input   = hrandom( $input_len )
input   = memset( $input, 00, 01, 01 )

// std enc dec
out     = big_mod_exp( $input, $e, $n )

out2    = big_mod_exp( $out, $d, $n )

if $out2 != $input
    
?
    
pause
endif

// crt keypair
dp      = big_mod_inv( $e, $tmpp )

dq      = big_mod_inv( $e, $tmpq )

tmpp    = big_sub( $p, 02 )
qinv    = big_mod_exp( $q, $tmpp, $p )

tmplen  = big_mul( $prime_len, 02 )
out3    = new_rsa_crt_decrypt( $tmplen, $p, $q, $dp, $dq, $qinv, $out )

if $out3 != $input
    
?
    
pause
endif