comparison libtommath/pre_gen/mpi.c @ 415:8b9aba1d5fa4 channel-fix

merge of '73fe066c5d9e2395354ba74756124d45c978a04d' and 'f5014cc84558f1e8eba42dbecf9f72f94bfe6134'
author Matt Johnston <matt@ucc.asn.au>
date Tue, 06 Feb 2007 16:00:18 +0000
parents 5ff8218bcee9
children 60fc6476e044
comparison
equal deleted inserted replaced
414:c53a26c430e5 415:8b9aba1d5fa4
11 * additional optimizations in place. 11 * additional optimizations in place.
12 * 12 *
13 * The library is free for all purposes without any express 13 * The library is free for all purposes without any express
14 * guarantee it works. 14 * guarantee it works.
15 * 15 *
16 * Tom St Denis, [email protected], http://math.libtomcrypt.org 16 * Tom St Denis, [email protected], http://math.libtomcrypt.com
17 */ 17 */
18 18
19 static const struct { 19 static const struct {
20 int code; 20 int code;
21 char *msg; 21 char *msg;
41 return "Invalid error code"; 41 return "Invalid error code";
42 } 42 }
43 43
44 #endif 44 #endif
45 45
46 /* $Source: /cvs/libtom/libtommath/bn_error.c,v $ */
47 /* $Revision: 1.3 $ */
48 /* $Date: 2006/03/31 14:18:44 $ */
49
46 /* End: bn_error.c */ 50 /* End: bn_error.c */
47 51
48 /* Start: bn_fast_mp_invmod.c */ 52 /* Start: bn_fast_mp_invmod.c */
49 #include <tommath.h> 53 #include <tommath.h>
50 #ifdef BN_FAST_MP_INVMOD_C 54 #ifdef BN_FAST_MP_INVMOD_C
58 * additional optimizations in place. 62 * additional optimizations in place.
59 * 63 *
60 * The library is free for all purposes without any express 64 * The library is free for all purposes without any express
61 * guarantee it works. 65 * guarantee it works.
62 * 66 *
63 * Tom St Denis, [email protected], http://math.libtomcrypt.org 67 * Tom St Denis, [email protected], http://math.libtomcrypt.com
64 */ 68 */
65 69
66 /* computes the modular inverse via binary extended euclidean algorithm, 70 /* computes the modular inverse via binary extended euclidean algorithm,
67 * that is c = 1/a mod b 71 * that is c = 1/a mod b
68 * 72 *
189 LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL); 193 LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &B, &D, NULL);
190 return res; 194 return res;
191 } 195 }
192 #endif 196 #endif
193 197
198 /* $Source: /cvs/libtom/libtommath/bn_fast_mp_invmod.c,v $ */
199 /* $Revision: 1.3 $ */
200 /* $Date: 2006/03/31 14:18:44 $ */
201
194 /* End: bn_fast_mp_invmod.c */ 202 /* End: bn_fast_mp_invmod.c */
195 203
196 /* Start: bn_fast_mp_montgomery_reduce.c */ 204 /* Start: bn_fast_mp_montgomery_reduce.c */
197 #include <tommath.h> 205 #include <tommath.h>
198 #ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C 206 #ifdef BN_FAST_MP_MONTGOMERY_REDUCE_C
206 * additional optimizations in place. 214 * additional optimizations in place.
207 * 215 *
208 * The library is free for all purposes without any express 216 * The library is free for all purposes without any express
209 * guarantee it works. 217 * guarantee it works.
210 * 218 *
211 * Tom St Denis, [email protected], http://math.libtomcrypt.org 219 * Tom St Denis, [email protected], http://math.libtomcrypt.com
212 */ 220 */
213 221
214 /* computes xR**-1 == x (mod N) via Montgomery Reduction 222 /* computes xR**-1 == x (mod N) via Montgomery Reduction
215 * 223 *
216 * This is an optimized implementation of montgomery_reduce 224 * This is an optimized implementation of montgomery_reduce
361 } 369 }
362 return MP_OKAY; 370 return MP_OKAY;
363 } 371 }
364 #endif 372 #endif
365 373
374 /* $Source: /cvs/libtom/libtommath/bn_fast_mp_montgomery_reduce.c,v $ */
375 /* $Revision: 1.3 $ */
376 /* $Date: 2006/03/31 14:18:44 $ */
377
366 /* End: bn_fast_mp_montgomery_reduce.c */ 378 /* End: bn_fast_mp_montgomery_reduce.c */
367 379
368 /* Start: bn_fast_s_mp_mul_digs.c */ 380 /* Start: bn_fast_s_mp_mul_digs.c */
369 #include <tommath.h> 381 #include <tommath.h>
370 #ifdef BN_FAST_S_MP_MUL_DIGS_C 382 #ifdef BN_FAST_S_MP_MUL_DIGS_C
378 * additional optimizations in place. 390 * additional optimizations in place.
379 * 391 *
380 * The library is free for all purposes without any express 392 * The library is free for all purposes without any express
381 * guarantee it works. 393 * guarantee it works.
382 * 394 *
383 * Tom St Denis, [email protected], http://math.libtomcrypt.org 395 * Tom St Denis, [email protected], http://math.libtomcrypt.com
384 */ 396 */
385 397
386 /* Fast (comba) multiplier 398 /* Fast (comba) multiplier
387 * 399 *
388 * This is the fast column-array [comba] multiplier. It is 400 * This is the fast column-array [comba] multiplier. It is
436 iy = MIN(a->used-tx, ty+1); 448 iy = MIN(a->used-tx, ty+1);
437 449
438 /* execute loop */ 450 /* execute loop */
439 for (iz = 0; iz < iy; ++iz) { 451 for (iz = 0; iz < iy; ++iz) {
440 _W += ((mp_word)*tmpx++)*((mp_word)*tmpy--); 452 _W += ((mp_word)*tmpx++)*((mp_word)*tmpy--);
453
441 } 454 }
442 455
443 /* store term */ 456 /* store term */
444 W[ix] = ((mp_digit)_W) & MP_MASK; 457 W[ix] = ((mp_digit)_W) & MP_MASK;
445 458
446 /* make next carry */ 459 /* make next carry */
447 _W = _W >> ((mp_word)DIGIT_BIT); 460 _W = _W >> ((mp_word)DIGIT_BIT);
448 } 461 }
449
450 /* store final carry */
451 W[ix] = (mp_digit)(_W & MP_MASK);
452 462
453 /* setup dest */ 463 /* setup dest */
454 olduse = c->used; 464 olduse = c->used;
455 c->used = pa; 465 c->used = pa;
456 466
470 mp_clamp (c); 480 mp_clamp (c);
471 return MP_OKAY; 481 return MP_OKAY;
472 } 482 }
473 #endif 483 #endif
474 484
485 /* $Source: /cvs/libtom/libtommath/bn_fast_s_mp_mul_digs.c,v $ */
486 /* $Revision: 1.7 $ */
487 /* $Date: 2006/03/31 14:18:44 $ */
488
475 /* End: bn_fast_s_mp_mul_digs.c */ 489 /* End: bn_fast_s_mp_mul_digs.c */
476 490
477 /* Start: bn_fast_s_mp_mul_high_digs.c */ 491 /* Start: bn_fast_s_mp_mul_high_digs.c */
478 #include <tommath.h> 492 #include <tommath.h>
479 #ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C 493 #ifdef BN_FAST_S_MP_MUL_HIGH_DIGS_C
487 * additional optimizations in place. 501 * additional optimizations in place.
488 * 502 *
489 * The library is free for all purposes without any express 503 * The library is free for all purposes without any express
490 * guarantee it works. 504 * guarantee it works.
491 * 505 *
492 * Tom St Denis, [email protected], http://math.libtomcrypt.org 506 * Tom St Denis, [email protected], http://math.libtomcrypt.com
493 */ 507 */
494 508
495 /* this is a modified version of fast_s_mul_digs that only produces 509 /* this is a modified version of fast_s_mul_digs that only produces
496 * output digits *above* digs. See the comments for fast_s_mul_digs 510 * output digits *above* digs. See the comments for fast_s_mul_digs
497 * to see how it works. 511 * to see how it works.
545 559
546 /* make next carry */ 560 /* make next carry */
547 _W = _W >> ((mp_word)DIGIT_BIT); 561 _W = _W >> ((mp_word)DIGIT_BIT);
548 } 562 }
549 563
550 /* store final carry */
551 W[ix] = (mp_digit)(_W & MP_MASK);
552
553 /* setup dest */ 564 /* setup dest */
554 olduse = c->used; 565 olduse = c->used;
555 c->used = pa; 566 c->used = pa;
556 567
557 { 568 {
558 register mp_digit *tmpc; 569 register mp_digit *tmpc;
559 570
560 tmpc = c->dp + digs; 571 tmpc = c->dp + digs;
561 for (ix = digs; ix <= pa; ix++) { 572 for (ix = digs; ix < pa; ix++) {
562 /* now extract the previous digit [below the carry] */ 573 /* now extract the previous digit [below the carry] */
563 *tmpc++ = W[ix]; 574 *tmpc++ = W[ix];
564 } 575 }
565 576
566 /* clear unused digits [that existed in the old copy of c] */ 577 /* clear unused digits [that existed in the old copy of c] */
571 mp_clamp (c); 582 mp_clamp (c);
572 return MP_OKAY; 583 return MP_OKAY;
573 } 584 }
574 #endif 585 #endif
575 586
587 /* $Source: /cvs/libtom/libtommath/bn_fast_s_mp_mul_high_digs.c,v $ */
588 /* $Revision: 1.5 $ */
589 /* $Date: 2006/11/14 03:46:25 $ */
590
576 /* End: bn_fast_s_mp_mul_high_digs.c */ 591 /* End: bn_fast_s_mp_mul_high_digs.c */
577 592
578 /* Start: bn_fast_s_mp_sqr.c */ 593 /* Start: bn_fast_s_mp_sqr.c */
579 #include <tommath.h> 594 #include <tommath.h>
580 #ifdef BN_FAST_S_MP_SQR_C 595 #ifdef BN_FAST_S_MP_SQR_C
588 * additional optimizations in place. 603 * additional optimizations in place.
589 * 604 *
590 * The library is free for all purposes without any express 605 * The library is free for all purposes without any express
591 * guarantee it works. 606 * guarantee it works.
592 * 607 *
593 * Tom St Denis, [email protected], http://math.libtomcrypt.org 608 * Tom St Denis, [email protected], http://math.libtomcrypt.com
594 */ 609 */
595 610
596 /* the jist of squaring... 611 /* the jist of squaring...
597 * you do like mult except the offset of the tmpx [one that 612 * you do like mult except the offset of the tmpx [one that
598 * starts closer to zero] can't equal the offset of tmpy. 613 * starts closer to zero] can't equal the offset of tmpy.
685 mp_clamp (b); 700 mp_clamp (b);
686 return MP_OKAY; 701 return MP_OKAY;
687 } 702 }
688 #endif 703 #endif
689 704
705 /* $Source: /cvs/libtom/libtommath/bn_fast_s_mp_sqr.c,v $ */
706 /* $Revision: 1.3 $ */
707 /* $Date: 2006/03/31 14:18:44 $ */
708
690 /* End: bn_fast_s_mp_sqr.c */ 709 /* End: bn_fast_s_mp_sqr.c */
691 710
692 /* Start: bn_mp_2expt.c */ 711 /* Start: bn_mp_2expt.c */
693 #include <tommath.h> 712 #include <tommath.h>
694 #ifdef BN_MP_2EXPT_C 713 #ifdef BN_MP_2EXPT_C
702 * additional optimizations in place. 721 * additional optimizations in place.
703 * 722 *
704 * The library is free for all purposes without any express 723 * The library is free for all purposes without any express
705 * guarantee it works. 724 * guarantee it works.
706 * 725 *
707 * Tom St Denis, [email protected], http://math.libtomcrypt.org 726 * Tom St Denis, [email protected], http://math.libtomcrypt.com
708 */ 727 */
709 728
710 /* computes a = 2**b 729 /* computes a = 2**b
711 * 730 *
712 * Simple algorithm which zeroes the int, grows it then just sets one bit 731 * Simple algorithm which zeroes the int, grows it then just sets one bit
733 752
734 return MP_OKAY; 753 return MP_OKAY;
735 } 754 }
736 #endif 755 #endif
737 756
757 /* $Source: /cvs/libtom/libtommath/bn_mp_2expt.c,v $ */
758 /* $Revision: 1.3 $ */
759 /* $Date: 2006/03/31 14:18:44 $ */
760
738 /* End: bn_mp_2expt.c */ 761 /* End: bn_mp_2expt.c */
739 762
740 /* Start: bn_mp_abs.c */ 763 /* Start: bn_mp_abs.c */
741 #include <tommath.h> 764 #include <tommath.h>
742 #ifdef BN_MP_ABS_C 765 #ifdef BN_MP_ABS_C
750 * additional optimizations in place. 773 * additional optimizations in place.
751 * 774 *
752 * The library is free for all purposes without any express 775 * The library is free for all purposes without any express
753 * guarantee it works. 776 * guarantee it works.
754 * 777 *
755 * Tom St Denis, [email protected], http://math.libtomcrypt.org 778 * Tom St Denis, [email protected], http://math.libtomcrypt.com
756 */ 779 */
757 780
758 /* b = |a| 781 /* b = |a|
759 * 782 *
760 * Simple function copies the input and fixes the sign to positive 783 * Simple function copies the input and fixes the sign to positive
776 799
777 return MP_OKAY; 800 return MP_OKAY;
778 } 801 }
779 #endif 802 #endif
780 803
804 /* $Source: /cvs/libtom/libtommath/bn_mp_abs.c,v $ */
805 /* $Revision: 1.3 $ */
806 /* $Date: 2006/03/31 14:18:44 $ */
807
781 /* End: bn_mp_abs.c */ 808 /* End: bn_mp_abs.c */
782 809
783 /* Start: bn_mp_add.c */ 810 /* Start: bn_mp_add.c */
784 #include <tommath.h> 811 #include <tommath.h>
785 #ifdef BN_MP_ADD_C 812 #ifdef BN_MP_ADD_C
793 * additional optimizations in place. 820 * additional optimizations in place.
794 * 821 *
795 * The library is free for all purposes without any express 822 * The library is free for all purposes without any express
796 * guarantee it works. 823 * guarantee it works.
797 * 824 *
798 * Tom St Denis, [email protected], http://math.libtomcrypt.org 825 * Tom St Denis, [email protected], http://math.libtomcrypt.com
799 */ 826 */
800 827
801 /* high level addition (handles signs) */ 828 /* high level addition (handles signs) */
802 int mp_add (mp_int * a, mp_int * b, mp_int * c) 829 int mp_add (mp_int * a, mp_int * b, mp_int * c)
803 { 830 {
829 return res; 856 return res;
830 } 857 }
831 858
832 #endif 859 #endif
833 860
861 /* $Source: /cvs/libtom/libtommath/bn_mp_add.c,v $ */
862 /* $Revision: 1.3 $ */
863 /* $Date: 2006/03/31 14:18:44 $ */
864
834 /* End: bn_mp_add.c */ 865 /* End: bn_mp_add.c */
835 866
836 /* Start: bn_mp_add_d.c */ 867 /* Start: bn_mp_add_d.c */
837 #include <tommath.h> 868 #include <tommath.h>
838 #ifdef BN_MP_ADD_D_C 869 #ifdef BN_MP_ADD_D_C
846 * additional optimizations in place. 877 * additional optimizations in place.
847 * 878 *
848 * The library is free for all purposes without any express 879 * The library is free for all purposes without any express
849 * guarantee it works. 880 * guarantee it works.
850 * 881 *
851 * Tom St Denis, [email protected], http://math.libtomcrypt.org 882 * Tom St Denis, [email protected], http://math.libtomcrypt.com
852 */ 883 */
853 884
854 /* single digit addition */ 885 /* single digit addition */
855 int 886 int
856 mp_add_d (mp_int * a, mp_digit b, mp_int * c) 887 mp_add_d (mp_int * a, mp_digit b, mp_int * c)
873 /* c = |a| - b */ 904 /* c = |a| - b */
874 res = mp_sub_d(a, b, c); 905 res = mp_sub_d(a, b, c);
875 906
876 /* fix sign */ 907 /* fix sign */
877 a->sign = c->sign = MP_NEG; 908 a->sign = c->sign = MP_NEG;
909
910 /* clamp */
911 mp_clamp(c);
878 912
879 return res; 913 return res;
880 } 914 }
881 915
882 /* old number of used digits in c */ 916 /* old number of used digits in c */
938 return MP_OKAY; 972 return MP_OKAY;
939 } 973 }
940 974
941 #endif 975 #endif
942 976
977 /* $Source: /cvs/libtom/libtommath/bn_mp_add_d.c,v $ */
978 /* $Revision: 1.4 $ */
979 /* $Date: 2006/03/31 14:18:44 $ */
980
943 /* End: bn_mp_add_d.c */ 981 /* End: bn_mp_add_d.c */
944 982
945 /* Start: bn_mp_addmod.c */ 983 /* Start: bn_mp_addmod.c */
946 #include <tommath.h> 984 #include <tommath.h>
947 #ifdef BN_MP_ADDMOD_C 985 #ifdef BN_MP_ADDMOD_C
955 * additional optimizations in place. 993 * additional optimizations in place.
956 * 994 *
957 * The library is free for all purposes without any express 995 * The library is free for all purposes without any express
958 * guarantee it works. 996 * guarantee it works.
959 * 997 *
960 * Tom St Denis, [email protected], http://math.libtomcrypt.org 998 * Tom St Denis, [email protected], http://math.libtomcrypt.com
961 */ 999 */
962 1000
963 /* d = a + b (mod c) */ 1001 /* d = a + b (mod c) */
964 int 1002 int
965 mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) 1003 mp_addmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)
979 mp_clear (&t); 1017 mp_clear (&t);
980 return res; 1018 return res;
981 } 1019 }
982 #endif 1020 #endif
983 1021
1022 /* $Source: /cvs/libtom/libtommath/bn_mp_addmod.c,v $ */
1023 /* $Revision: 1.3 $ */
1024 /* $Date: 2006/03/31 14:18:44 $ */
1025
984 /* End: bn_mp_addmod.c */ 1026 /* End: bn_mp_addmod.c */
985 1027
986 /* Start: bn_mp_and.c */ 1028 /* Start: bn_mp_and.c */
987 #include <tommath.h> 1029 #include <tommath.h>
988 #ifdef BN_MP_AND_C 1030 #ifdef BN_MP_AND_C
996 * additional optimizations in place. 1038 * additional optimizations in place.
997 * 1039 *
998 * The library is free for all purposes without any express 1040 * The library is free for all purposes without any express
999 * guarantee it works. 1041 * guarantee it works.
1000 * 1042 *
1001 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1043 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1002 */ 1044 */
1003 1045
1004 /* AND two ints together */ 1046 /* AND two ints together */
1005 int 1047 int
1006 mp_and (mp_int * a, mp_int * b, mp_int * c) 1048 mp_and (mp_int * a, mp_int * b, mp_int * c)
1036 mp_clear (&t); 1078 mp_clear (&t);
1037 return MP_OKAY; 1079 return MP_OKAY;
1038 } 1080 }
1039 #endif 1081 #endif
1040 1082
1083 /* $Source: /cvs/libtom/libtommath/bn_mp_and.c,v $ */
1084 /* $Revision: 1.3 $ */
1085 /* $Date: 2006/03/31 14:18:44 $ */
1086
1041 /* End: bn_mp_and.c */ 1087 /* End: bn_mp_and.c */
1042 1088
1043 /* Start: bn_mp_clamp.c */ 1089 /* Start: bn_mp_clamp.c */
1044 #include <tommath.h> 1090 #include <tommath.h>
1045 #ifdef BN_MP_CLAMP_C 1091 #ifdef BN_MP_CLAMP_C
1053 * additional optimizations in place. 1099 * additional optimizations in place.
1054 * 1100 *
1055 * The library is free for all purposes without any express 1101 * The library is free for all purposes without any express
1056 * guarantee it works. 1102 * guarantee it works.
1057 * 1103 *
1058 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1104 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1059 */ 1105 */
1060 1106
1061 /* trim unused digits 1107 /* trim unused digits
1062 * 1108 *
1063 * This is used to ensure that leading zero digits are 1109 * This is used to ensure that leading zero digits are
1080 a->sign = MP_ZPOS; 1126 a->sign = MP_ZPOS;
1081 } 1127 }
1082 } 1128 }
1083 #endif 1129 #endif
1084 1130
1131 /* $Source: /cvs/libtom/libtommath/bn_mp_clamp.c,v $ */
1132 /* $Revision: 1.3 $ */
1133 /* $Date: 2006/03/31 14:18:44 $ */
1134
1085 /* End: bn_mp_clamp.c */ 1135 /* End: bn_mp_clamp.c */
1086 1136
1087 /* Start: bn_mp_clear.c */ 1137 /* Start: bn_mp_clear.c */
1088 #include <tommath.h> 1138 #include <tommath.h>
1089 #ifdef BN_MP_CLEAR_C 1139 #ifdef BN_MP_CLEAR_C
1097 * additional optimizations in place. 1147 * additional optimizations in place.
1098 * 1148 *
1099 * The library is free for all purposes without any express 1149 * The library is free for all purposes without any express
1100 * guarantee it works. 1150 * guarantee it works.
1101 * 1151 *
1102 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1152 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1103 */ 1153 */
1104 1154
1105 /* clear one (frees) */ 1155 /* clear one (frees) */
1106 void 1156 void
1107 mp_clear (mp_int * a) 1157 mp_clear (mp_int * a)
1124 a->sign = MP_ZPOS; 1174 a->sign = MP_ZPOS;
1125 } 1175 }
1126 } 1176 }
1127 #endif 1177 #endif
1128 1178
1179 /* $Source: /cvs/libtom/libtommath/bn_mp_clear.c,v $ */
1180 /* $Revision: 1.3 $ */
1181 /* $Date: 2006/03/31 14:18:44 $ */
1182
1129 /* End: bn_mp_clear.c */ 1183 /* End: bn_mp_clear.c */
1130 1184
1131 /* Start: bn_mp_clear_multi.c */ 1185 /* Start: bn_mp_clear_multi.c */
1132 #include <tommath.h> 1186 #include <tommath.h>
1133 #ifdef BN_MP_CLEAR_MULTI_C 1187 #ifdef BN_MP_CLEAR_MULTI_C
1141 * additional optimizations in place. 1195 * additional optimizations in place.
1142 * 1196 *
1143 * The library is free for all purposes without any express 1197 * The library is free for all purposes without any express
1144 * guarantee it works. 1198 * guarantee it works.
1145 * 1199 *
1146 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1200 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1147 */ 1201 */
1148 #include <stdarg.h> 1202 #include <stdarg.h>
1149 1203
1150 void mp_clear_multi(mp_int *mp, ...) 1204 void mp_clear_multi(mp_int *mp, ...)
1151 { 1205 {
1158 } 1212 }
1159 va_end(args); 1213 va_end(args);
1160 } 1214 }
1161 #endif 1215 #endif
1162 1216
1217 /* $Source: /cvs/libtom/libtommath/bn_mp_clear_multi.c,v $ */
1218 /* $Revision: 1.3 $ */
1219 /* $Date: 2006/03/31 14:18:44 $ */
1220
1163 /* End: bn_mp_clear_multi.c */ 1221 /* End: bn_mp_clear_multi.c */
1164 1222
1165 /* Start: bn_mp_cmp.c */ 1223 /* Start: bn_mp_cmp.c */
1166 #include <tommath.h> 1224 #include <tommath.h>
1167 #ifdef BN_MP_CMP_C 1225 #ifdef BN_MP_CMP_C
1175 * additional optimizations in place. 1233 * additional optimizations in place.
1176 * 1234 *
1177 * The library is free for all purposes without any express 1235 * The library is free for all purposes without any express
1178 * guarantee it works. 1236 * guarantee it works.
1179 * 1237 *
1180 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1238 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1181 */ 1239 */
1182 1240
1183 /* compare two ints (signed)*/ 1241 /* compare two ints (signed)*/
1184 int 1242 int
1185 mp_cmp (mp_int * a, mp_int * b) 1243 mp_cmp (mp_int * a, mp_int * b)
1201 return mp_cmp_mag(a, b); 1259 return mp_cmp_mag(a, b);
1202 } 1260 }
1203 } 1261 }
1204 #endif 1262 #endif
1205 1263
1264 /* $Source: /cvs/libtom/libtommath/bn_mp_cmp.c,v $ */
1265 /* $Revision: 1.3 $ */
1266 /* $Date: 2006/03/31 14:18:44 $ */
1267
1206 /* End: bn_mp_cmp.c */ 1268 /* End: bn_mp_cmp.c */
1207 1269
1208 /* Start: bn_mp_cmp_d.c */ 1270 /* Start: bn_mp_cmp_d.c */
1209 #include <tommath.h> 1271 #include <tommath.h>
1210 #ifdef BN_MP_CMP_D_C 1272 #ifdef BN_MP_CMP_D_C
1218 * additional optimizations in place. 1280 * additional optimizations in place.
1219 * 1281 *
1220 * The library is free for all purposes without any express 1282 * The library is free for all purposes without any express
1221 * guarantee it works. 1283 * guarantee it works.
1222 * 1284 *
1223 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1285 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1224 */ 1286 */
1225 1287
1226 /* compare a digit */ 1288 /* compare a digit */
1227 int mp_cmp_d(mp_int * a, mp_digit b) 1289 int mp_cmp_d(mp_int * a, mp_digit b)
1228 { 1290 {
1245 return MP_EQ; 1307 return MP_EQ;
1246 } 1308 }
1247 } 1309 }
1248 #endif 1310 #endif
1249 1311
1312 /* $Source: /cvs/libtom/libtommath/bn_mp_cmp_d.c,v $ */
1313 /* $Revision: 1.3 $ */
1314 /* $Date: 2006/03/31 14:18:44 $ */
1315
1250 /* End: bn_mp_cmp_d.c */ 1316 /* End: bn_mp_cmp_d.c */
1251 1317
1252 /* Start: bn_mp_cmp_mag.c */ 1318 /* Start: bn_mp_cmp_mag.c */
1253 #include <tommath.h> 1319 #include <tommath.h>
1254 #ifdef BN_MP_CMP_MAG_C 1320 #ifdef BN_MP_CMP_MAG_C
1262 * additional optimizations in place. 1328 * additional optimizations in place.
1263 * 1329 *
1264 * The library is free for all purposes without any express 1330 * The library is free for all purposes without any express
1265 * guarantee it works. 1331 * guarantee it works.
1266 * 1332 *
1267 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1333 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1268 */ 1334 */
1269 1335
1270 /* compare maginitude of two ints (unsigned) */ 1336 /* compare maginitude of two ints (unsigned) */
1271 int mp_cmp_mag (mp_int * a, mp_int * b) 1337 int mp_cmp_mag (mp_int * a, mp_int * b)
1272 { 1338 {
1300 } 1366 }
1301 return MP_EQ; 1367 return MP_EQ;
1302 } 1368 }
1303 #endif 1369 #endif
1304 1370
1371 /* $Source: /cvs/libtom/libtommath/bn_mp_cmp_mag.c,v $ */
1372 /* $Revision: 1.3 $ */
1373 /* $Date: 2006/03/31 14:18:44 $ */
1374
1305 /* End: bn_mp_cmp_mag.c */ 1375 /* End: bn_mp_cmp_mag.c */
1306 1376
1307 /* Start: bn_mp_cnt_lsb.c */ 1377 /* Start: bn_mp_cnt_lsb.c */
1308 #include <tommath.h> 1378 #include <tommath.h>
1309 #ifdef BN_MP_CNT_LSB_C 1379 #ifdef BN_MP_CNT_LSB_C
1317 * additional optimizations in place. 1387 * additional optimizations in place.
1318 * 1388 *
1319 * The library is free for all purposes without any express 1389 * The library is free for all purposes without any express
1320 * guarantee it works. 1390 * guarantee it works.
1321 * 1391 *
1322 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1392 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1323 */ 1393 */
1324 1394
1325 static const int lnz[16] = { 1395 static const int lnz[16] = {
1326 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 1396 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0
1327 }; 1397 };
1353 return x; 1423 return x;
1354 } 1424 }
1355 1425
1356 #endif 1426 #endif
1357 1427
1428 /* $Source: /cvs/libtom/libtommath/bn_mp_cnt_lsb.c,v $ */
1429 /* $Revision: 1.3 $ */
1430 /* $Date: 2006/03/31 14:18:44 $ */
1431
1358 /* End: bn_mp_cnt_lsb.c */ 1432 /* End: bn_mp_cnt_lsb.c */
1359 1433
1360 /* Start: bn_mp_copy.c */ 1434 /* Start: bn_mp_copy.c */
1361 #include <tommath.h> 1435 #include <tommath.h>
1362 #ifdef BN_MP_COPY_C 1436 #ifdef BN_MP_COPY_C
1370 * additional optimizations in place. 1444 * additional optimizations in place.
1371 * 1445 *
1372 * The library is free for all purposes without any express 1446 * The library is free for all purposes without any express
1373 * guarantee it works. 1447 * guarantee it works.
1374 * 1448 *
1375 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1449 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1376 */ 1450 */
1377 1451
1378 /* copy, b = a */ 1452 /* copy, b = a */
1379 int 1453 int
1380 mp_copy (mp_int * a, mp_int * b) 1454 mp_copy (mp_int * a, mp_int * b)
1421 b->sign = a->sign; 1495 b->sign = a->sign;
1422 return MP_OKAY; 1496 return MP_OKAY;
1423 } 1497 }
1424 #endif 1498 #endif
1425 1499
1500 /* $Source: /cvs/libtom/libtommath/bn_mp_copy.c,v $ */
1501 /* $Revision: 1.3 $ */
1502 /* $Date: 2006/03/31 14:18:44 $ */
1503
1426 /* End: bn_mp_copy.c */ 1504 /* End: bn_mp_copy.c */
1427 1505
1428 /* Start: bn_mp_count_bits.c */ 1506 /* Start: bn_mp_count_bits.c */
1429 #include <tommath.h> 1507 #include <tommath.h>
1430 #ifdef BN_MP_COUNT_BITS_C 1508 #ifdef BN_MP_COUNT_BITS_C
1438 * additional optimizations in place. 1516 * additional optimizations in place.
1439 * 1517 *
1440 * The library is free for all purposes without any express 1518 * The library is free for all purposes without any express
1441 * guarantee it works. 1519 * guarantee it works.
1442 * 1520 *
1443 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1521 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1444 */ 1522 */
1445 1523
1446 /* returns the number of bits in an int */ 1524 /* returns the number of bits in an int */
1447 int 1525 int
1448 mp_count_bits (mp_int * a) 1526 mp_count_bits (mp_int * a)
1466 } 1544 }
1467 return r; 1545 return r;
1468 } 1546 }
1469 #endif 1547 #endif
1470 1548
1549 /* $Source: /cvs/libtom/libtommath/bn_mp_count_bits.c,v $ */
1550 /* $Revision: 1.3 $ */
1551 /* $Date: 2006/03/31 14:18:44 $ */
1552
1471 /* End: bn_mp_count_bits.c */ 1553 /* End: bn_mp_count_bits.c */
1472 1554
1473 /* Start: bn_mp_div.c */ 1555 /* Start: bn_mp_div.c */
1474 #include <tommath.h> 1556 #include <tommath.h>
1475 #ifdef BN_MP_DIV_C 1557 #ifdef BN_MP_DIV_C
1483 * additional optimizations in place. 1565 * additional optimizations in place.
1484 * 1566 *
1485 * The library is free for all purposes without any express 1567 * The library is free for all purposes without any express
1486 * guarantee it works. 1568 * guarantee it works.
1487 * 1569 *
1488 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1570 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1489 */ 1571 */
1490 1572
1491 #ifdef BN_MP_DIV_SMALL 1573 #ifdef BN_MP_DIV_SMALL
1492 1574
1493 /* slower bit-bang division... also smaller */ 1575 /* slower bit-bang division... also smaller */
1758 1840
1759 #endif 1841 #endif
1760 1842
1761 #endif 1843 #endif
1762 1844
1845 /* $Source: /cvs/libtom/libtommath/bn_mp_div.c,v $ */
1846 /* $Revision: 1.3 $ */
1847 /* $Date: 2006/03/31 14:18:44 $ */
1848
1763 /* End: bn_mp_div.c */ 1849 /* End: bn_mp_div.c */
1764 1850
1765 /* Start: bn_mp_div_2.c */ 1851 /* Start: bn_mp_div_2.c */
1766 #include <tommath.h> 1852 #include <tommath.h>
1767 #ifdef BN_MP_DIV_2_C 1853 #ifdef BN_MP_DIV_2_C
1775 * additional optimizations in place. 1861 * additional optimizations in place.
1776 * 1862 *
1777 * The library is free for all purposes without any express 1863 * The library is free for all purposes without any express
1778 * guarantee it works. 1864 * guarantee it works.
1779 * 1865 *
1780 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1866 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1781 */ 1867 */
1782 1868
1783 /* b = a/2 */ 1869 /* b = a/2 */
1784 int mp_div_2(mp_int * a, mp_int * b) 1870 int mp_div_2(mp_int * a, mp_int * b)
1785 { 1871 {
1826 mp_clamp (b); 1912 mp_clamp (b);
1827 return MP_OKAY; 1913 return MP_OKAY;
1828 } 1914 }
1829 #endif 1915 #endif
1830 1916
1917 /* $Source: /cvs/libtom/libtommath/bn_mp_div_2.c,v $ */
1918 /* $Revision: 1.3 $ */
1919 /* $Date: 2006/03/31 14:18:44 $ */
1920
1831 /* End: bn_mp_div_2.c */ 1921 /* End: bn_mp_div_2.c */
1832 1922
1833 /* Start: bn_mp_div_2d.c */ 1923 /* Start: bn_mp_div_2d.c */
1834 #include <tommath.h> 1924 #include <tommath.h>
1835 #ifdef BN_MP_DIV_2D_C 1925 #ifdef BN_MP_DIV_2D_C
1843 * additional optimizations in place. 1933 * additional optimizations in place.
1844 * 1934 *
1845 * The library is free for all purposes without any express 1935 * The library is free for all purposes without any express
1846 * guarantee it works. 1936 * guarantee it works.
1847 * 1937 *
1848 * Tom St Denis, [email protected], http://math.libtomcrypt.org 1938 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1849 */ 1939 */
1850 1940
1851 /* shift right by a certain bit count (store quotient in c, optional remainder in d) */ 1941 /* shift right by a certain bit count (store quotient in c, optional remainder in d) */
1852 int mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d) 1942 int mp_div_2d (mp_int * a, int b, mp_int * c, mp_int * d)
1853 { 1943 {
1923 mp_clear (&t); 2013 mp_clear (&t);
1924 return MP_OKAY; 2014 return MP_OKAY;
1925 } 2015 }
1926 #endif 2016 #endif
1927 2017
2018 /* $Source: /cvs/libtom/libtommath/bn_mp_div_2d.c,v $ */
2019 /* $Revision: 1.3 $ */
2020 /* $Date: 2006/03/31 14:18:44 $ */
2021
1928 /* End: bn_mp_div_2d.c */ 2022 /* End: bn_mp_div_2d.c */
1929 2023
1930 /* Start: bn_mp_div_3.c */ 2024 /* Start: bn_mp_div_3.c */
1931 #include <tommath.h> 2025 #include <tommath.h>
1932 #ifdef BN_MP_DIV_3_C 2026 #ifdef BN_MP_DIV_3_C
1940 * additional optimizations in place. 2034 * additional optimizations in place.
1941 * 2035 *
1942 * The library is free for all purposes without any express 2036 * The library is free for all purposes without any express
1943 * guarantee it works. 2037 * guarantee it works.
1944 * 2038 *
1945 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2039 * Tom St Denis, [email protected], http://math.libtomcrypt.com
1946 */ 2040 */
1947 2041
1948 /* divide by three (based on routine from MPI and the GMP manual) */ 2042 /* divide by three (based on routine from MPI and the GMP manual) */
1949 int 2043 int
1950 mp_div_3 (mp_int * a, mp_int *c, mp_digit * d) 2044 mp_div_3 (mp_int * a, mp_int *c, mp_digit * d)
2002 return res; 2096 return res;
2003 } 2097 }
2004 2098
2005 #endif 2099 #endif
2006 2100
2101 /* $Source: /cvs/libtom/libtommath/bn_mp_div_3.c,v $ */
2102 /* $Revision: 1.3 $ */
2103 /* $Date: 2006/03/31 14:18:44 $ */
2104
2007 /* End: bn_mp_div_3.c */ 2105 /* End: bn_mp_div_3.c */
2008 2106
2009 /* Start: bn_mp_div_d.c */ 2107 /* Start: bn_mp_div_d.c */
2010 #include <tommath.h> 2108 #include <tommath.h>
2011 #ifdef BN_MP_DIV_D_C 2109 #ifdef BN_MP_DIV_D_C
2019 * additional optimizations in place. 2117 * additional optimizations in place.
2020 * 2118 *
2021 * The library is free for all purposes without any express 2119 * The library is free for all purposes without any express
2022 * guarantee it works. 2120 * guarantee it works.
2023 * 2121 *
2024 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2122 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2025 */ 2123 */
2026 2124
2027 static int s_is_power_of_two(mp_digit b, int *p) 2125 static int s_is_power_of_two(mp_digit b, int *p)
2028 { 2126 {
2029 int x; 2127 int x;
2112 return res; 2210 return res;
2113 } 2211 }
2114 2212
2115 #endif 2213 #endif
2116 2214
2215 /* $Source: /cvs/libtom/libtommath/bn_mp_div_d.c,v $ */
2216 /* $Revision: 1.3 $ */
2217 /* $Date: 2006/03/31 14:18:44 $ */
2218
2117 /* End: bn_mp_div_d.c */ 2219 /* End: bn_mp_div_d.c */
2118 2220
2119 /* Start: bn_mp_dr_is_modulus.c */ 2221 /* Start: bn_mp_dr_is_modulus.c */
2120 #include <tommath.h> 2222 #include <tommath.h>
2121 #ifdef BN_MP_DR_IS_MODULUS_C 2223 #ifdef BN_MP_DR_IS_MODULUS_C
2129 * additional optimizations in place. 2231 * additional optimizations in place.
2130 * 2232 *
2131 * The library is free for all purposes without any express 2233 * The library is free for all purposes without any express
2132 * guarantee it works. 2234 * guarantee it works.
2133 * 2235 *
2134 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2236 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2135 */ 2237 */
2136 2238
2137 /* determines if a number is a valid DR modulus */ 2239 /* determines if a number is a valid DR modulus */
2138 int mp_dr_is_modulus(mp_int *a) 2240 int mp_dr_is_modulus(mp_int *a)
2139 { 2241 {
2155 return 1; 2257 return 1;
2156 } 2258 }
2157 2259
2158 #endif 2260 #endif
2159 2261
2262 /* $Source: /cvs/libtom/libtommath/bn_mp_dr_is_modulus.c,v $ */
2263 /* $Revision: 1.3 $ */
2264 /* $Date: 2006/03/31 14:18:44 $ */
2265
2160 /* End: bn_mp_dr_is_modulus.c */ 2266 /* End: bn_mp_dr_is_modulus.c */
2161 2267
2162 /* Start: bn_mp_dr_reduce.c */ 2268 /* Start: bn_mp_dr_reduce.c */
2163 #include <tommath.h> 2269 #include <tommath.h>
2164 #ifdef BN_MP_DR_REDUCE_C 2270 #ifdef BN_MP_DR_REDUCE_C
2172 * additional optimizations in place. 2278 * additional optimizations in place.
2173 * 2279 *
2174 * The library is free for all purposes without any express 2280 * The library is free for all purposes without any express
2175 * guarantee it works. 2281 * guarantee it works.
2176 * 2282 *
2177 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2283 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2178 */ 2284 */
2179 2285
2180 /* reduce "x" in place modulo "n" using the Diminished Radix algorithm. 2286 /* reduce "x" in place modulo "n" using the Diminished Radix algorithm.
2181 * 2287 *
2182 * Based on algorithm from the paper 2288 * Based on algorithm from the paper
2249 } 2355 }
2250 return MP_OKAY; 2356 return MP_OKAY;
2251 } 2357 }
2252 #endif 2358 #endif
2253 2359
2360 /* $Source: /cvs/libtom/libtommath/bn_mp_dr_reduce.c,v $ */
2361 /* $Revision: 1.3 $ */
2362 /* $Date: 2006/03/31 14:18:44 $ */
2363
2254 /* End: bn_mp_dr_reduce.c */ 2364 /* End: bn_mp_dr_reduce.c */
2255 2365
2256 /* Start: bn_mp_dr_setup.c */ 2366 /* Start: bn_mp_dr_setup.c */
2257 #include <tommath.h> 2367 #include <tommath.h>
2258 #ifdef BN_MP_DR_SETUP_C 2368 #ifdef BN_MP_DR_SETUP_C
2266 * additional optimizations in place. 2376 * additional optimizations in place.
2267 * 2377 *
2268 * The library is free for all purposes without any express 2378 * The library is free for all purposes without any express
2269 * guarantee it works. 2379 * guarantee it works.
2270 * 2380 *
2271 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2381 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2272 */ 2382 */
2273 2383
2274 /* determines the setup value */ 2384 /* determines the setup value */
2275 void mp_dr_setup(mp_int *a, mp_digit *d) 2385 void mp_dr_setup(mp_int *a, mp_digit *d)
2276 { 2386 {
2281 ((mp_word)a->dp[0])); 2391 ((mp_word)a->dp[0]));
2282 } 2392 }
2283 2393
2284 #endif 2394 #endif
2285 2395
2396 /* $Source: /cvs/libtom/libtommath/bn_mp_dr_setup.c,v $ */
2397 /* $Revision: 1.3 $ */
2398 /* $Date: 2006/03/31 14:18:44 $ */
2399
2286 /* End: bn_mp_dr_setup.c */ 2400 /* End: bn_mp_dr_setup.c */
2287 2401
2288 /* Start: bn_mp_exch.c */ 2402 /* Start: bn_mp_exch.c */
2289 #include <tommath.h> 2403 #include <tommath.h>
2290 #ifdef BN_MP_EXCH_C 2404 #ifdef BN_MP_EXCH_C
2298 * additional optimizations in place. 2412 * additional optimizations in place.
2299 * 2413 *
2300 * The library is free for all purposes without any express 2414 * The library is free for all purposes without any express
2301 * guarantee it works. 2415 * guarantee it works.
2302 * 2416 *
2303 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2417 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2304 */ 2418 */
2305 2419
2306 /* swap the elements of two integers, for cases where you can't simply swap the 2420 /* swap the elements of two integers, for cases where you can't simply swap the
2307 * mp_int pointers around 2421 * mp_int pointers around
2308 */ 2422 */
2315 *a = *b; 2429 *a = *b;
2316 *b = t; 2430 *b = t;
2317 } 2431 }
2318 #endif 2432 #endif
2319 2433
2434 /* $Source: /cvs/libtom/libtommath/bn_mp_exch.c,v $ */
2435 /* $Revision: 1.3 $ */
2436 /* $Date: 2006/03/31 14:18:44 $ */
2437
2320 /* End: bn_mp_exch.c */ 2438 /* End: bn_mp_exch.c */
2321 2439
2322 /* Start: bn_mp_expt_d.c */ 2440 /* Start: bn_mp_expt_d.c */
2323 #include <tommath.h> 2441 #include <tommath.h>
2324 #ifdef BN_MP_EXPT_D_C 2442 #ifdef BN_MP_EXPT_D_C
2332 * additional optimizations in place. 2450 * additional optimizations in place.
2333 * 2451 *
2334 * The library is free for all purposes without any express 2452 * The library is free for all purposes without any express
2335 * guarantee it works. 2453 * guarantee it works.
2336 * 2454 *
2337 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2455 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2338 */ 2456 */
2339 2457
2340 /* calculate c = a**b using a square-multiply algorithm */ 2458 /* calculate c = a**b using a square-multiply algorithm */
2341 int mp_expt_d (mp_int * a, mp_digit b, mp_int * c) 2459 int mp_expt_d (mp_int * a, mp_digit b, mp_int * c)
2342 { 2460 {
2372 mp_clear (&g); 2490 mp_clear (&g);
2373 return MP_OKAY; 2491 return MP_OKAY;
2374 } 2492 }
2375 #endif 2493 #endif
2376 2494
2495 /* $Source: /cvs/libtom/libtommath/bn_mp_expt_d.c,v $ */
2496 /* $Revision: 1.3 $ */
2497 /* $Date: 2006/03/31 14:18:44 $ */
2498
2377 /* End: bn_mp_expt_d.c */ 2499 /* End: bn_mp_expt_d.c */
2378 2500
2379 /* Start: bn_mp_exptmod.c */ 2501 /* Start: bn_mp_exptmod.c */
2380 #include <tommath.h> 2502 #include <tommath.h>
2381 #ifdef BN_MP_EXPTMOD_C 2503 #ifdef BN_MP_EXPTMOD_C
2389 * additional optimizations in place. 2511 * additional optimizations in place.
2390 * 2512 *
2391 * The library is free for all purposes without any express 2513 * The library is free for all purposes without any express
2392 * guarantee it works. 2514 * guarantee it works.
2393 * 2515 *
2394 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2516 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2395 */ 2517 */
2396 2518
2397 2519
2398 /* this is a shell function that calls either the normal or Montgomery 2520 /* this is a shell function that calls either the normal or Montgomery
2399 * exptmod functions. Originally the call to the montgomery code was 2521 * exptmod functions. Originally the call to the montgomery code was
2443 return MP_VAL; 2565 return MP_VAL;
2444 #endif 2566 #endif
2445 } 2567 }
2446 2568
2447 /* modified diminished radix reduction */ 2569 /* modified diminished radix reduction */
2448 #if defined(BN_MP_REDUCE_IS_2K_L_C) && defined(BN_MP_REDUCE_2K_L_C) 2570 #if defined(BN_MP_REDUCE_IS_2K_L_C) && defined(BN_MP_REDUCE_2K_L_C) && defined(BN_S_MP_EXPTMOD_C)
2449 if (mp_reduce_is_2k_l(P) == MP_YES) { 2571 if (mp_reduce_is_2k_l(P) == MP_YES) {
2450 return s_mp_exptmod(G, X, P, Y, 1); 2572 return s_mp_exptmod(G, X, P, Y, 1);
2451 } 2573 }
2452 #endif 2574 #endif
2453 2575
2484 #endif 2606 #endif
2485 } 2607 }
2486 2608
2487 #endif 2609 #endif
2488 2610
2611 /* $Source: /cvs/libtom/libtommath/bn_mp_exptmod.c,v $ */
2612 /* $Revision: 1.4 $ */
2613 /* $Date: 2006/03/31 14:18:44 $ */
2614
2489 /* End: bn_mp_exptmod.c */ 2615 /* End: bn_mp_exptmod.c */
2490 2616
2491 /* Start: bn_mp_exptmod_fast.c */ 2617 /* Start: bn_mp_exptmod_fast.c */
2492 #include <tommath.h> 2618 #include <tommath.h>
2493 #ifdef BN_MP_EXPTMOD_FAST_C 2619 #ifdef BN_MP_EXPTMOD_FAST_C
2501 * additional optimizations in place. 2627 * additional optimizations in place.
2502 * 2628 *
2503 * The library is free for all purposes without any express 2629 * The library is free for all purposes without any express
2504 * guarantee it works. 2630 * guarantee it works.
2505 * 2631 *
2506 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2632 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2507 */ 2633 */
2508 2634
2509 /* computes Y == G**X mod P, HAC pp.616, Algorithm 14.85 2635 /* computes Y == G**X mod P, HAC pp.616, Algorithm 14.85
2510 * 2636 *
2511 * Uses a left-to-right k-ary sliding window to compute the modular exponentiation. 2637 * Uses a left-to-right k-ary sliding window to compute the modular exponentiation.
2805 return err; 2931 return err;
2806 } 2932 }
2807 #endif 2933 #endif
2808 2934
2809 2935
2936 /* $Source: /cvs/libtom/libtommath/bn_mp_exptmod_fast.c,v $ */
2937 /* $Revision: 1.3 $ */
2938 /* $Date: 2006/03/31 14:18:44 $ */
2939
2810 /* End: bn_mp_exptmod_fast.c */ 2940 /* End: bn_mp_exptmod_fast.c */
2811 2941
2812 /* Start: bn_mp_exteuclid.c */ 2942 /* Start: bn_mp_exteuclid.c */
2813 #include <tommath.h> 2943 #include <tommath.h>
2814 #ifdef BN_MP_EXTEUCLID_C 2944 #ifdef BN_MP_EXTEUCLID_C
2822 * additional optimizations in place. 2952 * additional optimizations in place.
2823 * 2953 *
2824 * The library is free for all purposes without any express 2954 * The library is free for all purposes without any express
2825 * guarantee it works. 2955 * guarantee it works.
2826 * 2956 *
2827 * Tom St Denis, [email protected], http://math.libtomcrypt.org 2957 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2828 */ 2958 */
2829 2959
2830 /* Extended euclidean algorithm of (a, b) produces 2960 /* Extended euclidean algorithm of (a, b) produces
2831 a*u1 + b*u2 = u3 2961 a*u1 + b*u2 = u3
2832 */ 2962 */
2887 _ERR: mp_clear_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL); 3017 _ERR: mp_clear_multi(&u1, &u2, &u3, &v1, &v2, &v3, &t1, &t2, &t3, &q, &tmp, NULL);
2888 return err; 3018 return err;
2889 } 3019 }
2890 #endif 3020 #endif
2891 3021
3022 /* $Source: /cvs/libtom/libtommath/bn_mp_exteuclid.c,v $ */
3023 /* $Revision: 1.3 $ */
3024 /* $Date: 2006/03/31 14:18:44 $ */
3025
2892 /* End: bn_mp_exteuclid.c */ 3026 /* End: bn_mp_exteuclid.c */
2893 3027
2894 /* Start: bn_mp_fread.c */ 3028 /* Start: bn_mp_fread.c */
2895 #include <tommath.h> 3029 #include <tommath.h>
2896 #ifdef BN_MP_FREAD_C 3030 #ifdef BN_MP_FREAD_C
2904 * additional optimizations in place. 3038 * additional optimizations in place.
2905 * 3039 *
2906 * The library is free for all purposes without any express 3040 * The library is free for all purposes without any express
2907 * guarantee it works. 3041 * guarantee it works.
2908 * 3042 *
2909 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3043 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2910 */ 3044 */
2911 3045
2912 /* read a bigint from a file stream in ASCII */ 3046 /* read a bigint from a file stream in ASCII */
2913 int mp_fread(mp_int *a, int radix, FILE *stream) 3047 int mp_fread(mp_int *a, int radix, FILE *stream)
2914 { 3048 {
2954 return MP_OKAY; 3088 return MP_OKAY;
2955 } 3089 }
2956 3090
2957 #endif 3091 #endif
2958 3092
3093 /* $Source: /cvs/libtom/libtommath/bn_mp_fread.c,v $ */
3094 /* $Revision: 1.3 $ */
3095 /* $Date: 2006/03/31 14:18:44 $ */
3096
2959 /* End: bn_mp_fread.c */ 3097 /* End: bn_mp_fread.c */
2960 3098
2961 /* Start: bn_mp_fwrite.c */ 3099 /* Start: bn_mp_fwrite.c */
2962 #include <tommath.h> 3100 #include <tommath.h>
2963 #ifdef BN_MP_FWRITE_C 3101 #ifdef BN_MP_FWRITE_C
2971 * additional optimizations in place. 3109 * additional optimizations in place.
2972 * 3110 *
2973 * The library is free for all purposes without any express 3111 * The library is free for all purposes without any express
2974 * guarantee it works. 3112 * guarantee it works.
2975 * 3113 *
2976 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3114 * Tom St Denis, [email protected], http://math.libtomcrypt.com
2977 */ 3115 */
2978 3116
2979 int mp_fwrite(mp_int *a, int radix, FILE *stream) 3117 int mp_fwrite(mp_int *a, int radix, FILE *stream)
2980 { 3118 {
2981 char *buf; 3119 char *buf;
3006 return MP_OKAY; 3144 return MP_OKAY;
3007 } 3145 }
3008 3146
3009 #endif 3147 #endif
3010 3148
3149 /* $Source: /cvs/libtom/libtommath/bn_mp_fwrite.c,v $ */
3150 /* $Revision: 1.3 $ */
3151 /* $Date: 2006/03/31 14:18:44 $ */
3152
3011 /* End: bn_mp_fwrite.c */ 3153 /* End: bn_mp_fwrite.c */
3012 3154
3013 /* Start: bn_mp_gcd.c */ 3155 /* Start: bn_mp_gcd.c */
3014 #include <tommath.h> 3156 #include <tommath.h>
3015 #ifdef BN_MP_GCD_C 3157 #ifdef BN_MP_GCD_C
3023 * additional optimizations in place. 3165 * additional optimizations in place.
3024 * 3166 *
3025 * The library is free for all purposes without any express 3167 * The library is free for all purposes without any express
3026 * guarantee it works. 3168 * guarantee it works.
3027 * 3169 *
3028 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3170 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3029 */ 3171 */
3030 3172
3031 /* Greatest Common Divisor using the binary method */ 3173 /* Greatest Common Divisor using the binary method */
3032 int mp_gcd (mp_int * a, mp_int * b, mp_int * c) 3174 int mp_gcd (mp_int * a, mp_int * b, mp_int * c)
3033 { 3175 {
3034 mp_int u, v; 3176 mp_int u, v;
3035 int k, u_lsb, v_lsb, res; 3177 int k, u_lsb, v_lsb, res;
3036 3178
3037 /* either zero than gcd is the largest */ 3179 /* either zero than gcd is the largest */
3038 if (mp_iszero (a) == 1 && mp_iszero (b) == 0) { 3180 if (mp_iszero (a) == MP_YES) {
3039 return mp_abs (b, c); 3181 return mp_abs (b, c);
3040 } 3182 }
3041 if (mp_iszero (a) == 0 && mp_iszero (b) == 1) { 3183 if (mp_iszero (b) == MP_YES) {
3042 return mp_abs (a, c); 3184 return mp_abs (a, c);
3043 }
3044
3045 /* optimized. At this point if a == 0 then
3046 * b must equal zero too
3047 */
3048 if (mp_iszero (a) == 1) {
3049 mp_zero(c);
3050 return MP_OKAY;
3051 } 3185 }
3052 3186
3053 /* get copies of a and b we can modify */ 3187 /* get copies of a and b we can modify */
3054 if ((res = mp_init_copy (&u, a)) != MP_OKAY) { 3188 if ((res = mp_init_copy (&u, a)) != MP_OKAY) {
3055 return res; 3189 return res;
3119 LBL_U:mp_clear (&v); 3253 LBL_U:mp_clear (&v);
3120 return res; 3254 return res;
3121 } 3255 }
3122 #endif 3256 #endif
3123 3257
3258 /* $Source: /cvs/libtom/libtommath/bn_mp_gcd.c,v $ */
3259 /* $Revision: 1.4 $ */
3260 /* $Date: 2006/03/31 14:18:44 $ */
3261
3124 /* End: bn_mp_gcd.c */ 3262 /* End: bn_mp_gcd.c */
3125 3263
3126 /* Start: bn_mp_get_int.c */ 3264 /* Start: bn_mp_get_int.c */
3127 #include <tommath.h> 3265 #include <tommath.h>
3128 #ifdef BN_MP_GET_INT_C 3266 #ifdef BN_MP_GET_INT_C
3136 * additional optimizations in place. 3274 * additional optimizations in place.
3137 * 3275 *
3138 * The library is free for all purposes without any express 3276 * The library is free for all purposes without any express
3139 * guarantee it works. 3277 * guarantee it works.
3140 * 3278 *
3141 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3279 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3142 */ 3280 */
3143 3281
3144 /* get the lower 32-bits of an mp_int */ 3282 /* get the lower 32-bits of an mp_int */
3145 unsigned long mp_get_int(mp_int * a) 3283 unsigned long mp_get_int(mp_int * a)
3146 { 3284 {
3164 /* force result to 32-bits always so it is consistent on non 32-bit platforms */ 3302 /* force result to 32-bits always so it is consistent on non 32-bit platforms */
3165 return res & 0xFFFFFFFFUL; 3303 return res & 0xFFFFFFFFUL;
3166 } 3304 }
3167 #endif 3305 #endif
3168 3306
3307 /* $Source: /cvs/libtom/libtommath/bn_mp_get_int.c,v $ */
3308 /* $Revision: 1.3 $ */
3309 /* $Date: 2006/03/31 14:18:44 $ */
3310
3169 /* End: bn_mp_get_int.c */ 3311 /* End: bn_mp_get_int.c */
3170 3312
3171 /* Start: bn_mp_grow.c */ 3313 /* Start: bn_mp_grow.c */
3172 #include <tommath.h> 3314 #include <tommath.h>
3173 #ifdef BN_MP_GROW_C 3315 #ifdef BN_MP_GROW_C
3181 * additional optimizations in place. 3323 * additional optimizations in place.
3182 * 3324 *
3183 * The library is free for all purposes without any express 3325 * The library is free for all purposes without any express
3184 * guarantee it works. 3326 * guarantee it works.
3185 * 3327 *
3186 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3328 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3187 */ 3329 */
3188 3330
3189 /* grow as required */ 3331 /* grow as required */
3190 int mp_grow (mp_int * a, int size) 3332 int mp_grow (mp_int * a, int size)
3191 { 3333 {
3221 } 3363 }
3222 return MP_OKAY; 3364 return MP_OKAY;
3223 } 3365 }
3224 #endif 3366 #endif
3225 3367
3368 /* $Source: /cvs/libtom/libtommath/bn_mp_grow.c,v $ */
3369 /* $Revision: 1.3 $ */
3370 /* $Date: 2006/03/31 14:18:44 $ */
3371
3226 /* End: bn_mp_grow.c */ 3372 /* End: bn_mp_grow.c */
3227 3373
3228 /* Start: bn_mp_init.c */ 3374 /* Start: bn_mp_init.c */
3229 #include <tommath.h> 3375 #include <tommath.h>
3230 #ifdef BN_MP_INIT_C 3376 #ifdef BN_MP_INIT_C
3238 * additional optimizations in place. 3384 * additional optimizations in place.
3239 * 3385 *
3240 * The library is free for all purposes without any express 3386 * The library is free for all purposes without any express
3241 * guarantee it works. 3387 * guarantee it works.
3242 * 3388 *
3243 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3389 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3244 */ 3390 */
3245 3391
3246 /* init a new mp_int */ 3392 /* init a new mp_int */
3247 int mp_init (mp_int * a) 3393 int mp_init (mp_int * a)
3248 { 3394 {
3267 3413
3268 return MP_OKAY; 3414 return MP_OKAY;
3269 } 3415 }
3270 #endif 3416 #endif
3271 3417
3418 /* $Source: /cvs/libtom/libtommath/bn_mp_init.c,v $ */
3419 /* $Revision: 1.3 $ */
3420 /* $Date: 2006/03/31 14:18:44 $ */
3421
3272 /* End: bn_mp_init.c */ 3422 /* End: bn_mp_init.c */
3273 3423
3274 /* Start: bn_mp_init_copy.c */ 3424 /* Start: bn_mp_init_copy.c */
3275 #include <tommath.h> 3425 #include <tommath.h>
3276 #ifdef BN_MP_INIT_COPY_C 3426 #ifdef BN_MP_INIT_COPY_C
3284 * additional optimizations in place. 3434 * additional optimizations in place.
3285 * 3435 *
3286 * The library is free for all purposes without any express 3436 * The library is free for all purposes without any express
3287 * guarantee it works. 3437 * guarantee it works.
3288 * 3438 *
3289 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3439 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3290 */ 3440 */
3291 3441
3292 /* creates "a" then copies b into it */ 3442 /* creates "a" then copies b into it */
3293 int mp_init_copy (mp_int * a, mp_int * b) 3443 int mp_init_copy (mp_int * a, mp_int * b)
3294 { 3444 {
3299 } 3449 }
3300 return mp_copy (b, a); 3450 return mp_copy (b, a);
3301 } 3451 }
3302 #endif 3452 #endif
3303 3453
3454 /* $Source: /cvs/libtom/libtommath/bn_mp_init_copy.c,v $ */
3455 /* $Revision: 1.3 $ */
3456 /* $Date: 2006/03/31 14:18:44 $ */
3457
3304 /* End: bn_mp_init_copy.c */ 3458 /* End: bn_mp_init_copy.c */
3305 3459
3306 /* Start: bn_mp_init_multi.c */ 3460 /* Start: bn_mp_init_multi.c */
3307 #include <tommath.h> 3461 #include <tommath.h>
3308 #ifdef BN_MP_INIT_MULTI_C 3462 #ifdef BN_MP_INIT_MULTI_C
3316 * additional optimizations in place. 3470 * additional optimizations in place.
3317 * 3471 *
3318 * The library is free for all purposes without any express 3472 * The library is free for all purposes without any express
3319 * guarantee it works. 3473 * guarantee it works.
3320 * 3474 *
3321 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3475 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3322 */ 3476 */
3323 #include <stdarg.h> 3477 #include <stdarg.h>
3324 3478
3325 int mp_init_multi(mp_int *mp, ...) 3479 int mp_init_multi(mp_int *mp, ...)
3326 { 3480 {
3358 return res; /* Assumed ok, if error flagged above. */ 3512 return res; /* Assumed ok, if error flagged above. */
3359 } 3513 }
3360 3514
3361 #endif 3515 #endif
3362 3516
3517 /* $Source: /cvs/libtom/libtommath/bn_mp_init_multi.c,v $ */
3518 /* $Revision: 1.3 $ */
3519 /* $Date: 2006/03/31 14:18:44 $ */
3520
3363 /* End: bn_mp_init_multi.c */ 3521 /* End: bn_mp_init_multi.c */
3364 3522
3365 /* Start: bn_mp_init_set.c */ 3523 /* Start: bn_mp_init_set.c */
3366 #include <tommath.h> 3524 #include <tommath.h>
3367 #ifdef BN_MP_INIT_SET_C 3525 #ifdef BN_MP_INIT_SET_C
3375 * additional optimizations in place. 3533 * additional optimizations in place.
3376 * 3534 *
3377 * The library is free for all purposes without any express 3535 * The library is free for all purposes without any express
3378 * guarantee it works. 3536 * guarantee it works.
3379 * 3537 *
3380 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3538 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3381 */ 3539 */
3382 3540
3383 /* initialize and set a digit */ 3541 /* initialize and set a digit */
3384 int mp_init_set (mp_int * a, mp_digit b) 3542 int mp_init_set (mp_int * a, mp_digit b)
3385 { 3543 {
3390 mp_set(a, b); 3548 mp_set(a, b);
3391 return err; 3549 return err;
3392 } 3550 }
3393 #endif 3551 #endif
3394 3552
3553 /* $Source: /cvs/libtom/libtommath/bn_mp_init_set.c,v $ */
3554 /* $Revision: 1.3 $ */
3555 /* $Date: 2006/03/31 14:18:44 $ */
3556
3395 /* End: bn_mp_init_set.c */ 3557 /* End: bn_mp_init_set.c */
3396 3558
3397 /* Start: bn_mp_init_set_int.c */ 3559 /* Start: bn_mp_init_set_int.c */
3398 #include <tommath.h> 3560 #include <tommath.h>
3399 #ifdef BN_MP_INIT_SET_INT_C 3561 #ifdef BN_MP_INIT_SET_INT_C
3407 * additional optimizations in place. 3569 * additional optimizations in place.
3408 * 3570 *
3409 * The library is free for all purposes without any express 3571 * The library is free for all purposes without any express
3410 * guarantee it works. 3572 * guarantee it works.
3411 * 3573 *
3412 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3574 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3413 */ 3575 */
3414 3576
3415 /* initialize and set a digit */ 3577 /* initialize and set a digit */
3416 int mp_init_set_int (mp_int * a, unsigned long b) 3578 int mp_init_set_int (mp_int * a, unsigned long b)
3417 { 3579 {
3421 } 3583 }
3422 return mp_set_int(a, b); 3584 return mp_set_int(a, b);
3423 } 3585 }
3424 #endif 3586 #endif
3425 3587
3588 /* $Source: /cvs/libtom/libtommath/bn_mp_init_set_int.c,v $ */
3589 /* $Revision: 1.3 $ */
3590 /* $Date: 2006/03/31 14:18:44 $ */
3591
3426 /* End: bn_mp_init_set_int.c */ 3592 /* End: bn_mp_init_set_int.c */
3427 3593
3428 /* Start: bn_mp_init_size.c */ 3594 /* Start: bn_mp_init_size.c */
3429 #include <tommath.h> 3595 #include <tommath.h>
3430 #ifdef BN_MP_INIT_SIZE_C 3596 #ifdef BN_MP_INIT_SIZE_C
3438 * additional optimizations in place. 3604 * additional optimizations in place.
3439 * 3605 *
3440 * The library is free for all purposes without any express 3606 * The library is free for all purposes without any express
3441 * guarantee it works. 3607 * guarantee it works.
3442 * 3608 *
3443 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3609 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3444 */ 3610 */
3445 3611
3446 /* init an mp_init for a given size */ 3612 /* init an mp_init for a given size */
3447 int mp_init_size (mp_int * a, int size) 3613 int mp_init_size (mp_int * a, int size)
3448 { 3614 {
3469 3635
3470 return MP_OKAY; 3636 return MP_OKAY;
3471 } 3637 }
3472 #endif 3638 #endif
3473 3639
3640 /* $Source: /cvs/libtom/libtommath/bn_mp_init_size.c,v $ */
3641 /* $Revision: 1.3 $ */
3642 /* $Date: 2006/03/31 14:18:44 $ */
3643
3474 /* End: bn_mp_init_size.c */ 3644 /* End: bn_mp_init_size.c */
3475 3645
3476 /* Start: bn_mp_invmod.c */ 3646 /* Start: bn_mp_invmod.c */
3477 #include <tommath.h> 3647 #include <tommath.h>
3478 #ifdef BN_MP_INVMOD_C 3648 #ifdef BN_MP_INVMOD_C
3486 * additional optimizations in place. 3656 * additional optimizations in place.
3487 * 3657 *
3488 * The library is free for all purposes without any express 3658 * The library is free for all purposes without any express
3489 * guarantee it works. 3659 * guarantee it works.
3490 * 3660 *
3491 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3661 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3492 */ 3662 */
3493 3663
3494 /* hac 14.61, pp608 */ 3664 /* hac 14.61, pp608 */
3495 int mp_invmod (mp_int * a, mp_int * b, mp_int * c) 3665 int mp_invmod (mp_int * a, mp_int * b, mp_int * c)
3496 { 3666 {
3512 3682
3513 return MP_VAL; 3683 return MP_VAL;
3514 } 3684 }
3515 #endif 3685 #endif
3516 3686
3687 /* $Source: /cvs/libtom/libtommath/bn_mp_invmod.c,v $ */
3688 /* $Revision: 1.3 $ */
3689 /* $Date: 2006/03/31 14:18:44 $ */
3690
3517 /* End: bn_mp_invmod.c */ 3691 /* End: bn_mp_invmod.c */
3518 3692
3519 /* Start: bn_mp_invmod_slow.c */ 3693 /* Start: bn_mp_invmod_slow.c */
3520 #include <tommath.h> 3694 #include <tommath.h>
3521 #ifdef BN_MP_INVMOD_SLOW_C 3695 #ifdef BN_MP_INVMOD_SLOW_C
3529 * additional optimizations in place. 3703 * additional optimizations in place.
3530 * 3704 *
3531 * The library is free for all purposes without any express 3705 * The library is free for all purposes without any express
3532 * guarantee it works. 3706 * guarantee it works.
3533 * 3707 *
3534 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3708 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3535 */ 3709 */
3536 3710
3537 /* hac 14.61, pp608 */ 3711 /* hac 14.61, pp608 */
3538 int mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c) 3712 int mp_invmod_slow (mp_int * a, mp_int * b, mp_int * c)
3539 { 3713 {
3687 LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &A, &B, &C, &D, NULL); 3861 LBL_ERR:mp_clear_multi (&x, &y, &u, &v, &A, &B, &C, &D, NULL);
3688 return res; 3862 return res;
3689 } 3863 }
3690 #endif 3864 #endif
3691 3865
3866 /* $Source: /cvs/libtom/libtommath/bn_mp_invmod_slow.c,v $ */
3867 /* $Revision: 1.3 $ */
3868 /* $Date: 2006/03/31 14:18:44 $ */
3869
3692 /* End: bn_mp_invmod_slow.c */ 3870 /* End: bn_mp_invmod_slow.c */
3693 3871
3694 /* Start: bn_mp_is_square.c */ 3872 /* Start: bn_mp_is_square.c */
3695 #include <tommath.h> 3873 #include <tommath.h>
3696 #ifdef BN_MP_IS_SQUARE_C 3874 #ifdef BN_MP_IS_SQUARE_C
3704 * additional optimizations in place. 3882 * additional optimizations in place.
3705 * 3883 *
3706 * The library is free for all purposes without any express 3884 * The library is free for all purposes without any express
3707 * guarantee it works. 3885 * guarantee it works.
3708 * 3886 *
3709 * Tom St Denis, [email protected], http://math.libtomcrypt.org 3887 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3710 */ 3888 */
3711 3889
3712 /* Check if remainders are possible squares - fast exclude non-squares */ 3890 /* Check if remainders are possible squares - fast exclude non-squares */
3713 static const char rem_128[128] = { 3891 static const char rem_128[128] = {
3714 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 3892 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1,
3796 ERR:mp_clear(&t); 3974 ERR:mp_clear(&t);
3797 return res; 3975 return res;
3798 } 3976 }
3799 #endif 3977 #endif
3800 3978
3979 /* $Source: /cvs/libtom/libtommath/bn_mp_is_square.c,v $ */
3980 /* $Revision: 1.3 $ */
3981 /* $Date: 2006/03/31 14:18:44 $ */
3982
3801 /* End: bn_mp_is_square.c */ 3983 /* End: bn_mp_is_square.c */
3802 3984
3803 /* Start: bn_mp_jacobi.c */ 3985 /* Start: bn_mp_jacobi.c */
3804 #include <tommath.h> 3986 #include <tommath.h>
3805 #ifdef BN_MP_JACOBI_C 3987 #ifdef BN_MP_JACOBI_C
3813 * additional optimizations in place. 3995 * additional optimizations in place.
3814 * 3996 *
3815 * The library is free for all purposes without any express 3997 * The library is free for all purposes without any express
3816 * guarantee it works. 3998 * guarantee it works.
3817 * 3999 *
3818 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4000 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3819 */ 4001 */
3820 4002
3821 /* computes the jacobi c = (a | n) (or Legendre if n is prime) 4003 /* computes the jacobi c = (a | n) (or Legendre if n is prime)
3822 * HAC pp. 73 Algorithm 2.149 4004 * HAC pp. 73 Algorithm 2.149
3823 */ 4005 */
3901 LBL_A1:mp_clear (&a1); 4083 LBL_A1:mp_clear (&a1);
3902 return res; 4084 return res;
3903 } 4085 }
3904 #endif 4086 #endif
3905 4087
4088 /* $Source: /cvs/libtom/libtommath/bn_mp_jacobi.c,v $ */
4089 /* $Revision: 1.3 $ */
4090 /* $Date: 2006/03/31 14:18:44 $ */
4091
3906 /* End: bn_mp_jacobi.c */ 4092 /* End: bn_mp_jacobi.c */
3907 4093
3908 /* Start: bn_mp_karatsuba_mul.c */ 4094 /* Start: bn_mp_karatsuba_mul.c */
3909 #include <tommath.h> 4095 #include <tommath.h>
3910 #ifdef BN_MP_KARATSUBA_MUL_C 4096 #ifdef BN_MP_KARATSUBA_MUL_C
3918 * additional optimizations in place. 4104 * additional optimizations in place.
3919 * 4105 *
3920 * The library is free for all purposes without any express 4106 * The library is free for all purposes without any express
3921 * guarantee it works. 4107 * guarantee it works.
3922 * 4108 *
3923 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4109 * Tom St Denis, [email protected], http://math.libtomcrypt.com
3924 */ 4110 */
3925 4111
3926 /* c = |a| * |b| using Karatsuba Multiplication using 4112 /* c = |a| * |b| using Karatsuba Multiplication using
3927 * three half size multiplications 4113 * three half size multiplications
3928 * 4114 *
3932 * 4118 *
3933 * a = a1 * B**n + a0 4119 * a = a1 * B**n + a0
3934 * b = b1 * B**n + b0 4120 * b = b1 * B**n + b0
3935 * 4121 *
3936 * Then, a * b => 4122 * Then, a * b =>
3937 a1b1 * B**2n + ((a1 - a0)(b1 - b0) + a0b0 + a1b1) * B + a0b0 4123 a1b1 * B**2n + ((a1 + a0)(b1 + b0) - (a0b0 + a1b1)) * B + a0b0
3938 * 4124 *
3939 * Note that a1b1 and a0b0 are used twice and only need to be 4125 * Note that a1b1 and a0b0 are used twice and only need to be
3940 * computed once. So in total three half size (half # of 4126 * computed once. So in total three half size (half # of
3941 * digit) multiplications are performed, a0b0, a1b1 and 4127 * digit) multiplications are performed, a0b0, a1b1 and
3942 * (a1-b1)(a0-b0) 4128 * (a1+b1)(a0+b0)
3943 * 4129 *
3944 * Note that a multiplication of half the digits requires 4130 * Note that a multiplication of half the digits requires
3945 * 1/4th the number of single precision multiplications so in 4131 * 1/4th the number of single precision multiplications so in
3946 * total after one call 25% of the single precision multiplications 4132 * total after one call 25% of the single precision multiplications
3947 * are saved. Note also that the call to mp_mul can end up back 4133 * are saved. Note also that the call to mp_mul can end up back
4028 if (mp_mul (&x0, &y0, &x0y0) != MP_OKAY) 4214 if (mp_mul (&x0, &y0, &x0y0) != MP_OKAY)
4029 goto X1Y1; /* x0y0 = x0*y0 */ 4215 goto X1Y1; /* x0y0 = x0*y0 */
4030 if (mp_mul (&x1, &y1, &x1y1) != MP_OKAY) 4216 if (mp_mul (&x1, &y1, &x1y1) != MP_OKAY)
4031 goto X1Y1; /* x1y1 = x1*y1 */ 4217 goto X1Y1; /* x1y1 = x1*y1 */
4032 4218
4033 /* now calc x1-x0 and y1-y0 */ 4219 /* now calc x1+x0 and y1+y0 */
4034 if (mp_sub (&x1, &x0, &t1) != MP_OKAY) 4220 if (s_mp_add (&x1, &x0, &t1) != MP_OKAY)
4035 goto X1Y1; /* t1 = x1 - x0 */ 4221 goto X1Y1; /* t1 = x1 - x0 */
4036 if (mp_sub (&y1, &y0, &x0) != MP_OKAY) 4222 if (s_mp_add (&y1, &y0, &x0) != MP_OKAY)
4037 goto X1Y1; /* t2 = y1 - y0 */ 4223 goto X1Y1; /* t2 = y1 - y0 */
4038 if (mp_mul (&t1, &x0, &t1) != MP_OKAY) 4224 if (mp_mul (&t1, &x0, &t1) != MP_OKAY)
4039 goto X1Y1; /* t1 = (x1 - x0) * (y1 - y0) */ 4225 goto X1Y1; /* t1 = (x1 + x0) * (y1 + y0) */
4040 4226
4041 /* add x0y0 */ 4227 /* add x0y0 */
4042 if (mp_add (&x0y0, &x1y1, &x0) != MP_OKAY) 4228 if (mp_add (&x0y0, &x1y1, &x0) != MP_OKAY)
4043 goto X1Y1; /* t2 = x0y0 + x1y1 */ 4229 goto X1Y1; /* t2 = x0y0 + x1y1 */
4044 if (mp_sub (&x0, &t1, &t1) != MP_OKAY) 4230 if (s_mp_sub (&t1, &x0, &t1) != MP_OKAY)
4045 goto X1Y1; /* t1 = x0y0 + x1y1 - (x1-x0)*(y1-y0) */ 4231 goto X1Y1; /* t1 = (x1+x0)*(y1+y0) - (x1y1 + x0y0) */
4046 4232
4047 /* shift by B */ 4233 /* shift by B */
4048 if (mp_lshd (&t1, B) != MP_OKAY) 4234 if (mp_lshd (&t1, B) != MP_OKAY)
4049 goto X1Y1; /* t1 = (x0y0 + x1y1 - (x1-x0)*(y1-y0))<<B */ 4235 goto X1Y1; /* t1 = (x0y0 + x1y1 - (x1-x0)*(y1-y0))<<B */
4050 if (mp_lshd (&x1y1, B * 2) != MP_OKAY) 4236 if (mp_lshd (&x1y1, B * 2) != MP_OKAY)
4068 ERR: 4254 ERR:
4069 return err; 4255 return err;
4070 } 4256 }
4071 #endif 4257 #endif
4072 4258
4259 /* $Source: /cvs/libtom/libtommath/bn_mp_karatsuba_mul.c,v $ */
4260 /* $Revision: 1.5 $ */
4261 /* $Date: 2006/03/31 14:18:44 $ */
4262
4073 /* End: bn_mp_karatsuba_mul.c */ 4263 /* End: bn_mp_karatsuba_mul.c */
4074 4264
4075 /* Start: bn_mp_karatsuba_sqr.c */ 4265 /* Start: bn_mp_karatsuba_sqr.c */
4076 #include <tommath.h> 4266 #include <tommath.h>
4077 #ifdef BN_MP_KARATSUBA_SQR_C 4267 #ifdef BN_MP_KARATSUBA_SQR_C
4085 * additional optimizations in place. 4275 * additional optimizations in place.
4086 * 4276 *
4087 * The library is free for all purposes without any express 4277 * The library is free for all purposes without any express
4088 * guarantee it works. 4278 * guarantee it works.
4089 * 4279 *
4090 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4280 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4091 */ 4281 */
4092 4282
4093 /* Karatsuba squaring, computes b = a*a using three 4283 /* Karatsuba squaring, computes b = a*a using three
4094 * half size squarings 4284 * half size squarings
4095 * 4285 *
4153 if (mp_sqr (&x0, &x0x0) != MP_OKAY) 4343 if (mp_sqr (&x0, &x0x0) != MP_OKAY)
4154 goto X1X1; /* x0x0 = x0*x0 */ 4344 goto X1X1; /* x0x0 = x0*x0 */
4155 if (mp_sqr (&x1, &x1x1) != MP_OKAY) 4345 if (mp_sqr (&x1, &x1x1) != MP_OKAY)
4156 goto X1X1; /* x1x1 = x1*x1 */ 4346 goto X1X1; /* x1x1 = x1*x1 */
4157 4347
4158 /* now calc (x1-x0)**2 */ 4348 /* now calc (x1+x0)**2 */
4159 if (mp_sub (&x1, &x0, &t1) != MP_OKAY) 4349 if (s_mp_add (&x1, &x0, &t1) != MP_OKAY)
4160 goto X1X1; /* t1 = x1 - x0 */ 4350 goto X1X1; /* t1 = x1 - x0 */
4161 if (mp_sqr (&t1, &t1) != MP_OKAY) 4351 if (mp_sqr (&t1, &t1) != MP_OKAY)
4162 goto X1X1; /* t1 = (x1 - x0) * (x1 - x0) */ 4352 goto X1X1; /* t1 = (x1 - x0) * (x1 - x0) */
4163 4353
4164 /* add x0y0 */ 4354 /* add x0y0 */
4165 if (s_mp_add (&x0x0, &x1x1, &t2) != MP_OKAY) 4355 if (s_mp_add (&x0x0, &x1x1, &t2) != MP_OKAY)
4166 goto X1X1; /* t2 = x0x0 + x1x1 */ 4356 goto X1X1; /* t2 = x0x0 + x1x1 */
4167 if (mp_sub (&t2, &t1, &t1) != MP_OKAY) 4357 if (s_mp_sub (&t1, &t2, &t1) != MP_OKAY)
4168 goto X1X1; /* t1 = x0x0 + x1x1 - (x1-x0)*(x1-x0) */ 4358 goto X1X1; /* t1 = (x1+x0)**2 - (x0x0 + x1x1) */
4169 4359
4170 /* shift by B */ 4360 /* shift by B */
4171 if (mp_lshd (&t1, B) != MP_OKAY) 4361 if (mp_lshd (&t1, B) != MP_OKAY)
4172 goto X1X1; /* t1 = (x0x0 + x1x1 - (x1-x0)*(x1-x0))<<B */ 4362 goto X1X1; /* t1 = (x0x0 + x1x1 - (x1-x0)*(x1-x0))<<B */
4173 if (mp_lshd (&x1x1, B * 2) != MP_OKAY) 4363 if (mp_lshd (&x1x1, B * 2) != MP_OKAY)
4189 ERR: 4379 ERR:
4190 return err; 4380 return err;
4191 } 4381 }
4192 #endif 4382 #endif
4193 4383
4384 /* $Source: /cvs/libtom/libtommath/bn_mp_karatsuba_sqr.c,v $ */
4385 /* $Revision: 1.5 $ */
4386 /* $Date: 2006/03/31 14:18:44 $ */
4387
4194 /* End: bn_mp_karatsuba_sqr.c */ 4388 /* End: bn_mp_karatsuba_sqr.c */
4195 4389
4196 /* Start: bn_mp_lcm.c */ 4390 /* Start: bn_mp_lcm.c */
4197 #include <tommath.h> 4391 #include <tommath.h>
4198 #ifdef BN_MP_LCM_C 4392 #ifdef BN_MP_LCM_C
4206 * additional optimizations in place. 4400 * additional optimizations in place.
4207 * 4401 *
4208 * The library is free for all purposes without any express 4402 * The library is free for all purposes without any express
4209 * guarantee it works. 4403 * guarantee it works.
4210 * 4404 *
4211 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4405 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4212 */ 4406 */
4213 4407
4214 /* computes least common multiple as |a*b|/(a, b) */ 4408 /* computes least common multiple as |a*b|/(a, b) */
4215 int mp_lcm (mp_int * a, mp_int * b, mp_int * c) 4409 int mp_lcm (mp_int * a, mp_int * b, mp_int * c)
4216 { 4410 {
4249 mp_clear_multi (&t1, &t2, NULL); 4443 mp_clear_multi (&t1, &t2, NULL);
4250 return res; 4444 return res;
4251 } 4445 }
4252 #endif 4446 #endif
4253 4447
4448 /* $Source: /cvs/libtom/libtommath/bn_mp_lcm.c,v $ */
4449 /* $Revision: 1.3 $ */
4450 /* $Date: 2006/03/31 14:18:44 $ */
4451
4254 /* End: bn_mp_lcm.c */ 4452 /* End: bn_mp_lcm.c */
4255 4453
4256 /* Start: bn_mp_lshd.c */ 4454 /* Start: bn_mp_lshd.c */
4257 #include <tommath.h> 4455 #include <tommath.h>
4258 #ifdef BN_MP_LSHD_C 4456 #ifdef BN_MP_LSHD_C
4266 * additional optimizations in place. 4464 * additional optimizations in place.
4267 * 4465 *
4268 * The library is free for all purposes without any express 4466 * The library is free for all purposes without any express
4269 * guarantee it works. 4467 * guarantee it works.
4270 * 4468 *
4271 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4469 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4272 */ 4470 */
4273 4471
4274 /* shift left a certain amount of digits */ 4472 /* shift left a certain amount of digits */
4275 int mp_lshd (mp_int * a, int b) 4473 int mp_lshd (mp_int * a, int b)
4276 { 4474 {
4316 } 4514 }
4317 return MP_OKAY; 4515 return MP_OKAY;
4318 } 4516 }
4319 #endif 4517 #endif
4320 4518
4519 /* $Source: /cvs/libtom/libtommath/bn_mp_lshd.c,v $ */
4520 /* $Revision: 1.3 $ */
4521 /* $Date: 2006/03/31 14:18:44 $ */
4522
4321 /* End: bn_mp_lshd.c */ 4523 /* End: bn_mp_lshd.c */
4322 4524
4323 /* Start: bn_mp_mod.c */ 4525 /* Start: bn_mp_mod.c */
4324 #include <tommath.h> 4526 #include <tommath.h>
4325 #ifdef BN_MP_MOD_C 4527 #ifdef BN_MP_MOD_C
4333 * additional optimizations in place. 4535 * additional optimizations in place.
4334 * 4536 *
4335 * The library is free for all purposes without any express 4537 * The library is free for all purposes without any express
4336 * guarantee it works. 4538 * guarantee it works.
4337 * 4539 *
4338 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4540 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4339 */ 4541 */
4340 4542
4341 /* c = a mod b, 0 <= c < b */ 4543 /* c = a mod b, 0 <= c < b */
4342 int 4544 int
4343 mp_mod (mp_int * a, mp_int * b, mp_int * c) 4545 mp_mod (mp_int * a, mp_int * b, mp_int * c)
4364 mp_clear (&t); 4566 mp_clear (&t);
4365 return res; 4567 return res;
4366 } 4568 }
4367 #endif 4569 #endif
4368 4570
4571 /* $Source: /cvs/libtom/libtommath/bn_mp_mod.c,v $ */
4572 /* $Revision: 1.3 $ */
4573 /* $Date: 2006/03/31 14:18:44 $ */
4574
4369 /* End: bn_mp_mod.c */ 4575 /* End: bn_mp_mod.c */
4370 4576
4371 /* Start: bn_mp_mod_2d.c */ 4577 /* Start: bn_mp_mod_2d.c */
4372 #include <tommath.h> 4578 #include <tommath.h>
4373 #ifdef BN_MP_MOD_2D_C 4579 #ifdef BN_MP_MOD_2D_C
4381 * additional optimizations in place. 4587 * additional optimizations in place.
4382 * 4588 *
4383 * The library is free for all purposes without any express 4589 * The library is free for all purposes without any express
4384 * guarantee it works. 4590 * guarantee it works.
4385 * 4591 *
4386 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4592 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4387 */ 4593 */
4388 4594
4389 /* calc a value mod 2**b */ 4595 /* calc a value mod 2**b */
4390 int 4596 int
4391 mp_mod_2d (mp_int * a, int b, mp_int * c) 4597 mp_mod_2d (mp_int * a, int b, mp_int * c)
4419 mp_clamp (c); 4625 mp_clamp (c);
4420 return MP_OKAY; 4626 return MP_OKAY;
4421 } 4627 }
4422 #endif 4628 #endif
4423 4629
4630 /* $Source: /cvs/libtom/libtommath/bn_mp_mod_2d.c,v $ */
4631 /* $Revision: 1.3 $ */
4632 /* $Date: 2006/03/31 14:18:44 $ */
4633
4424 /* End: bn_mp_mod_2d.c */ 4634 /* End: bn_mp_mod_2d.c */
4425 4635
4426 /* Start: bn_mp_mod_d.c */ 4636 /* Start: bn_mp_mod_d.c */
4427 #include <tommath.h> 4637 #include <tommath.h>
4428 #ifdef BN_MP_MOD_D_C 4638 #ifdef BN_MP_MOD_D_C
4436 * additional optimizations in place. 4646 * additional optimizations in place.
4437 * 4647 *
4438 * The library is free for all purposes without any express 4648 * The library is free for all purposes without any express
4439 * guarantee it works. 4649 * guarantee it works.
4440 * 4650 *
4441 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4651 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4442 */ 4652 */
4443 4653
4444 int 4654 int
4445 mp_mod_d (mp_int * a, mp_digit b, mp_digit * c) 4655 mp_mod_d (mp_int * a, mp_digit b, mp_digit * c)
4446 { 4656 {
4447 return mp_div_d(a, b, NULL, c); 4657 return mp_div_d(a, b, NULL, c);
4448 } 4658 }
4449 #endif 4659 #endif
4450 4660
4661 /* $Source: /cvs/libtom/libtommath/bn_mp_mod_d.c,v $ */
4662 /* $Revision: 1.3 $ */
4663 /* $Date: 2006/03/31 14:18:44 $ */
4664
4451 /* End: bn_mp_mod_d.c */ 4665 /* End: bn_mp_mod_d.c */
4452 4666
4453 /* Start: bn_mp_montgomery_calc_normalization.c */ 4667 /* Start: bn_mp_montgomery_calc_normalization.c */
4454 #include <tommath.h> 4668 #include <tommath.h>
4455 #ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C 4669 #ifdef BN_MP_MONTGOMERY_CALC_NORMALIZATION_C
4463 * additional optimizations in place. 4677 * additional optimizations in place.
4464 * 4678 *
4465 * The library is free for all purposes without any express 4679 * The library is free for all purposes without any express
4466 * guarantee it works. 4680 * guarantee it works.
4467 * 4681 *
4468 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4682 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4469 */ 4683 */
4470 4684
4471 /* 4685 /*
4472 * shifts with subtractions when the result is greater than b. 4686 * shifts with subtractions when the result is greater than b.
4473 * 4687 *
4505 4719
4506 return MP_OKAY; 4720 return MP_OKAY;
4507 } 4721 }
4508 #endif 4722 #endif
4509 4723
4724 /* $Source: /cvs/libtom/libtommath/bn_mp_montgomery_calc_normalization.c,v $ */
4725 /* $Revision: 1.3 $ */
4726 /* $Date: 2006/03/31 14:18:44 $ */
4727
4510 /* End: bn_mp_montgomery_calc_normalization.c */ 4728 /* End: bn_mp_montgomery_calc_normalization.c */
4511 4729
4512 /* Start: bn_mp_montgomery_reduce.c */ 4730 /* Start: bn_mp_montgomery_reduce.c */
4513 #include <tommath.h> 4731 #include <tommath.h>
4514 #ifdef BN_MP_MONTGOMERY_REDUCE_C 4732 #ifdef BN_MP_MONTGOMERY_REDUCE_C
4522 * additional optimizations in place. 4740 * additional optimizations in place.
4523 * 4741 *
4524 * The library is free for all purposes without any express 4742 * The library is free for all purposes without any express
4525 * guarantee it works. 4743 * guarantee it works.
4526 * 4744 *
4527 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4745 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4528 */ 4746 */
4529 4747
4530 /* computes xR**-1 == x (mod N) via Montgomery Reduction */ 4748 /* computes xR**-1 == x (mod N) via Montgomery Reduction */
4531 int 4749 int
4532 mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho) 4750 mp_montgomery_reduce (mp_int * x, mp_int * n, mp_digit rho)
4623 4841
4624 return MP_OKAY; 4842 return MP_OKAY;
4625 } 4843 }
4626 #endif 4844 #endif
4627 4845
4846 /* $Source: /cvs/libtom/libtommath/bn_mp_montgomery_reduce.c,v $ */
4847 /* $Revision: 1.3 $ */
4848 /* $Date: 2006/03/31 14:18:44 $ */
4849
4628 /* End: bn_mp_montgomery_reduce.c */ 4850 /* End: bn_mp_montgomery_reduce.c */
4629 4851
4630 /* Start: bn_mp_montgomery_setup.c */ 4852 /* Start: bn_mp_montgomery_setup.c */
4631 #include <tommath.h> 4853 #include <tommath.h>
4632 #ifdef BN_MP_MONTGOMERY_SETUP_C 4854 #ifdef BN_MP_MONTGOMERY_SETUP_C
4640 * additional optimizations in place. 4862 * additional optimizations in place.
4641 * 4863 *
4642 * The library is free for all purposes without any express 4864 * The library is free for all purposes without any express
4643 * guarantee it works. 4865 * guarantee it works.
4644 * 4866 *
4645 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4867 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4646 */ 4868 */
4647 4869
4648 /* setups the montgomery reduction stuff */ 4870 /* setups the montgomery reduction stuff */
4649 int 4871 int
4650 mp_montgomery_setup (mp_int * n, mp_digit * rho) 4872 mp_montgomery_setup (mp_int * n, mp_digit * rho)
4676 #ifdef MP_64BIT 4898 #ifdef MP_64BIT
4677 x *= 2 - b * x; /* here x*a==1 mod 2**64 */ 4899 x *= 2 - b * x; /* here x*a==1 mod 2**64 */
4678 #endif 4900 #endif
4679 4901
4680 /* rho = -1/m mod b */ 4902 /* rho = -1/m mod b */
4681 *rho = (((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK; 4903 *rho = (unsigned long)(((mp_word)1 << ((mp_word) DIGIT_BIT)) - x) & MP_MASK;
4682 4904
4683 return MP_OKAY; 4905 return MP_OKAY;
4684 } 4906 }
4685 #endif 4907 #endif
4686 4908
4909 /* $Source: /cvs/libtom/libtommath/bn_mp_montgomery_setup.c,v $ */
4910 /* $Revision: 1.4 $ */
4911 /* $Date: 2006/12/04 21:34:03 $ */
4912
4687 /* End: bn_mp_montgomery_setup.c */ 4913 /* End: bn_mp_montgomery_setup.c */
4688 4914
4689 /* Start: bn_mp_mul.c */ 4915 /* Start: bn_mp_mul.c */
4690 #include <tommath.h> 4916 #include <tommath.h>
4691 #ifdef BN_MP_MUL_C 4917 #ifdef BN_MP_MUL_C
4699 * additional optimizations in place. 4925 * additional optimizations in place.
4700 * 4926 *
4701 * The library is free for all purposes without any express 4927 * The library is free for all purposes without any express
4702 * guarantee it works. 4928 * guarantee it works.
4703 * 4929 *
4704 * Tom St Denis, [email protected], http://math.libtomcrypt.org 4930 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4705 */ 4931 */
4706 4932
4707 /* high level multiplication (handles sign) */ 4933 /* high level multiplication (handles sign) */
4708 int mp_mul (mp_int * a, mp_int * b, mp_int * c) 4934 int mp_mul (mp_int * a, mp_int * b, mp_int * c)
4709 { 4935 {
4748 c->sign = (c->used > 0) ? neg : MP_ZPOS; 4974 c->sign = (c->used > 0) ? neg : MP_ZPOS;
4749 return res; 4975 return res;
4750 } 4976 }
4751 #endif 4977 #endif
4752 4978
4979 /* $Source: /cvs/libtom/libtommath/bn_mp_mul.c,v $ */
4980 /* $Revision: 1.3 $ */
4981 /* $Date: 2006/03/31 14:18:44 $ */
4982
4753 /* End: bn_mp_mul.c */ 4983 /* End: bn_mp_mul.c */
4754 4984
4755 /* Start: bn_mp_mul_2.c */ 4985 /* Start: bn_mp_mul_2.c */
4756 #include <tommath.h> 4986 #include <tommath.h>
4757 #ifdef BN_MP_MUL_2_C 4987 #ifdef BN_MP_MUL_2_C
4765 * additional optimizations in place. 4995 * additional optimizations in place.
4766 * 4996 *
4767 * The library is free for all purposes without any express 4997 * The library is free for all purposes without any express
4768 * guarantee it works. 4998 * guarantee it works.
4769 * 4999 *
4770 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5000 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4771 */ 5001 */
4772 5002
4773 /* b = a*2 */ 5003 /* b = a*2 */
4774 int mp_mul_2(mp_int * a, mp_int * b) 5004 int mp_mul_2(mp_int * a, mp_int * b)
4775 { 5005 {
4830 b->sign = a->sign; 5060 b->sign = a->sign;
4831 return MP_OKAY; 5061 return MP_OKAY;
4832 } 5062 }
4833 #endif 5063 #endif
4834 5064
5065 /* $Source: /cvs/libtom/libtommath/bn_mp_mul_2.c,v $ */
5066 /* $Revision: 1.3 $ */
5067 /* $Date: 2006/03/31 14:18:44 $ */
5068
4835 /* End: bn_mp_mul_2.c */ 5069 /* End: bn_mp_mul_2.c */
4836 5070
4837 /* Start: bn_mp_mul_2d.c */ 5071 /* Start: bn_mp_mul_2d.c */
4838 #include <tommath.h> 5072 #include <tommath.h>
4839 #ifdef BN_MP_MUL_2D_C 5073 #ifdef BN_MP_MUL_2D_C
4847 * additional optimizations in place. 5081 * additional optimizations in place.
4848 * 5082 *
4849 * The library is free for all purposes without any express 5083 * The library is free for all purposes without any express
4850 * guarantee it works. 5084 * guarantee it works.
4851 * 5085 *
4852 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5086 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4853 */ 5087 */
4854 5088
4855 /* shift left by a certain bit count */ 5089 /* shift left by a certain bit count */
4856 int mp_mul_2d (mp_int * a, int b, mp_int * c) 5090 int mp_mul_2d (mp_int * a, int b, mp_int * c)
4857 { 5091 {
4915 mp_clamp (c); 5149 mp_clamp (c);
4916 return MP_OKAY; 5150 return MP_OKAY;
4917 } 5151 }
4918 #endif 5152 #endif
4919 5153
5154 /* $Source: /cvs/libtom/libtommath/bn_mp_mul_2d.c,v $ */
5155 /* $Revision: 1.3 $ */
5156 /* $Date: 2006/03/31 14:18:44 $ */
5157
4920 /* End: bn_mp_mul_2d.c */ 5158 /* End: bn_mp_mul_2d.c */
4921 5159
4922 /* Start: bn_mp_mul_d.c */ 5160 /* Start: bn_mp_mul_d.c */
4923 #include <tommath.h> 5161 #include <tommath.h>
4924 #ifdef BN_MP_MUL_D_C 5162 #ifdef BN_MP_MUL_D_C
4932 * additional optimizations in place. 5170 * additional optimizations in place.
4933 * 5171 *
4934 * The library is free for all purposes without any express 5172 * The library is free for all purposes without any express
4935 * guarantee it works. 5173 * guarantee it works.
4936 * 5174 *
4937 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5175 * Tom St Denis, [email protected], http://math.libtomcrypt.com
4938 */ 5176 */
4939 5177
4940 /* multiply by a digit */ 5178 /* multiply by a digit */
4941 int 5179 int
4942 mp_mul_d (mp_int * a, mp_digit b, mp_int * c) 5180 mp_mul_d (mp_int * a, mp_digit b, mp_int * c)
4994 5232
4995 return MP_OKAY; 5233 return MP_OKAY;
4996 } 5234 }
4997 #endif 5235 #endif
4998 5236
5237 /* $Source: /cvs/libtom/libtommath/bn_mp_mul_d.c,v $ */
5238 /* $Revision: 1.3 $ */
5239 /* $Date: 2006/03/31 14:18:44 $ */
5240
4999 /* End: bn_mp_mul_d.c */ 5241 /* End: bn_mp_mul_d.c */
5000 5242
5001 /* Start: bn_mp_mulmod.c */ 5243 /* Start: bn_mp_mulmod.c */
5002 #include <tommath.h> 5244 #include <tommath.h>
5003 #ifdef BN_MP_MULMOD_C 5245 #ifdef BN_MP_MULMOD_C
5011 * additional optimizations in place. 5253 * additional optimizations in place.
5012 * 5254 *
5013 * The library is free for all purposes without any express 5255 * The library is free for all purposes without any express
5014 * guarantee it works. 5256 * guarantee it works.
5015 * 5257 *
5016 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5258 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5017 */ 5259 */
5018 5260
5019 /* d = a * b (mod c) */ 5261 /* d = a * b (mod c) */
5020 int 5262 int mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)
5021 mp_mulmod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)
5022 { 5263 {
5023 int res; 5264 int res;
5024 mp_int t; 5265 mp_int t;
5025 5266
5026 if ((res = mp_init (&t)) != MP_OKAY) { 5267 if ((res = mp_init (&t)) != MP_OKAY) {
5035 mp_clear (&t); 5276 mp_clear (&t);
5036 return res; 5277 return res;
5037 } 5278 }
5038 #endif 5279 #endif
5039 5280
5281 /* $Source: /cvs/libtom/libtommath/bn_mp_mulmod.c,v $ */
5282 /* $Revision: 1.4 $ */
5283 /* $Date: 2006/03/31 14:18:44 $ */
5284
5040 /* End: bn_mp_mulmod.c */ 5285 /* End: bn_mp_mulmod.c */
5041 5286
5042 /* Start: bn_mp_n_root.c */ 5287 /* Start: bn_mp_n_root.c */
5043 #include <tommath.h> 5288 #include <tommath.h>
5044 #ifdef BN_MP_N_ROOT_C 5289 #ifdef BN_MP_N_ROOT_C
5052 * additional optimizations in place. 5297 * additional optimizations in place.
5053 * 5298 *
5054 * The library is free for all purposes without any express 5299 * The library is free for all purposes without any express
5055 * guarantee it works. 5300 * guarantee it works.
5056 * 5301 *
5057 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5302 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5058 */ 5303 */
5059 5304
5060 /* find the n'th root of an integer 5305 /* find the n'th root of an integer
5061 * 5306 *
5062 * Result found such that (c)**b <= a and (c+1)**b > a 5307 * Result found such that (c)**b <= a and (c+1)**b > a
5167 LBL_T1:mp_clear (&t1); 5412 LBL_T1:mp_clear (&t1);
5168 return res; 5413 return res;
5169 } 5414 }
5170 #endif 5415 #endif
5171 5416
5417 /* $Source: /cvs/libtom/libtommath/bn_mp_n_root.c,v $ */
5418 /* $Revision: 1.3 $ */
5419 /* $Date: 2006/03/31 14:18:44 $ */
5420
5172 /* End: bn_mp_n_root.c */ 5421 /* End: bn_mp_n_root.c */
5173 5422
5174 /* Start: bn_mp_neg.c */ 5423 /* Start: bn_mp_neg.c */
5175 #include <tommath.h> 5424 #include <tommath.h>
5176 #ifdef BN_MP_NEG_C 5425 #ifdef BN_MP_NEG_C
5184 * additional optimizations in place. 5433 * additional optimizations in place.
5185 * 5434 *
5186 * The library is free for all purposes without any express 5435 * The library is free for all purposes without any express
5187 * guarantee it works. 5436 * guarantee it works.
5188 * 5437 *
5189 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5438 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5190 */ 5439 */
5191 5440
5192 /* b = -a */ 5441 /* b = -a */
5193 int mp_neg (mp_int * a, mp_int * b) 5442 int mp_neg (mp_int * a, mp_int * b)
5194 { 5443 {
5207 5456
5208 return MP_OKAY; 5457 return MP_OKAY;
5209 } 5458 }
5210 #endif 5459 #endif
5211 5460
5461 /* $Source: /cvs/libtom/libtommath/bn_mp_neg.c,v $ */
5462 /* $Revision: 1.3 $ */
5463 /* $Date: 2006/03/31 14:18:44 $ */
5464
5212 /* End: bn_mp_neg.c */ 5465 /* End: bn_mp_neg.c */
5213 5466
5214 /* Start: bn_mp_or.c */ 5467 /* Start: bn_mp_or.c */
5215 #include <tommath.h> 5468 #include <tommath.h>
5216 #ifdef BN_MP_OR_C 5469 #ifdef BN_MP_OR_C
5224 * additional optimizations in place. 5477 * additional optimizations in place.
5225 * 5478 *
5226 * The library is free for all purposes without any express 5479 * The library is free for all purposes without any express
5227 * guarantee it works. 5480 * guarantee it works.
5228 * 5481 *
5229 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5482 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5230 */ 5483 */
5231 5484
5232 /* OR two ints together */ 5485 /* OR two ints together */
5233 int mp_or (mp_int * a, mp_int * b, mp_int * c) 5486 int mp_or (mp_int * a, mp_int * b, mp_int * c)
5234 { 5487 {
5257 mp_clear (&t); 5510 mp_clear (&t);
5258 return MP_OKAY; 5511 return MP_OKAY;
5259 } 5512 }
5260 #endif 5513 #endif
5261 5514
5515 /* $Source: /cvs/libtom/libtommath/bn_mp_or.c,v $ */
5516 /* $Revision: 1.3 $ */
5517 /* $Date: 2006/03/31 14:18:44 $ */
5518
5262 /* End: bn_mp_or.c */ 5519 /* End: bn_mp_or.c */
5263 5520
5264 /* Start: bn_mp_prime_fermat.c */ 5521 /* Start: bn_mp_prime_fermat.c */
5265 #include <tommath.h> 5522 #include <tommath.h>
5266 #ifdef BN_MP_PRIME_FERMAT_C 5523 #ifdef BN_MP_PRIME_FERMAT_C
5274 * additional optimizations in place. 5531 * additional optimizations in place.
5275 * 5532 *
5276 * The library is free for all purposes without any express 5533 * The library is free for all purposes without any express
5277 * guarantee it works. 5534 * guarantee it works.
5278 * 5535 *
5279 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5536 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5280 */ 5537 */
5281 5538
5282 /* performs one Fermat test. 5539 /* performs one Fermat test.
5283 * 5540 *
5284 * If "a" were prime then b**a == b (mod a) since the order of 5541 * If "a" were prime then b**a == b (mod a) since the order of
5319 LBL_T:mp_clear (&t); 5576 LBL_T:mp_clear (&t);
5320 return err; 5577 return err;
5321 } 5578 }
5322 #endif 5579 #endif
5323 5580
5581 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_fermat.c,v $ */
5582 /* $Revision: 1.3 $ */
5583 /* $Date: 2006/03/31 14:18:44 $ */
5584
5324 /* End: bn_mp_prime_fermat.c */ 5585 /* End: bn_mp_prime_fermat.c */
5325 5586
5326 /* Start: bn_mp_prime_is_divisible.c */ 5587 /* Start: bn_mp_prime_is_divisible.c */
5327 #include <tommath.h> 5588 #include <tommath.h>
5328 #ifdef BN_MP_PRIME_IS_DIVISIBLE_C 5589 #ifdef BN_MP_PRIME_IS_DIVISIBLE_C
5336 * additional optimizations in place. 5597 * additional optimizations in place.
5337 * 5598 *
5338 * The library is free for all purposes without any express 5599 * The library is free for all purposes without any express
5339 * guarantee it works. 5600 * guarantee it works.
5340 * 5601 *
5341 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5602 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5342 */ 5603 */
5343 5604
5344 /* determines if an integers is divisible by one 5605 /* determines if an integers is divisible by one
5345 * of the first PRIME_SIZE primes or not 5606 * of the first PRIME_SIZE primes or not
5346 * 5607 *
5369 5630
5370 return MP_OKAY; 5631 return MP_OKAY;
5371 } 5632 }
5372 #endif 5633 #endif
5373 5634
5635 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_is_divisible.c,v $ */
5636 /* $Revision: 1.3 $ */
5637 /* $Date: 2006/03/31 14:18:44 $ */
5638
5374 /* End: bn_mp_prime_is_divisible.c */ 5639 /* End: bn_mp_prime_is_divisible.c */
5375 5640
5376 /* Start: bn_mp_prime_is_prime.c */ 5641 /* Start: bn_mp_prime_is_prime.c */
5377 #include <tommath.h> 5642 #include <tommath.h>
5378 #ifdef BN_MP_PRIME_IS_PRIME_C 5643 #ifdef BN_MP_PRIME_IS_PRIME_C
5386 * additional optimizations in place. 5651 * additional optimizations in place.
5387 * 5652 *
5388 * The library is free for all purposes without any express 5653 * The library is free for all purposes without any express
5389 * guarantee it works. 5654 * guarantee it works.
5390 * 5655 *
5391 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5656 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5392 */ 5657 */
5393 5658
5394 /* performs a variable number of rounds of Miller-Rabin 5659 /* performs a variable number of rounds of Miller-Rabin
5395 * 5660 *
5396 * Probability of error after t rounds is no more than 5661 * Probability of error after t rounds is no more than
5452 LBL_B:mp_clear (&b); 5717 LBL_B:mp_clear (&b);
5453 return err; 5718 return err;
5454 } 5719 }
5455 #endif 5720 #endif
5456 5721
5722 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_is_prime.c,v $ */
5723 /* $Revision: 1.3 $ */
5724 /* $Date: 2006/03/31 14:18:44 $ */
5725
5457 /* End: bn_mp_prime_is_prime.c */ 5726 /* End: bn_mp_prime_is_prime.c */
5458 5727
5459 /* Start: bn_mp_prime_miller_rabin.c */ 5728 /* Start: bn_mp_prime_miller_rabin.c */
5460 #include <tommath.h> 5729 #include <tommath.h>
5461 #ifdef BN_MP_PRIME_MILLER_RABIN_C 5730 #ifdef BN_MP_PRIME_MILLER_RABIN_C
5469 * additional optimizations in place. 5738 * additional optimizations in place.
5470 * 5739 *
5471 * The library is free for all purposes without any express 5740 * The library is free for all purposes without any express
5472 * guarantee it works. 5741 * guarantee it works.
5473 * 5742 *
5474 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5743 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5475 */ 5744 */
5476 5745
5477 /* Miller-Rabin test of "a" to the base of "b" as described in 5746 /* Miller-Rabin test of "a" to the base of "b" as described in
5478 * HAC pp. 139 Algorithm 4.24 5747 * HAC pp. 139 Algorithm 4.24
5479 * 5748 *
5555 LBL_N1:mp_clear (&n1); 5824 LBL_N1:mp_clear (&n1);
5556 return err; 5825 return err;
5557 } 5826 }
5558 #endif 5827 #endif
5559 5828
5829 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_miller_rabin.c,v $ */
5830 /* $Revision: 1.3 $ */
5831 /* $Date: 2006/03/31 14:18:44 $ */
5832
5560 /* End: bn_mp_prime_miller_rabin.c */ 5833 /* End: bn_mp_prime_miller_rabin.c */
5561 5834
5562 /* Start: bn_mp_prime_next_prime.c */ 5835 /* Start: bn_mp_prime_next_prime.c */
5563 #include <tommath.h> 5836 #include <tommath.h>
5564 #ifdef BN_MP_PRIME_NEXT_PRIME_C 5837 #ifdef BN_MP_PRIME_NEXT_PRIME_C
5572 * additional optimizations in place. 5845 * additional optimizations in place.
5573 * 5846 *
5574 * The library is free for all purposes without any express 5847 * The library is free for all purposes without any express
5575 * guarantee it works. 5848 * guarantee it works.
5576 * 5849 *
5577 * Tom St Denis, [email protected], http://math.libtomcrypt.org 5850 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5578 */ 5851 */
5579 5852
5580 /* finds the next prime after the number "a" using "t" trials 5853 /* finds the next prime after the number "a" using "t" trials
5581 * of Miller-Rabin. 5854 * of Miller-Rabin.
5582 * 5855 *
5725 return err; 5998 return err;
5726 } 5999 }
5727 6000
5728 #endif 6001 #endif
5729 6002
6003 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_next_prime.c,v $ */
6004 /* $Revision: 1.3 $ */
6005 /* $Date: 2006/03/31 14:18:44 $ */
6006
5730 /* End: bn_mp_prime_next_prime.c */ 6007 /* End: bn_mp_prime_next_prime.c */
5731 6008
5732 /* Start: bn_mp_prime_rabin_miller_trials.c */ 6009 /* Start: bn_mp_prime_rabin_miller_trials.c */
5733 #include <tommath.h> 6010 #include <tommath.h>
5734 #ifdef BN_MP_PRIME_RABIN_MILLER_TRIALS_C 6011 #ifdef BN_MP_PRIME_RABIN_MILLER_TRIALS_C
5742 * additional optimizations in place. 6019 * additional optimizations in place.
5743 * 6020 *
5744 * The library is free for all purposes without any express 6021 * The library is free for all purposes without any express
5745 * guarantee it works. 6022 * guarantee it works.
5746 * 6023 *
5747 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6024 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5748 */ 6025 */
5749 6026
5750 6027
5751 static const struct { 6028 static const struct {
5752 int k, t; 6029 int k, t;
5777 } 6054 }
5778 6055
5779 6056
5780 #endif 6057 #endif
5781 6058
6059 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_rabin_miller_trials.c,v $ */
6060 /* $Revision: 1.3 $ */
6061 /* $Date: 2006/03/31 14:18:44 $ */
6062
5782 /* End: bn_mp_prime_rabin_miller_trials.c */ 6063 /* End: bn_mp_prime_rabin_miller_trials.c */
5783 6064
5784 /* Start: bn_mp_prime_random_ex.c */ 6065 /* Start: bn_mp_prime_random_ex.c */
5785 #include <tommath.h> 6066 #include <tommath.h>
5786 #ifdef BN_MP_PRIME_RANDOM_EX_C 6067 #ifdef BN_MP_PRIME_RANDOM_EX_C
5794 * additional optimizations in place. 6075 * additional optimizations in place.
5795 * 6076 *
5796 * The library is free for all purposes without any express 6077 * The library is free for all purposes without any express
5797 * guarantee it works. 6078 * guarantee it works.
5798 * 6079 *
5799 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6080 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5800 */ 6081 */
5801 6082
5802 /* makes a truly random prime of a given size (bits), 6083 /* makes a truly random prime of a given size (bits),
5803 * 6084 *
5804 * Flags are as follows: 6085 * Flags are as follows:
5844 6125
5845 /* calc the maskOR_msb */ 6126 /* calc the maskOR_msb */
5846 maskOR_msb = 0; 6127 maskOR_msb = 0;
5847 maskOR_msb_offset = ((size & 7) == 1) ? 1 : 0; 6128 maskOR_msb_offset = ((size & 7) == 1) ? 1 : 0;
5848 if (flags & LTM_PRIME_2MSB_ON) { 6129 if (flags & LTM_PRIME_2MSB_ON) {
5849 maskOR_msb |= 1 << ((size - 2) & 7); 6130 maskOR_msb |= 0x80 >> ((9 - size) & 7);
5850 } else if (flags & LTM_PRIME_2MSB_OFF) { 6131 }
5851 maskAND &= ~(1 << ((size - 2) & 7));
5852 }
5853 6132
5854 /* get the maskOR_lsb */ 6133 /* get the maskOR_lsb */
5855 maskOR_lsb = 1; 6134 maskOR_lsb = 1;
5856 if (flags & LTM_PRIME_BBS) { 6135 if (flags & LTM_PRIME_BBS) {
5857 maskOR_lsb |= 3; 6136 maskOR_lsb |= 3;
5904 } 6183 }
5905 6184
5906 6185
5907 #endif 6186 #endif
5908 6187
6188 /* $Source: /cvs/libtom/libtommath/bn_mp_prime_random_ex.c,v $ */
6189 /* $Revision: 1.4 $ */
6190 /* $Date: 2006/03/31 14:18:44 $ */
6191
5909 /* End: bn_mp_prime_random_ex.c */ 6192 /* End: bn_mp_prime_random_ex.c */
5910 6193
5911 /* Start: bn_mp_radix_size.c */ 6194 /* Start: bn_mp_radix_size.c */
5912 #include <tommath.h> 6195 #include <tommath.h>
5913 #ifdef BN_MP_RADIX_SIZE_C 6196 #ifdef BN_MP_RADIX_SIZE_C
5921 * additional optimizations in place. 6204 * additional optimizations in place.
5922 * 6205 *
5923 * The library is free for all purposes without any express 6206 * The library is free for all purposes without any express
5924 * guarantee it works. 6207 * guarantee it works.
5925 * 6208 *
5926 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6209 * Tom St Denis, [email protected], http://math.libtomcrypt.com
5927 */ 6210 */
5928 6211
5929 /* returns size of ASCII reprensentation */ 6212 /* returns size of ASCII reprensentation */
5930 int mp_radix_size (mp_int * a, int radix, int *size) 6213 int mp_radix_size (mp_int * a, int radix, int *size)
5931 { 6214 {
5945 if (radix < 2 || radix > 64) { 6228 if (radix < 2 || radix > 64) {
5946 return MP_VAL; 6229 return MP_VAL;
5947 } 6230 }
5948 6231
5949 if (mp_iszero(a) == MP_YES) { 6232 if (mp_iszero(a) == MP_YES) {
5950 *size = 2; 6233 *size = 2;
5951 return MP_OKAY; 6234 return MP_OKAY;
5952 } 6235 }
5953 6236
5954 /* digs is the digit count */ 6237 /* digs is the digit count */
5955 digs = 0; 6238 digs = 0;
5982 return MP_OKAY; 6265 return MP_OKAY;
5983 } 6266 }
5984 6267
5985 #endif 6268 #endif
5986 6269
6270 /* $Source: /cvs/libtom/libtommath/bn_mp_radix_size.c,v $ */
6271 /* $Revision: 1.4 $ */
6272 /* $Date: 2006/03/31 14:18:44 $ */
6273
5987 /* End: bn_mp_radix_size.c */ 6274 /* End: bn_mp_radix_size.c */
5988 6275
5989 /* Start: bn_mp_radix_smap.c */ 6276 /* Start: bn_mp_radix_smap.c */
5990 #include <tommath.h> 6277 #include <tommath.h>
5991 #ifdef BN_MP_RADIX_SMAP_C 6278 #ifdef BN_MP_RADIX_SMAP_C
5999 * additional optimizations in place. 6286 * additional optimizations in place.
6000 * 6287 *
6001 * The library is free for all purposes without any express 6288 * The library is free for all purposes without any express
6002 * guarantee it works. 6289 * guarantee it works.
6003 * 6290 *
6004 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6291 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6005 */ 6292 */
6006 6293
6007 /* chars used in radix conversions */ 6294 /* chars used in radix conversions */
6008 const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; 6295 const char *mp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/";
6009 #endif 6296 #endif
6010 6297
6298 /* $Source: /cvs/libtom/libtommath/bn_mp_radix_smap.c,v $ */
6299 /* $Revision: 1.3 $ */
6300 /* $Date: 2006/03/31 14:18:44 $ */
6301
6011 /* End: bn_mp_radix_smap.c */ 6302 /* End: bn_mp_radix_smap.c */
6012 6303
6013 /* Start: bn_mp_rand.c */ 6304 /* Start: bn_mp_rand.c */
6014 #include <tommath.h> 6305 #include <tommath.h>
6015 #ifdef BN_MP_RAND_C 6306 #ifdef BN_MP_RAND_C
6023 * additional optimizations in place. 6314 * additional optimizations in place.
6024 * 6315 *
6025 * The library is free for all purposes without any express 6316 * The library is free for all purposes without any express
6026 * guarantee it works. 6317 * guarantee it works.
6027 * 6318 *
6028 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6319 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6029 */ 6320 */
6030 6321
6031 /* makes a pseudo-random int of a given size */ 6322 /* makes a pseudo-random int of a given size */
6032 int 6323 int
6033 mp_rand (mp_int * a, int digits) 6324 mp_rand (mp_int * a, int digits)
6061 6352
6062 return MP_OKAY; 6353 return MP_OKAY;
6063 } 6354 }
6064 #endif 6355 #endif
6065 6356
6357 /* $Source: /cvs/libtom/libtommath/bn_mp_rand.c,v $ */
6358 /* $Revision: 1.3 $ */
6359 /* $Date: 2006/03/31 14:18:44 $ */
6360
6066 /* End: bn_mp_rand.c */ 6361 /* End: bn_mp_rand.c */
6067 6362
6068 /* Start: bn_mp_read_radix.c */ 6363 /* Start: bn_mp_read_radix.c */
6069 #include <tommath.h> 6364 #include <tommath.h>
6070 #ifdef BN_MP_READ_RADIX_C 6365 #ifdef BN_MP_READ_RADIX_C
6078 * additional optimizations in place. 6373 * additional optimizations in place.
6079 * 6374 *
6080 * The library is free for all purposes without any express 6375 * The library is free for all purposes without any express
6081 * guarantee it works. 6376 * guarantee it works.
6082 * 6377 *
6083 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6378 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6084 */ 6379 */
6085 6380
6086 /* read a string [ASCII] in a given radix */ 6381 /* read a string [ASCII] in a given radix */
6087 int mp_read_radix (mp_int * a, const char *str, int radix) 6382 int mp_read_radix (mp_int * a, const char *str, int radix)
6088 { 6383 {
6089 int y, res, neg; 6384 int y, res, neg;
6090 char ch; 6385 char ch;
6386
6387 /* zero the digit bignum */
6388 mp_zero(a);
6091 6389
6092 /* make sure the radix is ok */ 6390 /* make sure the radix is ok */
6093 if (radix < 2 || radix > 64) { 6391 if (radix < 2 || radix > 64) {
6094 return MP_VAL; 6392 return MP_VAL;
6095 } 6393 }
6143 } 6441 }
6144 return MP_OKAY; 6442 return MP_OKAY;
6145 } 6443 }
6146 #endif 6444 #endif
6147 6445
6446 /* $Source: /cvs/libtom/libtommath/bn_mp_read_radix.c,v $ */
6447 /* $Revision: 1.4 $ */
6448 /* $Date: 2006/03/31 14:18:44 $ */
6449
6148 /* End: bn_mp_read_radix.c */ 6450 /* End: bn_mp_read_radix.c */
6149 6451
6150 /* Start: bn_mp_read_signed_bin.c */ 6452 /* Start: bn_mp_read_signed_bin.c */
6151 #include <tommath.h> 6453 #include <tommath.h>
6152 #ifdef BN_MP_READ_SIGNED_BIN_C 6454 #ifdef BN_MP_READ_SIGNED_BIN_C
6160 * additional optimizations in place. 6462 * additional optimizations in place.
6161 * 6463 *
6162 * The library is free for all purposes without any express 6464 * The library is free for all purposes without any express
6163 * guarantee it works. 6465 * guarantee it works.
6164 * 6466 *
6165 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6467 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6166 */ 6468 */
6167 6469
6168 /* read signed bin, big endian, first byte is 0==positive or 1==negative */ 6470 /* read signed bin, big endian, first byte is 0==positive or 1==negative */
6169 int 6471 int mp_read_signed_bin (mp_int * a, const unsigned char *b, int c)
6170 mp_read_signed_bin (mp_int * a, unsigned char *b, int c)
6171 { 6472 {
6172 int res; 6473 int res;
6173 6474
6174 /* read magnitude */ 6475 /* read magnitude */
6175 if ((res = mp_read_unsigned_bin (a, b + 1, c - 1)) != MP_OKAY) { 6476 if ((res = mp_read_unsigned_bin (a, b + 1, c - 1)) != MP_OKAY) {
6185 6486
6186 return MP_OKAY; 6487 return MP_OKAY;
6187 } 6488 }
6188 #endif 6489 #endif
6189 6490
6491 /* $Source: /cvs/libtom/libtommath/bn_mp_read_signed_bin.c,v $ */
6492 /* $Revision: 1.4 $ */
6493 /* $Date: 2006/03/31 14:18:44 $ */
6494
6190 /* End: bn_mp_read_signed_bin.c */ 6495 /* End: bn_mp_read_signed_bin.c */
6191 6496
6192 /* Start: bn_mp_read_unsigned_bin.c */ 6497 /* Start: bn_mp_read_unsigned_bin.c */
6193 #include <tommath.h> 6498 #include <tommath.h>
6194 #ifdef BN_MP_READ_UNSIGNED_BIN_C 6499 #ifdef BN_MP_READ_UNSIGNED_BIN_C
6202 * additional optimizations in place. 6507 * additional optimizations in place.
6203 * 6508 *
6204 * The library is free for all purposes without any express 6509 * The library is free for all purposes without any express
6205 * guarantee it works. 6510 * guarantee it works.
6206 * 6511 *
6207 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6512 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6208 */ 6513 */
6209 6514
6210 /* reads a unsigned char array, assumes the msb is stored first [big endian] */ 6515 /* reads a unsigned char array, assumes the msb is stored first [big endian] */
6211 int 6516 int mp_read_unsigned_bin (mp_int * a, const unsigned char *b, int c)
6212 mp_read_unsigned_bin (mp_int * a, unsigned char *b, int c)
6213 { 6517 {
6214 int res; 6518 int res;
6215 6519
6216 /* make sure there are at least two digits */ 6520 /* make sure there are at least two digits */
6217 if (a->alloc < 2) { 6521 if (a->alloc < 2) {
6241 mp_clamp (a); 6545 mp_clamp (a);
6242 return MP_OKAY; 6546 return MP_OKAY;
6243 } 6547 }
6244 #endif 6548 #endif
6245 6549
6550 /* $Source: /cvs/libtom/libtommath/bn_mp_read_unsigned_bin.c,v $ */
6551 /* $Revision: 1.4 $ */
6552 /* $Date: 2006/03/31 14:18:44 $ */
6553
6246 /* End: bn_mp_read_unsigned_bin.c */ 6554 /* End: bn_mp_read_unsigned_bin.c */
6247 6555
6248 /* Start: bn_mp_reduce.c */ 6556 /* Start: bn_mp_reduce.c */
6249 #include <tommath.h> 6557 #include <tommath.h>
6250 #ifdef BN_MP_REDUCE_C 6558 #ifdef BN_MP_REDUCE_C
6258 * additional optimizations in place. 6566 * additional optimizations in place.
6259 * 6567 *
6260 * The library is free for all purposes without any express 6568 * The library is free for all purposes without any express
6261 * guarantee it works. 6569 * guarantee it works.
6262 * 6570 *
6263 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6571 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6264 */ 6572 */
6265 6573
6266 /* reduces x mod m, assumes 0 < x < m**2, mu is 6574 /* reduces x mod m, assumes 0 < x < m**2, mu is
6267 * precomputed via mp_reduce_setup. 6575 * precomputed via mp_reduce_setup.
6268 * From HAC pp.604 Algorithm 14.42 6576 * From HAC pp.604 Algorithm 14.42
6341 6649
6342 return res; 6650 return res;
6343 } 6651 }
6344 #endif 6652 #endif
6345 6653
6654 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce.c,v $ */
6655 /* $Revision: 1.3 $ */
6656 /* $Date: 2006/03/31 14:18:44 $ */
6657
6346 /* End: bn_mp_reduce.c */ 6658 /* End: bn_mp_reduce.c */
6347 6659
6348 /* Start: bn_mp_reduce_2k.c */ 6660 /* Start: bn_mp_reduce_2k.c */
6349 #include <tommath.h> 6661 #include <tommath.h>
6350 #ifdef BN_MP_REDUCE_2K_C 6662 #ifdef BN_MP_REDUCE_2K_C
6358 * additional optimizations in place. 6670 * additional optimizations in place.
6359 * 6671 *
6360 * The library is free for all purposes without any express 6672 * The library is free for all purposes without any express
6361 * guarantee it works. 6673 * guarantee it works.
6362 * 6674 *
6363 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6675 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6364 */ 6676 */
6365 6677
6366 /* reduces a modulo n where n is of the form 2**p - d */ 6678 /* reduces a modulo n where n is of the form 2**p - d */
6367 int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d) 6679 int mp_reduce_2k(mp_int *a, mp_int *n, mp_digit d)
6368 { 6680 {
6402 return res; 6714 return res;
6403 } 6715 }
6404 6716
6405 #endif 6717 #endif
6406 6718
6719 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_2k.c,v $ */
6720 /* $Revision: 1.3 $ */
6721 /* $Date: 2006/03/31 14:18:44 $ */
6722
6407 /* End: bn_mp_reduce_2k.c */ 6723 /* End: bn_mp_reduce_2k.c */
6408 6724
6409 /* Start: bn_mp_reduce_2k_l.c */ 6725 /* Start: bn_mp_reduce_2k_l.c */
6410 #include <tommath.h> 6726 #include <tommath.h>
6411 #ifdef BN_MP_REDUCE_2K_L_C 6727 #ifdef BN_MP_REDUCE_2K_L_C
6419 * additional optimizations in place. 6735 * additional optimizations in place.
6420 * 6736 *
6421 * The library is free for all purposes without any express 6737 * The library is free for all purposes without any express
6422 * guarantee it works. 6738 * guarantee it works.
6423 * 6739 *
6424 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6740 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6425 */ 6741 */
6426 6742
6427 /* reduces a modulo n where n is of the form 2**p - d 6743 /* reduces a modulo n where n is of the form 2**p - d
6428 This differs from reduce_2k since "d" can be larger 6744 This differs from reduce_2k since "d" can be larger
6429 than a single digit. 6745 than a single digit.
6464 return res; 6780 return res;
6465 } 6781 }
6466 6782
6467 #endif 6783 #endif
6468 6784
6785 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_2k_l.c,v $ */
6786 /* $Revision: 1.3 $ */
6787 /* $Date: 2006/03/31 14:18:44 $ */
6788
6469 /* End: bn_mp_reduce_2k_l.c */ 6789 /* End: bn_mp_reduce_2k_l.c */
6470 6790
6471 /* Start: bn_mp_reduce_2k_setup.c */ 6791 /* Start: bn_mp_reduce_2k_setup.c */
6472 #include <tommath.h> 6792 #include <tommath.h>
6473 #ifdef BN_MP_REDUCE_2K_SETUP_C 6793 #ifdef BN_MP_REDUCE_2K_SETUP_C
6481 * additional optimizations in place. 6801 * additional optimizations in place.
6482 * 6802 *
6483 * The library is free for all purposes without any express 6803 * The library is free for all purposes without any express
6484 * guarantee it works. 6804 * guarantee it works.
6485 * 6805 *
6486 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6806 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6487 */ 6807 */
6488 6808
6489 /* determines the setup value */ 6809 /* determines the setup value */
6490 int mp_reduce_2k_setup(mp_int *a, mp_digit *d) 6810 int mp_reduce_2k_setup(mp_int *a, mp_digit *d)
6491 { 6811 {
6511 mp_clear(&tmp); 6831 mp_clear(&tmp);
6512 return MP_OKAY; 6832 return MP_OKAY;
6513 } 6833 }
6514 #endif 6834 #endif
6515 6835
6836 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_2k_setup.c,v $ */
6837 /* $Revision: 1.3 $ */
6838 /* $Date: 2006/03/31 14:18:44 $ */
6839
6516 /* End: bn_mp_reduce_2k_setup.c */ 6840 /* End: bn_mp_reduce_2k_setup.c */
6517 6841
6518 /* Start: bn_mp_reduce_2k_setup_l.c */ 6842 /* Start: bn_mp_reduce_2k_setup_l.c */
6519 #include <tommath.h> 6843 #include <tommath.h>
6520 #ifdef BN_MP_REDUCE_2K_SETUP_L_C 6844 #ifdef BN_MP_REDUCE_2K_SETUP_L_C
6528 * additional optimizations in place. 6852 * additional optimizations in place.
6529 * 6853 *
6530 * The library is free for all purposes without any express 6854 * The library is free for all purposes without any express
6531 * guarantee it works. 6855 * guarantee it works.
6532 * 6856 *
6533 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6857 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6534 */ 6858 */
6535 6859
6536 /* determines the setup value */ 6860 /* determines the setup value */
6537 int mp_reduce_2k_setup_l(mp_int *a, mp_int *d) 6861 int mp_reduce_2k_setup_l(mp_int *a, mp_int *d)
6538 { 6862 {
6555 mp_clear(&tmp); 6879 mp_clear(&tmp);
6556 return res; 6880 return res;
6557 } 6881 }
6558 #endif 6882 #endif
6559 6883
6884 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_2k_setup_l.c,v $ */
6885 /* $Revision: 1.3 $ */
6886 /* $Date: 2006/03/31 14:18:44 $ */
6887
6560 /* End: bn_mp_reduce_2k_setup_l.c */ 6888 /* End: bn_mp_reduce_2k_setup_l.c */
6561 6889
6562 /* Start: bn_mp_reduce_is_2k.c */ 6890 /* Start: bn_mp_reduce_is_2k.c */
6563 #include <tommath.h> 6891 #include <tommath.h>
6564 #ifdef BN_MP_REDUCE_IS_2K_C 6892 #ifdef BN_MP_REDUCE_IS_2K_C
6572 * additional optimizations in place. 6900 * additional optimizations in place.
6573 * 6901 *
6574 * The library is free for all purposes without any express 6902 * The library is free for all purposes without any express
6575 * guarantee it works. 6903 * guarantee it works.
6576 * 6904 *
6577 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6905 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6578 */ 6906 */
6579 6907
6580 /* determines if mp_reduce_2k can be used */ 6908 /* determines if mp_reduce_2k can be used */
6581 int mp_reduce_is_2k(mp_int *a) 6909 int mp_reduce_is_2k(mp_int *a)
6582 { 6910 {
6607 return MP_YES; 6935 return MP_YES;
6608 } 6936 }
6609 6937
6610 #endif 6938 #endif
6611 6939
6940 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_is_2k.c,v $ */
6941 /* $Revision: 1.3 $ */
6942 /* $Date: 2006/03/31 14:18:44 $ */
6943
6612 /* End: bn_mp_reduce_is_2k.c */ 6944 /* End: bn_mp_reduce_is_2k.c */
6613 6945
6614 /* Start: bn_mp_reduce_is_2k_l.c */ 6946 /* Start: bn_mp_reduce_is_2k_l.c */
6615 #include <tommath.h> 6947 #include <tommath.h>
6616 #ifdef BN_MP_REDUCE_IS_2K_L_C 6948 #ifdef BN_MP_REDUCE_IS_2K_L_C
6624 * additional optimizations in place. 6956 * additional optimizations in place.
6625 * 6957 *
6626 * The library is free for all purposes without any express 6958 * The library is free for all purposes without any express
6627 * guarantee it works. 6959 * guarantee it works.
6628 * 6960 *
6629 * Tom St Denis, [email protected], http://math.libtomcrypt.org 6961 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6630 */ 6962 */
6631 6963
6632 /* determines if reduce_2k_l can be used */ 6964 /* determines if reduce_2k_l can be used */
6633 int mp_reduce_is_2k_l(mp_int *a) 6965 int mp_reduce_is_2k_l(mp_int *a)
6634 { 6966 {
6651 return MP_NO; 6983 return MP_NO;
6652 } 6984 }
6653 6985
6654 #endif 6986 #endif
6655 6987
6988 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_is_2k_l.c,v $ */
6989 /* $Revision: 1.3 $ */
6990 /* $Date: 2006/03/31 14:18:44 $ */
6991
6656 /* End: bn_mp_reduce_is_2k_l.c */ 6992 /* End: bn_mp_reduce_is_2k_l.c */
6657 6993
6658 /* Start: bn_mp_reduce_setup.c */ 6994 /* Start: bn_mp_reduce_setup.c */
6659 #include <tommath.h> 6995 #include <tommath.h>
6660 #ifdef BN_MP_REDUCE_SETUP_C 6996 #ifdef BN_MP_REDUCE_SETUP_C
6668 * additional optimizations in place. 7004 * additional optimizations in place.
6669 * 7005 *
6670 * The library is free for all purposes without any express 7006 * The library is free for all purposes without any express
6671 * guarantee it works. 7007 * guarantee it works.
6672 * 7008 *
6673 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7009 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6674 */ 7010 */
6675 7011
6676 /* pre-calculate the value required for Barrett reduction 7012 /* pre-calculate the value required for Barrett reduction
6677 * For a given modulus "b" it calulates the value required in "a" 7013 * For a given modulus "b" it calulates the value required in "a"
6678 */ 7014 */
6685 } 7021 }
6686 return mp_div (a, b, a, NULL); 7022 return mp_div (a, b, a, NULL);
6687 } 7023 }
6688 #endif 7024 #endif
6689 7025
7026 /* $Source: /cvs/libtom/libtommath/bn_mp_reduce_setup.c,v $ */
7027 /* $Revision: 1.3 $ */
7028 /* $Date: 2006/03/31 14:18:44 $ */
7029
6690 /* End: bn_mp_reduce_setup.c */ 7030 /* End: bn_mp_reduce_setup.c */
6691 7031
6692 /* Start: bn_mp_rshd.c */ 7032 /* Start: bn_mp_rshd.c */
6693 #include <tommath.h> 7033 #include <tommath.h>
6694 #ifdef BN_MP_RSHD_C 7034 #ifdef BN_MP_RSHD_C
6702 * additional optimizations in place. 7042 * additional optimizations in place.
6703 * 7043 *
6704 * The library is free for all purposes without any express 7044 * The library is free for all purposes without any express
6705 * guarantee it works. 7045 * guarantee it works.
6706 * 7046 *
6707 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7047 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6708 */ 7048 */
6709 7049
6710 /* shift right a certain amount of digits */ 7050 /* shift right a certain amount of digits */
6711 void mp_rshd (mp_int * a, int b) 7051 void mp_rshd (mp_int * a, int b)
6712 { 7052 {
6757 /* remove excess digits */ 7097 /* remove excess digits */
6758 a->used -= b; 7098 a->used -= b;
6759 } 7099 }
6760 #endif 7100 #endif
6761 7101
7102 /* $Source: /cvs/libtom/libtommath/bn_mp_rshd.c,v $ */
7103 /* $Revision: 1.3 $ */
7104 /* $Date: 2006/03/31 14:18:44 $ */
7105
6762 /* End: bn_mp_rshd.c */ 7106 /* End: bn_mp_rshd.c */
6763 7107
6764 /* Start: bn_mp_set.c */ 7108 /* Start: bn_mp_set.c */
6765 #include <tommath.h> 7109 #include <tommath.h>
6766 #ifdef BN_MP_SET_C 7110 #ifdef BN_MP_SET_C
6774 * additional optimizations in place. 7118 * additional optimizations in place.
6775 * 7119 *
6776 * The library is free for all purposes without any express 7120 * The library is free for all purposes without any express
6777 * guarantee it works. 7121 * guarantee it works.
6778 * 7122 *
6779 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7123 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6780 */ 7124 */
6781 7125
6782 /* set to a digit */ 7126 /* set to a digit */
6783 void mp_set (mp_int * a, mp_digit b) 7127 void mp_set (mp_int * a, mp_digit b)
6784 { 7128 {
6786 a->dp[0] = b & MP_MASK; 7130 a->dp[0] = b & MP_MASK;
6787 a->used = (a->dp[0] != 0) ? 1 : 0; 7131 a->used = (a->dp[0] != 0) ? 1 : 0;
6788 } 7132 }
6789 #endif 7133 #endif
6790 7134
7135 /* $Source: /cvs/libtom/libtommath/bn_mp_set.c,v $ */
7136 /* $Revision: 1.3 $ */
7137 /* $Date: 2006/03/31 14:18:44 $ */
7138
6791 /* End: bn_mp_set.c */ 7139 /* End: bn_mp_set.c */
6792 7140
6793 /* Start: bn_mp_set_int.c */ 7141 /* Start: bn_mp_set_int.c */
6794 #include <tommath.h> 7142 #include <tommath.h>
6795 #ifdef BN_MP_SET_INT_C 7143 #ifdef BN_MP_SET_INT_C
6803 * additional optimizations in place. 7151 * additional optimizations in place.
6804 * 7152 *
6805 * The library is free for all purposes without any express 7153 * The library is free for all purposes without any express
6806 * guarantee it works. 7154 * guarantee it works.
6807 * 7155 *
6808 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7156 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6809 */ 7157 */
6810 7158
6811 /* set a 32-bit const */ 7159 /* set a 32-bit const */
6812 int mp_set_int (mp_int * a, unsigned long b) 7160 int mp_set_int (mp_int * a, unsigned long b)
6813 { 7161 {
6834 mp_clamp (a); 7182 mp_clamp (a);
6835 return MP_OKAY; 7183 return MP_OKAY;
6836 } 7184 }
6837 #endif 7185 #endif
6838 7186
7187 /* $Source: /cvs/libtom/libtommath/bn_mp_set_int.c,v $ */
7188 /* $Revision: 1.3 $ */
7189 /* $Date: 2006/03/31 14:18:44 $ */
7190
6839 /* End: bn_mp_set_int.c */ 7191 /* End: bn_mp_set_int.c */
6840 7192
6841 /* Start: bn_mp_shrink.c */ 7193 /* Start: bn_mp_shrink.c */
6842 #include <tommath.h> 7194 #include <tommath.h>
6843 #ifdef BN_MP_SHRINK_C 7195 #ifdef BN_MP_SHRINK_C
6851 * additional optimizations in place. 7203 * additional optimizations in place.
6852 * 7204 *
6853 * The library is free for all purposes without any express 7205 * The library is free for all purposes without any express
6854 * guarantee it works. 7206 * guarantee it works.
6855 * 7207 *
6856 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7208 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6857 */ 7209 */
6858 7210
6859 /* shrink a bignum */ 7211 /* shrink a bignum */
6860 int mp_shrink (mp_int * a) 7212 int mp_shrink (mp_int * a)
6861 { 7213 {
6869 } 7221 }
6870 return MP_OKAY; 7222 return MP_OKAY;
6871 } 7223 }
6872 #endif 7224 #endif
6873 7225
7226 /* $Source: /cvs/libtom/libtommath/bn_mp_shrink.c,v $ */
7227 /* $Revision: 1.3 $ */
7228 /* $Date: 2006/03/31 14:18:44 $ */
7229
6874 /* End: bn_mp_shrink.c */ 7230 /* End: bn_mp_shrink.c */
6875 7231
6876 /* Start: bn_mp_signed_bin_size.c */ 7232 /* Start: bn_mp_signed_bin_size.c */
6877 #include <tommath.h> 7233 #include <tommath.h>
6878 #ifdef BN_MP_SIGNED_BIN_SIZE_C 7234 #ifdef BN_MP_SIGNED_BIN_SIZE_C
6886 * additional optimizations in place. 7242 * additional optimizations in place.
6887 * 7243 *
6888 * The library is free for all purposes without any express 7244 * The library is free for all purposes without any express
6889 * guarantee it works. 7245 * guarantee it works.
6890 * 7246 *
6891 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7247 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6892 */ 7248 */
6893 7249
6894 /* get the size for an signed equivalent */ 7250 /* get the size for an signed equivalent */
6895 int mp_signed_bin_size (mp_int * a) 7251 int mp_signed_bin_size (mp_int * a)
6896 { 7252 {
6897 return 1 + mp_unsigned_bin_size (a); 7253 return 1 + mp_unsigned_bin_size (a);
6898 } 7254 }
6899 #endif 7255 #endif
6900 7256
7257 /* $Source: /cvs/libtom/libtommath/bn_mp_signed_bin_size.c,v $ */
7258 /* $Revision: 1.3 $ */
7259 /* $Date: 2006/03/31 14:18:44 $ */
7260
6901 /* End: bn_mp_signed_bin_size.c */ 7261 /* End: bn_mp_signed_bin_size.c */
6902 7262
6903 /* Start: bn_mp_sqr.c */ 7263 /* Start: bn_mp_sqr.c */
6904 #include <tommath.h> 7264 #include <tommath.h>
6905 #ifdef BN_MP_SQR_C 7265 #ifdef BN_MP_SQR_C
6913 * additional optimizations in place. 7273 * additional optimizations in place.
6914 * 7274 *
6915 * The library is free for all purposes without any express 7275 * The library is free for all purposes without any express
6916 * guarantee it works. 7276 * guarantee it works.
6917 * 7277 *
6918 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7278 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6919 */ 7279 */
6920 7280
6921 /* computes b = a*a */ 7281 /* computes b = a*a */
6922 int 7282 int
6923 mp_sqr (mp_int * a, mp_int * b) 7283 mp_sqr (mp_int * a, mp_int * b)
6954 b->sign = MP_ZPOS; 7314 b->sign = MP_ZPOS;
6955 return res; 7315 return res;
6956 } 7316 }
6957 #endif 7317 #endif
6958 7318
7319 /* $Source: /cvs/libtom/libtommath/bn_mp_sqr.c,v $ */
7320 /* $Revision: 1.3 $ */
7321 /* $Date: 2006/03/31 14:18:44 $ */
7322
6959 /* End: bn_mp_sqr.c */ 7323 /* End: bn_mp_sqr.c */
6960 7324
6961 /* Start: bn_mp_sqrmod.c */ 7325 /* Start: bn_mp_sqrmod.c */
6962 #include <tommath.h> 7326 #include <tommath.h>
6963 #ifdef BN_MP_SQRMOD_C 7327 #ifdef BN_MP_SQRMOD_C
6971 * additional optimizations in place. 7335 * additional optimizations in place.
6972 * 7336 *
6973 * The library is free for all purposes without any express 7337 * The library is free for all purposes without any express
6974 * guarantee it works. 7338 * guarantee it works.
6975 * 7339 *
6976 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7340 * Tom St Denis, [email protected], http://math.libtomcrypt.com
6977 */ 7341 */
6978 7342
6979 /* c = a * a (mod b) */ 7343 /* c = a * a (mod b) */
6980 int 7344 int
6981 mp_sqrmod (mp_int * a, mp_int * b, mp_int * c) 7345 mp_sqrmod (mp_int * a, mp_int * b, mp_int * c)
6995 mp_clear (&t); 7359 mp_clear (&t);
6996 return res; 7360 return res;
6997 } 7361 }
6998 #endif 7362 #endif
6999 7363
7364 /* $Source: /cvs/libtom/libtommath/bn_mp_sqrmod.c,v $ */
7365 /* $Revision: 1.3 $ */
7366 /* $Date: 2006/03/31 14:18:44 $ */
7367
7000 /* End: bn_mp_sqrmod.c */ 7368 /* End: bn_mp_sqrmod.c */
7001 7369
7002 /* Start: bn_mp_sqrt.c */ 7370 /* Start: bn_mp_sqrt.c */
7003 #include <tommath.h> 7371 #include <tommath.h>
7004 #ifdef BN_MP_SQRT_C 7372 #ifdef BN_MP_SQRT_C
7012 * additional optimizations in place. 7380 * additional optimizations in place.
7013 * 7381 *
7014 * The library is free for all purposes without any express 7382 * The library is free for all purposes without any express
7015 * guarantee it works. 7383 * guarantee it works.
7016 * 7384 *
7017 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7385 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7018 */ 7386 */
7019 7387
7020 /* this function is less generic than mp_n_root, simpler and faster */ 7388 /* this function is less generic than mp_n_root, simpler and faster */
7021 int mp_sqrt(mp_int *arg, mp_int *ret) 7389 int mp_sqrt(mp_int *arg, mp_int *ret)
7022 { 7390 {
7076 return res; 7444 return res;
7077 } 7445 }
7078 7446
7079 #endif 7447 #endif
7080 7448
7449 /* $Source: /cvs/libtom/libtommath/bn_mp_sqrt.c,v $ */
7450 /* $Revision: 1.3 $ */
7451 /* $Date: 2006/03/31 14:18:44 $ */
7452
7081 /* End: bn_mp_sqrt.c */ 7453 /* End: bn_mp_sqrt.c */
7082 7454
7083 /* Start: bn_mp_sub.c */ 7455 /* Start: bn_mp_sub.c */
7084 #include <tommath.h> 7456 #include <tommath.h>
7085 #ifdef BN_MP_SUB_C 7457 #ifdef BN_MP_SUB_C
7093 * additional optimizations in place. 7465 * additional optimizations in place.
7094 * 7466 *
7095 * The library is free for all purposes without any express 7467 * The library is free for all purposes without any express
7096 * guarantee it works. 7468 * guarantee it works.
7097 * 7469 *
7098 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7470 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7099 */ 7471 */
7100 7472
7101 /* high level subtraction (handles signs) */ 7473 /* high level subtraction (handles signs) */
7102 int 7474 int
7103 mp_sub (mp_int * a, mp_int * b, mp_int * c) 7475 mp_sub (mp_int * a, mp_int * b, mp_int * c)
7135 return res; 7507 return res;
7136 } 7508 }
7137 7509
7138 #endif 7510 #endif
7139 7511
7512 /* $Source: /cvs/libtom/libtommath/bn_mp_sub.c,v $ */
7513 /* $Revision: 1.3 $ */
7514 /* $Date: 2006/03/31 14:18:44 $ */
7515
7140 /* End: bn_mp_sub.c */ 7516 /* End: bn_mp_sub.c */
7141 7517
7142 /* Start: bn_mp_sub_d.c */ 7518 /* Start: bn_mp_sub_d.c */
7143 #include <tommath.h> 7519 #include <tommath.h>
7144 #ifdef BN_MP_SUB_D_C 7520 #ifdef BN_MP_SUB_D_C
7152 * additional optimizations in place. 7528 * additional optimizations in place.
7153 * 7529 *
7154 * The library is free for all purposes without any express 7530 * The library is free for all purposes without any express
7155 * guarantee it works. 7531 * guarantee it works.
7156 * 7532 *
7157 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7533 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7158 */ 7534 */
7159 7535
7160 /* single digit subtraction */ 7536 /* single digit subtraction */
7161 int 7537 int
7162 mp_sub_d (mp_int * a, mp_digit b, mp_int * c) 7538 mp_sub_d (mp_int * a, mp_digit b, mp_int * c)
7176 */ 7552 */
7177 if (a->sign == MP_NEG) { 7553 if (a->sign == MP_NEG) {
7178 a->sign = MP_ZPOS; 7554 a->sign = MP_ZPOS;
7179 res = mp_add_d(a, b, c); 7555 res = mp_add_d(a, b, c);
7180 a->sign = c->sign = MP_NEG; 7556 a->sign = c->sign = MP_NEG;
7557
7558 /* clamp */
7559 mp_clamp(c);
7560
7181 return res; 7561 return res;
7182 } 7562 }
7183 7563
7184 /* setup regs */ 7564 /* setup regs */
7185 oldused = c->used; 7565 oldused = c->used;
7224 return MP_OKAY; 7604 return MP_OKAY;
7225 } 7605 }
7226 7606
7227 #endif 7607 #endif
7228 7608
7609 /* $Source: /cvs/libtom/libtommath/bn_mp_sub_d.c,v $ */
7610 /* $Revision: 1.5 $ */
7611 /* $Date: 2006/03/31 14:18:44 $ */
7612
7229 /* End: bn_mp_sub_d.c */ 7613 /* End: bn_mp_sub_d.c */
7230 7614
7231 /* Start: bn_mp_submod.c */ 7615 /* Start: bn_mp_submod.c */
7232 #include <tommath.h> 7616 #include <tommath.h>
7233 #ifdef BN_MP_SUBMOD_C 7617 #ifdef BN_MP_SUBMOD_C
7241 * additional optimizations in place. 7625 * additional optimizations in place.
7242 * 7626 *
7243 * The library is free for all purposes without any express 7627 * The library is free for all purposes without any express
7244 * guarantee it works. 7628 * guarantee it works.
7245 * 7629 *
7246 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7630 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7247 */ 7631 */
7248 7632
7249 /* d = a - b (mod c) */ 7633 /* d = a - b (mod c) */
7250 int 7634 int
7251 mp_submod (mp_int * a, mp_int * b, mp_int * c, mp_int * d) 7635 mp_submod (mp_int * a, mp_int * b, mp_int * c, mp_int * d)
7266 mp_clear (&t); 7650 mp_clear (&t);
7267 return res; 7651 return res;
7268 } 7652 }
7269 #endif 7653 #endif
7270 7654
7655 /* $Source: /cvs/libtom/libtommath/bn_mp_submod.c,v $ */
7656 /* $Revision: 1.3 $ */
7657 /* $Date: 2006/03/31 14:18:44 $ */
7658
7271 /* End: bn_mp_submod.c */ 7659 /* End: bn_mp_submod.c */
7272 7660
7273 /* Start: bn_mp_to_signed_bin.c */ 7661 /* Start: bn_mp_to_signed_bin.c */
7274 #include <tommath.h> 7662 #include <tommath.h>
7275 #ifdef BN_MP_TO_SIGNED_BIN_C 7663 #ifdef BN_MP_TO_SIGNED_BIN_C
7283 * additional optimizations in place. 7671 * additional optimizations in place.
7284 * 7672 *
7285 * The library is free for all purposes without any express 7673 * The library is free for all purposes without any express
7286 * guarantee it works. 7674 * guarantee it works.
7287 * 7675 *
7288 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7676 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7289 */ 7677 */
7290 7678
7291 /* store in signed [big endian] format */ 7679 /* store in signed [big endian] format */
7292 int mp_to_signed_bin (mp_int * a, unsigned char *b) 7680 int mp_to_signed_bin (mp_int * a, unsigned char *b)
7293 { 7681 {
7299 b[0] = (unsigned char) ((a->sign == MP_ZPOS) ? 0 : 1); 7687 b[0] = (unsigned char) ((a->sign == MP_ZPOS) ? 0 : 1);
7300 return MP_OKAY; 7688 return MP_OKAY;
7301 } 7689 }
7302 #endif 7690 #endif
7303 7691
7692 /* $Source: /cvs/libtom/libtommath/bn_mp_to_signed_bin.c,v $ */
7693 /* $Revision: 1.3 $ */
7694 /* $Date: 2006/03/31 14:18:44 $ */
7695
7304 /* End: bn_mp_to_signed_bin.c */ 7696 /* End: bn_mp_to_signed_bin.c */
7305 7697
7306 /* Start: bn_mp_to_signed_bin_n.c */ 7698 /* Start: bn_mp_to_signed_bin_n.c */
7307 #include <tommath.h> 7699 #include <tommath.h>
7308 #ifdef BN_MP_TO_SIGNED_BIN_N_C 7700 #ifdef BN_MP_TO_SIGNED_BIN_N_C
7316 * additional optimizations in place. 7708 * additional optimizations in place.
7317 * 7709 *
7318 * The library is free for all purposes without any express 7710 * The library is free for all purposes without any express
7319 * guarantee it works. 7711 * guarantee it works.
7320 * 7712 *
7321 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7713 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7322 */ 7714 */
7323 7715
7324 /* store in signed [big endian] format */ 7716 /* store in signed [big endian] format */
7325 int mp_to_signed_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen) 7717 int mp_to_signed_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen)
7326 { 7718 {
7330 *outlen = mp_signed_bin_size(a); 7722 *outlen = mp_signed_bin_size(a);
7331 return mp_to_signed_bin(a, b); 7723 return mp_to_signed_bin(a, b);
7332 } 7724 }
7333 #endif 7725 #endif
7334 7726
7727 /* $Source: /cvs/libtom/libtommath/bn_mp_to_signed_bin_n.c,v $ */
7728 /* $Revision: 1.3 $ */
7729 /* $Date: 2006/03/31 14:18:44 $ */
7730
7335 /* End: bn_mp_to_signed_bin_n.c */ 7731 /* End: bn_mp_to_signed_bin_n.c */
7336 7732
7337 /* Start: bn_mp_to_unsigned_bin.c */ 7733 /* Start: bn_mp_to_unsigned_bin.c */
7338 #include <tommath.h> 7734 #include <tommath.h>
7339 #ifdef BN_MP_TO_UNSIGNED_BIN_C 7735 #ifdef BN_MP_TO_UNSIGNED_BIN_C
7347 * additional optimizations in place. 7743 * additional optimizations in place.
7348 * 7744 *
7349 * The library is free for all purposes without any express 7745 * The library is free for all purposes without any express
7350 * guarantee it works. 7746 * guarantee it works.
7351 * 7747 *
7352 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7748 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7353 */ 7749 */
7354 7750
7355 /* store in unsigned [big endian] format */ 7751 /* store in unsigned [big endian] format */
7356 int mp_to_unsigned_bin (mp_int * a, unsigned char *b) 7752 int mp_to_unsigned_bin (mp_int * a, unsigned char *b)
7357 { 7753 {
7378 mp_clear (&t); 7774 mp_clear (&t);
7379 return MP_OKAY; 7775 return MP_OKAY;
7380 } 7776 }
7381 #endif 7777 #endif
7382 7778
7779 /* $Source: /cvs/libtom/libtommath/bn_mp_to_unsigned_bin.c,v $ */
7780 /* $Revision: 1.3 $ */
7781 /* $Date: 2006/03/31 14:18:44 $ */
7782
7383 /* End: bn_mp_to_unsigned_bin.c */ 7783 /* End: bn_mp_to_unsigned_bin.c */
7384 7784
7385 /* Start: bn_mp_to_unsigned_bin_n.c */ 7785 /* Start: bn_mp_to_unsigned_bin_n.c */
7386 #include <tommath.h> 7786 #include <tommath.h>
7387 #ifdef BN_MP_TO_UNSIGNED_BIN_N_C 7787 #ifdef BN_MP_TO_UNSIGNED_BIN_N_C
7395 * additional optimizations in place. 7795 * additional optimizations in place.
7396 * 7796 *
7397 * The library is free for all purposes without any express 7797 * The library is free for all purposes without any express
7398 * guarantee it works. 7798 * guarantee it works.
7399 * 7799 *
7400 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7800 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7401 */ 7801 */
7402 7802
7403 /* store in unsigned [big endian] format */ 7803 /* store in unsigned [big endian] format */
7404 int mp_to_unsigned_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen) 7804 int mp_to_unsigned_bin_n (mp_int * a, unsigned char *b, unsigned long *outlen)
7405 { 7805 {
7409 *outlen = mp_unsigned_bin_size(a); 7809 *outlen = mp_unsigned_bin_size(a);
7410 return mp_to_unsigned_bin(a, b); 7810 return mp_to_unsigned_bin(a, b);
7411 } 7811 }
7412 #endif 7812 #endif
7413 7813
7814 /* $Source: /cvs/libtom/libtommath/bn_mp_to_unsigned_bin_n.c,v $ */
7815 /* $Revision: 1.3 $ */
7816 /* $Date: 2006/03/31 14:18:44 $ */
7817
7414 /* End: bn_mp_to_unsigned_bin_n.c */ 7818 /* End: bn_mp_to_unsigned_bin_n.c */
7415 7819
7416 /* Start: bn_mp_toom_mul.c */ 7820 /* Start: bn_mp_toom_mul.c */
7417 #include <tommath.h> 7821 #include <tommath.h>
7418 #ifdef BN_MP_TOOM_MUL_C 7822 #ifdef BN_MP_TOOM_MUL_C
7426 * additional optimizations in place. 7830 * additional optimizations in place.
7427 * 7831 *
7428 * The library is free for all purposes without any express 7832 * The library is free for all purposes without any express
7429 * guarantee it works. 7833 * guarantee it works.
7430 * 7834 *
7431 * Tom St Denis, [email protected], http://math.libtomcrypt.org 7835 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7432 */ 7836 */
7433 7837
7434 /* multiplication using the Toom-Cook 3-way algorithm 7838 /* multiplication using the Toom-Cook 3-way algorithm
7435 * 7839 *
7436 * Much more complicated than Karatsuba but has a lower 7840 * Much more complicated than Karatsuba but has a lower
7693 return res; 8097 return res;
7694 } 8098 }
7695 8099
7696 #endif 8100 #endif
7697 8101
8102 /* $Source: /cvs/libtom/libtommath/bn_mp_toom_mul.c,v $ */
8103 /* $Revision: 1.3 $ */
8104 /* $Date: 2006/03/31 14:18:44 $ */
8105
7698 /* End: bn_mp_toom_mul.c */ 8106 /* End: bn_mp_toom_mul.c */
7699 8107
7700 /* Start: bn_mp_toom_sqr.c */ 8108 /* Start: bn_mp_toom_sqr.c */
7701 #include <tommath.h> 8109 #include <tommath.h>
7702 #ifdef BN_MP_TOOM_SQR_C 8110 #ifdef BN_MP_TOOM_SQR_C
7710 * additional optimizations in place. 8118 * additional optimizations in place.
7711 * 8119 *
7712 * The library is free for all purposes without any express 8120 * The library is free for all purposes without any express
7713 * guarantee it works. 8121 * guarantee it works.
7714 * 8122 *
7715 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8123 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7716 */ 8124 */
7717 8125
7718 /* squaring using Toom-Cook 3-way algorithm */ 8126 /* squaring using Toom-Cook 3-way algorithm */
7719 int 8127 int
7720 mp_toom_sqr(mp_int *a, mp_int *b) 8128 mp_toom_sqr(mp_int *a, mp_int *b)
7919 return res; 8327 return res;
7920 } 8328 }
7921 8329
7922 #endif 8330 #endif
7923 8331
8332 /* $Source: /cvs/libtom/libtommath/bn_mp_toom_sqr.c,v $ */
8333 /* $Revision: 1.3 $ */
8334 /* $Date: 2006/03/31 14:18:44 $ */
8335
7924 /* End: bn_mp_toom_sqr.c */ 8336 /* End: bn_mp_toom_sqr.c */
7925 8337
7926 /* Start: bn_mp_toradix.c */ 8338 /* Start: bn_mp_toradix.c */
7927 #include <tommath.h> 8339 #include <tommath.h>
7928 #ifdef BN_MP_TORADIX_C 8340 #ifdef BN_MP_TORADIX_C
7936 * additional optimizations in place. 8348 * additional optimizations in place.
7937 * 8349 *
7938 * The library is free for all purposes without any express 8350 * The library is free for all purposes without any express
7939 * guarantee it works. 8351 * guarantee it works.
7940 * 8352 *
7941 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8353 * Tom St Denis, [email protected], http://math.libtomcrypt.com
7942 */ 8354 */
7943 8355
7944 /* stores a bignum as a ASCII string in a given radix (2..64) */ 8356 /* stores a bignum as a ASCII string in a given radix (2..64) */
7945 int mp_toradix (mp_int * a, char *str, int radix) 8357 int mp_toradix (mp_int * a, char *str, int radix)
7946 { 8358 {
7994 return MP_OKAY; 8406 return MP_OKAY;
7995 } 8407 }
7996 8408
7997 #endif 8409 #endif
7998 8410
8411 /* $Source: /cvs/libtom/libtommath/bn_mp_toradix.c,v $ */
8412 /* $Revision: 1.3 $ */
8413 /* $Date: 2006/03/31 14:18:44 $ */
8414
7999 /* End: bn_mp_toradix.c */ 8415 /* End: bn_mp_toradix.c */
8000 8416
8001 /* Start: bn_mp_toradix_n.c */ 8417 /* Start: bn_mp_toradix_n.c */
8002 #include <tommath.h> 8418 #include <tommath.h>
8003 #ifdef BN_MP_TORADIX_N_C 8419 #ifdef BN_MP_TORADIX_N_C
8011 * additional optimizations in place. 8427 * additional optimizations in place.
8012 * 8428 *
8013 * The library is free for all purposes without any express 8429 * The library is free for all purposes without any express
8014 * guarantee it works. 8430 * guarantee it works.
8015 * 8431 *
8016 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8432 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8017 */ 8433 */
8018 8434
8019 /* stores a bignum as a ASCII string in a given radix (2..64) 8435 /* stores a bignum as a ASCII string in a given radix (2..64)
8020 * 8436 *
8021 * Stores upto maxlen-1 chars and always a NULL byte 8437 * Stores upto maxlen-1 chars and always a NULL byte
8026 mp_int t; 8442 mp_int t;
8027 mp_digit d; 8443 mp_digit d;
8028 char *_s = str; 8444 char *_s = str;
8029 8445
8030 /* check range of the maxlen, radix */ 8446 /* check range of the maxlen, radix */
8031 if (maxlen < 3 || radix < 2 || radix > 64) { 8447 if (maxlen < 2 || radix < 2 || radix > 64) {
8032 return MP_VAL; 8448 return MP_VAL;
8033 } 8449 }
8034 8450
8035 /* quick out if its zero */ 8451 /* quick out if its zero */
8036 if (mp_iszero(a) == 1) { 8452 if (mp_iszero(a) == MP_YES) {
8037 *str++ = '0'; 8453 *str++ = '0';
8038 *str = '\0'; 8454 *str = '\0';
8039 return MP_OKAY; 8455 return MP_OKAY;
8040 } 8456 }
8041 8457
8056 --maxlen; 8472 --maxlen;
8057 } 8473 }
8058 8474
8059 digs = 0; 8475 digs = 0;
8060 while (mp_iszero (&t) == 0) { 8476 while (mp_iszero (&t) == 0) {
8477 if (--maxlen < 1) {
8478 /* no more room */
8479 break;
8480 }
8061 if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) { 8481 if ((res = mp_div_d (&t, (mp_digit) radix, &t, &d)) != MP_OKAY) {
8062 mp_clear (&t); 8482 mp_clear (&t);
8063 return res; 8483 return res;
8064 } 8484 }
8065 *str++ = mp_s_rmap[d]; 8485 *str++ = mp_s_rmap[d];
8066 ++digs; 8486 ++digs;
8067
8068 if (--maxlen == 1) {
8069 /* no more room */
8070 break;
8071 }
8072 } 8487 }
8073 8488
8074 /* reverse the digits of the string. In this case _s points 8489 /* reverse the digits of the string. In this case _s points
8075 * to the first digit [exluding the sign] of the number] 8490 * to the first digit [exluding the sign] of the number
8076 */ 8491 */
8077 bn_reverse ((unsigned char *)_s, digs); 8492 bn_reverse ((unsigned char *)_s, digs);
8078 8493
8079 /* append a NULL so the string is properly terminated */ 8494 /* append a NULL so the string is properly terminated */
8080 *str = '\0'; 8495 *str = '\0';
8083 return MP_OKAY; 8498 return MP_OKAY;
8084 } 8499 }
8085 8500
8086 #endif 8501 #endif
8087 8502
8503 /* $Source: /cvs/libtom/libtommath/bn_mp_toradix_n.c,v $ */
8504 /* $Revision: 1.4 $ */
8505 /* $Date: 2006/03/31 14:18:44 $ */
8506
8088 /* End: bn_mp_toradix_n.c */ 8507 /* End: bn_mp_toradix_n.c */
8089 8508
8090 /* Start: bn_mp_unsigned_bin_size.c */ 8509 /* Start: bn_mp_unsigned_bin_size.c */
8091 #include <tommath.h> 8510 #include <tommath.h>
8092 #ifdef BN_MP_UNSIGNED_BIN_SIZE_C 8511 #ifdef BN_MP_UNSIGNED_BIN_SIZE_C
8100 * additional optimizations in place. 8519 * additional optimizations in place.
8101 * 8520 *
8102 * The library is free for all purposes without any express 8521 * The library is free for all purposes without any express
8103 * guarantee it works. 8522 * guarantee it works.
8104 * 8523 *
8105 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8524 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8106 */ 8525 */
8107 8526
8108 /* get the size for an unsigned equivalent */ 8527 /* get the size for an unsigned equivalent */
8109 int mp_unsigned_bin_size (mp_int * a) 8528 int mp_unsigned_bin_size (mp_int * a)
8110 { 8529 {
8111 int size = mp_count_bits (a); 8530 int size = mp_count_bits (a);
8112 return (size / 8 + ((size & 7) != 0 ? 1 : 0)); 8531 return (size / 8 + ((size & 7) != 0 ? 1 : 0));
8113 } 8532 }
8114 #endif 8533 #endif
8115 8534
8535 /* $Source: /cvs/libtom/libtommath/bn_mp_unsigned_bin_size.c,v $ */
8536 /* $Revision: 1.3 $ */
8537 /* $Date: 2006/03/31 14:18:44 $ */
8538
8116 /* End: bn_mp_unsigned_bin_size.c */ 8539 /* End: bn_mp_unsigned_bin_size.c */
8117 8540
8118 /* Start: bn_mp_xor.c */ 8541 /* Start: bn_mp_xor.c */
8119 #include <tommath.h> 8542 #include <tommath.h>
8120 #ifdef BN_MP_XOR_C 8543 #ifdef BN_MP_XOR_C
8128 * additional optimizations in place. 8551 * additional optimizations in place.
8129 * 8552 *
8130 * The library is free for all purposes without any express 8553 * The library is free for all purposes without any express
8131 * guarantee it works. 8554 * guarantee it works.
8132 * 8555 *
8133 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8556 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8134 */ 8557 */
8135 8558
8136 /* XOR two ints together */ 8559 /* XOR two ints together */
8137 int 8560 int
8138 mp_xor (mp_int * a, mp_int * b, mp_int * c) 8561 mp_xor (mp_int * a, mp_int * b, mp_int * c)
8162 mp_clear (&t); 8585 mp_clear (&t);
8163 return MP_OKAY; 8586 return MP_OKAY;
8164 } 8587 }
8165 #endif 8588 #endif
8166 8589
8590 /* $Source: /cvs/libtom/libtommath/bn_mp_xor.c,v $ */
8591 /* $Revision: 1.3 $ */
8592 /* $Date: 2006/03/31 14:18:44 $ */
8593
8167 /* End: bn_mp_xor.c */ 8594 /* End: bn_mp_xor.c */
8168 8595
8169 /* Start: bn_mp_zero.c */ 8596 /* Start: bn_mp_zero.c */
8170 #include <tommath.h> 8597 #include <tommath.h>
8171 #ifdef BN_MP_ZERO_C 8598 #ifdef BN_MP_ZERO_C
8179 * additional optimizations in place. 8606 * additional optimizations in place.
8180 * 8607 *
8181 * The library is free for all purposes without any express 8608 * The library is free for all purposes without any express
8182 * guarantee it works. 8609 * guarantee it works.
8183 * 8610 *
8184 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8611 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8185 */ 8612 */
8186 8613
8187 /* set to zero */ 8614 /* set to zero */
8188 void mp_zero (mp_int * a) 8615 void mp_zero (mp_int * a)
8189 { 8616 {
8198 *tmp++ = 0; 8625 *tmp++ = 0;
8199 } 8626 }
8200 } 8627 }
8201 #endif 8628 #endif
8202 8629
8630 /* $Source: /cvs/libtom/libtommath/bn_mp_zero.c,v $ */
8631 /* $Revision: 1.3 $ */
8632 /* $Date: 2006/03/31 14:18:44 $ */
8633
8203 /* End: bn_mp_zero.c */ 8634 /* End: bn_mp_zero.c */
8204 8635
8205 /* Start: bn_prime_tab.c */ 8636 /* Start: bn_prime_tab.c */
8206 #include <tommath.h> 8637 #include <tommath.h>
8207 #ifdef BN_PRIME_TAB_C 8638 #ifdef BN_PRIME_TAB_C
8215 * additional optimizations in place. 8646 * additional optimizations in place.
8216 * 8647 *
8217 * The library is free for all purposes without any express 8648 * The library is free for all purposes without any express
8218 * guarantee it works. 8649 * guarantee it works.
8219 * 8650 *
8220 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8651 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8221 */ 8652 */
8222 const mp_digit ltm_prime_tab[] = { 8653 const mp_digit ltm_prime_tab[] = {
8223 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, 8654 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013,
8224 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, 8655 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035,
8225 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, 8656 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059,
8259 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 8690 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653
8260 #endif 8691 #endif
8261 }; 8692 };
8262 #endif 8693 #endif
8263 8694
8695 /* $Source: /cvs/libtom/libtommath/bn_prime_tab.c,v $ */
8696 /* $Revision: 1.3 $ */
8697 /* $Date: 2006/03/31 14:18:44 $ */
8698
8264 /* End: bn_prime_tab.c */ 8699 /* End: bn_prime_tab.c */
8265 8700
8266 /* Start: bn_reverse.c */ 8701 /* Start: bn_reverse.c */
8267 #include <tommath.h> 8702 #include <tommath.h>
8268 #ifdef BN_REVERSE_C 8703 #ifdef BN_REVERSE_C
8276 * additional optimizations in place. 8711 * additional optimizations in place.
8277 * 8712 *
8278 * The library is free for all purposes without any express 8713 * The library is free for all purposes without any express
8279 * guarantee it works. 8714 * guarantee it works.
8280 * 8715 *
8281 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8716 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8282 */ 8717 */
8283 8718
8284 /* reverse an array, used for radix code */ 8719 /* reverse an array, used for radix code */
8285 void 8720 void
8286 bn_reverse (unsigned char *s, int len) 8721 bn_reverse (unsigned char *s, int len)
8298 --iy; 8733 --iy;
8299 } 8734 }
8300 } 8735 }
8301 #endif 8736 #endif
8302 8737
8738 /* $Source: /cvs/libtom/libtommath/bn_reverse.c,v $ */
8739 /* $Revision: 1.3 $ */
8740 /* $Date: 2006/03/31 14:18:44 $ */
8741
8303 /* End: bn_reverse.c */ 8742 /* End: bn_reverse.c */
8304 8743
8305 /* Start: bn_s_mp_add.c */ 8744 /* Start: bn_s_mp_add.c */
8306 #include <tommath.h> 8745 #include <tommath.h>
8307 #ifdef BN_S_MP_ADD_C 8746 #ifdef BN_S_MP_ADD_C
8315 * additional optimizations in place. 8754 * additional optimizations in place.
8316 * 8755 *
8317 * The library is free for all purposes without any express 8756 * The library is free for all purposes without any express
8318 * guarantee it works. 8757 * guarantee it works.
8319 * 8758 *
8320 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8759 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8321 */ 8760 */
8322 8761
8323 /* low level addition, based on HAC pp.594, Algorithm 14.7 */ 8762 /* low level addition, based on HAC pp.594, Algorithm 14.7 */
8324 int 8763 int
8325 s_mp_add (mp_int * a, mp_int * b, mp_int * c) 8764 s_mp_add (mp_int * a, mp_int * b, mp_int * c)
8407 mp_clamp (c); 8846 mp_clamp (c);
8408 return MP_OKAY; 8847 return MP_OKAY;
8409 } 8848 }
8410 #endif 8849 #endif
8411 8850
8851 /* $Source: /cvs/libtom/libtommath/bn_s_mp_add.c,v $ */
8852 /* $Revision: 1.3 $ */
8853 /* $Date: 2006/03/31 14:18:44 $ */
8854
8412 /* End: bn_s_mp_add.c */ 8855 /* End: bn_s_mp_add.c */
8413 8856
8414 /* Start: bn_s_mp_exptmod.c */ 8857 /* Start: bn_s_mp_exptmod.c */
8415 #include <tommath.h> 8858 #include <tommath.h>
8416 #ifdef BN_S_MP_EXPTMOD_C 8859 #ifdef BN_S_MP_EXPTMOD_C
8424 * additional optimizations in place. 8867 * additional optimizations in place.
8425 * 8868 *
8426 * The library is free for all purposes without any express 8869 * The library is free for all purposes without any express
8427 * guarantee it works. 8870 * guarantee it works.
8428 * 8871 *
8429 * Tom St Denis, [email protected], http://math.libtomcrypt.org 8872 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8430 */ 8873 */
8431
8432 #ifdef MP_LOW_MEM 8874 #ifdef MP_LOW_MEM
8433 #define TAB_SIZE 32 8875 #define TAB_SIZE 32
8434 #else 8876 #else
8435 #define TAB_SIZE 256 8877 #define TAB_SIZE 256
8436 #endif 8878 #endif
8660 } 9102 }
8661 return err; 9103 return err;
8662 } 9104 }
8663 #endif 9105 #endif
8664 9106
9107 /* $Source: /cvs/libtom/libtommath/bn_s_mp_exptmod.c,v $ */
9108 /* $Revision: 1.4 $ */
9109 /* $Date: 2006/03/31 14:18:44 $ */
9110
8665 /* End: bn_s_mp_exptmod.c */ 9111 /* End: bn_s_mp_exptmod.c */
8666 9112
8667 /* Start: bn_s_mp_mul_digs.c */ 9113 /* Start: bn_s_mp_mul_digs.c */
8668 #include <tommath.h> 9114 #include <tommath.h>
8669 #ifdef BN_S_MP_MUL_DIGS_C 9115 #ifdef BN_S_MP_MUL_DIGS_C
8677 * additional optimizations in place. 9123 * additional optimizations in place.
8678 * 9124 *
8679 * The library is free for all purposes without any express 9125 * The library is free for all purposes without any express
8680 * guarantee it works. 9126 * guarantee it works.
8681 * 9127 *
8682 * Tom St Denis, [email protected], http://math.libtomcrypt.org 9128 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8683 */ 9129 */
8684 9130
8685 /* multiplies |a| * |b| and only computes upto digs digits of result 9131 /* multiplies |a| * |b| and only computes upto digs digits of result
8686 * HAC pp. 595, Algorithm 14.12 Modified so you can control how 9132 * HAC pp. 595, Algorithm 14.12 Modified so you can control how
8687 * many digits of output are created. 9133 * many digits of output are created.
8750 mp_clear (&t); 9196 mp_clear (&t);
8751 return MP_OKAY; 9197 return MP_OKAY;
8752 } 9198 }
8753 #endif 9199 #endif
8754 9200
9201 /* $Source: /cvs/libtom/libtommath/bn_s_mp_mul_digs.c,v $ */
9202 /* $Revision: 1.3 $ */
9203 /* $Date: 2006/03/31 14:18:44 $ */
9204
8755 /* End: bn_s_mp_mul_digs.c */ 9205 /* End: bn_s_mp_mul_digs.c */
8756 9206
8757 /* Start: bn_s_mp_mul_high_digs.c */ 9207 /* Start: bn_s_mp_mul_high_digs.c */
8758 #include <tommath.h> 9208 #include <tommath.h>
8759 #ifdef BN_S_MP_MUL_HIGH_DIGS_C 9209 #ifdef BN_S_MP_MUL_HIGH_DIGS_C
8767 * additional optimizations in place. 9217 * additional optimizations in place.
8768 * 9218 *
8769 * The library is free for all purposes without any express 9219 * The library is free for all purposes without any express
8770 * guarantee it works. 9220 * guarantee it works.
8771 * 9221 *
8772 * Tom St Denis, [email protected], http://math.libtomcrypt.org 9222 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8773 */ 9223 */
8774 9224
8775 /* multiplies |a| * |b| and does not compute the lower digs digits 9225 /* multiplies |a| * |b| and does not compute the lower digs digits
8776 * [meant to get the higher part of the product] 9226 * [meant to get the higher part of the product]
8777 */ 9227 */
8831 mp_clear (&t); 9281 mp_clear (&t);
8832 return MP_OKAY; 9282 return MP_OKAY;
8833 } 9283 }
8834 #endif 9284 #endif
8835 9285
9286 /* $Source: /cvs/libtom/libtommath/bn_s_mp_mul_high_digs.c,v $ */
9287 /* $Revision: 1.3 $ */
9288 /* $Date: 2006/03/31 14:18:44 $ */
9289
8836 /* End: bn_s_mp_mul_high_digs.c */ 9290 /* End: bn_s_mp_mul_high_digs.c */
8837 9291
8838 /* Start: bn_s_mp_sqr.c */ 9292 /* Start: bn_s_mp_sqr.c */
8839 #include <tommath.h> 9293 #include <tommath.h>
8840 #ifdef BN_S_MP_SQR_C 9294 #ifdef BN_S_MP_SQR_C
8848 * additional optimizations in place. 9302 * additional optimizations in place.
8849 * 9303 *
8850 * The library is free for all purposes without any express 9304 * The library is free for all purposes without any express
8851 * guarantee it works. 9305 * guarantee it works.
8852 * 9306 *
8853 * Tom St Denis, [email protected], http://math.libtomcrypt.org 9307 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8854 */ 9308 */
8855 9309
8856 /* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */ 9310 /* low level squaring, b = a*a, HAC pp.596-597, Algorithm 14.16 */
8857 int s_mp_sqr (mp_int * a, mp_int * b) 9311 int s_mp_sqr (mp_int * a, mp_int * b)
8858 { 9312 {
8915 mp_clear (&t); 9369 mp_clear (&t);
8916 return MP_OKAY; 9370 return MP_OKAY;
8917 } 9371 }
8918 #endif 9372 #endif
8919 9373
9374 /* $Source: /cvs/libtom/libtommath/bn_s_mp_sqr.c,v $ */
9375 /* $Revision: 1.3 $ */
9376 /* $Date: 2006/03/31 14:18:44 $ */
9377
8920 /* End: bn_s_mp_sqr.c */ 9378 /* End: bn_s_mp_sqr.c */
8921 9379
8922 /* Start: bn_s_mp_sub.c */ 9380 /* Start: bn_s_mp_sub.c */
8923 #include <tommath.h> 9381 #include <tommath.h>
8924 #ifdef BN_S_MP_SUB_C 9382 #ifdef BN_S_MP_SUB_C
8932 * additional optimizations in place. 9390 * additional optimizations in place.
8933 * 9391 *
8934 * The library is free for all purposes without any express 9392 * The library is free for all purposes without any express
8935 * guarantee it works. 9393 * guarantee it works.
8936 * 9394 *
8937 * Tom St Denis, [email protected], http://math.libtomcrypt.org 9395 * Tom St Denis, [email protected], http://math.libtomcrypt.com
8938 */ 9396 */
8939 9397
8940 /* low level subtraction (assumes |a| > |b|), HAC pp.595 Algorithm 14.9 */ 9398 /* low level subtraction (assumes |a| > |b|), HAC pp.595 Algorithm 14.9 */
8941 int 9399 int
8942 s_mp_sub (mp_int * a, mp_int * b, mp_int * c) 9400 s_mp_sub (mp_int * a, mp_int * b, mp_int * c)
9004 return MP_OKAY; 9462 return MP_OKAY;
9005 } 9463 }
9006 9464
9007 #endif 9465 #endif
9008 9466
9467 /* $Source: /cvs/libtom/libtommath/bn_s_mp_sub.c,v $ */
9468 /* $Revision: 1.3 $ */
9469 /* $Date: 2006/03/31 14:18:44 $ */
9470
9009 /* End: bn_s_mp_sub.c */ 9471 /* End: bn_s_mp_sub.c */
9010 9472
9011 /* Start: bncore.c */ 9473 /* Start: bncore.c */
9012 #include <tommath.h> 9474 #include <tommath.h>
9013 #ifdef BNCORE_C 9475 #ifdef BNCORE_C
9021 * additional optimizations in place. 9483 * additional optimizations in place.
9022 * 9484 *
9023 * The library is free for all purposes without any express 9485 * The library is free for all purposes without any express
9024 * guarantee it works. 9486 * guarantee it works.
9025 * 9487 *
9026 * Tom St Denis, [email protected], http://math.libtomcrypt.org 9488 * Tom St Denis, [email protected], http://math.libtomcrypt.com
9027 */ 9489 */
9028 9490
9029 /* Known optimal configurations 9491 /* Known optimal configurations
9030 9492
9031 CPU /Compiler /MUL CUTOFF/SQR CUTOFF 9493 CPU /Compiler /MUL CUTOFF/SQR CUTOFF
9032 ------------------------------------------------------------- 9494 -------------------------------------------------------------
9033 Intel P4 Northwood /GCC v3.4.1 / 88/ 128/LTM 0.32 ;-) 9495 Intel P4 Northwood /GCC v3.4.1 / 88/ 128/LTM 0.32 ;-)
9034 AMD Athlon64 /GCC v3.4.4 / 74/ 124/LTM 0.34 9496 AMD Athlon64 /GCC v3.4.4 / 80/ 120/LTM 0.35
9035 9497
9036 */ 9498 */
9037 9499
9038 int KARATSUBA_MUL_CUTOFF = 74, /* Min. number of digits before Karatsuba multiplication is used. */ 9500 int KARATSUBA_MUL_CUTOFF = 80, /* Min. number of digits before Karatsuba multiplication is used. */
9039 KARATSUBA_SQR_CUTOFF = 124, /* Min. number of digits before Karatsuba squaring is used. */ 9501 KARATSUBA_SQR_CUTOFF = 120, /* Min. number of digits before Karatsuba squaring is used. */
9040 9502
9041 TOOM_MUL_CUTOFF = 350, /* no optimal values of these are known yet so set em high */ 9503 TOOM_MUL_CUTOFF = 350, /* no optimal values of these are known yet so set em high */
9042 TOOM_SQR_CUTOFF = 400; 9504 TOOM_SQR_CUTOFF = 400;
9043 #endif 9505 #endif
9044 9506
9507 /* $Source: /cvs/libtom/libtommath/bncore.c,v $ */
9508 /* $Revision: 1.4 $ */
9509 /* $Date: 2006/03/31 14:18:44 $ */
9510
9045 /* End: bncore.c */ 9511 /* End: bncore.c */
9046 9512
9047 9513
9048 /* EOF */ 9514 /* EOF */