cryptocol 0.12.0

A cryptographic library that includes big number arithmatic operation, hash algorithms, symmetric-key cryptographic encryption/decryption algorithms, asymmetric-key (public-key) cryptographic encryption/decryption algorithms, pseudo random number generators, etc. Hash algorithms includes MD4, MD5, SHA224, SHA256, SHA384, SHA512, SHA3, etc. Symmetric key encryption algorithms include DES, AES, etc. Public key encryption algrorithms include RSA, ECC, etc.
Documentation
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
# Breaking Changes

## Breaking changes from ver. 0.11.5 to ver. 0.11.6

| Methods                                                                                  |
|------------------------------------------------------------------------------------------|
| fn panic_free_divide_fully_uint<U\>(&self, rhs: U) -> (Self, Self)                       |
| fn panic_free_div_uint<U\>(&self, rhs: U) -> Self                                        |
| fn panic_free_div_assign_uint<U\>(&mut self, rhs: U)                                     |
| fn panic_free_modular_div_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn panic_free_modular_div_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn panic_free_rem_uint<U\>(&self, rhs: U) -> Self                                        |
| fn panic_free_rem_assign_uint<U\>(&mut self, rhs: U)                                     |
| fn panic_free_modular_rem_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn panic_free_modular_rem_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn panic_free_pow_uint<U\>(&self, exp: U) -> Self                                        |
| fn panic_free_pow_assign_uint<U\>(&mut self, exp: U)                                     |
| fn panic_free_modular_pow_uint<U\>(&self, exp: U, modulo: &Self) -> Self                 |
| fn panic_free_modular_pow_assign_uint<U\>(&mut self, exp: U, modulo: &Self)              |
| fn panic_free_iroot_uint<U\>(&self, exp: U) -> Self                                      |
| fn panic_free_iroot_assign_uint<U\>(&mut self, exp: U)                                   |
| fn panic_free_ilog_uint<U\>(&self, base: U) -> Self                                      |
| fn panic_free_ilog_assign_uint<U\>(&mut self, base: U)                                   |
| fn panic_free_gcd_uint<U\>(&self, other: U) -> Self                                      |
| fn panic_free_gcd_assign_uint<U\>(&mut self, other: U)                                   |
| fn panic_free_lcm_uint<U\>(&self, other: U) -> Self                                      |
| fn panic_free_lcm_assign_uint<U\>(&mut self, other: U)                                   |
| fn panic_free_modular_add(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_add_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn panic_free_modular_sub(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_sub_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn panic_free_modular_mul(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_mul_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn panic_free_divide_fully(&self, rhs: &Self) -> (Self, Self)                            |
| fn panic_free_div(&self, rhs: &Self) -> Self                                             |
| fn panic_free_div_assign(&mut self, rhs: &Self)                                          |
| fn panic_free_modular_div(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_div_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn panic_free_rem(&self, rhs: &Self) -> Self                                             |
| fn panic_free_rem_assign(&mut self, rhs: &Self)                                          |
| fn panic_free_modular_rem(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_rem_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn panic_free_pow(&self, exp: &Self) -> Self                                             |
| fn panic_free_pow_assign(&mut self, exp: &Self)                                          |
| fn panic_free_modular_pow(&self, exp: &Self, modulo: &Self) -> Self                      |
| fn panic_free_modular_pow_assign(&mut self, exp: &Self, modulo: &Self)                   |
| fn panic_free_iroot(&self, exp: &Self) -> Self                                           |
| fn panic_free_iroot_assign(&mut self, exp: &Self)                                        |
| fn panic_free_ilog(&self, base: &Self) -> Self                                           |
| fn panic_free_ilog_assign(&mut self, base: &Self)                                        |
| fn panic_free_ilog2(&self) -> Self                                                       |
| fn panic_free_ilog2_assign(&mut self)                                                    |
| fn panic_free_ilog10(&self) -> Self                                                      |
| fn panic_free_ilog10_assign(&mut self)                                                   |
| fn panic_free_gcd(&self, other: &Self) -> Self                                           |
| fn panic_free_gcd_assign(&mut self, other: &Self)                                        |
| fn panic_free_lcm(&self, other: &Self) -> Self                                           |
| fn panic_free_lcm_assign(&mut self, other: &Self)                                        |
| fn panic_free_next_multiple_of_uint<U\>(&self, rhs: U) -> Self                           |
| fn panic_free_next_multiple_of_assign_uint<U\>(&mut self, rhs: U)                        |
| fn panic_free_modular_next_multiple_of_uint<U\>(&self, rhs: U, modulo: &Self) -> Self    |
| fn panic_free_modular_next_multiple_of_assign_uint<U\>(&mut self, rhs: U, modulo: &Self) |
| fn panic_free_next_multiple_of(&self, rhs: &Self) -> Self                                |
| fn panic_free_next_multiple_of_assign(&mut self, rhs: &Self)                             |
| fn panic_free_modular_next_multiple_of(&self, rhs: &Self, modulo: &Self) -> Self         |
| fn panic_free_modular_next_multiple_of_assign(&mut self, rhs: &Self, modulo: &Self)      |

- The methods above have been moved from struct BigUInt or trait BigUInt_More to trait BigUInt_Panic_Free because docs.rs failed in generating struct.bigUInt.html.

| Methods                                                                       |
|-------------------------------------------------------------------------------|
| fn modular_add_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn modular_add_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn modular_sub_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn modular_sub_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn modular_mul_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn modular_mul_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn modular_div_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn modular_div_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn modular_rem_uint<U\>(&self, rhs: U, modulo: &Self) -> Self                 |
| fn modular_rem_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)              |
| fn modular_pow_uint<U\>(&self, exp: U, modulo: &Self) -> Self                 |
| fn modular_pow_assign_uint<U\>(&mut self, exp: U, modulo: &Self)              |
| fn modular_add(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn modular_add_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn modular_sub(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn modular_sub_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn modular_mul(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn modular_mul_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn modular_div(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn modular_div_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn modular_rem(&self, rhs: &Self, modulo: &Self) -> Self                      |
| fn modular_rem_assign(&mut self, rhs: &Self, modulo: &Self)                   |
| fn modular_pow(&self, exp: &Self, modulo: &Self) -> Self                      |
| fn modular_pow_assign(&mut self, exp: &Self, modulo: &Self)                   |
| fn modular_next_multiple_of_uint<U\>(&self, rhs: U, modulo: &Self) -> Self    |
| fn modular_next_multiple_of_assign_uint<U\>(&mut self, rhs: U, modulo: &Self) |
| fn modular_next_multiple_of(&self, rhs: &Self, modulo: &Self) -> Self         |
| fn modular_next_multiple_of_assign(&mut self, rhs: &Self, modulo: &Self)      |

- The methods above have been moved from struct BigUInt or trait BigUInt_More to trait BigUInt_Modular because docs.rs failed in generating struct.bigUInt.html.

| Methods                                                                       |
|-------------------------------------------------------------------------------|
| fn gcd_uint<U\>(&self, other: U) -> Self                                      |
| fn gcd_assign_uint<U\>(&mut self, other: U)                                   |
| fn lcm_uint<U\>(&self, other: U) -> Self                                      |
| fn lcm_assign_uint<U\>(&mut self, other: U)                                   |
| fn gcd(&self, other: &Self) -> Self                                           |
| fn gcd_assign(&mut self, other: &Self)                                        |
| fn lcm(&self, other: &Self) -> Self                                           |
| fn lcm_assign(&mut self, other: &Self)                                        |
| fn is_prime_using_miller_rabin(&self, repetition: usize) -> bool              |

- The methods above have been moved from struct BigUInt to trait BigUInt_Prime because docs.rs failed in generating struct.bigUInt.html.


## Breaking changes from ver. 0.11.2 to ver. 0.11.3

### Contant BYTES in trait SmallUInt

| Ver. 0.11.2        | Ver. 0.11.3     |
|--------------------|-----------------|
| const BYTES: usize | const BITS: u32 |

- The constant SmallUInt::BYTES has been renamed to SmallUInt::BITS, and its datatype has also been changed from `usize` to `u32` for consistancy with the primitive datatyes such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.

### Four methods in BigUInt

| Ver. 0.11.2                                                | Ver. 0.11.3                                              |
|------------------------------------------------------------|----------------------------------------------------------|
| pub fn submax(size_in_bits: usize) -> Self                 | pub fn submax(size_in_bits: u32) -> Self                 |
| pub const fn size_in_bytes() -> usize                      | pub const fn size_in_bytes() -> u32                      |
| pub const fn size_in_bits() -> usize                       | pub const fn size_in_bits() -> u32                       |
| pub fn length_in_bytes(&self) -> usize                     | pub fn length_in_bytes(&self) -> u32                     |
| pub fn length_in_bits(&self) -> usize                      | pub fn length_in_bits(&self) -> u32                      |
| pub fn set_submax(&mut self, size_in_bits: usize)          | pub fn set_submax(&mut self, size_in_bits: u32)          |
| pub fn is_bit_set(self, bit_pos: usize) -> Option<bool>    | pub fn is_bit_set(self, bit_pos: u32) -> Option<bool>    |
| pub fn is_bit_set_(self, bit_pos: usize) -> bool           | pub fn is_bit_set_(self, bit_pos: u32) -> bool           |
| pub fn generate_check_bits(bit_pos: usize) -> Option<Self> | pub fn generate_check_bits(bit_pos: u32) -> Option<Self> |
| pub fn generate_check_bits_(bit_pos: usize) -> Self        | pub fn generate_check_bits_(bit_pos: u32) -> Self        |
| pub fn get_lower_portion(portion: usize) -> Self           | pub fn get_lower_portion(portion: u32) -> Self           |
| 

- The return types and the arguments of the above methods has been changed from `usize` to `u32` for consistancy with the primitive datatyes such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.

### Four methods in SmallUInt

| Ver. 0.11.2                                            | Ver. 0.11.3                                          |
|--------------------------------------------------------|------------------------------------------------------|
| fn size_in_bytes() -> usize                            | fn size_in_bytes() -> u32                            |
| fn size_in_bits() -> usize                             | fn size_in_bits() -> u32                             |
| fn length_in_bytes(&self) -> usize                     | fn length_in_bytes(&self) -> u32                     |
| fn length_in_bits(&self) -> usize                      | fn length_in_bits(&self) -> u32                      |
| fn set_submax(&mut self, size_in_bits: usize)          | fn set_submax(&mut self, size_in_bits: u32)          |
| fn is_bit_set(self, bit_pos: usize) -> Option<bool>    | fn is_bit_set(self, bit_pos: u32) -> Option<bool>    |
| fn is_bit_set_(self, bit_pos: usize) -> bool           | fn is_bit_set_(self, bit_pos: u32) -> bool           |
| fn generate_check_bits(bit_pos: usize) -> Option<Self> | fn generate_check_bits(bit_pos: u32) -> Option<Self> |
| fn generate_check_bits_(bit_pos: usize) -> Self        | fn generate_check_bits_(bit_pos: u32) -> Self        |

- The return types and the arguments of the above methods has been changed from `usize` to `u32` for consistancy with the primitive datatyes such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.

### methods in SHA_2_512_Generic and SHA_2_512_t_Generic

| Ver. 0.11.2                                                                                                     | Ver. 0.11.3                                                                    |
|-----------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------|
| pub fn digest(&mut self, message: *const u8, length_in_bytes: u128)                                             | pub fn digest(&mut self, message: *const u8, length_in_bytes: u64)             |
| pub fn ruminate(&mut self, n: usize, message: *const u8, length_in_bytes: u128)                                 | pub fn ruminate(&mut self, n: usize, message: *const u8, length_in_bytes: u64) |
| pub fn digest_c(&mut self, message: *const u8, length_in_bytes_low: u64, length_in_bytes_high: u64)             | removed                                                                        |
| pub fn ruminate_c(&mut self, n: usize, message: *const u8, length_in_bytes_low: u64, length_in_bytes_high: u64) | removed                                                                        |

- The arguments of the above method has been changed from `u128` to `u64` for consistancy with the methods digest() of other hash modules.

## Breaking changes from ver. 0.10.1 to ver. 0.10.2

| Methods                                       |
|-----------------------------------------------|
| pub fn encrypt_with_padding_*(..) -> u64      |
| pub fn encrypt\_\*\_with_padding_*(..) -> u64 |
| pub fn decrypt_with_padding_*(..) -> u64      |
| pub fn decrypt\_\*\_with_padding_*(..) -> u64 |

- The methods above have been moved from struct DES_Generic to implementation of the traits ECB_PKCS7, ECB_ISO, CBC_PKCS7, CBC_ISO, PCBC_PKCS7, PCBC_ISO, CFB, OFB, and CTR.

## Breaking changes from ver. 0.9.3 to ver. 0.9.4

| Methods                                                                                  |
|------------------------------------------------------------------------------------------|
| fn next_multiple_of_uint<U\>(&self, rhs: U) -> Self                                      |
| fn next_multiple_of_assign_uint<U\>(&mut self, rhs: U)                                   |
| fn panic_free_next_multiple_of_uint<U\>(&self, rhs: U) -> Self                           |
| fn panic_free_next_multiple_of_assign_uint<U\>(&mut self, rhs: U)                        |
| fn modular_next_multiple_of_uint<U\>(&self, rhs: U, modulo: &Self) -> Self               |
| fn modular_next_multiple_of_assign_uint<U\>(&mut self, rhs: U, modulo: &Self)            |
| fn panic_free_modular_next_multiple_of_uint<U\>(&self, rhs: U, modulo: &Self) -> Self    |
| fn panic_free_modular_next_multiple_of_assign_uint<U\>(&mut self, rhs: U, modulo: &Self) |
| fn is_multiple_of_uint<U\>(&self, rhs: U) -> bool                                        |
| fn next_multiple_of(&self, rhs: &Self) -> Self                                           |
| fn next_multiple_of_assign(&mut self, rhs: &Self)                                        |
| fn panic_free_next_multiple_of(&self, rhs: &Self) -> Self                                |
| fn panic_free_next_multiple_of_assign(&mut self, rhs: &Self)                             |
| fn modular_next_multiple_of(&self, rhs: &Self, modulo: &Self) -> Self                    |
| fn modular_next_multiple_of_assign(&mut self, rhs: &Self, modulo: &Self)                 |
| fn panic_free_modular_next_multiple_of(&self, rhs: &Self, modulo: &Self) -> Self         |
| fn panic_free_modular_next_multiple_of_assign(&mut self, rhs: &Self, modulo: &Self)      |
| fn is_multiple_of(&self, rhs: &Self) -> bool                                             |
| fn midpoint_uint<U\>(&self, rhs: U) -> Self                                              |
| fn midpoint_assign_uint<U\>(&mut self, rhs: U)                                           |
| fn midpoint(&self, rhs: &Self) -> Self                                                   |
| fn midpoint_assign(&mut self, rhs: &Self)                                                |
| fn checked_pow_uint<U\>(&self, exp: U) -> Option<Self>                                   |
| fn unchecked_pow_uint<U\>(&self, exp: U) -> Self                                         |
| fn saturating_pow_uint<U\>(&self, exp: U) -> Self                                        |
| fn saturating_pow_assign_uint<U\>(&mut self, exp: U)                                     |
| fn checked_pow(&self, exp: &Self) -> Option<Self>                                        |
| fn unchecked_pow(&self, exp: &Self) -> Self                                              |
| fn saturating_pow(&self, exp: &Self) -> Self                                             |
| fn saturating_pow_assign(&mut self, exp: &Self)                                          |
| fn checked_iroot_uint<U\>(&self, exp: U) -> Option<Self>                                 |
| fn unchecked_iroot_uint<U\>(&self, exp: U) -> Self                                       |
| fn checked_ilog_uint<U\>(&self, base: U) -> Option<Self>                                 |
| fn unchecked_ilog_uint<U\>(&self, base: U) -> Self                                       |
| fn checked_iroot(&self, exp: &Self) -> Option<Self>                                      |
| fn unchecked_iroot(&self, exp: &Self) -> Self                                            |
| fn checked_ilog(&self, base: &Self) -> Self                                              |
| fn unchecked_ilog(&self, base: &Self) -> Self                                            |
| fn checked_ilog2(&self) -> Option<Self>                                                  |
| fn unchecked_ilog2(&self) -> Self                                                        |
| fn checked_ilog10(&self) -> Option<Self>                                                 |
| fn unchecked_ilog10(&self) -> Self                                                       |
| fn checked_shift_left<U\>(&self, n: U) -> Option<Self>                                   |
| fn unchecked_shift_left<U\>(&self, n: U) -> Self                                         |
| fn checked_shift_right<U\>(&self, n: U) -> Option<Self>                                  |
| fn unchecked_shift_right<U\>(&self, n: U) -> Self                                        |

- The methods above have been moved from struct BigUInt to trait BigUInt_More because docs.rs failed in generating struct.bigUInt.html.

## Breaking changes from ver. 0.9.2 to ver. 0.9.3

| Methods                                                |
|--------------------------------------------------------|
| fn checked_add_uint<U\>(&self, rhs: U) -> Option<Self> |
| fn unchecked_add_uint<U\>(&self, rhs: U) -> Self       |
| fn saturating_add_uint<U\>(&self, rhs: U) -> Self      |
| fn saturating_add_assign_uint<U\>(&mut self, rhs: U)   |
| fn safe_add_uint<U\>(&self, rhs: U) -> Self            |
| fn safe_add_assign_uint<U\>(&mut self, rhs: U)         |
| fn checked_sub_uint<U\>(&self, rhs: U) -> Option<Self> |
| fn unchecked_sub_uint<U\>(&self, rhs: U) -> Self       |
| fn saturating_sub_uint<U\>(&self, rhs: U) -> Self      |
| fn saturating_sub_assign_uint<U\>(&mut self, rhs: U)   |
| fn safe_sub_uint<U\>(&self, rhs: U) -> Self            |
| fn safe_sub_assign_uint<U\>(&mut self, rhs: U)         |
| fn checked_mul_uint<U\>(&self, rhs: U) -> Option<Self> |
| fn unchecked_mul_uint<U\>(&self, rhs: U) -> Self       |
| fn saturating_mul_uint<U\>(&self, rhs: U) -> Self      |
| fn saturating_mul_assign_uint<U\>(&mut self, rhs: U)   |
| fn safe_mul_uint<U\>(&self, rhs: U) -> Self            |
| fn safe_mul_assign_uint<U\>(&mut self, rhs: U)         |
| fn checked_div_uint<U\>(&self, rhs: U) -> Option<Self> |
| fn unchecked_div_uint<U\>(&self, rhs: U) -> Self       |
| fn saturating_div_uint<U\>(&self, rhs: U) -> Self      |
| fn saturating_div_assign_uint<U\>(&mut self, rhs: U)   |
| fn checked_rem_uint<U\>(&self, rhs: U) -> Option<Self> |
| fn unchecked_rem_uint<U\>(&self, rhs: U) -> Self       |
| fn saturating_rem_uint<U\>(&self, rhs: U) -> Self      |
| fn saturating_rem_assign_uint<U\>(&mut self, rhs: U)   |
| fn checked_add<U\>(&self, rhs: U) -> Option<Self>      |
| fn unchecked_add<U\>(&self, rhs: U) -> Self            |
| fn saturating_add<U\>(&self, rhs: U) -> Self           |
| fn saturating_add_assign<U\>(&mut self, rhs: U)        |
| fn safe_add<U\>(&self, rhs: U) -> Self                 |
| fn safe_add_assign<U\>(&mut self, rhs: U)              |
| fn checked_sub<U\>(&self, rhs: U) -> Option<Self>      |
| fn unchecked_sub<U\>(&self, rhs: U) -> Self            |
| fn saturating_sub<U\>(&self, rhs: U) -> Self           |
| fn saturating_sub_assign<U\>(&mut self, rhs: U)        |
| fn safe_sub<U\>(&self, rhs: U) -> Self                 |
| fn safe_sub_assign<U\>(&mut self, rhs: U)              |
| fn checked_mul<U\>(&self, rhs: U) -> Option<Self>      |
| fn unchecked_mul<U\>(&self, rhs: U) -> Self            |
| fn saturating_mul<U\>(&self, rhs: U) -> Self           |
| fn saturating_mul_assign<U\>(&mut self, rhs: U)        |
| fn safe_mul<U\>(&self, rhs: U) -> Self                 |
| fn safe_mul_assign<U\>(&mut self, rhs: U)              |
| fn checked_div<U\>(&self, rhs: U) -> Option<Self>      |
| fn unchecked_div<U\>(&self, rhs: U) -> Self            |
| fn saturating_div<U\>(&self, rhs: U) -> Self           |
| fn saturating_div_assign<U\>(&mut self, rhs: U)        |
| fn checked_rem<U\>(&self, rhs: U) -> Option<Self>      |
| fn unchecked_rem<U\>(&self, rhs: U) -> Self            |
| fn saturating_rem<U\>(&self, rhs: U) -> Self           |
| fn saturating_rem_assign<U\>(&mut self, rhs: U)        |

- The methods above have been moved from struct BigUInt to trait BigUInt_More because docs.rs failed in generating struct.bigUInt.html.

## Breaking changes from ver. 0.9.0 to ver. 0.9.1

| Ver. 0.9.0                                             | Ver. 0.9.1 |
|--------------------------------------------------------|------------|
| pub fn wrapping_pow_uint<U\>(&self, exp: U) -> Self    | removed    |
| pub fn wrapping_pow_assign_uint<U\>(&mut self, exp: U) | removed    |
| pub fn wrapping_pow(&mut self, exp: &Self) -> Self     | removed    |
| pub fn wrapping_pow_assign(&mut self, exp: &Self)      | removed    |

- The methods above have been removed because they are redundant because of pow_uint(), pow_assign_uint(), pow(), and pow_assign().

## Breaking changes from ver. 0.8.6 to ver. 0.8.7
### Arithmetic operators for SmallUInt, ShortUnion, IntUnion, LongUnion, and LongerUnion

| Methods                                                        |
|----------------------------------------------------------------|
| Add::add(self, rhs: Self) -> Self for SmallUint                |
| Add::add(self, rhs: Self) -> Self for ShortUnion               |
| Add::add(self, rhs: Self) -> Self for IntUnion                 |
| Add::add(self, rhs: Self) -> Self for LongUnion                |
| Add::add(self, rhs: Self) -> Self for LongerUnion              |
| AddAssign::add_assign(self, rhs: Self) -> Self for SmallUint   |
| AddAssign::add_assign(self, rhs: Self) -> Self for ShortUnion  |
| AddAssign::add_assign(self, rhs: Self) -> Self for IntUnion    |
| AddAssign::add_assign(self, rhs: Self) -> Self for LongUnion   |
| AddAssign::add_assign(self, rhs: Self) -> Self for LongerUnion |
| Sub::sub(self, rhs: Self) -> Self for SmallUint                |
| Sub::sub(self, rhs: Self) -> Self for ShortUnion               |
| Sub::sub(self, rhs: Self) -> Self for IntUnion                 |
| Sub::sub(self, rhs: Self) -> Self for LongUnion                |
| Sub::sub(self, rhs: Self) -> Self for LongerUnion              |
| SubAssign::sub_assign(self, rhs: Self) -> Self for SmallUint   |
| SubAssign::sub_assign(self, rhs: Self) -> Self for ShortUnion  |
| SubAssign::sub_assign(self, rhs: Self) -> Self for IntUnion    |
| SubAssign::sub_assign(self, rhs: Self) -> Self for LongUnion   |
| SubAssign::sub_assign(self, rhs: Self) -> Self for LongerUnion |
| Mul::mul(self, rhs: Self) -> Self for SmallUint                |
| Mul::mul(self, rhs: Self) -> Self for ShortUnion               |
| Mul::mul(self, rhs: Self) -> Self for IntUnion                 |
| Mul::mul(self, rhs: Self) -> Self for LongUnion                |
| Mul::mul(self, rhs: Self) -> Self for LongerUnion              |
| MulAssign::mul_assign(self, rhs: Self) -> Self for SmallUint   |
| MulAssign::mul_assign(self, rhs: Self) -> Self for ShortUnion  |
| MulAssign::mul_assign(self, rhs: Self) -> Self for IntUnion    |
| MulAssign::mul_assign(self, rhs: Self) -> Self for LongUnion   |
| MulAssign::mul_assign(self, rhs: Self) -> Self for LongerUnion |
| Div::div(self, rhs: Self) -> Self for SmallUint                |
| Div::div(self, rhs: Self) -> Self for ShortUnion               |
| Div::div(self, rhs: Self) -> Self for IntUnion                 |
| Div::div(self, rhs: Self) -> Self for LongUnion                |
| Div::div(self, rhs: Self) -> Self for LongerUnion              |
| DivAssign::div_assign(self, rhs: Self) -> Self for SmallUint   |
| DivAssign::div_assign(self, rhs: Self) -> Self for ShortUnion  |
| DivAssign::div_assign(self, rhs: Self) -> Self for IntUnion    |
| DivAssign::div_assign(self, rhs: Self) -> Self for LongUnion   |
| DivAssign::div_assign(self, rhs: Self) -> Self for LongerUnion |
| Rem::rem(self, rhs: Self) -> Self for SmallUint                |
| Rem::rem(self, rhs: Self) -> Self for ShortUnion               |
| Rem::rem(self, rhs: Self) -> Self for IntUnion                 |
| Rem::rem(self, rhs: Self) -> Self for LongUnion                |
| Rem::rem(self, rhs: Self) -> Self for LongerUnion              |
| RemAssign::rem_assign(self, rhs: Self) -> Self for SmallUint   |
| RemAssign::rem_assign(self, rhs: Self) -> Self for ShortUnion  |
| RemAssign::rem_assign(self, rhs: Self) -> Self for IntUnion    |
| RemAssign::rem_assign(self, rhs: Self) -> Self for LongUnion   |
| RemAssign::rem_assign(self, rhs: Self) -> Self for LongerUnion |

- In order to prevent confusion, how the arithmetic operators for SmallUint, ShortUnion, IntUnion, LongUnion, and LongerUnion work have been changed for those to work the same way as the operators for `u8`, `u16`, `u32`, `u64`, `u128`, and `usize` work. 

### Bit manipulation methods of BigUInt

| Methods                                                     |
|-------------------------------------------------------------|
| pub fn shift_left<U\>(&self, n: U) -> Self                  |
| pub fn shift_left_assign<U\>(&mut self, n: U)               |
| pub fn checked_shift_left<U\>(&self, n: U) -> Option<Self>  |
| pub fn unchecked_shift_left<U\>(&self, n: U) -> Self        |
| pub fn shift_right<U\>(&self, n: U) -> Self                 |
| pub fn shift_right_assign<U\>(&mut self, n: U)              |
| pub fn checked_shift_right<U\>(&self, n: U) -> Option<Self> |
| pub fn unchecked_shift_right<U\>(&self, n: U) -> Self       |       

- These methods have been changed to set tbe flag `LEFT_CARRY` instead of the flag `OVERFLOW` when a bit `1` is pushed out to the left, and to set tbe flag `RIGHT_CARRY` instead of the flag `UNDERFLOW` when a bit `1` is pushed out to the right.


## Breaking changes from ver. 0.8.5 to ver. 0.8.6
### Four methods of BigUInt

| Ver. 0.8.5                                            | Ver. 0.8.6                                                       |
|-------------------------------------------------------|------------------------------------------------------------------|
| pub fn to_string_with_radix_and_delimiter(&self, ...) | pub fn to_string_with_radix_and_stride_and_delimiter(&self, ...) |
| pub fn set_flag_bit(&mut self, flag: u8)              | fn set_flag_bit(&mut self, flag: u8)                             |
| pub fn reset_flag_bit(&mut self, flag: u8)            | fn reset_flag_bit(&mut self, flag: u8)                           |
| pub fn is_flag_bit_on(&self, flag: u8) -> bool        | fn is_flag_bit_on(&self, flag: u8) -> bool                       |

- The method name to_string_with_radix_and_delimiter has been changed into to_string_with_radix_and_stride_and_delimiter for preventing confusion of usage.
- The three methods set_flag_bit(), reset_flag_bit(), and is_flag_bit_on() have be changed to be private because they are meaningless unless all the private constants OVERFLOW, UNDERFLOW, INFINITY, DIVIDED_BY_ZERO, and UNDEFINED of struct BigUInt are changed to be public.

### Three methods of BigUInt

| Ver. 0.8.5                           | Ver. 0.8.6 |
|--------------------------------------|------------|
| pub fn set_untrustable(&mut self)    | removed    |
| pub fn reset_untrustable(&mut self)  | removed    |
| pub fn is_untrustable(&self) -> bool | removed    |

- The methods above have been removed because they are not used.

## Breaking changes from ver. 0.8.4 to ver. 0.8.5

### Twelve methods of BigUInt

| Ver. 0.8.4                                        | Ver. 0.8.5 |
|---------------------------------------------------|------------|
| pub fn ilog2_uint(&self) -> Self                  | removed    |
| pub fn ilog2_assign_uint(&mut self)               | removed    |
| pub fn panic_free_ilog2_uint(&self) -> Self       | removed    |
| pub fn panic_free_ilog2_assign_uint(&mut self)    | removed    |
| pub fn checked_ilog2_uint(&self) -> Option<Self>  | removed    |
| pub fn unchecked_ilog2_uint(&self) -> Self        | removed    |
| pub fn ilog10_uint(&self) -> Self                 | removed    |
| pub fn ilog10_assign_uint(&mut self)              | removed    |
| pub fn panic_free_ilog10_uint(&self) -> Self      | removed    |
| pub fn panic_free_ilog10_assign_uint(&mut self)   | removed    |
| pub fn checked_ilog10_uint(&self) -> Option<Self> | removed    |
| pub fn unchecked_ilog10_uint(&self) -> Self       | removed    |

- The methods above have been removed because they are meaningless.

### Seven methods of BigUInt

| Methods                                                                    |
|----------------------------------------------------------------------------|
| pub fn panic_free_iroot_uint<U\>(&self, exp: U) -> Self                    |
| pub fn panic_free_modular_add_assign(&mut self, rhs: &Self, modulo: &Self) |
| pub fn panic_free_modular_sub(&self, rhs: &Self, modulo: &Self) -> Self    |
| pub fn panic_free_modular_sub_assign(&mut self, rhs: &Self, modulo: &Self) |
| pub fn panic_free_modular_mul_assign(&mut self, rhs: &Self, modulo: &Self) |
| pub fn panic_free_divide_fully_uint<U\>(&self, rhs: U) -> (Self, U)        |
| pub fn panic_free_divide_fully(&self, rhs: &Self) -> (Self, Self)          |

- When the result approaches infinity, the flags of the result to be set were `INFINITY`, `OVERFLOW`, and `UNDEFINED` in ver. 0.8.4 but the flags of the result to be set have been changed to be `INFINITY` and `UNDEFINED` in ver. 0.8.5.
- When the argument `modulo` is zero or one, the flags of the result to be set were `INFINITY`, `OVERFLOW`, and `DIVIDED_BY_ZERO` in ver. 0.8.4 but the flags of the result to be set have been changed to be `UNDEFINED` in ver. 0.8.5.
- When the argument `rhs` is zero and `self` is not zero, the flags of the result to be set were `INFINITY`, `OVERFLOW`, and `DIVIDED_BY_ZERO` in ver. 0.8.4 but the flags of the quotient to be set have been changed to be `INFINITY` and `DIVIDED_BY_ZERO` in ver. 0.8.5.

## Breaking changes from ver. 0.8.3 to ver. 0.8.4

### Five methods of BigUInt

| Methods                                                                         |
|---------------------------------------------------------------------------------|
| pub fn panic_free_divide_fully_uint<U\>(&self, rhs: U) -> (Self, Self)          |
| pub fn panic_free_div_uint<U\>(&self, rhs: U) -> Self                           |
| pub fn panic_free_div_assign_uint<U\>(&mut self, rhs: U)                        |
| pub fn panic_free_modular_div_uint<U\>(&self, rhs: U, modulo: &Self) -> Self    |
| pub fn panic_free_modular_div_assign_uint<U\>(&mut self, rhs: U, modulo: &Self) |

- When dividing by zero, the flags of the quotient to be set were `NFINITY`, `DIVIDED_BY_ZERO`, and `OVERFLOW` in ver. 0.8.3 but the flags of the quotient to be set have been changed to be `INFINITY` and `DIVIDED_BY_ZERO` in ver. 0.8.4. The meaning of the fag `OVERFLOW` has been changed to mean that the value was wrapped around at maximum value in ver. 0.8.4. From the beginning, the meaning of the flag `UNDERFLOW` has meant that it was wrapped around at zero.


## Breaking changes from ver. 0.8.1 to ver. 0.8.2

### Twenty-four methods of BigUInt

| Ver. 0.8.1                                                      | Ver. 0.8.2 |
|-----------------------------------------------------------------|------------|
| pub fn wrapping_root_uint(&self, exp: U) -> Self                | removed    |
| pub fn wrapping_root_assign_uint(&mut self, exp: U)             | removed    |
| pub fn overflowing_root_uint(&self, exp: U) -> (Self, bool)     | removed    |
| pub fn overflowing_root_assign_uint(&mut self, exp: U) -> bool  | removed    |
| pub fn saturating_root_uint(&self, exp: U) -> Self              | removed    |
| pub fn saturating_root_assign_uint(&mut self, exp: U)           | removed    |
| pub fn wrapping_ilog_uint(&self, base: U) -> Self               | removed    |
| pub fn wrapping_ilog_assign_uint(&mut self, base: U)            | removed    |
| pub fn overflowing_ilog_uint(&self, base: U) -> (Self, bool)    | removed    |
| pub fn overflowing_ilog_assign_uint(&mut self, base: U) -> bool | removed    |
| pub fn saturating_ilog_uint(&self, base: U) -> Self             | removed    |
| pub fn saturating_ilog_assign_uint(&mut self, base: U)          | removed    |
| pub fn wrapping_ilog2_uint(&self) -> Self                       | removed    |
| pub fn wrapping_ilog2_assign_uint(&mut self)                    | removed    |
| pub fn overflowing_ilog2_uint(&self) -> (Self, bool)            | removed    |
| pub fn overflowing_ilog2_assign_uint(&mut self) -> bool         | removed    |
| pub fn saturating_ilog2_uint(&self) -> Self                     | removed    |
| pub fn saturating_ilog2_assign_uint(&mut self)                  | removed    |
| pub fn wrapping_ilog10_uint(&self) -> Self                      | removed    |
| pub fn wrapping_ilog10_assign_uint(&mut self)                   | removed    |
| pub fn overflowing_ilog10_uint(&self) -> (Self, bool)           | removed    |
| pub fn overflowing_ilog10_assign_uint(&mut self) -> bool        | removed    |
| pub fn saturating_ilog10_uint(&self) -> Self                    | removed    |
| pub fn saturating_ilog10_assign_uint(&mut self)                 | removed    |

- The methods above have been removed because they never overflow.

### Seven methods of BigUInt

| Ver. 0.8.1                                                      | Ver. 0.8.2                                                       |
|-----------------------------------------------------------------|------------------------------------------------------------------|
| pub fn root_uint(&self, exp: U) -> Self                         | pub fn iroot_uint(&self, exp: U) -> Self                         |
| pub fn root_assign_uint(&mut self, exp: U)                      | pub fn iroot_assign_uint(&mut self, exp: U)                      |
| pub fn checked_root_uint(&self, exp: U) -> Option&lt;Self&gt;   | pub fn checked_iroot_uint(&self, exp: U) -> Option&lt;Self&gt;   |
| pub fn unchecked_root_uint(&self, exp: U) -> Option&lt;Self&gt; | pub fn unchecked_iroot_uint(&self, exp: U) -> Option&lt;Self&gt; |
| pub fn set_inifinity(&mut self)                                 | pub fn set_infinity(&mut self)                                   |
| pub fn reset_inifinity(&mut self)                               | pub fn reset_infinity(&mut self)                                 |
| pub fn is_inifinity(&self) -> bool                              | pub fn is_infinity(&self) -> bool                                |

- The names of the four upper methods above `*root*_uint()` have been changed into `*iroot*_uint()` in order to keep consistency with primitive data types such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.
- The names of the three lower methods above `*inifinity()` have been changed into `*infinity()` because `inifinity` is the typo mistake of `infinity`.

| Methods                                                                       | Ver. 0.8.1                                                    | Ver. 0.8.2                                       |
|-------------------------------------------------------------------------------|---------------------------------------------------------------|--------------------------------------------------|
| pub fn modular_add_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_add_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_sub_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_sub_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_mul_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_mul_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_div_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_div_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn modular_div_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_div_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn modular_rem_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_rem_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self        | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn modular_rem_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_rem_assign_uint&lt;U&gt;(&self, rhs: U, modulo: &Self) -> Self | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_div_uint&lt;U&gt;(&self, rhs: U) -> Self                      | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_div_assign_uint&lt;U&gt;(&self, rhs: U) -> Self               | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_div_uint&lt;U&gt;(&self, rhs: U) -> Self                   | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_div_assign_uint&lt;U&gt;(&self, rhs: U) -> Self            | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn pub fn unchecked_div_uint&lt;U&gt;(&self, rhs: U) -> Self              | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_div_uint&lt;U&gt;(&self, rhs: U) -> Self                    | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_div_assign_uint&lt;U&gt;(&mut self, rhs: U) -> Self         | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_rem_uint&lt;U&gt;(&self, rhs: U) -> Self                      | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_rem_assign_uint&lt;U&gt;(&self, rhs: U) -> Self               | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_rem_uint&lt;U&gt;(&self, rhs: U) -> Self                   | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_rem_assign_uint&lt;U&gt;(&self, rhs: U) -> Self            | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn pub fn unchecked_rem_uint&lt;U&gt;(&self, rhs: U) -> Self              | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_rem_uint&lt;U&gt;(&self, rhs: U) -> Self                    | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_rem_assign_uint&lt;U&gt;(&mut self, rhs: U) -> Self         | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn divide_fully_uint&lt;U&gt;(&self, rhs: U) -> (Self, U)                 | It returns (maximum, 0) if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn modular_pow_uint&lt;U&gt;(&self, exp: U, modulo: &Self) -> Self        | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_pow_assign_uint&lt;U&gt;(&mut self, exp: U, modulo: &Self)     | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_add(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_add_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_sub(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_sub_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_mul(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_mul_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_div(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_div(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn modular_div_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_div_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn modular_rem(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `modulo` is either zero or one.         | It will panic if `modulo` is either zero or one. |
| pub fn modular_rem(&self, rhs: &Self, modulo: &Self) -> Self                  | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn modular_rem_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `modulo` is either zero or one. | It will panic if `modulo` is either zero or one. |
| pub fn modular_rem_assign(&self, rhs: &Self, modulo: &Self) -> Self           | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_div(&self, rhs: &Self) -> Self                                | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_div_assign(&self, rhs: &Self) -> Self                         | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_div(&self, rhs: &Self) -> Self                             | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_div_assign(&self, rhs: &Self) -> Self                      | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn pub fn unchecked_div(&self, rhs: &Self) -> Self                        | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_div(&self, rhs: &Self) -> Self                              | It returns maximum if `rhs` is zero.                          | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_div_assign(&mut self, rhs: &Self) -> Self                   | It gives maximum to `self` if `rhs` is zero.                  | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_rem(&self, rhs: &Self) -> Self                                | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn wrapping_rem_assign(&self, rhs: &Self) -> Self                         | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_rem(&self, rhs: &Self) -> Self                             | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn overflowing_rem_assign(&self, rhs: &Self) -> Self                      | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn pub fn unchecked_rem(&self, rhs: &Self) -> Self                        | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_rem(&self, rhs: &Self) -> Self                              | It returns zero if `rhs` is zero.                             | It will panic if `rhs` is either zero or one.    |
| pub fn saturating_rem_assign(&mut self, rhs: &Self) -> Self                   | It gives zero to `self` if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
| pub fn divide_fully(&self, rhs: &Self) -> (Self, U)                           | It returns (maximum, 0) if `rhs` is zero.                     | It will panic if `rhs` is either zero or one.    |
   
- The above-methods have been changed to cause panic when the argument `modulo` is either zero or one. The author think that it is high chance that it is a mistake to give zero or one to the arguement `modulo` but this mistake won't be found or will be found only with a lot of efforts at test time if these methods do not cause panic. So, this change has been made for better security.
- The above-methods have been changed to cause panic when the argument `rhs` is zero. The author think that it is high chance that it is a mistake to give zero to the arguement `rhs` but this mistake won't be found or will be found only with a lot of efforts at test time if these methods do not cause panic. So, this change has been made for better security.

## Breaking changes from ver. 0.7.6 to ver. 0.8.0

### One method of trait SmallUInt

| Ver. 0.7.6                             | Ver. 0.8.0                            |
|----------------------------------------|---------------------------------------|
| pub fn root(self, exp: Self) -> Self   | pub fn iroot(self, exp: Self) -> Self |

- The method name root has been changed into iroot for the name consistancy with the methods isqrt, ilog, ilog10, ilog2, etc.

### Two methods of unions ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion

| Ver. 0.7.6                             | Ver. 0.8.0 |
|----------------------------------------|------------|
| pub fn root(self, exp: Self) -> Self   | removed    |
| pub fn reverse_bits(self) -> Self      | removed    |

- The above methods has been removed since they were found redundant. If you import (use) SmallUInt, you can use the above methods.

## Breaking changes from ver. 0.7.2 to ver. 0.7.3

### Five methods of BigUInt

| Ver. 0.7.2                                      | Ver. 0.7.3                                     |
|-------------------------------------------------|------------------------------------------------|
| pub fn from_array(val: &[T; N]) -> Self         | pub fn from_array(val: [T; N]) -> Self         |
| pub fn from_be(be: &Self) -> Self               | pub fn from_be(be: Self) -> Self               |
| pub fn from_le(le: S&elf) -> Self               | pub fn from_le(le: Self) -> Self               |
| pub fn from_be_bytes(be_bytes: &[T; N]) -> Self | pub fn from_be_bytes(be_bytes: [T; N]) -> Self |
| pub fn from_le_bytes(le_bytes: &[T; N]) -> Self | pub fn from_le_bytes(le_bytes: [T; N]) -> Self |

- The arguments of all the constructors to be borrowed are changed to be moved except BigUInt::from_string(), BigUInt::from_str_radix(), BigUInt::from_biguint(), and SharedArrays::from_src().
- The reason of the exception to keep the arguments of BigUInt::from_string() and BigUInt::from_str_radix() to be borrowed is to keep the consistency with String::from().
- The reason of the exception to keep the arguments of BigUInt::from_biguint() to be borrowed is for the performance and the convenience.
- The reason of the exception to keep the arguments of SharedArrays::from_src() to be borrowed is for its purpose and the convenience.

### 2 methods of unions ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion

| Ver. 0.7.2                           | Ver. 0.7.3                            |
|--------------------------------------|---------------------------------------|
| pub fn onoff(b: bool) -> Self        | pub fn new_with_bool(b: bool) -> Self |
| pub fn onoff_signed(b: bool) -> Self | removed                               |

- The method name `onoff` is not intuitive so that it was changed into more intuitive name `new_with_bool`.
- The method `onoff_signed()` is redundant because it is the same as the method `onoff()` or `new_with_bool()`.

## Breaking changes from ver. 0.7.1 to ver. 0.7.2

### A method of union SharedValue

| Ver. 0.7.1                                          | Ver. 0.7.2 |
|-----------------------------------------------------|------------|
| pub fn into_des(&mut self, pos: usize) -> Option&lt;D&gt; | removed    |

### A method of union SharedArray

| Ver. 0.7.1                                   | Ver. 0.7.2                                       |
|----------------------------------------------|--------------------------------------------------|
| pub fn into_des(&mut self, des: &mut [D; N]) | pub fn put_des_in_array(&self, des: &mut [D; N]) |

- The function name `into_des()` does not show its functionality very clearly. It is desirable that the function name `into_des()` is changed to put_des_in_array() for the name consistency with the methods such as put_hash_value_in_array() in hash modules. The argument `&mut self` does not have to be `&mut self` so that it was changed to `&self`

## Breaking changes from ver. 0.7.0 to ver. 0.7.1

### A macro for BigUInt

| Ver. 0.7.0                | Ver. 0.7.1 |
|---------------------------|------------|
| define_Utypes_with_utypes | removed    |

- The macro name `define_Utypes_with_utypes` should not have been exposed to the outside of this crate so it was removed rather than recommending not to use it at documentation.

### fields of ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion

| Ver. 0.7.0  | Ver. 0.7.1 |
|-------------|------------|
| pub this    | this       |
| pub that    | that       |
| pub ubyte   | ubyte      |
| pub sbyte   | sbyte      |
| pub ushort  | ushort     |
| pub sshort  | sshort     |
| pub uint    | uint       |
| pub sint    | sint       |
| pub ulong   | ulong      |
| pub slong   | slong      |
| pub ulonger | ulonger    |
| pub slonger | slonger    |
| pub u_size  | u_size     |
| pub s_size  | s_size     |
| pub u_size  | u_size     |
| pub s_size  | s_size     |

- All the fields of all the unions such as ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion are changed from public into private in order that users cannot access them directly instead of warning users not to access them directly in documentation.

### Names of struct `Share` and `Common`

| Ver. 0.7.0 | Ver. 0.7.1   |
|------------|--------------|
| Share      | SharedValues |
| Common     | SharedArrays |

- The new names `SharedValues` and `SharedArrays` are more intuitive and more explanary than old names `Share` and `Common`. Actually, even the author is often confused with `Share` and `Common` in terms of their goals and roles.

## Breaking changes from ver. 0.6.3 to ver. 0.7.0

### Five methods of trait SmallUInt

| Ver. 0.6.3                        | Ver. 0.7.0               |
|-----------------------------------|--------------------------|
| fn sqrt(self) -> Self             | fn isqrt(self) -> Self   |
| fn is_max(&self) -> bool          | fn is_max(self) -> bool  |
| fn is_zero(&self) -> bool         | fn is_zero(self) -> bool |
| fn is_one(&self) -> bool          | fn is_one(self) -> bool  |
| fn reverse_bits_assign(&mut self) | removed                  |

- A breaking change has been made to change the function name from `number::SmallUInt::sqrt(self) -> Self;` to `number::SmallUInt::isqrt(self) -> Self;` in order to keep consistency with primitive data types such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.
- Breaking changes has been made to change the function arguement from `&self` into `self` in order to keep consistency with other functions.
- reverse_bits_assign(&mut self) has been removed to keep consistency with primitive data types such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.

### Methods of unions ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion

| Ver. 0.6.3                                       | Ver. 0.7.0 |
|--------------------------------------------------|------------|
| pub fn num(n: u128) -> Self                      | removed    |
| pub fn zero() -> Self                            | removed    |
| pub fn one() -> Self                             | removed    |
| pub fn max() -> Self                             | removed    |
| pub fn min() -> Self                             | removed    |
| pub fn reverse_bits_assign(&mut self)            | removed    |
| pub fn wrapping_add_assign(&mut self, rhs: Self) | removed    |
| pub fn wrapping_sub_assign(&mut self, rhs: Self) | removed    |
| pub fn wrapping_mul_assign(&mut self, rhs: Self) | removed    |
| pub fn wrapping_div_assign(&mut self, rhs: Self) | removed    |
| pub fn wrapping_rem_assign(&mut self, rhs: Self) | removed    |
| pub fn root(self, exp: Self) -> Self             | removed    |
| pub fn into_f64(self) -> f64                     | removed    |
| pub fn into_f32(self) -> f32                     | removed    |
| pub fn into_u128(self) -> u128                   | removed    |
| pub fn into_u64(self) -> u64                     | removed    |
| pub fn into_u32(self) -> u32                     | removed    |
| pub fn into_u16(self) -> u16                     | removed    |
| pub fn into_u8(self) -> u8                       | removed    |
| pub fn into_usize(self) -> usize                 | removed    |
| pub fn into_bool(self) -> bool                   | removed    |
| pub fn size_in_bytes() -> usize                  | removed    |
| pub fn size_in_bits() -> usize                   | removed    |
| pub fn length_in_bytes(self) -> usize            | removed    |
| pub fn length_in_bits(self) -> usize             | removed    |
| pub fn is_odd(self) -> bool                      | removed    |

- Breaking changes have been made to remove the redundant methods from `ShortUnion`, `IntUnion`, `LongUnion`, `LongerUnion`, and `SizeUnions` since there are the same methods in the trait `number::SmallUInt` and its implementation, and/or in order to keep consistency with primitive data types such as `u8`, `u16`, `u32`, `u64`, `u128`, and `usize`.

## Breaking change from ver. 0.6.2 to ver. 0.6.3

A breaking change has been made to change the function `number::BigUInt::copy_within<R\>(&mut self, src: R, dest: usize)` from public to private since it should have been private from the beginning for security reason because it is high chance that this function will be missused or even abused.

### A method of struct BigUInt

| Ver. 0.6.2                                         | Ver. 0.6.3                                     |
|----------------------------------------------------|------------------------------------------------|
| pub fn copy_within(&mut self, src: R, dest: usize) | fn copy_within(&mut self, src: R, dest: usize) |

## Breaking changes from ver. 0.5.0 to ver. 0.6.0

Breaking changes have been made to change the source code according to Rust convention and in order to remove all warnings.

### Methods of trait SmallUInt and its implementation for u8, u16, u32, u64, u128, usize, ShortUnion, IntUnion, LongUnion, LongerUnion, and SizeUnion

| Ver. 0.5.0                                                      | Ver. 0.6.0                                                      |
|-----------------------------------------------------------------|-----------------------------------------------------------------|
| fn test_Miller_Rabin(self, a: Self) -> bool                     | fn test_miller_rabin(self, a: Self) -> bool                     |
| fn is_prime_using_Miller_Rabin(self, repetition: usize) -> bool | fn is_prime_using_miller_rabin(self, repetition: usize) -> bool |
| fn u128_as_SmallUInt(n: u128) -> Self                           | fn u128_as_smalluint(n: u128) -> Self                           |
| fn u64_as_SmallUInt(n: u64) -> Self                             | fn u64_as_smalluint(n: u64) -> Self                             |
| fn u32_as_SmallUInt(n: u32) -> Self                             | fn u32_as_smalluint(n: u32) -> Self                             |
| fn u16_as_SmallUInt(n: u16) -> Self                             | fn u16_as_smalluint(n: u16) -> Self                             |
| fn u8_as_SmallUInt(n: u8) -> Self                               | fn u8_as_smalluint(n: u8) -> Self                               |
| fn usize_as_SmallUInt(n: usize) -> Self                         | fn usize_as_smalluint(n: usize) -> Self                         |
| fn bool_as_SmallUInt(n: u8) -> Self                             | fn bool_as_smalluint(n: bool) -> Self                           |
| fn set_MSB(&mut self)                                           | fn set_msb(&mut self)                                           |
| fn set_LSB(&mut self)                                           | fn set_lsb(&mut self)                                           |
| fn is_MSB_set(self) -> bool                                     | fn is_msb_set(self) -> bool                                     |

### Five methods of struct BigUInt functions

| Ver. 0.5.0                                                      | Ver. 0.6.0                                                      |
|-----------------------------------------------------------------|-----------------------------------------------------------------|
| fn test_Miller_Rabin(self, a: Self) -> bool                     | fn test_miller_rabin(self, a: Self) -> bool                     |
| fn is_prime_using_Miller_Rabin(self, repetition: usize) -> bool | fn is_prime_using_miller_rabin(self, repetition: usize) -> bool |
| fn set_MSB(&mut self)                                           | fn set_msb(&mut self)                                           |
| fn set_LSB(&mut self)                                           | fn set_lsb(&mut self)                                           |
| fn is_MSB_set(self) -> bool                                     | fn is_msb_set(self) -> bool                                     |

### types of struct BigUInt

| Ver. 0.5.0            | Ver. 0.6.0            |
|-----------------------|-----------------------|
| type U32              | type UU32             |
| type U64              | type UU64             |
| type U128             | type UU128            |
| type U256             | type UU256            |
| type U384             | type UU384            |
| type U512             | type UU512            |
| type U640             | type UU640            |
| type U768             | type UU768            |
| type U896             | type UU896            |
| type U1024            | type UU1024           |
| type U2048            | type UU2048           |
| type u256             | type U256             |
| type u512             | type U512             |
| type u1024            | type U1024            |
| type u2048            | type U2048            |
| type u3072            | type U3072            |
| type u4096            | type U4096            |
| type u5120            | type U5120            |
| type u6144            | type U6144            |
| type u7168            | type U7168            |
| type u8192            | type U8192            |
| type u16384           | type U16384           |
| type u256_with_u8     | type U256_with_u8     |
| type u512_with_u8     | type U512_with_u8     |
| type u1024_with_u8    | type U1024_with_u8    |
| type u2048_with_u8    | type U2048_with_u8    |
| type u3072_with_u8    | type U3072_with_u8    |
| type u4096_with_u8    | type U4096_with_u8    |
| type u5120_with_u8    | type U5120_with_u8    |
| type u6144_with_u8    | type U6144_with_u8    |
| type u7168_with_u8    | type U7168_with_u8    |
| type u8192_with_u8    | type U8192_with_u8    |
| type u16384_with_u8   | type U16384_with_u8   |
| type u256_with_u16    | type U256_with_u16    |
| type u512_with_u16    | type U512_with_u16    |
| type u1024_with_u16   | type U1024_with_u16   |
| type u2048_with_u16   | type U2048_with_u16   |
| type u3072_with_u16   | type U3072_with_u16   |
| type u4096_with_u16   | type U4096_with_u16   |
| type u5120_with_u16   | type U5120_with_u16   |
| type u6144_with_u16   | type U6144_with_u16   |
| type u7168_with_u16   | type U7168_with_u16   |
| type u8192_with_u16   | type U8192_with_u16   |
| type u16384_with_u16  | type U16384_with_u16  |
| type u256_with_u32    | type U256_with_u32    |
| type u512_with_u32    | type U512_with_u32    |
| type u1024_with_u32   | type U1024_with_u32   |
| type u2048_with_u32   | type U2048_with_u32   |
| type u3072_with_u32   | type U3072_with_u32   |
| type u4096_with_u32   | type U4096_with_u32   |
| type u5120_with_u32   | type U5120_with_u32   |
| type u6144_with_u32   | type U6144_with_u32   |
| type u7168_with_u32   | type U7168_with_u32   |
| type u8192_with_u32   | type U8192_with_u32   |
| type u16384_with_u32  | type U16384_with_u32  |
| type u256_with_u64    | type U256_with_u64    |
| type u512_with_u64    | type U512_with_u64    |
| type u1024_with_u64   | type U1024_with_u64   |
| type u2048_with_u64   | type U2048_with_u64   |
| type u3072_with_u64   | type U3072_with_u64   |
| type u4096_with_u64   | type U4096_with_u64   |
| type u5120_with_u64   | type U5120_with_u64   |
| type u6144_with_u64   | type U6144_with_u64   |
| type u7168_with_u64   | type U7168_with_u64   |
| type u8192_with_u64   | type U8192_with_u64   |
| type u16384_with_u64  | type U16384_with_u64  |
| type u256_with_u128   | type U256_with_u128   |
| type u512_with_u128   | type U512_with_u128   |
| type u1024_with_u128  | type U1024_with_u128  |
| type u2048_with_u128  | type U2048_with_u128  |
| type u3072_with_u128  | type U3072_with_u128  |
| type u4096_with_u128  | type U4096_with_u128  |
| type u5120_with_u128  | type U5120_with_u128  |
| type u6144_with_u128  | type U6144_with_u128  |
| type u7168_with_u128  | type U7168_with_u128  |
| type u8192_with_u128  | type U8192_with_u128  |
| type u16384_with_u128 | type U16384_with_u128 |

### Two methods of trait SmallSInt and its implementation for i8, i16, i32, i64, i128, and isize

| Ver. 0.5.0       | Ver. 0.6.0       |
|------------------|------------------|
| fn Max() -> Self | fn max() -> Self |
| fn Min() -> Self | fn min() -> Self |

### Methods of struct MD4_Generic, MD5_Generic, SHA1_Generic, SHA2_256_Generic, SHA2_512_Generic, and SHA2_512_t_Generic

| Ver. 0.5.0                                                 | Ver. 0.6.0                                                   |
|------------------------------------------------------------|--------------------------------------------------------------|
| fn get_HashValue(&self, hashValue: *mut u8, length: usize) | fn get_hash_value(&self, hash_value: *mut u8, length: usize) |
| fn get_HashValue_in_string(&self) -> String                | fn get_hash_value_in_string(&self) -> String                 |
| fn get_HashValue_in_array(&self) -> [u32; N]               | fn get_hash_value_in_array(&self) -> [u32; N]                |
| fn get_HashValue_in_vec(&self) -> Vec                      | fn get_hash_value_in_vec(&self) -> Vec                       |
| fn put_HashValue_in_array(&self, out: &mut [T; M])         | fn put_hash_value_in_array(&self, out: &mut [T; M])          |
| fn digest_C(&mut self, ...)                                | fn digest_c(&mut self, ...)                                  |

### Three methods of struct SHA2_512_t_Generic

| Ver. 0.5.0                                    | Ver. 0.6.0                                     |
|-----------------------------------------------|------------------------------------------------|
| fn get_HashValue_in_array_TM(&self) -> [T; M] | fn get_hash_value_in_array_tm(&self) -> [T; M] |
| fn new_with_seedText(seed_text: &str) -> Self | fn new_with_seed_text(seed_text: &str) -> Self |
| fn new_with_H(h: &[u64; 8]) -> Self           | fn new_with_h(h: &[u64; 8]) -> Self            |

### Methods of struct Random

| Ver. 0.5.0                                                      | Ver. 0.6.0                                                      |
|-----------------------------------------------------------------|-----------------------------------------------------------------|
| fn random_with_MSB_set_uint(&mut self) -> T                     | fn random_with_msb_set_uint(&mut self) -> T                     |
| fn random_odd_with_MSB_set_uint(&mut self) -> T                 | fn random_odd_with_msb_set_uint(&mut self) -> T                 |
| fn random_prime_using_Miller_Rabin_uint(&mut self, ... ) -> T   | fn random_prime_using_miller_rabin_uint(&mut self, ... ) -> T   |
| fn random_prime_with_MSB_set_using_Miller_Rabin_uint(...) -> T  | fn random_prime_with_msb_set_using_miller_rabin_uint(...) -> T  |
| fn random_BigUInt(&mut self) -> BigUInt<T, N>                   | fn random_biguint(&mut self) -> BigUInt<T, N>                   |
| fn random_under_BigUInt( ... ) -> Option<BigUInt<T, N>>         | fn random_under_biguint( ... ) -> Option<BigUInt<T, N>>         |
| fn random_under_BigUInt_( ... ) -> Option<BigUInt<T, N>>        | fn random_under_biguint_( ... ) -> Option<BigUInt<T, N>>        |
| fn random_odd_BigUInt(&mut self) -> BigUInt<T, N>               | fn random_odd_biguint(&mut self) -> BigUInt<T, N>               |
| fn random_odd_under_BigUInt( ... ) -> Option<BigUInt<T, N>>     | fn random_odd_under_biguint( ... ) -> Option<BigUInt<T, N>>     |
| fn random_odd_under_BigUInt_( ... ) -> Option<BigUInt<T, N>>    | fn random_odd_under_biguint_( ... ) -> Option<BigUInt<T, N>>    |
| fn random_with_MSB_set_BigUInt(&mut self) -> BigUInt<T, N>      | fn random_with_msb_set_biguint(&mut self) -> BigUInt<T, N>      |
| fn random_odd_with_MSB_set_BigUInt(&mut self) -> BigUInt<T, N>  | fn random_odd_with_msb_set_biguint(&mut self) -> BigUInt<T, N>  |
| fn random_prime_using_Miller_Rabin_BigUInt(..) -> BigUInt<T, N> | fn random_prime_using_miller_rabin_biguint(..) -> BigUInt<T, N> |
| fn random_prime_with_MSB_set_using_Miller_Rabin_BigUInt(.)-> .. | fn random_prime_with_msb_set_using_miller_rabin_biguint(.)-> .. |