16namespace layer5_applications {
17namespace user_interface {
55 f_primitive_root =
FALSE;
58 f_smallest_primitive_root =
FALSE;
59 smallest_primitive_root_p = 0;
61 f_smallest_primitive_root_interval =
FALSE;
62 smallest_primitive_root_interval_min = 0;
63 smallest_primitive_root_interval_max = 0;
65 f_number_of_primitive_roots_interval =
FALSE;
67 f_inverse_mod =
FALSE;
72 f_extended_gcd =
FALSE;
82 f_discrete_log =
FALSE;
89 RSA_setup_nb_bits = 0;
90 RSA_setup_nb_tests_solovay_strassen = 0;
91 RSA_setup_f_miller_rabin_test = 0;
93 f_RSA_encrypt_text =
FALSE;
97 f_sift_smooth =
FALSE;
103 f_square_root =
FALSE;
106 f_square_root_mod =
FALSE;
111 f_all_square_roots_mod_n =
FALSE;
115 f_quadratic_sieve =
FALSE;
116 quadratic_sieve_n = 0;
117 quadratic_sieve_factorbase = 0;
118 quadratic_sieve_x0 = 0;
126 f_solovay_strassen =
FALSE;
127 solovay_strassen_p = 0;
128 solovay_strassen_a = 0;
131 f_miller_rabin =
FALSE;
133 miller_rabin_nb_times = 0;
136 f_fermat_test =
FALSE;
138 fermat_test_nb_times = 0;
141 f_find_pseudoprime =
FALSE;
142 find_pseudoprime_nb_digits = 0;
143 find_pseudoprime_nb_fermat = 0;
144 find_pseudoprime_nb_miller_rabin = 0;
145 find_pseudoprime_nb_solovay_strassen = 0;
148 f_find_strong_pseudoprime =
FALSE;
150 f_miller_rabin_text =
FALSE;
151 miller_rabin_text_nb_times = 0;
159 f_random_last =
FALSE;
163 f_affine_sequence =
FALSE;
164 affine_sequence_a = 0;
166 affine_sequence_c = 0;
167 affine_sequence_m = 0;
180 if (ST.
stringcmp(argv[i],
"-cipher_substitution") == 0) {
181 cout <<
"-cipher_substitution <ptext>" << endl;
183 else if (ST.
stringcmp(argv[i],
"-cipher_vigenere") == 0) {
184 cout <<
"-cipher_vigenere <ptext> <key>" << endl;
186 else if (ST.
stringcmp(argv[i],
"-cipher_affine") == 0) {
187 cout <<
"-cipher_affine <ptext> <int : a> <int : b>" << endl;
189 else if (ST.
stringcmp(argv[i],
"-analyze_substitution") == 0) {
190 cout <<
"-analyze_substitution <ctext>" << endl;
192 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere") == 0) {
193 cout <<
"-analyze_vigenere <ctext>" << endl;
195 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere_kasiski") == 0) {
196 cout <<
"-analyze_vigenere_kasiski <ctext> <int : key_length>" << endl;
198 else if (ST.
stringcmp(argv[i],
"-kasiski") == 0) {
199 cout <<
"-kasiski <ctext> <int : threshold>" << endl;
201 else if (ST.
stringcmp(argv[i],
"-decipher_substitution") == 0) {
202 cout <<
"-decipher_substitution <ctext> <guess>" << endl;
204 else if (ST.
stringcmp(argv[i],
"-decipher_vigenere") == 0) {
205 cout <<
"-decipher_vigenere <ctext> <key>" << endl;
207 else if (ST.
stringcmp(argv[i],
"-decipher_affine") == 0) {
208 cout <<
"-decipher_affine <ctext> <guess>" << endl;
210 else if (ST.
stringcmp(argv[i],
"-RSA") == 0) {
211 cout <<
"-RSA <int : d> <int : m> <text>" << endl;
213 else if (ST.
stringcmp(argv[i],
"-RSA_encrypt_text") == 0) {
214 cout <<
"-RSA_encrypt_text <int : d> <int : m> <int : block_size> <text>" << endl;
216 else if (ST.
stringcmp(argv[i],
"-RSA_setup") == 0) {
217 cout <<
"-RSA_setup <int : nb_bits> <int : nb_tests_solovay_strassen> <int : f_miller_rabin_test>" << endl;
219 else if (ST.
stringcmp(argv[i],
"-primitive_root") == 0) {
220 cout <<
"-primitive_root <int : p>" << endl;
222 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root") == 0) {
223 cout <<
"-smallest_primitive_root <int : p>" << endl;
225 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root_interval") == 0) {
226 cout <<
"-smallest_primitive_root_interval <int : p_min> <int : p_max>" << endl;
228 else if (ST.
stringcmp(argv[i],
"-number_of_primitive_roots_interval") == 0) {
229 cout <<
"-number_of_primitive_roots_interval <int : p_min> <int : p_max>" << endl;
231 else if (ST.
stringcmp(argv[i],
"-inverse_mod") == 0) {
232 cout <<
"-primitive_root <int : a> <int : n>" << endl;
234 else if (ST.
stringcmp(argv[i],
"-extended_gcd") == 0) {
235 cout <<
"-extended_gcd <int : a> <int : b>" << endl;
237 else if (ST.
stringcmp(argv[i],
"-power_mod") == 0) {
238 cout <<
"-power_mod <int : a> <int : k> <int : n>" << endl;
240 else if (ST.
stringcmp(argv[i],
"-discrete_log") == 0) {
241 cout <<
"-discrete_log <int : y> <int : a> <int : m>" << endl;
243 else if (ST.
stringcmp(argv[i],
"-sift_smooth") == 0) {
244 cout <<
"-sift_smooth <int : from> <int : ken> <string : factor_base>" << endl;
246 else if (ST.
stringcmp(argv[i],
"-square_root") == 0) {
247 cout <<
"-square_root <int : number>" << endl;
249 else if (ST.
stringcmp(argv[i],
"-square_root_mod") == 0) {
250 cout <<
"-square_root_mod <int : a> <int : m>" << endl;
252 else if (ST.
stringcmp(argv[i],
"-all_square_roots_mod_n") == 0) {
253 cout <<
"-all_square_roots_mod_n <int : a> <int : n>" << endl;
255 else if (ST.
stringcmp(argv[i],
"-quadratic_sieve") == 0) {
256 cout <<
"-quadratic_sieve <int : n> <string : factor_base> <int : x0>" << endl;
258 else if (ST.
stringcmp(argv[i],
"-jacobi") == 0) {
259 cout <<
"-jacobi <int : top> <int : bottom>" << endl;
261 else if (ST.
stringcmp(argv[i],
"-solovay_strassen") == 0) {
262 cout <<
"-solovay_strassen <int : a> <int : p>" << endl;
264 else if (ST.
stringcmp(argv[i],
"-miller_rabin") == 0) {
265 cout <<
"-miller_rabin <int : p> <int : nb_times>" << endl;
267 else if (ST.
stringcmp(argv[i],
"-fermat_test") == 0) {
268 cout <<
"-fermat_test <int : p> <int : nb_times>" << endl;
270 else if (ST.
stringcmp(argv[i],
"-find_pseudoprime") == 0) {
271 cout <<
"-find_pseudoprime <int : nb_digits> <int : nb_fermat> <int : nb_miller_rabin> <int : nb_solovay_strassen>" << endl;
273 else if (ST.
stringcmp(argv[i],
"-find_strong_pseudoprime") == 0) {
274 cout <<
"-find_strong_pseudoprime <int : nb_digits> <int : nb_fermat> <int : nb_miller_rabin>" << endl;
276 else if (ST.
stringcmp(argv[i],
"-miller_rabin_text") == 0) {
277 cout <<
"-fermat_test <int : nb_times> <string : number>" << endl;
279 else if (ST.
stringcmp(argv[i],
"-random") == 0) {
280 cout <<
"-random <int : nb_times> <string : fname_csv>" << endl;
282 else if (ST.
stringcmp(argv[i],
"-random_last") == 0) {
283 cout <<
"-random_last <int : nb_times>" << endl;
285 else if (ST.
stringcmp(argv[i],
"-affine_sequence") == 0) {
286 cout <<
"-affine_sequence <int : a> <int : c> <int : m>" << endl;
292 int f_v = (verbose_level >= 1);
296 cout <<
"interface_cryptography::recognize_keyword" << endl;
301 if (ST.
stringcmp(argv[i],
"-cipher_substitution") == 0) {
304 else if (ST.
stringcmp(argv[i],
"-cipher_vigenere") == 0) {
307 else if (ST.
stringcmp(argv[i],
"-cipher_affine") == 0) {
310 else if (ST.
stringcmp(argv[i],
"-analyze_substitution") == 0) {
313 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere") == 0) {
316 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere_kasiski") == 0) {
319 else if (ST.
stringcmp(argv[i],
"-kasiski") == 0) {
322 else if (ST.
stringcmp(argv[i],
"-decipher_substitution") == 0) {
325 else if (ST.
stringcmp(argv[i],
"-decipher_vigenere") == 0) {
328 else if (ST.
stringcmp(argv[i],
"-decipher_affine") == 0) {
331 else if (ST.
stringcmp(argv[i],
"-RSA") == 0) {
334 else if (ST.
stringcmp(argv[i],
"-RSA_encrypt_text") == 0) {
337 else if (ST.
stringcmp(argv[i],
"-RSA_setup") == 0) {
340 else if (ST.
stringcmp(argv[i],
"-primitive_root") == 0) {
343 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root") == 0) {
346 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root_interval") == 0) {
349 else if (ST.
stringcmp(argv[i],
"-number_of_primitive_roots_interval") == 0) {
352 else if (ST.
stringcmp(argv[i],
"-inverse_mod") == 0) {
355 else if (ST.
stringcmp(argv[i],
"-extended_gcd") == 0) {
358 else if (ST.
stringcmp(argv[i],
"-power_mod") == 0) {
361 else if (ST.
stringcmp(argv[i],
"-discrete_log") == 0) {
364 else if (ST.
stringcmp(argv[i],
"-sift_smooth") == 0) {
367 else if (ST.
stringcmp(argv[i],
"-square_root") == 0) {
370 else if (ST.
stringcmp(argv[i],
"-square_root_mod") == 0) {
373 else if (ST.
stringcmp(argv[i],
"-all_square_roots_mod_n") == 0) {
376 else if (ST.
stringcmp(argv[i],
"-quadratic_sieve") == 0) {
379 else if (ST.
stringcmp(argv[i],
"-jacobi") == 0) {
382 else if (ST.
stringcmp(argv[i],
"-solovay_strassen") == 0) {
385 else if (ST.
stringcmp(argv[i],
"-miller_rabin") == 0) {
388 else if (ST.
stringcmp(argv[i],
"-fermat_test") == 0) {
391 else if (ST.
stringcmp(argv[i],
"-find_pseudoprime") == 0) {
394 else if (ST.
stringcmp(argv[i],
"-find_strong_pseudoprime") == 0) {
397 else if (ST.
stringcmp(argv[i],
"-miller_rabin_text") == 0) {
400 else if (ST.
stringcmp(argv[i],
"-random") == 0) {
403 else if (ST.
stringcmp(argv[i],
"-random_last") == 0) {
406 else if (ST.
stringcmp(argv[i],
"-affine_sequence") == 0) {
414 int f_v = (verbose_level >= 1);
418 cout <<
"interface_cryptography::read_arguments" << endl;
423 cout <<
"interface_cryptography::read_arguments the next argument is " << argv[i] << endl;
426 if (ST.
stringcmp(argv[i],
"-cipher_substitution") == 0) {
429 ptext.assign(argv[++i]);
431 cout <<
"-cipher_substitution " << ptext << endl;
434 else if (ST.
stringcmp(argv[i],
"-cipher_vigenere") == 0) {
437 ptext.assign(argv[++i]);
438 key.assign(argv[++i]);
440 cout <<
"-cipher_vigenere " << ptext << endl;
443 else if (ST.
stringcmp(argv[i],
"-cipher_affine") == 0) {
446 ptext.assign(argv[++i]);
447 affine_a = ST.
strtoi(argv[++i]);
448 affine_b = ST.
strtoi(argv[++i]);
450 cout <<
"-cipher_affine " << ptext << endl;
453 else if (ST.
stringcmp(argv[i],
"-analyze_substitution") == 0) {
456 ctext.assign(argv[++i]);
458 cout <<
"-analyze_substitution " << ctext << endl;
461 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere") == 0) {
464 ctext.assign(argv[++i]);
466 cout <<
"-analyze_vigenere " << ctext << endl;
469 else if (ST.
stringcmp(argv[i],
"-analyze_vigenere_kasiski") == 0) {
471 ctext.assign(argv[++i]);
472 key_length = ST.
strtoi(argv[++i]);
474 cout <<
"-analyze_vigenere_kasiski " << ctext << endl;
477 else if (ST.
stringcmp(argv[i],
"-kasiski") == 0) {
479 ctext.assign(argv[++i]);
480 threshold = ST.
strtoi(argv[++i]);
482 cout <<
"-kasiski " << ctext << endl;
485 else if (ST.
stringcmp(argv[i],
"-decipher_substitution") == 0) {
488 ctext.assign(argv[++i]);
489 guess.assign(argv[++i]);
491 cout <<
"-decipher_substitution " << ctext <<
" " << guess << endl;
494 else if (ST.
stringcmp(argv[i],
"-decipher_vigenere") == 0) {
497 ctext.assign(argv[++i]);
498 key.assign(argv[++i]);
500 else if (ST.
stringcmp(argv[i],
"-decipher_affine") == 0) {
503 ctext.assign(argv[++i]);
504 guess.assign(argv[++i]);
506 else if (ST.
stringcmp(argv[i],
"-RSA") == 0) {
508 RSA_d = ST.
strtoi(argv[++i]);
509 RSA_m = ST.
strtoi(argv[++i]);
510 RSA_block_size = ST.
strtoi(argv[++i]);
511 RSA_text.assign(argv[++i]);
513 cout <<
"-RSA " << RSA_d <<
" " << RSA_m <<
" " << RSA_block_size <<
" " << RSA_text << endl;
516 else if (ST.
stringcmp(argv[i],
"-RSA_encrypt_text") == 0) {
517 f_RSA_encrypt_text =
TRUE;
518 RSA_d = ST.
strtoi(argv[++i]);
519 RSA_m = ST.
strtoi(argv[++i]);
520 RSA_block_size = ST.
strtoi(argv[++i]);
521 RSA_encrypt_text.assign(argv[++i]);
523 cout <<
"-RSA_encrypt_text " << RSA_d <<
" "
524 << RSA_m <<
" " << RSA_block_size <<
" " << RSA_encrypt_text << endl;
527 else if (ST.
stringcmp(argv[i],
"-RSA_setup") == 0) {
529 RSA_setup_nb_bits = ST.
strtoi(argv[++i]);
530 RSA_setup_nb_tests_solovay_strassen = ST.
strtoi(argv[++i]);
531 RSA_setup_f_miller_rabin_test = ST.
strtoi(argv[++i]);
533 cout <<
"-RSA_setup " << RSA_setup_nb_bits <<
" "
534 << RSA_setup_nb_tests_solovay_strassen <<
" "
535 << RSA_setup_f_miller_rabin_test << endl;
538 else if (ST.
stringcmp(argv[i],
"-primitive_root") == 0) {
539 f_primitive_root =
TRUE;
540 primitive_root_p.assign(argv[++i]);
542 cout <<
"-primitive_root " << primitive_root_p << endl;
545 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root") == 0) {
546 f_smallest_primitive_root =
TRUE;
547 smallest_primitive_root_p = ST.
strtoi(argv[++i]);
549 cout <<
"-smallest_primitive_root " << smallest_primitive_root_p << endl;
552 else if (ST.
stringcmp(argv[i],
"-smallest_primitive_root_interval") == 0) {
553 f_smallest_primitive_root_interval =
TRUE;
554 smallest_primitive_root_interval_min = ST.
strtoi(argv[++i]);
555 smallest_primitive_root_interval_max = ST.
strtoi(argv[++i]);
557 cout <<
"-smallest_primitive_root_interval " << smallest_primitive_root_interval_min
558 <<
" " << smallest_primitive_root_interval_max << endl;
561 else if (ST.
stringcmp(argv[i],
"-number_of_primitive_roots_interval") == 0) {
562 f_number_of_primitive_roots_interval =
TRUE;
563 smallest_primitive_root_interval_min = ST.
strtoi(argv[++i]);
564 smallest_primitive_root_interval_max = ST.
strtoi(argv[++i]);
566 cout <<
"-number_of_primitive_roots_interval " << smallest_primitive_root_interval_min
567 <<
" " << smallest_primitive_root_interval_max << endl;
570 else if (ST.
stringcmp(argv[i],
"-inverse_mod") == 0) {
571 f_inverse_mod =
TRUE;
572 inverse_mod_a = ST.
strtoi(argv[++i]);
573 inverse_mod_n = ST.
strtoi(argv[++i]);
575 cout <<
"-inverse_mod " << inverse_mod_a <<
" " << inverse_mod_n << endl;
578 else if (ST.
stringcmp(argv[i],
"-extended_gcd") == 0) {
579 f_extended_gcd =
TRUE;
580 extended_gcd_a = ST.
strtoi(argv[++i]);
581 extended_gcd_b = ST.
strtoi(argv[++i]);
583 cout <<
"-extended_gcd " << extended_gcd_a <<
" " << extended_gcd_b << endl;
586 else if (ST.
stringcmp(argv[i],
"-power_mod") == 0) {
588 power_mod_a.assign(argv[++i]);
589 power_mod_k.assign(argv[++i]);
590 power_mod_n.assign(argv[++i]);
592 cout <<
"-power_mod " << power_mod_a <<
" " << power_mod_k <<
" " << power_mod_n << endl;
595 else if (ST.
stringcmp(argv[i],
"-discrete_log") == 0) {
596 f_discrete_log =
TRUE;
597 discrete_log_y = ST.
strtoi(argv[++i]);
598 discrete_log_a = ST.
strtoi(argv[++i]);
599 discrete_log_m = ST.
strtoi(argv[++i]);
601 cout <<
"-discrete_log " << discrete_log_y <<
" "
602 << discrete_log_a <<
" " << discrete_log_m << endl;
605 else if (ST.
stringcmp(argv[i],
"-sift_smooth") == 0) {
606 f_sift_smooth =
TRUE;
607 sift_smooth_from = ST.
strtoi(argv[++i]);
608 sift_smooth_len = ST.
strtoi(argv[++i]);
609 sift_smooth_factor_base = argv[++i];
611 cout <<
"-sift_smooth " << sift_smooth_from <<
" "
612 << sift_smooth_len <<
" " << sift_smooth_factor_base << endl;
615 else if (ST.
stringcmp(argv[i],
"-square_root") == 0) {
616 f_square_root =
TRUE;
617 square_root_number.assign(argv[++i]);
619 cout <<
"-square_root " << square_root_number << endl;
622 else if (ST.
stringcmp(argv[i],
"-square_root_mod") == 0) {
623 f_square_root_mod =
TRUE;
624 square_root_mod_a.assign(argv[++i]);
625 square_root_mod_m.assign(argv[++i]);
627 cout <<
"-square_root_mod " << square_root_mod_a <<
" "
628 << square_root_mod_m << endl;
631 else if (ST.
stringcmp(argv[i],
"-all_square_roots_mod_n") == 0) {
632 f_all_square_roots_mod_n =
TRUE;
633 all_square_roots_mod_n_a.assign(argv[++i]);
634 all_square_roots_mod_n_n.assign(argv[++i]);
636 cout <<
"-all_square_roots_mod_n " << all_square_roots_mod_n_a <<
" "
637 << all_square_roots_mod_n_n << endl;
640 else if (ST.
stringcmp(argv[i],
"-quadratic_sieve") == 0) {
641 f_quadratic_sieve =
TRUE;
642 quadratic_sieve_n = ST.
strtoi(argv[++i]);
643 quadratic_sieve_factorbase = ST.
strtoi(argv[++i]);
644 quadratic_sieve_x0 = ST.
strtoi(argv[++i]);
646 cout <<
"-quadratic_sieve " << quadratic_sieve_n <<
" "
647 << quadratic_sieve_factorbase <<
" " << quadratic_sieve_x0 << endl;
650 else if (ST.
stringcmp(argv[i],
"-jacobi") == 0) {
652 jacobi_top = ST.
strtoi(argv[++i]);
653 jacobi_bottom = ST.
strtoi(argv[++i]);
655 cout <<
"-jacobi " << jacobi_top <<
" "
656 << jacobi_bottom << endl;
659 else if (ST.
stringcmp(argv[i],
"-solovay_strassen") == 0) {
660 f_solovay_strassen =
TRUE;
661 solovay_strassen_p = ST.
strtoi(argv[++i]);
662 solovay_strassen_a = ST.
strtoi(argv[++i]);
664 cout <<
"-solovay_strassen " << solovay_strassen_p <<
" "
665 << solovay_strassen_a << endl;
668 else if (ST.
stringcmp(argv[i],
"-miller_rabin") == 0) {
669 f_miller_rabin =
TRUE;
670 miller_rabin_p = ST.
strtoi(argv[++i]);
671 miller_rabin_nb_times = ST.
strtoi(argv[++i]);
673 cout <<
"-miller_rabin " << miller_rabin_p <<
" " << miller_rabin_nb_times << endl;
676 else if (ST.
stringcmp(argv[i],
"-fermat_test") == 0) {
677 f_fermat_test =
TRUE;
678 fermat_test_p = ST.
strtoi(argv[++i]);
679 fermat_test_nb_times = ST.
strtoi(argv[++i]);
681 cout <<
"-fermat_test " << fermat_test_p <<
" " << fermat_test_nb_times << endl;
684 else if (ST.
stringcmp(argv[i],
"-find_pseudoprime") == 0) {
685 f_find_pseudoprime =
TRUE;
686 find_pseudoprime_nb_digits = ST.
strtoi(argv[++i]);
687 find_pseudoprime_nb_fermat = ST.
strtoi(argv[++i]);
688 find_pseudoprime_nb_miller_rabin = ST.
strtoi(argv[++i]);
689 find_pseudoprime_nb_solovay_strassen = ST.
strtoi(argv[++i]);
691 cout <<
"-find_pseudoprime " << find_pseudoprime_nb_digits
692 <<
" " << find_pseudoprime_nb_fermat
693 <<
" " << find_pseudoprime_nb_miller_rabin
694 <<
" " << find_pseudoprime_nb_solovay_strassen << endl;
697 else if (ST.
stringcmp(argv[i],
"-find_strong_pseudoprime") == 0) {
698 f_find_strong_pseudoprime =
TRUE;
699 find_pseudoprime_nb_digits = ST.
strtoi(argv[++i]);
700 find_pseudoprime_nb_fermat = ST.
strtoi(argv[++i]);
701 find_pseudoprime_nb_miller_rabin = ST.
strtoi(argv[++i]);
703 cout <<
"-find_strong_pseudoprime " << find_pseudoprime_nb_digits
704 <<
" " << find_pseudoprime_nb_fermat
705 <<
" " << find_pseudoprime_nb_miller_rabin
709 else if (ST.
stringcmp(argv[i],
"-miller_rabin_text") == 0) {
710 f_miller_rabin_text =
TRUE;
711 miller_rabin_text_nb_times = ST.
strtoi(argv[++i]);
712 miller_rabin_number_text.assign(argv[++i]);
714 cout <<
"-miller_rabin " << miller_rabin_text_nb_times
715 <<
" " << miller_rabin_number_text
719 else if (ST.
stringcmp(argv[i],
"-random") == 0) {
721 random_nb = ST.
strtoi(argv[++i]);
722 random_fname_csv.assign(argv[++i]);
724 cout <<
"-random " << random_nb <<
" " << random_fname_csv << endl;
727 else if (ST.
stringcmp(argv[i],
"-random_last") == 0) {
728 f_random_last =
TRUE;
729 random_last_nb = ST.
strtoi(argv[++i]);
731 cout <<
"-random_last " << random_last_nb << endl;
734 else if (ST.
stringcmp(argv[i],
"-affine_sequence") == 0) {
735 f_affine_sequence =
TRUE;
736 affine_sequence_a = ST.
strtoi(argv[++i]);
737 affine_sequence_c = ST.
strtoi(argv[++i]);
738 affine_sequence_m = ST.
strtoi(argv[++i]);
740 cout <<
"-affine_sequence " << affine_sequence_a
741 <<
" " << affine_sequence_c <<
" " << affine_sequence_m << endl;
745 cout <<
"interface_cryptography::read_arguments done" << endl;
752 cout <<
"-cipher_substitution " << ptext << endl;
755 cout <<
"cipher_vigenere" << ptext <<
" " << key << endl;
757 if (f_cipher && t ==
affine) {
758 cout <<
"-cipher_affine " << ptext <<
" " << affine_a <<
" " << affine_b << endl;
761 cout <<
"-analyze_substitution " << ctext << endl;
764 cout <<
"-analyze_vigenere " << ctext << endl;
767 cout <<
"-analyze_vigenere_kasiski " << ctext <<
" " << key_length << endl;
770 cout <<
"-kasiski " << ctext <<
" " << threshold << endl;
773 cout <<
"-decipher_substitution " << ctext <<
" " << guess << endl;
776 cout <<
"-decipher_vigenere " << ctext <<
" " << key << endl;
778 if (f_decipher && t ==
affine) {
779 cout <<
"-decipher_affine " << ctext <<
" " << guess << endl;
782 cout <<
"-RSA " << RSA_d <<
" " << RSA_m <<
" " << RSA_block_size <<
" " << RSA_text << endl;
784 if (f_RSA_encrypt_text) {
785 cout <<
"-RSA_encrypt_text " << RSA_d <<
" "
786 << RSA_m <<
" " << RSA_block_size <<
" " << RSA_encrypt_text << endl;
789 cout <<
"-RSA_setup " << RSA_setup_nb_bits <<
" "
790 << RSA_setup_nb_tests_solovay_strassen <<
" "
791 << RSA_setup_f_miller_rabin_test << endl;
793 if (f_primitive_root) {
794 cout <<
"-primitive_root " << primitive_root_p << endl;
796 if (f_smallest_primitive_root) {
797 cout <<
"-smallest_primitive_root " << smallest_primitive_root_p << endl;
799 if (f_smallest_primitive_root_interval) {
800 cout <<
"-smallest_primitive_root_interval " << smallest_primitive_root_interval_min
801 <<
" " << smallest_primitive_root_interval_max << endl;
803 if (f_number_of_primitive_roots_interval) {
804 cout <<
"-number_of_primitive_roots_interval " << smallest_primitive_root_interval_min
805 <<
" " << smallest_primitive_root_interval_max << endl;
808 cout <<
"-inverse_mod " << inverse_mod_a <<
" " << inverse_mod_n << endl;
810 if (f_extended_gcd) {
811 cout <<
"-extended_gcd " << extended_gcd_a <<
" " << extended_gcd_b << endl;
814 cout <<
"-power_mod " << power_mod_a <<
" " << power_mod_k <<
" " << power_mod_n << endl;
816 if (f_discrete_log) {
817 cout <<
"-discrete_log " << discrete_log_y <<
" "
818 << discrete_log_a <<
" " << discrete_log_m << endl;
821 cout <<
"-sift_smooth " << sift_smooth_from <<
" "
822 << sift_smooth_len <<
" " << sift_smooth_factor_base << endl;
825 cout <<
"-square_root " << square_root_number << endl;
827 if (f_square_root_mod) {
828 cout <<
"-square_root_mod " << square_root_mod_a <<
" "
829 << square_root_mod_m << endl;
831 if (f_all_square_roots_mod_n) {
832 cout <<
"-all_square_roots_mod_n " << all_square_roots_mod_n_a <<
" "
833 << all_square_roots_mod_n_n << endl;
835 if (f_quadratic_sieve) {
836 cout <<
"-quadratic_sieve " << quadratic_sieve_n <<
" "
837 << quadratic_sieve_factorbase <<
" " << quadratic_sieve_x0 << endl;
840 cout <<
"-jacobi " << jacobi_top <<
" "
841 << jacobi_bottom << endl;
843 if (f_solovay_strassen) {
844 cout <<
"-solovay_strassen " << solovay_strassen_p <<
" "
845 << solovay_strassen_a << endl;
847 if (f_miller_rabin) {
848 cout <<
"-miller_rabin " << miller_rabin_p <<
" " << miller_rabin_nb_times << endl;
851 cout <<
"-fermat_test " << fermat_test_p <<
" " << fermat_test_nb_times << endl;
853 if (f_find_pseudoprime) {
854 cout <<
"-find_pseudoprime " << find_pseudoprime_nb_digits
855 <<
" " << find_pseudoprime_nb_fermat
856 <<
" " << find_pseudoprime_nb_miller_rabin
857 <<
" " << find_pseudoprime_nb_solovay_strassen << endl;
859 if (f_find_strong_pseudoprime) {
860 cout <<
"-find_strong_pseudoprime " << find_pseudoprime_nb_digits
861 <<
" " << find_pseudoprime_nb_fermat
862 <<
" " << find_pseudoprime_nb_miller_rabin
865 if (f_miller_rabin_text) {
866 cout <<
"-miller_rabin " << miller_rabin_text_nb_times
867 <<
" " << miller_rabin_number_text
871 cout <<
"-random " << random_nb <<
" " << random_fname_csv << endl;
874 cout <<
"-random_last " << random_last_nb << endl;
876 if (f_affine_sequence) {
877 cout <<
"-affine_sequence " << affine_sequence_a
878 <<
" " << affine_sequence_c <<
" " << affine_sequence_m << endl;
890 cout <<
"ptext: " << ptext << endl;
892 cout <<
"ctext: " << ctext << endl;
895 cout <<
"vigenere cipher with key " << key << endl;
896 cout <<
"ptext: " << ptext << endl;
898 cout <<
"ctext: " << ctext << endl;
901 cout <<
"affine cipher with key (" << affine_a <<
"," << affine_b <<
")" << endl;
902 cout <<
"ptext: " << ptext << endl;
904 cout <<
"ctext: " << ctext << endl;
907 else if (f_analyze) {
912 cout <<
"ctext: " << endl << ctext << endl;
916 cout <<
"ctext: " << endl << ctext << endl;
926 else if (f_kasiski) {
933 cout <<
"kasiski test for threshold " << threshold
934 <<
" yields key length " << m << endl;
936 else if (f_decipher) {
941 cout <<
"ctext: " << ctext << endl;
942 cout <<
"guess: " << guess << endl;
943 Crypto.
decipher(ctext, ptext, guess);
949 cout <<
"ctext: " << ctext << endl;
950 cout <<
"key : " << key << endl;
957 cout <<
"affine cipher" << endl;
958 cout <<
"ctext: " << ctext << endl;
959 cout <<
"guess: " << guess << endl;
965 else if (f_discrete_log) {
970 Crypto.
do_discrete_log(discrete_log_y, discrete_log_a, discrete_log_m, verbose_level);
972 else if (f_primitive_root) {
982 else if (f_smallest_primitive_root) {
988 else if (f_smallest_primitive_root_interval) {
993 smallest_primitive_root_interval_max, verbose_level);
995 else if (f_number_of_primitive_roots_interval) {
1000 smallest_primitive_root_interval_max, verbose_level);
1002 else if (f_inverse_mod) {
1006 Crypto.
do_inverse_mod(inverse_mod_a, inverse_mod_n, verbose_level);
1008 else if (f_extended_gcd) {
1012 Crypto.
do_extended_gcd(extended_gcd_a, extended_gcd_b, verbose_level);
1014 else if (f_power_mod) {
1032 Crypto.
do_RSA(RSA_d, RSA_m, RSA_block_size, RSA_text, verbose_level);
1034 else if (f_RSA_encrypt_text) {
1039 RSA_encrypt_text, verbose_level);
1041 else if (f_RSA_setup) {
1047 RSA_setup_nb_tests_solovay_strassen,
1048 RSA_setup_f_miller_rabin_test,
1051 else if (f_sift_smooth) {
1057 sift_smooth_factor_base, verbose_level);
1059 else if (f_square_root) {
1063 Crypto.
square_root(square_root_number, verbose_level);
1065 else if (f_square_root_mod) {
1069 Crypto.
square_root_mod(square_root_mod_a, square_root_mod_m, verbose_level);
1072 else if (f_all_square_roots_mod_n) {
1079 all_square_roots_mod_n_a, all_square_roots_mod_n_n, S, verbose_level);
1081 cout <<
"We found " << S.size() <<
" square roots of "
1082 << all_square_roots_mod_n_a <<
" mod " << all_square_roots_mod_n_n << endl;
1083 cout <<
"They are:" << endl;
1084 for (i = 0; i < S.size(); i++) {
1085 cout << i <<
" : " << S[i] << endl;
1090 else if (f_quadratic_sieve) {
1095 quadratic_sieve_factorbase,
1099 else if (f_jacobi) {
1103 Crypto.
do_jacobi(jacobi_top, jacobi_bottom, verbose_level);
1105 else if (f_solovay_strassen) {
1111 else if (f_miller_rabin) {
1115 Crypto.
do_miller_rabin(miller_rabin_p, miller_rabin_nb_times, verbose_level);
1117 else if (f_fermat_test) {
1121 Crypto.
do_fermat_test(fermat_test_p, fermat_test_nb_times, verbose_level);
1123 else if (f_find_pseudoprime) {
1128 find_pseudoprime_nb_digits,
1129 find_pseudoprime_nb_fermat,
1130 find_pseudoprime_nb_miller_rabin,
1131 find_pseudoprime_nb_solovay_strassen,
1134 else if (f_find_strong_pseudoprime) {
1139 find_pseudoprime_nb_digits,
1140 find_pseudoprime_nb_fermat,
1141 find_pseudoprime_nb_miller_rabin,
1144 else if (f_miller_rabin_text) {
1149 miller_rabin_number_text, miller_rabin_text_nb_times,
1152 else if (f_random) {
1157 random_nb, random_fname_csv,
1160 else if (f_random_last) {
1168 else if (f_affine_sequence) {
1173 affine_sequence_c, affine_sequence_m, verbose_level);
a collection of functions related to cryptography
void do_miller_rabin_text(std::string &number_text, int nb_miller_rabin, int verbose_level)
void print_on_top(std::string &text1, std::string &text2)
void do_jacobi(int jacobi_top, int jacobi_bottom, int verbose_level)
void vigenere_cipher(std::string &ptext, std::string &ctext, std::string &key)
int kasiski_test(std::string &ctext, int threshold)
void do_sift_smooth(int sift_smooth_from, int sift_smooth_len, std::string &sift_smooth_factor_base, int verbose_level)
void do_find_strong_pseudoprime(int nb_digits, int nb_fermat, int nb_miller_rabin, int verbose_level)
void do_discrete_log(long int y, long int a, long int p, int verbose_level)
void do_fermat_test(int p, int nb_times, int verbose_level)
void make_affine_sequence(int a, int c, int m, int verbose_level)
void do_random_last(int random_nb, int verbose_level)
void all_square_roots_mod_n_by_exhaustive_search_lint(std::string &square_root_a, std::string &square_root_mod_n, std::vector< long int > &S, int verbose_level)
void do_RSA(long int RSA_d, long int RSA_m, int RSA_block_size, std::string &RSA_text, int verbose_level)
void decipher(std::string &ctext, std::string &ptext, std::string &guess)
void do_random(int random_nb, std::string &fname_csv, int verbose_level)
void do_power_mod(ring_theory::longinteger_object &a, ring_theory::longinteger_object &k, ring_theory::longinteger_object &n, int verbose_level)
void get_random_permutation(std::string &p)
void substition_cipher(std::string &ptext, std::string &ctext, std::string &key)
void RSA_setup(ring_theory::longinteger_object &n, ring_theory::longinteger_object &p, ring_theory::longinteger_object &q, ring_theory::longinteger_object &a, ring_theory::longinteger_object &b, int nb_bits, int nb_tests_solovay_strassen, int f_miller_rabin_test, int verbose_level)
void affine_cipher(std::string &ptext, std::string &ctext, int a, int b)
void vigenere_analysis(std::string &ctext)
void do_miller_rabin(int p, int nb_times, int verbose_level)
void do_number_of_primitive_roots_interval(long int p_min, long int p_max, int verbose_level)
void do_inverse_mod(long int a, long int n, int verbose_level)
void do_extended_gcd(int a, int b, int verbose_level)
void do_RSA_encrypt_text(long int RSA_d, long int RSA_m, int RSA_block_size, std::string &RSA_encrypt_text, int verbose_level)
void square_root(std::string &square_root_number, int verbose_level)
void affine_decipher(std::string &ctext, std::string &ptext, std::string &guess)
void do_solovay_strassen(int p, int a, int verbose_level)
void square_root_mod(std::string &square_root_number, std::string &mod_number, int verbose_level)
void analyze(std::string &text)
void vigenere_analysis2(std::string &ctext, int key_length)
void vigenere_decipher(std::string &ctext, std::string &ptext, std::string &key)
void do_smallest_primitive_root(long int p, int verbose_level)
void do_primitive_root_longinteger(ring_theory::longinteger_object &p, int verbose_level)
void do_smallest_primitive_root_interval(long int p_min, long int p_max, int verbose_level)
void quadratic_sieve(int n, int factorbase, int x0, int verbose_level)
void do_find_pseudoprime(int nb_digits, int nb_fermat, int nb_miller_rabin, int nb_solovay_strassen, int verbose_level)
a class to represent arbitrary precision integers
void create_from_base_10_string(const char *str, int verbose_level)
void read_arguments(int argc, std::string *argv, int &i, int verbose_level)
int recognize_keyword(int argc, std::string *argv, int i, int verbose_level)
void print_help(int argc, std::string *argv, int i, int verbose_level)
void worker(int verbose_level)
the orbiter library for the classification of combinatorial objects