From 763a72b73a850906f1d1d646c6d6b5c79f825df5 Mon Sep 17 00:00:00 2001 From: Love Hornquist Astrand Date: Sun, 15 Aug 2010 15:06:58 -0700 Subject: [PATCH] enable ltm, add key blinding, add remove tfm --- lib/hcrypto/Makefile.am | 96 +- lib/hcrypto/aes.h | 1 - lib/hcrypto/common.c | 69 + lib/hcrypto/common.h | 45 + lib/hcrypto/dh-imath.c | 9 +- lib/hcrypto/dh-tfm.c | 6 +- lib/hcrypto/engine.c | 6 + lib/hcrypto/engine.h | 10 + lib/hcrypto/evp-cc.c | 20 +- lib/hcrypto/evp-cc.h | 6 +- lib/hcrypto/libhcrypto-exports.def | 4 +- lib/hcrypto/rsa-imath.c | 7 + lib/hcrypto/rsa-ltm.c | 137 +- lib/hcrypto/rsa-tfm.c | 9 + lib/hcrypto/rsa.c | 203 +- lib/hcrypto/rsa.h | 4 +- lib/hcrypto/test_pkcs5.c | 137 +- lib/hcrypto/test_rand.c | 8 +- lib/hcrypto/test_rsa.c | 9 + lib/hcrypto/tomsfastmath/LICENSE | 7 - lib/hcrypto/tomsfastmath/NTMakefile | 164 - lib/hcrypto/tomsfastmath/RELEASE | 1 - lib/hcrypto/tomsfastmath/SPONSORS | 5 - lib/hcrypto/tomsfastmath/TODO | 0 lib/hcrypto/tomsfastmath/changes.txt | 95 - lib/hcrypto/tomsfastmath/demo/rsa.c | 83 - lib/hcrypto/tomsfastmath/demo/stest.c | 148 - lib/hcrypto/tomsfastmath/demo/test.c | 874 ---- lib/hcrypto/tomsfastmath/doc/tfm.pdf | Bin 127618 -> 0 bytes lib/hcrypto/tomsfastmath/filter.pl | 30 - lib/hcrypto/tomsfastmath/gen.pl | 18 - lib/hcrypto/tomsfastmath/genlist.sh | 9 - lib/hcrypto/tomsfastmath/makefile | 159 - lib/hcrypto/tomsfastmath/makefile.shared | 109 - lib/hcrypto/tomsfastmath/mess.sh | 4 - lib/hcrypto/tomsfastmath/mpi.c | 2 - lib/hcrypto/tomsfastmath/mtest/makefile | 9 - lib/hcrypto/tomsfastmath/mtest/mtest.c | 324 -- lib/hcrypto/tomsfastmath/parsenames.pl | 26 - lib/hcrypto/tomsfastmath/pre_gen/mpi.c | 2 - .../tomsfastmath/random_txt_files/amd64.txt | 43 - .../random_txt_files/exptmod_timings.txt | 45 - .../random_txt_files/ltm_times.txt | 37 - .../tomsfastmath/random_txt_files/newsqr.txt | 36 - .../random_txt_files/old_sqr_times.txt | 14 - lib/hcrypto/tomsfastmath/src/addsub/fp_add.c | 43 - .../tomsfastmath/src/addsub/fp_add_d.c | 22 - .../tomsfastmath/src/addsub/fp_addmod.c | 23 - lib/hcrypto/tomsfastmath/src/addsub/fp_cmp.c | 31 - .../tomsfastmath/src/addsub/fp_cmp_d.c | 38 - .../tomsfastmath/src/addsub/fp_cmp_mag.c | 35 - lib/hcrypto/tomsfastmath/src/addsub/fp_sub.c | 50 - .../tomsfastmath/src/addsub/fp_sub_d.c | 22 - .../tomsfastmath/src/addsub/fp_submod.c | 24 - .../tomsfastmath/src/addsub/s_fp_add.c | 42 - .../tomsfastmath/src/addsub/s_fp_sub.c | 40 - .../tomsfastmath/src/bin/fp_init_multi.c | 21 - .../tomsfastmath/src/bin/fp_radix_size.c | 53 - .../tomsfastmath/src/bin/fp_read_radix.c | 75 - .../tomsfastmath/src/bin/fp_read_signed_bin.c | 27 - .../src/bin/fp_read_unsigned_bin.c | 66 - lib/hcrypto/tomsfastmath/src/bin/fp_reverse.c | 31 - lib/hcrypto/tomsfastmath/src/bin/fp_s_rmap.c | 17 - .../tomsfastmath/src/bin/fp_signed_bin_size.c | 19 - .../tomsfastmath/src/bin/fp_to_signed_bin.c | 20 - .../tomsfastmath/src/bin/fp_to_unsigned_bin.c | 29 - lib/hcrypto/tomsfastmath/src/bin/fp_toradix.c | 59 - .../src/bin/fp_unsigned_bin_size.c | 20 - lib/hcrypto/tomsfastmath/src/bit/fp_cnt_lsb.c | 46 - .../tomsfastmath/src/bit/fp_count_bits.c | 36 - lib/hcrypto/tomsfastmath/src/bit/fp_div_2.c | 53 - lib/hcrypto/tomsfastmath/src/bit/fp_div_2d.c | 79 - lib/hcrypto/tomsfastmath/src/bit/fp_lshd.c | 38 - lib/hcrypto/tomsfastmath/src/bit/fp_mod_2d.c | 42 - lib/hcrypto/tomsfastmath/src/bit/fp_rshd.c | 40 - lib/hcrypto/tomsfastmath/src/divide/fp_div.c | 157 - .../tomsfastmath/src/divide/fp_div_d.c | 98 - lib/hcrypto/tomsfastmath/src/divide/fp_mod.c | 34 - .../tomsfastmath/src/divide/fp_mod_d.c | 20 - .../tomsfastmath/src/exptmod/fp_2expt.c | 39 - .../tomsfastmath/src/exptmod/fp_exptmod.c | 276 -- .../src/generators/comba_mont_gen.c | 132 - .../src/generators/comba_mult_gen.c | 63 - .../src/generators/comba_mult_smallgen.c | 61 - .../src/generators/comba_sqr_gen.c | 101 - .../src/generators/comba_sqr_smallgen.c | 109 - lib/hcrypto/tomsfastmath/src/headers/tfm.h | 578 --- lib/hcrypto/tomsfastmath/src/misc/fp_ident.c | 95 - lib/hcrypto/tomsfastmath/src/misc/fp_set.c | 21 - .../tomsfastmath/src/mont/fp_mont_small.i | 3838 ----------------- .../mont/fp_montgomery_calc_normalization.c | 43 - .../src/mont/fp_montgomery_reduce.c | 556 --- .../src/mont/fp_montgomery_setup.c | 48 - lib/hcrypto/tomsfastmath/src/mul/fp_mul.c | 128 - lib/hcrypto/tomsfastmath/src/mul/fp_mul_2.c | 67 - lib/hcrypto/tomsfastmath/src/mul/fp_mul_2d.c | 47 - .../tomsfastmath/src/mul/fp_mul_comba.c | 368 -- .../tomsfastmath/src/mul/fp_mul_comba_12.c | 111 - .../tomsfastmath/src/mul/fp_mul_comba_17.c | 151 - .../tomsfastmath/src/mul/fp_mul_comba_20.c | 175 - .../tomsfastmath/src/mul/fp_mul_comba_24.c | 207 - .../tomsfastmath/src/mul/fp_mul_comba_28.c | 239 - .../tomsfastmath/src/mul/fp_mul_comba_3.c | 39 - .../tomsfastmath/src/mul/fp_mul_comba_32.c | 285 -- .../tomsfastmath/src/mul/fp_mul_comba_4.c | 47 - .../tomsfastmath/src/mul/fp_mul_comba_48.c | 399 -- .../tomsfastmath/src/mul/fp_mul_comba_6.c | 63 - .../tomsfastmath/src/mul/fp_mul_comba_64.c | 527 --- .../tomsfastmath/src/mul/fp_mul_comba_7.c | 71 - .../tomsfastmath/src/mul/fp_mul_comba_8.c | 79 - .../tomsfastmath/src/mul/fp_mul_comba_9.c | 87 - .../src/mul/fp_mul_comba_small_set.c | 1228 ------ lib/hcrypto/tomsfastmath/src/mul/fp_mul_d.c | 40 - lib/hcrypto/tomsfastmath/src/mul/fp_mulmod.c | 22 - .../src/numtheory/fp_find_prime.c | 40 - .../tomsfastmath/src/numtheory/fp_gcd.c | 58 - .../tomsfastmath/src/numtheory/fp_invmod.c | 207 - .../tomsfastmath/src/numtheory/fp_isprime.c | 79 - .../tomsfastmath/src/numtheory/fp_lcm.c | 32 - .../src/numtheory/fp_prime_miller_rabin.c | 77 - .../src/numtheory/fp_prime_random_ex.c | 101 - lib/hcrypto/tomsfastmath/src/sqr/fp_sqr.c | 120 - .../tomsfastmath/src/sqr/fp_sqr_comba.c | 677 --- .../tomsfastmath/src/sqr/fp_sqr_comba_12.c | 144 - .../tomsfastmath/src/sqr/fp_sqr_comba_17.c | 194 - .../tomsfastmath/src/sqr/fp_sqr_comba_20.c | 224 - .../tomsfastmath/src/sqr/fp_sqr_comba_24.c | 264 -- .../tomsfastmath/src/sqr/fp_sqr_comba_28.c | 304 -- .../tomsfastmath/src/sqr/fp_sqr_comba_3.c | 54 - .../tomsfastmath/src/sqr/fp_sqr_comba_32.c | 344 -- .../tomsfastmath/src/sqr/fp_sqr_comba_4.c | 64 - .../tomsfastmath/src/sqr/fp_sqr_comba_48.c | 504 --- .../tomsfastmath/src/sqr/fp_sqr_comba_6.c | 84 - .../tomsfastmath/src/sqr/fp_sqr_comba_64.c | 664 --- .../tomsfastmath/src/sqr/fp_sqr_comba_7.c | 94 - .../tomsfastmath/src/sqr/fp_sqr_comba_8.c | 104 - .../tomsfastmath/src/sqr/fp_sqr_comba_9.c | 114 - .../src/sqr/fp_sqr_comba_generic.c | 95 - .../src/sqr/fp_sqr_comba_small_set.c | 1522 ------- lib/hcrypto/tomsfastmath/src/sqr/fp_sqrmod.c | 23 - lib/hcrypto/tomsfastmath/tfm.tex | 659 --- lib/hcrypto/tomsfastmath/updatemakes.sh | 12 - lib/hcrypto/version-script.map | 3 +- 143 files changed, 482 insertions(+), 21199 deletions(-) create mode 100644 lib/hcrypto/common.c create mode 100644 lib/hcrypto/common.h delete mode 100644 lib/hcrypto/tomsfastmath/LICENSE delete mode 100644 lib/hcrypto/tomsfastmath/NTMakefile delete mode 100644 lib/hcrypto/tomsfastmath/RELEASE delete mode 100644 lib/hcrypto/tomsfastmath/SPONSORS delete mode 100644 lib/hcrypto/tomsfastmath/TODO delete mode 100644 lib/hcrypto/tomsfastmath/changes.txt delete mode 100644 lib/hcrypto/tomsfastmath/demo/rsa.c delete mode 100644 lib/hcrypto/tomsfastmath/demo/stest.c delete mode 100644 lib/hcrypto/tomsfastmath/demo/test.c delete mode 100644 lib/hcrypto/tomsfastmath/doc/tfm.pdf delete mode 100644 lib/hcrypto/tomsfastmath/filter.pl delete mode 100644 lib/hcrypto/tomsfastmath/gen.pl delete mode 100644 lib/hcrypto/tomsfastmath/genlist.sh delete mode 100644 lib/hcrypto/tomsfastmath/makefile delete mode 100644 lib/hcrypto/tomsfastmath/makefile.shared delete mode 100644 lib/hcrypto/tomsfastmath/mess.sh delete mode 100644 lib/hcrypto/tomsfastmath/mpi.c delete mode 100644 lib/hcrypto/tomsfastmath/mtest/makefile delete mode 100644 lib/hcrypto/tomsfastmath/mtest/mtest.c delete mode 100644 lib/hcrypto/tomsfastmath/parsenames.pl delete mode 100644 lib/hcrypto/tomsfastmath/pre_gen/mpi.c delete mode 100644 lib/hcrypto/tomsfastmath/random_txt_files/amd64.txt delete mode 100644 lib/hcrypto/tomsfastmath/random_txt_files/exptmod_timings.txt delete mode 100644 lib/hcrypto/tomsfastmath/random_txt_files/ltm_times.txt delete mode 100644 lib/hcrypto/tomsfastmath/random_txt_files/newsqr.txt delete mode 100644 lib/hcrypto/tomsfastmath/random_txt_files/old_sqr_times.txt delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_add.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_add_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_addmod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_cmp.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_mag.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_sub.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_sub_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/fp_submod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/s_fp_add.c delete mode 100644 lib/hcrypto/tomsfastmath/src/addsub/s_fp_sub.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_init_multi.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_radix_size.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_read_radix.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_read_signed_bin.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_read_unsigned_bin.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_reverse.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_s_rmap.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_signed_bin_size.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_to_signed_bin.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_to_unsigned_bin.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_toradix.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bin/fp_unsigned_bin_size.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_cnt_lsb.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_count_bits.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_div_2.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_div_2d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_lshd.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_mod_2d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/bit/fp_rshd.c delete mode 100644 lib/hcrypto/tomsfastmath/src/divide/fp_div.c delete mode 100644 lib/hcrypto/tomsfastmath/src/divide/fp_div_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/divide/fp_mod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/divide/fp_mod_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/exptmod/fp_2expt.c delete mode 100644 lib/hcrypto/tomsfastmath/src/exptmod/fp_exptmod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/generators/comba_mont_gen.c delete mode 100644 lib/hcrypto/tomsfastmath/src/generators/comba_mult_gen.c delete mode 100644 lib/hcrypto/tomsfastmath/src/generators/comba_mult_smallgen.c delete mode 100644 lib/hcrypto/tomsfastmath/src/generators/comba_sqr_gen.c delete mode 100644 lib/hcrypto/tomsfastmath/src/generators/comba_sqr_smallgen.c delete mode 100644 lib/hcrypto/tomsfastmath/src/headers/tfm.h delete mode 100644 lib/hcrypto/tomsfastmath/src/misc/fp_ident.c delete mode 100644 lib/hcrypto/tomsfastmath/src/misc/fp_set.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mont/fp_mont_small.i delete mode 100644 lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_calc_normalization.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_reduce.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_setup.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_2.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_2d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_12.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_17.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_20.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_24.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_28.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_3.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_32.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_4.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_48.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_6.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_64.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_7.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_8.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_9.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_small_set.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mul_d.c delete mode 100644 lib/hcrypto/tomsfastmath/src/mul/fp_mulmod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_find_prime.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_gcd.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_invmod.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_isprime.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_lcm.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_miller_rabin.c delete mode 100644 lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_random_ex.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_12.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_17.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_20.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_24.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_28.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_3.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_32.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_4.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_48.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_6.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_64.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_7.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_8.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_9.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_generic.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_small_set.c delete mode 100644 lib/hcrypto/tomsfastmath/src/sqr/fp_sqrmod.c delete mode 100644 lib/hcrypto/tomsfastmath/tfm.tex delete mode 100644 lib/hcrypto/tomsfastmath/updatemakes.sh diff --git a/lib/hcrypto/Makefile.am b/lib/hcrypto/Makefile.am index 589a55f5c..1c5d9dcad 100644 --- a/lib/hcrypto/Makefile.am +++ b/lib/hcrypto/Makefile.am @@ -2,7 +2,7 @@ include $(top_srcdir)/Makefile.am.common -AM_CPPFLAGS += -I$(srcdir)/tomsfastmath/src/headers -I$(srcdir)/libtommath +AM_CPPFLAGS += -I$(srcdir)/libtommath -DUSE_HCRYPTO_IMATH=1 -DUSE_HCRYPTO_LTM=1 lib_LTLIBRARIES = libhcrypto.la check_LTLIBRARIES = libhctest.la @@ -92,12 +92,13 @@ LDADD = $(lib_LTLIBRARIES) $(LIB_roken) libhcrypto_la_SOURCES = \ $(imathsource) \ - $(tfmsource) \ $(ltmsources) \ aes.c \ aes.h \ bn.c \ bn.h \ + common.c \ + common.h \ camellia.h \ camellia.c \ camellia-ntt.c \ @@ -162,97 +163,6 @@ imathsource = \ imath/iprime.c \ imath/iprime.h -tfmsource = \ - tomsfastmath/src/headers/tfm.h \ - tomsfastmath/src/addsub/fp_add.c \ - tomsfastmath/src/addsub/fp_add_d.c \ - tomsfastmath/src/addsub/fp_addmod.c \ - tomsfastmath/src/addsub/fp_cmp.c \ - tomsfastmath/src/addsub/fp_cmp_d.c \ - tomsfastmath/src/addsub/fp_cmp_mag.c \ - tomsfastmath/src/addsub/fp_sub.c \ - tomsfastmath/src/addsub/fp_sub_d.c \ - tomsfastmath/src/addsub/fp_submod.c \ - tomsfastmath/src/addsub/s_fp_add.c \ - tomsfastmath/src/addsub/s_fp_sub.c \ - tomsfastmath/src/bin/fp_init_multi.c \ - tomsfastmath/src/bin/fp_radix_size.c \ - tomsfastmath/src/bin/fp_read_radix.c \ - tomsfastmath/src/bin/fp_read_signed_bin.c \ - tomsfastmath/src/bin/fp_read_unsigned_bin.c \ - tomsfastmath/src/bin/fp_reverse.c \ - tomsfastmath/src/bin/fp_s_rmap.c \ - tomsfastmath/src/bin/fp_signed_bin_size.c \ - tomsfastmath/src/bin/fp_to_signed_bin.c \ - tomsfastmath/src/bin/fp_to_unsigned_bin.c \ - tomsfastmath/src/bin/fp_toradix.c \ - tomsfastmath/src/bin/fp_unsigned_bin_size.c \ - tomsfastmath/src/bit/fp_cnt_lsb.c \ - tomsfastmath/src/bit/fp_count_bits.c \ - tomsfastmath/src/bit/fp_div_2.c \ - tomsfastmath/src/bit/fp_div_2d.c \ - tomsfastmath/src/bit/fp_lshd.c \ - tomsfastmath/src/bit/fp_mod_2d.c \ - tomsfastmath/src/bit/fp_rshd.c \ - tomsfastmath/src/divide/fp_div.c \ - tomsfastmath/src/divide/fp_div_d.c \ - tomsfastmath/src/divide/fp_mod.c \ - tomsfastmath/src/divide/fp_mod_d.c \ - tomsfastmath/src/exptmod/fp_2expt.c \ - tomsfastmath/src/exptmod/fp_exptmod.c \ - tomsfastmath/src/misc/fp_ident.c \ - tomsfastmath/src/misc/fp_set.c \ - tomsfastmath/src/mont/fp_montgomery_calc_normalization.c \ - tomsfastmath/src/mont/fp_montgomery_reduce.c \ - tomsfastmath/src/mont/fp_montgomery_setup.c \ - tomsfastmath/src/mul/fp_mul.c \ - tomsfastmath/src/mul/fp_mul_2.c \ - tomsfastmath/src/mul/fp_mul_2d.c \ - tomsfastmath/src/mul/fp_mul_comba.c \ - tomsfastmath/src/mul/fp_mul_comba_12.c \ - tomsfastmath/src/mul/fp_mul_comba_17.c \ - tomsfastmath/src/mul/fp_mul_comba_20.c \ - tomsfastmath/src/mul/fp_mul_comba_24.c \ - tomsfastmath/src/mul/fp_mul_comba_28.c \ - tomsfastmath/src/mul/fp_mul_comba_3.c \ - tomsfastmath/src/mul/fp_mul_comba_32.c \ - tomsfastmath/src/mul/fp_mul_comba_4.c \ - tomsfastmath/src/mul/fp_mul_comba_48.c \ - tomsfastmath/src/mul/fp_mul_comba_6.c \ - tomsfastmath/src/mul/fp_mul_comba_64.c \ - tomsfastmath/src/mul/fp_mul_comba_7.c \ - tomsfastmath/src/mul/fp_mul_comba_8.c \ - tomsfastmath/src/mul/fp_mul_comba_9.c \ - tomsfastmath/src/mul/fp_mul_comba_small_set.c \ - tomsfastmath/src/mul/fp_mul_d.c \ - tomsfastmath/src/mul/fp_mulmod.c \ - tomsfastmath/src/numtheory/fp_find_prime.c \ - tomsfastmath/src/numtheory/fp_gcd.c \ - tomsfastmath/src/numtheory/fp_invmod.c \ - tomsfastmath/src/numtheory/fp_isprime.c \ - tomsfastmath/src/numtheory/fp_lcm.c \ - tomsfastmath/src/numtheory/fp_prime_miller_rabin.c \ - tomsfastmath/src/numtheory/fp_prime_random_ex.c \ - tomsfastmath/src/sqr/fp_sqr.c \ - tomsfastmath/src/sqr/fp_sqr_comba.c \ - tomsfastmath/src/sqr/fp_sqr_comba_12.c \ - tomsfastmath/src/sqr/fp_sqr_comba_17.c \ - tomsfastmath/src/sqr/fp_sqr_comba_20.c \ - tomsfastmath/src/sqr/fp_sqr_comba_24.c \ - tomsfastmath/src/sqr/fp_sqr_comba_28.c \ - tomsfastmath/src/sqr/fp_sqr_comba_3.c \ - tomsfastmath/src/sqr/fp_sqr_comba_32.c \ - tomsfastmath/src/sqr/fp_sqr_comba_4.c \ - tomsfastmath/src/sqr/fp_sqr_comba_48.c \ - tomsfastmath/src/sqr/fp_sqr_comba_6.c \ - tomsfastmath/src/sqr/fp_sqr_comba_64.c \ - tomsfastmath/src/sqr/fp_sqr_comba_7.c \ - tomsfastmath/src/sqr/fp_sqr_comba_8.c \ - tomsfastmath/src/sqr/fp_sqr_comba_9.c \ - tomsfastmath/src/sqr/fp_sqr_comba_generic.c \ - tomsfastmath/src/sqr/fp_sqr_comba_small_set.c \ - tomsfastmath/src/sqr/fp_sqrmod.c - ltmsources = \ libtommath/bncore.c \ libtommath/bn_mp_init.c \ diff --git a/lib/hcrypto/aes.h b/lib/hcrypto/aes.h index 1afa922ac..4ba451651 100644 --- a/lib/hcrypto/aes.h +++ b/lib/hcrypto/aes.h @@ -76,7 +76,6 @@ void AES_cfb8_encrypt(const unsigned char *, unsigned char *, unsigned long, const AES_KEY *, unsigned char *, int); - #ifdef __cplusplus } #endif diff --git a/lib/hcrypto/common.c b/lib/hcrypto/common.c new file mode 100644 index 000000000..70a68356a --- /dev/null +++ b/lib/hcrypto/common.c @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2010 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Portions Copyright (c) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +#include + +#include +#include + +#include +#include +#include + + +#include "common.h" + +int +_hc_BN_to_integer(BIGNUM *bn, heim_integer *integer) +{ + integer->length = BN_num_bytes(bn); + integer->data = malloc(integer->length); + if (integer->data == NULL) + return ENOMEM; + BN_bn2bin(bn, integer->data); + integer->negative = BN_is_negative(bn); + return 0; +} + +BIGNUM * +_hc_integer_to_BN(const heim_integer *i, BIGNUM *bn) +{ + bn = BN_bin2bn(i->data, i->length, bn); + if (bn) + BN_set_negative(bn, i->negative); + return bn; +} diff --git a/lib/hcrypto/common.h b/lib/hcrypto/common.h new file mode 100644 index 000000000..f78f54440 --- /dev/null +++ b/lib/hcrypto/common.h @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2010 Kungliga Tekniska Högskolan + * (Royal Institute of Technology, Stockholm, Sweden). + * All rights reserved. + * + * Portions Copyright (c) 2010 Apple Inc. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * 3. Neither the name of the Institute nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#ifndef HCRYPTO_COMMON_H +#define HCRYPTO_COMMON_H 1 + +int +_hc_BN_to_integer(BIGNUM *, heim_integer *); + +BIGNUM * +_hc_integer_to_BN(const heim_integer *i, BIGNUM *bn); + +#endif /* HCRYPTO_COMMON_H */ diff --git a/lib/hcrypto/dh-imath.c b/lib/hcrypto/dh-imath.c index 822d5a328..c2e86fa2f 100644 --- a/lib/hcrypto/dh-imath.c +++ b/lib/hcrypto/dh-imath.c @@ -31,14 +31,14 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include -#endif #include #include #include +#ifdef USE_HCRYPTO_IMATH + #include #include "imath/imath.h" @@ -233,6 +233,7 @@ const DH_METHOD _hc_dh_imath_method = { NULL, dh_generate_params }; +#endif /* USE_HCRYPTO_DH_IMATH */ /** * DH implementation using libimath. @@ -245,5 +246,9 @@ const DH_METHOD _hc_dh_imath_method = { const DH_METHOD * DH_imath_method(void) { +#ifdef USE_HCRYPTO_DH_IMATH return &_hc_dh_imath_method; +#else + return NULL; +#endif } diff --git a/lib/hcrypto/dh-tfm.c b/lib/hcrypto/dh-tfm.c index d98f9c51c..ef2a19424 100644 --- a/lib/hcrypto/dh-tfm.c +++ b/lib/hcrypto/dh-tfm.c @@ -31,9 +31,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include -#endif #include #include @@ -41,6 +39,8 @@ #include +#ifdef USE_HCRYPTO_TFM + #include "tfm.h" static void @@ -247,3 +247,5 @@ DH_tfm_method(void) { return &_hc_dh_tfm_method; } + +#endif diff --git a/lib/hcrypto/engine.c b/lib/hcrypto/engine.c index de1901c4d..6e3e5e393 100644 --- a/lib/hcrypto/engine.c +++ b/lib/hcrypto/engine.c @@ -244,6 +244,7 @@ ENGINE_load_builtin_engines(void) if (ret != 1) ENGINE_finish(engine); +#ifdef USE_HCRYPTO_TFM /* * TFM */ @@ -261,7 +262,9 @@ ENGINE_load_builtin_engines(void) ret = add_engine(engine); if (ret != 1) ENGINE_finish(engine); +#endif /* USE_HCRYPTO_TFM */ +#ifdef USE_HCRYPTO_LTM /* * ltm */ @@ -279,7 +282,9 @@ ENGINE_load_builtin_engines(void) ret = add_engine(engine); if (ret != 1) ENGINE_finish(engine); +#endif +#ifdef USE_HCRYPTO_IMATH /* * imath */ @@ -297,6 +302,7 @@ ENGINE_load_builtin_engines(void) ret = add_engine(engine); if (ret != 1) ENGINE_finish(engine); +#endif #ifdef HAVE_GMP /* diff --git a/lib/hcrypto/engine.h b/lib/hcrypto/engine.h index dd136cecd..7fd8f3e1e 100644 --- a/lib/hcrypto/engine.h +++ b/lib/hcrypto/engine.h @@ -68,6 +68,16 @@ typedef struct hc_engine ENGINE; +#define NID_md2 0 +#define NID_md4 1 +#define NID_md5 2 +#define NID_sha1 4 +#define NID_sha256 5 + +/* + * + */ + #include #include #include diff --git a/lib/hcrypto/evp-cc.c b/lib/hcrypto/evp-cc.c index 7e0f5ad9a..535d607be 100644 --- a/lib/hcrypto/evp-cc.c +++ b/lib/hcrypto/evp-cc.c @@ -117,9 +117,8 @@ cc_do_cfb8_cipher(EVP_CIPHER_CTX *ctx, memcpy(ctx->iv, &oiv[1], ctx->cipher->iv_len); } - return 1; - } - + return 1; +} static int cc_cleanup(EVP_CIPHER_CTX *ctx) @@ -334,6 +333,10 @@ EVP_cc_aes_256_cbc(void) return &c; } +/* + * + */ + static int cc_aes_cfb8_init(EVP_CIPHER_CTX *ctx, const unsigned char * key, @@ -341,6 +344,7 @@ cc_aes_cfb8_init(EVP_CIPHER_CTX *ctx, int encp) { struct cc_key *cc = ctx->cipher_data; + memcpy(ctx->iv, iv, ctx->cipher->iv_len); return init_cc_key(1, kCCAlgorithmAES128, kCCOptionECBMode, key, ctx->cipher->key_len, NULL, &cc->href); } @@ -361,7 +365,7 @@ EVP_cc_aes_128_cfb8(void) 1, kCCKeySizeAES128, kCCBlockSizeAES128, - EVP_CIPH_CFB8_MODE, + EVP_CIPH_CFB8_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_aes_cfb8_init, cc_do_cfb8_cipher, cc_cleanup, @@ -390,8 +394,8 @@ EVP_cc_aes_192_cfb8(void) 1, kCCKeySizeAES192, kCCBlockSizeAES128, - EVP_CIPH_CFB8_MODE, - cc_aes_cfb8_init, + EVP_CIPH_CFB8_MODE|EVP_CIPH_ALWAYS_CALL_INIT, + cc_aes_cfb8_init, cc_do_cfb8_cipher, cc_cleanup, sizeof(struct cc_key), @@ -416,10 +420,10 @@ EVP_cc_aes_256_cfb8(void) { static const EVP_CIPHER c = { 0, - 1, + kCCBlockSizeAES128, kCCKeySizeAES256, kCCBlockSizeAES128, - EVP_CIPH_CFB8_MODE, + EVP_CIPH_CFB8_MODE|EVP_CIPH_ALWAYS_CALL_INIT, cc_aes_cfb8_init, cc_do_cfb8_cipher, cc_cleanup, diff --git a/lib/hcrypto/evp-cc.h b/lib/hcrypto/evp-cc.h index 1ac3cfbf2..9249bb226 100644 --- a/lib/hcrypto/evp-cc.h +++ b/lib/hcrypto/evp-cc.h @@ -47,9 +47,9 @@ #define EVP_cc_aes_128_cbc hc_EVP_cc_aes_128_cbc #define EVP_cc_aes_192_cbc hc_EVP_cc_aes_192_cbc #define EVP_cc_aes_256_cbc hc_EVP_cc_aes_256_cbc -#define EVP_cc_aes_cfb_128_cbc hc_EVP_cc_aes_128_cfb8 -#define EVP_cc_aes_cfb_192_cbc hc_EVP_cc_aes_192_cfb8 -#define EVP_cc_aes_cfb_256_cbc hc_EVP_cc_aes_256_cfb8 +#define EVP_cc_aes_128_cfb8 hc_EVP_cc_aes_128_cfb8 +#define EVP_cc_aes_192_cfb8 hc_EVP_cc_aes_192_cfb8 +#define EVP_cc_aes_256_cfb8 hc_EVP_cc_aes_256_cfb8 #define EVP_cc_rc4 hc_EVP_cc_rc4 #define EVP_cc_rc4_40 hc_EVP_cc_rc4_40 #define EVP_cc_rc2_40_cbc hc_EVP_cc_rc2_40_cbc diff --git a/lib/hcrypto/libhcrypto-exports.def b/lib/hcrypto/libhcrypto-exports.def index 904d0f1a3..3b596abaa 100644 --- a/lib/hcrypto/libhcrypto-exports.def +++ b/lib/hcrypto/libhcrypto-exports.def @@ -66,7 +66,7 @@ EXPORTS hc_DH_get_default_method hc_DH_get_ex_data hc_DH_imath_method - hc_DH_tfm_method + hc_DH_ltm_method ; hc_DH_gmp_method hc_DH_new hc_DH_new_method @@ -238,7 +238,7 @@ EXPORTS hc_RSA_get_default_method hc_RSA_get_method hc_RSA_imath_method - hc_RSA_tfm_method + hc_RSA_ltm_method hc_RSA_new hc_RSA_new_method hc_RSA_null_method diff --git a/lib/hcrypto/rsa-imath.c b/lib/hcrypto/rsa-imath.c index a2b9d2a67..901e9c359 100644 --- a/lib/hcrypto/rsa-imath.c +++ b/lib/hcrypto/rsa-imath.c @@ -42,6 +42,8 @@ #include +#ifdef USE_HCRYPTO_IMATH + #include "imath/imath.h" #include "imath/iprime.h" @@ -673,9 +675,14 @@ const RSA_METHOD hc_rsa_imath_method = { NULL, imath_rsa_generate_key }; +#endif const RSA_METHOD * RSA_imath_method(void) { +#ifdef USE_HCRYPTO_IMATH return &hc_rsa_imath_method; +#else + return NULL; +#endif } diff --git a/lib/hcrypto/rsa-ltm.c b/lib/hcrypto/rsa-ltm.c index 214cd7f5e..d9ed43ea2 100644 --- a/lib/hcrypto/rsa-ltm.c +++ b/lib/hcrypto/rsa-ltm.c @@ -44,14 +44,30 @@ #include "tommath.h" +static int +random_num(mp_int *num, size_t len) +{ + unsigned char *p; + + len = (len + 7) / 8; + p = malloc(len); + if (p == NULL) + return 1; + if (RAND_bytes(p, len) != 1) { + free(p); + return 1; + } + mp_read_unsigned_bin(num, p, len); + free(p); + return 0; +} + static void BN2mpz(mp_int *s, const BIGNUM *bn) { size_t len; void *p; - mp_init(s); - len = BN_num_bytes(bn); p = malloc(len); BN_bn2bin(bn, p); @@ -59,6 +75,34 @@ BN2mpz(mp_int *s, const BIGNUM *bn) free(p); } +static void +setup_blind(mp_int *n, mp_int *b, mp_int *bi) +{ + random_num(b, mp_count_bits(n)); + mp_mod(b, n, b); + mp_invmod(b, n, bi); +} + +static void +blind(mp_int *in, mp_int *b, mp_int *e, mp_int *n) +{ + mp_int t1; + mp_init(&t1); + /* in' = (in * b^e) mod n */ + mp_exptmod(b, e, n, &t1); + mp_mul(&t1, in, in); + mp_mod(in, n, in); + mp_clear(&t1); +} + +static void +unblind(mp_int *out, mp_int *bi, mp_int *n) +{ + /* out' = (out * 1/b) mod n */ + mp_mul(out, bi, out); + mp_mod(out, n, out); +} + static int ltm_rsa_private_calculate(mp_int * in, mp_int * p, mp_int * q, mp_int * dmp1, mp_int * dmq1, mp_int * iqmp, @@ -87,7 +131,7 @@ ltm_rsa_private_calculate(mp_int * in, mp_int * p, mp_int * q, mp_mul(&u, q, &u); mp_add(&u, &vq, out); - mp_zero_multi(&vp, &vq, &u, NULL); + mp_clear_multi(&vp, &vq, &u, NULL); return 0; } @@ -108,6 +152,8 @@ ltm_rsa_public_encrypt(int flen, const unsigned char* from, if (padding != RSA_PKCS1_PADDING) return -1; + mp_init_multi(&n, &e, &enc, &dec, NULL); + size = RSA_size(rsa); if (size < RSA_PKCS1_PADDING_SIZE || size - RSA_PKCS1_PADDING_SIZE < flen) @@ -118,7 +164,7 @@ ltm_rsa_public_encrypt(int flen, const unsigned char* from, p = p0 = malloc(size - 1); if (p0 == NULL) { - mp_zero_multi(&e, &n, NULL); + mp_clear_multi(&e, &n, NULL); return -3; } @@ -126,7 +172,7 @@ ltm_rsa_public_encrypt(int flen, const unsigned char* from, *p++ = 2; if (RAND_bytes(p, padlen) != 1) { - mp_zero_multi(&e, &n, NULL); + mp_clear_multi(&e, &n, NULL); free(p0); return -4; } @@ -147,7 +193,7 @@ ltm_rsa_public_encrypt(int flen, const unsigned char* from, res = mp_exptmod(&dec, &e, &n, &enc); - mp_zero_multi(&dec, &e, &n, NULL); + mp_clear_multi(&dec, &e, &n, NULL); if (res != 0) return -4; @@ -159,7 +205,7 @@ ltm_rsa_public_encrypt(int flen, const unsigned char* from, mp_to_unsigned_bin(&enc, to); size = ssize; } - mp_zero(&enc); + mp_clear(&enc); return size; } @@ -179,28 +225,29 @@ ltm_rsa_public_decrypt(int flen, const unsigned char* from, if (flen > RSA_size(rsa)) return -2; + mp_init_multi(&e, &n, &s, &us, NULL); + BN2mpz(&n, rsa->n); BN2mpz(&e, rsa->e); #if 0 /* Check that the exponent is larger then 3 */ if (mp_int_compare_value(&e, 3) <= 0) { - mp_zero_multi(&e, &n, NULL); + mp_clear_multi(&e, &n, NULL); return -3; } #endif - mp_init_multi(&s, &us, NULL); mp_read_unsigned_bin(&s, rk_UNCONST(from), flen); if (mp_cmp(&s, &n) >= 0) { - mp_zero_multi(&e, &n, NULL); + mp_clear_multi(&e, &n, NULL); return -4; } res = mp_exptmod(&s, &e, &n, &us); - mp_zero_multi(&s, &e, &n, NULL); + mp_clear_multi(&s, &e, &n, NULL); if (res != 0) return -5; @@ -211,7 +258,7 @@ ltm_rsa_public_decrypt(int flen, const unsigned char* from, assert(size <= RSA_size(rsa)); mp_to_unsigned_bin(&us, p); - mp_zero(&us); + mp_clear(&us); /* head zero was skipped by mp_to_unsigned_bin */ if (*p == 0) @@ -239,10 +286,15 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, int res; int size; mp_int in, out, n, e; + mp_int bi, b; + int blinding = (rsa->flags & RSA_FLAG_NO_BLINDING) == 0; + int do_unblind = 0; if (padding != RSA_PKCS1_PADDING) return -1; + mp_init_multi(&e, &n, &in, &out, &b, &bi, NULL); + size = RSA_size(rsa); if (size < RSA_PKCS1_PADDING_SIZE || size - RSA_PKCS1_PADDING_SIZE < flen) @@ -261,7 +313,6 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, BN2mpz(&n, rsa->n); BN2mpz(&e, rsa->e); - mp_init_multi(&in, &out, NULL); mp_read_unsigned_bin(&in, p0, size); free(p0); @@ -270,9 +321,17 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, goto out; } + if (blinding) { + setup_blind(&n, &b, &bi); + blind(&in, &b, &e, &n); + do_unblind = 1; + } + if (rsa->p && rsa->q && rsa->dmp1 && rsa->dmq1 && rsa->iqmp) { mp_int p, q, dmp1, dmq1, iqmp; + mp_init_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); + BN2mpz(&p, rsa->p); BN2mpz(&q, rsa->q); BN2mpz(&dmp1, rsa->dmp1); @@ -281,7 +340,7 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, res = ltm_rsa_private_calculate(&in, &p, &q, &dmp1, &dmq1, &iqmp, &out); - mp_zero_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); + mp_clear_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); if (res != 0) { size = -4; @@ -292,13 +351,16 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, BN2mpz(&d, rsa->d); res = mp_exptmod(&in, &d, &n, &out); - mp_zero(&d); + mp_clear(&d); if (res != 0) { size = -5; goto out; } } + if (do_unblind) + unblind(&out, &bi, &n); + if (size > 0) { size_t ssize; ssize = mp_unsigned_bin_size(&out); @@ -308,7 +370,7 @@ ltm_rsa_private_encrypt(int flen, const unsigned char* from, } out: - mp_zero_multi(&e, &n, &in, &out, NULL); + mp_clear_multi(&e, &n, &in, &out, &b, &bi, NULL); return size; } @@ -320,7 +382,9 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, unsigned char *ptr; int res; size_t size; - mp_int in, out, n, e; + mp_int in, out, n, e, b, bi; + int blinding = (rsa->flags & RSA_FLAG_NO_BLINDING) == 0; + int do_unblind = 0; if (padding != RSA_PKCS1_PADDING) return -1; @@ -329,7 +393,7 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, if (flen > size) return -2; - mp_init_multi(&in, &out, NULL); + mp_init_multi(&in, &n, &e, &out, &bi, &b, NULL); BN2mpz(&n, rsa->n); BN2mpz(&e, rsa->e); @@ -341,9 +405,17 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, goto out; } + if (blinding) { + setup_blind(&n, &b, &bi); + blind(&in, &b, &e, &n); + do_unblind = 1; + } + if (rsa->p && rsa->q && rsa->dmp1 && rsa->dmq1 && rsa->iqmp) { mp_int p, q, dmp1, dmq1, iqmp; + mp_init_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); + BN2mpz(&p, rsa->p); BN2mpz(&q, rsa->q); BN2mpz(&dmp1, rsa->dmp1); @@ -352,7 +424,7 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, res = ltm_rsa_private_calculate(&in, &p, &q, &dmp1, &dmq1, &iqmp, &out); - mp_zero_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); + mp_clear_multi(&p, &q, &dmp1, &dmq1, &iqmp, NULL); if (res != 0) { size = -3; @@ -367,13 +439,16 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, BN2mpz(&d, rsa->d); res = mp_exptmod(&in, &d, &n, &out); - mp_zero(&d); + mp_clear(&d); if (res != 0) { size = -5; goto out; } } + if (do_unblind) + unblind(&out, &bi, &n); + ptr = to; { size_t ssize; @@ -399,7 +474,7 @@ ltm_rsa_private_decrypt(int flen, const unsigned char* from, memmove(to, ptr, size); out: - mp_zero_multi(&e, &n, &in, &out, NULL); + mp_clear_multi(&e, &n, &in, &out, NULL); return size; } @@ -423,24 +498,6 @@ mpz2BN(mp_int *s) return bn; } -static int -random_num(mp_int *num, size_t len) -{ - unsigned char *p; - - len = (len + 7) / 8; - p = malloc(len); - if (p == NULL) - return 1; - if (RAND_bytes(p, len) != 1) { - free(p); - return 1; - } - mp_read_unsigned_bin(num, p, len); - free(p); - return 0; -} - #define CHECK(f, v) if ((f) != (v)) { goto out; } static int @@ -526,7 +583,7 @@ ltm_rsa_generate_key(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb) ret = 1; out: - mp_zero_multi(&el, &p, &q, &n, &d, &dmp1, + mp_clear_multi(&el, &p, &q, &n, &d, &dmp1, &dmq1, &iqmp, &t1, &t2, &t3, NULL); return ret; diff --git a/lib/hcrypto/rsa-tfm.c b/lib/hcrypto/rsa-tfm.c index effa222c4..796985f8b 100644 --- a/lib/hcrypto/rsa-tfm.c +++ b/lib/hcrypto/rsa-tfm.c @@ -42,6 +42,8 @@ #include +#ifdef USE_HCRYPTO_TFM + #include "tfm.h" static void @@ -561,8 +563,15 @@ const RSA_METHOD hc_rsa_tfm_method = { tfm_rsa_generate_key }; +#endif + const RSA_METHOD * RSA_tfm_method(void) { +#ifdef USE_HCRYPTO_TFM return &hc_rsa_tfm_method; +#else + return NULL; +#endif } + diff --git a/lib/hcrypto/rsa.c b/lib/hcrypto/rsa.c index c6d501401..e600aad8e 100644 --- a/lib/hcrypto/rsa.c +++ b/lib/hcrypto/rsa.c @@ -38,8 +38,12 @@ #include #include +#include + #include +#include "common.h" + #include /** @@ -250,7 +254,7 @@ RSA_set_app_data(RSA *rsa, void *arg) */ void * -RSA_get_app_data(RSA *rsa) +RSA_get_app_data(const RSA *rsa) { return rsa->ex_data.sk; } @@ -316,19 +320,137 @@ RSAFUNC(RSA_public_decrypt, (r)->meth->rsa_pub_dec(flen, f, t, r, p)) RSAFUNC(RSA_private_encrypt, (r)->meth->rsa_priv_enc(flen, f, t, r, p)) RSAFUNC(RSA_private_decrypt, (r)->meth->rsa_priv_dec(flen, f, t, r, p)) -/* XXX */ +static const heim_octet_string null_entry_oid = { 2, rk_UNCONST("\x05\x00") }; + +static const unsigned sha1_oid_tree[] = { 1, 3, 14, 3, 2, 26 }; +static const AlgorithmIdentifier _signature_sha1_data = { + { 6, rk_UNCONST(sha1_oid_tree) }, rk_UNCONST(&null_entry_oid) +}; +static const unsigned sha256_oid_tree[] = { 2, 16, 840, 1, 101, 3, 4, 2, 1 }; +static const AlgorithmIdentifier _signature_sha256_data = { + { 9, rk_UNCONST(sha256_oid_tree) }, rk_UNCONST(&null_entry_oid) +}; +static const unsigned md5_oid_tree[] = { 1, 2, 840, 113549, 2, 5 }; +static const AlgorithmIdentifier _signature_md5_data = { + { 6, rk_UNCONST(md5_oid_tree) }, rk_UNCONST(&null_entry_oid) +}; + + int RSA_sign(int type, const unsigned char *from, unsigned int flen, unsigned char *to, unsigned int *tlen, RSA *rsa) { - return -1; + if (rsa->meth->rsa_sign) + return rsa->meth->rsa_sign(type, from, flen, to, tlen, rsa); + + if (rsa->meth->rsa_priv_enc) { + heim_octet_string indata; + DigestInfo di; + size_t size; + int ret; + + memset(&di, 0, sizeof(di)); + + if (type == NID_sha1) { + di.digestAlgorithm = _signature_sha1_data; + } else if (type == NID_md5) { + di.digestAlgorithm = _signature_md5_data; + } else if (type == NID_sha256) { + di.digestAlgorithm = _signature_sha256_data; + } else + return -1; + + di.digest.data = rk_UNCONST(from); + di.digest.length = flen; + + ASN1_MALLOC_ENCODE(DigestInfo, + indata.data, + indata.length, + &di, + &size, + ret); + if (ret) + return ret; + if (indata.length != size) + abort(); + + ret = rsa->meth->rsa_priv_enc(indata.length, indata.data, to, + rsa, RSA_PKCS1_PADDING); + free(indata.data); + if (ret > 0) { + *tlen = ret; + ret = 1; + } else + ret = 0; + + return ret; + } + + return 0; } int RSA_verify(int type, const unsigned char *from, unsigned int flen, - unsigned char *to, unsigned int tlen, RSA *rsa) + unsigned char *sigbuf, unsigned int siglen, RSA *rsa) { - return -1; + if (rsa->meth->rsa_verify) + return rsa->meth->rsa_verify(type, from, flen, sigbuf, siglen, rsa); + + if (rsa->meth->rsa_pub_dec) { + heim_octet_string indata; + const AlgorithmIdentifier *digest_alg; + void *data; + DigestInfo di; + size_t size; + int ret, ret2; + + data = malloc(RSA_size(rsa)); + if (data == NULL) + return -1; + + memset(&di, 0, sizeof(di)); + + ret = rsa->meth->rsa_pub_dec(siglen, sigbuf, data, rsa, RSA_PKCS1_PADDING); + if (ret <= 0) { + free(data); + return -2; + } + + ret2 = decode_DigestInfo(data, ret, &di, &size); + free(data); + if (ret2 != 0) + return -3; + if (ret != size) { + free_DigestInfo(&di); + return -4; + } + + if (flen != di.digest.length || memcmp(di.digest.data, from, flen) != 0) { + free_DigestInfo(&di); + return -5; + } + + if (type == NID_sha1) { + digest_alg = &_signature_sha1_data; + } else if (type == NID_md5) { + digest_alg = &_signature_md5_data; + } else if (type == NID_sha256) { + digest_alg = &_signature_sha256_data; + } else { + free_DigestInfo(&di); + return -1; + } + + ret = der_heim_oid_cmp(&digest_alg->algorithm, + &di.digestAlgorithm.algorithm); + free_DigestInfo(&di); + + if (ret != 0) + return 0; + return 1; + } + + return 0; } /* @@ -393,9 +515,12 @@ RSA_null_method(void) return &rsa_null_method; } +extern const RSA_METHOD hc_rsa_gmp_method; +extern const RSA_METHOD hc_rsa_imath_method; extern const RSA_METHOD hc_rsa_tfm_method; +extern const RSA_METHOD hc_rsa_ltm_method; +static const RSA_METHOD *default_rsa_method = &hc_rsa_ltm_method; -static const RSA_METHOD *default_rsa_method = &hc_rsa_tfm_method; const RSA_METHOD * RSA_get_default_method(void) @@ -413,32 +538,6 @@ RSA_set_default_method(const RSA_METHOD *meth) * */ -static BIGNUM * -heim_int2BN(const heim_integer *i) -{ - BIGNUM *bn; - - bn = BN_bin2bn(i->data, i->length, NULL); - if (bn) - BN_set_negative(bn, i->negative); - return bn; -} - -static int -bn2heim_int(BIGNUM *bn, heim_integer *integer) -{ - integer->length = BN_num_bytes(bn); - integer->data = malloc(integer->length); - if (integer->data == NULL) { - integer->length = 0; - return ENOMEM; - } - BN_bn2bin(bn, integer->data); - integer->negative = BN_is_negative(bn); - return 0; -} - - RSA * d2i_RSAPrivateKey(RSA *rsa, const unsigned char **pp, size_t len) { @@ -461,14 +560,14 @@ d2i_RSAPrivateKey(RSA *rsa, const unsigned char **pp, size_t len) } } - k->n = heim_int2BN(&data.modulus); - k->e = heim_int2BN(&data.publicExponent); - k->d = heim_int2BN(&data.privateExponent); - k->p = heim_int2BN(&data.prime1); - k->q = heim_int2BN(&data.prime2); - k->dmp1 = heim_int2BN(&data.exponent1); - k->dmq1 = heim_int2BN(&data.exponent2); - k->iqmp = heim_int2BN(&data.coefficient); + k->n = _hc_integer_to_BN(&data.modulus, NULL); + k->e = _hc_integer_to_BN(&data.publicExponent, NULL); + k->d = _hc_integer_to_BN(&data.privateExponent, NULL); + k->p = _hc_integer_to_BN(&data.prime1, NULL); + k->q = _hc_integer_to_BN(&data.prime2, NULL); + k->dmp1 = _hc_integer_to_BN(&data.exponent1, NULL); + k->dmq1 = _hc_integer_to_BN(&data.exponent2, NULL); + k->iqmp = _hc_integer_to_BN(&data.coefficient, NULL); free_RSAPrivateKey(&data); if (k->n == NULL || k->e == NULL || k->d == NULL || k->p == NULL || @@ -495,14 +594,14 @@ i2d_RSAPrivateKey(RSA *rsa, unsigned char **pp) memset(&data, 0, sizeof(data)); - ret = bn2heim_int(rsa->n, &data.modulus); - ret |= bn2heim_int(rsa->e, &data.publicExponent); - ret |= bn2heim_int(rsa->d, &data.privateExponent); - ret |= bn2heim_int(rsa->p, &data.prime1); - ret |= bn2heim_int(rsa->q, &data.prime2); - ret |= bn2heim_int(rsa->dmp1, &data.exponent1); - ret |= bn2heim_int(rsa->dmq1, &data.exponent2); - ret |= bn2heim_int(rsa->iqmp, &data.coefficient); + ret = _hc_BN_to_integer(rsa->n, &data.modulus); + ret |= _hc_BN_to_integer(rsa->e, &data.publicExponent); + ret |= _hc_BN_to_integer(rsa->d, &data.privateExponent); + ret |= _hc_BN_to_integer(rsa->p, &data.prime1); + ret |= _hc_BN_to_integer(rsa->q, &data.prime2); + ret |= _hc_BN_to_integer(rsa->dmp1, &data.exponent1); + ret |= _hc_BN_to_integer(rsa->dmq1, &data.exponent2); + ret |= _hc_BN_to_integer(rsa->iqmp, &data.coefficient); if (ret) { free_RSAPrivateKey(&data); return -1; @@ -540,8 +639,8 @@ i2d_RSAPublicKey(RSA *rsa, unsigned char **pp) memset(&data, 0, sizeof(data)); - if (bn2heim_int(rsa->n, &data.modulus) || - bn2heim_int(rsa->e, &data.publicExponent)) + if (_hc_BN_to_integer(rsa->n, &data.modulus) || + _hc_BN_to_integer(rsa->e, &data.publicExponent)) { free_RSAPublicKey(&data); return -1; @@ -592,8 +691,8 @@ d2i_RSAPublicKey(RSA *rsa, const unsigned char **pp, size_t len) } } - k->n = heim_int2BN(&data.modulus); - k->e = heim_int2BN(&data.publicExponent); + k->n = _hc_integer_to_BN(&data.modulus, NULL); + k->e = _hc_integer_to_BN(&data.publicExponent, NULL); free_RSAPublicKey(&data); diff --git a/lib/hcrypto/rsa.h b/lib/hcrypto/rsa.h index 4f247c7c1..f5aa68c48 100644 --- a/lib/hcrypto/rsa.h +++ b/lib/hcrypto/rsa.h @@ -41,7 +41,6 @@ /* symbol renaming */ #define RSA_null_method hc_RSA_null_method #define RSA_imath_method hc_RSA_imath_method -#define RSA_tfm_method hc_RSA_tfm_method #define RSA_ltm_method hc_RSA_ltm_method #define RSA_gmp_method hc_RSA_gmp_method #define RSA_new hc_RSA_new @@ -138,7 +137,6 @@ struct RSA { const RSA_METHOD *RSA_null_method(void); const RSA_METHOD *RSA_imath_method(void); const RSA_METHOD *RSA_gmp_method(void); -const RSA_METHOD *RSA_tfm_method(void); const RSA_METHOD *RSA_ltm_method(void); /* @@ -157,7 +155,7 @@ const RSA_METHOD * RSA_get_method(const RSA *); int RSA_set_method(RSA *, const RSA_METHOD *); int RSA_set_app_data(RSA *, void *arg); -void * RSA_get_app_data(RSA *); +void * RSA_get_app_data(const RSA *); int RSA_check_key(const RSA *); int RSA_size(const RSA *); diff --git a/lib/hcrypto/test_pkcs5.c b/lib/hcrypto/test_pkcs5.c index 798d4e2b2..46ca52ac7 100644 --- a/lib/hcrypto/test_pkcs5.c +++ b/lib/hcrypto/test_pkcs5.c @@ -44,129 +44,65 @@ struct tests { const char *password; - size_t passwordlen; const char *salt; - size_t saltsize; int iterations; - size_t keysize; - const void *pbkdf2; + const void *pbkdf2_128; + const void *pbkdf2_256; }; const struct tests pkcs5_tests[] = { - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, + { "password", + "ATHENA.MIT.EDUraeburn", 1, - 16, - "\xcd\xed\xb5\x28\x1b\xb2\xf8\x01\x56\x5a\x11\x22\xb2\x56\x35\x15" - }, - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, - 1, - 32, + "\xcd\xed\xb5\x28\x1b\xb2\xf8\x01\x56\x5a\x11\x22\xb2\x56\x35\x15", "\xcd\xed\xb5\x28\x1b\xb2\xf8\x01\x56\x5a\x11\x22\xb2\x56\x35\x15" "\x0a\xd1\xf7\xa0\x4b\xb9\xf3\xa3\x33\xec\xc0\xe2\xe1\xf7\x08\x37" }, - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, + { "password", + "ATHENA.MIT.EDUraeburn", 2, - 16, - "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d" - }, - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, - 2, - 32, + "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d", "\x01\xdb\xee\x7f\x4a\x9e\x24\x3e\x98\x8b\x62\xc7\x3c\xda\x93\x5d" "\xa0\x53\x78\xb9\x32\x44\xec\x8f\x48\xa9\x9e\x61\xad\x79\x9d\x86" }, - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, + { "password", + "ATHENA.MIT.EDUraeburn", 1200, - 16, - "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b" - }, - { "password", 0, - "ATHENA.MIT.EDUraeburn", 0, - 1200, - 32, + "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b", "\x5c\x08\xeb\x61\xfd\xf7\x1e\x4e\x4e\xc3\xcf\x6b\xa1\xf5\x51\x2b" "\xa7\xe5\x2d\xdb\xc5\xe5\x14\x2f\x70\x8a\x31\xe2\xe6\x2b\x1e\x13" }, { - "password", 0, - "\x12\x34\x56\x78\x78\x56\x34\x12", 0, + "password", "\x12\x34\x56\x78\x78\x56\x34\x12", 5, - 16, - "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49" - }, - { - "password", 0, - "\x12\x34\x56\x78\x78\x56\x34\x12", 0, - 5, - 32, + "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49", "\xd1\xda\xa7\x86\x15\xf2\x87\xe6\xa1\xc8\xb1\x20\xd7\x06\x2a\x49" "\x3f\x98\xd2\x03\xe6\xbe\x49\xa6\xad\xf4\xfa\x57\x4b\x6e\x64\xee" }, { - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, - "pass phrase equals block size", 0, + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "pass phrase equals block size", 1200, - 16, - "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9" - }, - { - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, - "pass phrase equals block size", 0, - 1200, - 32, + "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9", "\x13\x9c\x30\xc0\x96\x6b\xc3\x2b\xa5\x5f\xdb\xf2\x12\x53\x0a\xc9" "\xc5\xec\x59\xf1\xa4\x52\xf5\xcc\x9a\xd9\x40\xfe\xa0\x59\x8e\xd1" }, { - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, - "pass phrase exceeds block size", 0, + "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", + "pass phrase exceeds block size", 1200, - 16, - "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61" - }, - { - "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", 0, - "pass phrase exceeds block size", 0, - 1200, - 32, + "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61", "\x9c\xca\xd6\xd4\x68\x77\x0c\xd5\x1b\x10\xe6\xa6\x87\x21\xbe\x61" "\x1a\x8b\x4d\x28\x26\x01\xdb\x3b\x36\xbe\x92\x46\x91\x5e\xc8\x2a" }, { - "\xf0\x9d\x84\x9e" /* g-clef */, 0, - "EXAMPLE.COMpianist", 0, + "\xf0\x9d\x84\x9e" /* g-clef */, + "EXAMPLE.COMpianist", 50, - 16, - "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39" - }, - { - "\xf0\x9d\x84\x9e" /* g-clef */, 0, - "EXAMPLE.COMpianist", 0, - 50, - 32, + "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39", "\x6b\x9c\xf2\x6d\x45\x45\x5a\x43\xa5\xb8\xbb\x27\x6a\x40\x3b\x39" "\xe7\xfe\x37\xa0\xc4\x1e\x02\xc2\x81\xff\x30\x69\xe1\xe9\x4f\x52" - }, - { - "passwordPASSWORDpassword", 0, - "saltSALTsaltSALTsaltSALTsaltSALTsalt", 0, - 4096, - 25, - "\x3d\x2e\xec\x4f\xe4\x1c\x84\x9b\x80\xc8\xd8\x36\x62\xc0\xe4\x4a\x8b\x29\x1a\x96\x4c\xf2\xf0\x70\x38" - }, - { - "pass\0word", 9, - "sa\0lt", 5, - 4096, - 16, - "\x56\xfa\x6a\xa7\x55\x48\x9\x9d\xcc\x37\xd7\xf0\x34\x25\xe0\xc3" - } }; @@ -175,23 +111,28 @@ test_pkcs5_pbe2(const struct tests *t) { unsigned char key[32]; int ret, error = 0; - size_t saltsize = t->saltsize; - size_t passwordlen = t->passwordlen; - if (saltsize == 0) - saltsize = strlen(t->salt); - if (passwordlen == 0) - passwordlen = strlen(t->password); - - ret = PKCS5_PBKDF2_HMAC_SHA1(t->password, passwordlen, - t->salt, saltsize, + ret = PKCS5_PBKDF2_HMAC_SHA1(t->password, strlen(t->password), + t->salt, strlen(t->salt), t->iterations, - t->keysize, key); + 16, key); if (ret != 1) errx(1, "PKCS5_PBKDF2_HMAC_SHA1: %d", ret); - if (memcmp(t->pbkdf2, key, t->keysize) != 0) { - printf("incorrect %d key\n", (int)t->keysize); + if (memcmp(t->pbkdf2_128, key, 16) != 0) { + printf("incorrect 128 key\n"); + error++; + } + + ret = PKCS5_PBKDF2_HMAC_SHA1(t->password, strlen(t->password), + t->salt, strlen(t->salt), + t->iterations, + 32, key); + if (ret != 1) + errx(1, "PKCS5_PBKDF2_HMAC_SHA1: %d", ret); + + if (memcmp(t->pbkdf2_256, key, 32) != 0) { + printf("incorrect 256 key\n"); error++; } diff --git a/lib/hcrypto/test_rand.c b/lib/hcrypto/test_rand.c index 2b348c7f3..aec538f4d 100644 --- a/lib/hcrypto/test_rand.c +++ b/lib/hcrypto/test_rand.c @@ -3,6 +3,8 @@ * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * + * Portions Copyright (c) 2009 Apple Inc. All rights reserved. + * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -111,8 +113,12 @@ main(int argc, char **argv) buffer = emalloc(len); if (rand_method) { - if (strcasecmp(rand_method, "fortuna") == 0) + if (0) { + } +#ifndef NO_RAND_FORTUNA_METHOD + else if (strcasecmp(rand_method, "fortuna") == 0) RAND_set_rand_method(RAND_fortuna_method()); +#endif #ifndef NO_RAND_UNIX_METHOD else if (strcasecmp(rand_method, "unix") == 0) RAND_set_rand_method(RAND_unix_method()); diff --git a/lib/hcrypto/test_rsa.c b/lib/hcrypto/test_rsa.c index aa89d71bc..510f951b1 100644 --- a/lib/hcrypto/test_rsa.c +++ b/lib/hcrypto/test_rsa.c @@ -81,6 +81,7 @@ static void check_rsa(const unsigned char *in, size_t len, RSA *rsa, int padding) { unsigned char *res, *res2; + unsigned int len2; int keylen; res = malloc(RSA_size(rsa)); @@ -129,6 +130,14 @@ check_rsa(const unsigned char *in, size_t len, RSA *rsa, int padding) if (memcmp(res2, in, len) != 0) errx(1, "string not the same after decryption"); + len2 = keylen; + + if (RSA_sign(NID_sha1, in, len, res, &len2, rsa) != 1) + errx(1, "RSA_sign failed"); + + if (RSA_verify(NID_sha1, in, len, res, len2, rsa) != 1) + errx(1, "RSA_verify failed"); + free(res); free(res2); } diff --git a/lib/hcrypto/tomsfastmath/LICENSE b/lib/hcrypto/tomsfastmath/LICENSE deleted file mode 100644 index 669856c88..000000000 --- a/lib/hcrypto/tomsfastmath/LICENSE +++ /dev/null @@ -1,7 +0,0 @@ -TomsFastMath is public domain. - -Note some ideas were borrowed from LibTomMath and OpenSSL. All of the code is original or ported -from LibTomMath [no code was ported from OpenSSL]. As such the origins and status of this code -are both public domain. - --- Tom St Denis diff --git a/lib/hcrypto/tomsfastmath/NTMakefile b/lib/hcrypto/tomsfastmath/NTMakefile deleted file mode 100644 index 555b1a13d..000000000 --- a/lib/hcrypto/tomsfastmath/NTMakefile +++ /dev/null @@ -1,164 +0,0 @@ -######################################################################## -# -# Copyright (c) 2009, Secure Endpoints Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# - Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# - Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in -# the documentation and/or other materials provided with the -# distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -# COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -RELDIR=lib\hcrypto\tomsfastmath - -!include ../../../windows/NTMakefile.w32 - -INCFILES=$(INCDIR)\tfm.h - -libtfm_OBJs= \ - $(OBJ)\fp_add.obj \ - $(OBJ)\fp_add_d.obj \ - $(OBJ)\fp_addmod.obj \ - $(OBJ)\fp_cmp.obj \ - $(OBJ)\fp_cmp_d.obj \ - $(OBJ)\fp_cmp_mag.obj \ - $(OBJ)\fp_sub.obj \ - $(OBJ)\fp_sub_d.obj \ - $(OBJ)\fp_submod.obj \ - $(OBJ)\s_fp_add.obj \ - $(OBJ)\s_fp_sub.obj \ - $(OBJ)\fp_radix_size.obj \ - $(OBJ)\fp_read_radix.obj \ - $(OBJ)\fp_read_signed_bin.obj \ - $(OBJ)\fp_read_unsigned_bin.obj \ - $(OBJ)\fp_reverse.obj \ - $(OBJ)\fp_s_rmap.obj \ - $(OBJ)\fp_signed_bin_size.obj \ - $(OBJ)\fp_to_signed_bin.obj \ - $(OBJ)\fp_to_unsigned_bin.obj \ - $(OBJ)\fp_toradix.obj \ - $(OBJ)\fp_unsigned_bin_size.obj \ - $(OBJ)\fp_cnt_lsb.obj \ - $(OBJ)\fp_count_bits.obj \ - $(OBJ)\fp_div_2.obj \ - $(OBJ)\fp_div_2d.obj \ - $(OBJ)\fp_lshd.obj \ - $(OBJ)\fp_mod_2d.obj \ - $(OBJ)\fp_rshd.obj \ - $(OBJ)\fp_div.obj \ - $(OBJ)\fp_div_d.obj \ - $(OBJ)\fp_mod.obj \ - $(OBJ)\fp_mod_d.obj \ - $(OBJ)\fp_2expt.obj \ - $(OBJ)\fp_exptmod.obj \ - $(OBJ)\fp_find_prime.obj \ - $(OBJ)\fp_ident.obj \ - $(OBJ)\fp_init_multi.obj \ - $(OBJ)\fp_set.obj \ - $(OBJ)\fp_montgomery_calc_normalization.obj \ - $(OBJ)\fp_montgomery_reduce.obj \ - $(OBJ)\fp_montgomery_setup.obj \ - $(OBJ)\fp_mul.obj \ - $(OBJ)\fp_mul_2.obj \ - $(OBJ)\fp_mul_2d.obj \ - $(OBJ)\fp_mul_comba.obj \ - $(OBJ)\fp_mul_comba_12.obj \ - $(OBJ)\fp_mul_comba_17.obj \ - $(OBJ)\fp_mul_comba_20.obj \ - $(OBJ)\fp_mul_comba_24.obj \ - $(OBJ)\fp_mul_comba_28.obj \ - $(OBJ)\fp_mul_comba_3.obj \ - $(OBJ)\fp_mul_comba_32.obj \ - $(OBJ)\fp_mul_comba_4.obj \ - $(OBJ)\fp_mul_comba_48.obj \ - $(OBJ)\fp_mul_comba_6.obj \ - $(OBJ)\fp_mul_comba_64.obj \ - $(OBJ)\fp_mul_comba_7.obj \ - $(OBJ)\fp_mul_comba_8.obj \ - $(OBJ)\fp_mul_comba_9.obj \ - $(OBJ)\fp_mul_comba_small_set.obj \ - $(OBJ)\fp_mul_d.obj \ - $(OBJ)\fp_mulmod.obj \ - $(OBJ)\fp_gcd.obj \ - $(OBJ)\fp_invmod.obj \ - $(OBJ)\fp_isprime.obj \ - $(OBJ)\fp_lcm.obj \ - $(OBJ)\fp_prime_miller_rabin.obj \ - $(OBJ)\fp_prime_random_ex.obj \ - $(OBJ)\fp_sqr.obj \ - $(OBJ)\fp_sqr_comba.obj \ - $(OBJ)\fp_sqr_comba_12.obj \ - $(OBJ)\fp_sqr_comba_17.obj \ - $(OBJ)\fp_sqr_comba_20.obj \ - $(OBJ)\fp_sqr_comba_24.obj \ - $(OBJ)\fp_sqr_comba_28.obj \ - $(OBJ)\fp_sqr_comba_3.obj \ - $(OBJ)\fp_sqr_comba_32.obj \ - $(OBJ)\fp_sqr_comba_4.obj \ - $(OBJ)\fp_sqr_comba_48.obj \ - $(OBJ)\fp_sqr_comba_6.obj \ - $(OBJ)\fp_sqr_comba_64.obj \ - $(OBJ)\fp_sqr_comba_7.obj \ - $(OBJ)\fp_sqr_comba_8.obj \ - $(OBJ)\fp_sqr_comba_9.obj \ - $(OBJ)\fp_sqr_comba_generic.obj \ - $(OBJ)\fp_sqr_comba_small_set.obj \ - $(OBJ)\fp_sqrmod.obj - -{src\addsub}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\bin}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\bit}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\divide}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\exptmod}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\misc}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\mont}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\mul}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\numtheory}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\sqr}.c{$(OBJ)}.obj: - $(C2OBJ) - -{src\headers}.h{$(INCDIR)}.h: - $(CP) $** $@ - -$(LIBTFM): $(libtfm_OBJs) - $(LIBCON) - -all:: $(INCFILES) $(LIBTFM) diff --git a/lib/hcrypto/tomsfastmath/RELEASE b/lib/hcrypto/tomsfastmath/RELEASE deleted file mode 100644 index 4dabba762..000000000 --- a/lib/hcrypto/tomsfastmath/RELEASE +++ /dev/null @@ -1 +0,0 @@ -libtomcrypt-1.17-plus-unrel diff --git a/lib/hcrypto/tomsfastmath/SPONSORS b/lib/hcrypto/tomsfastmath/SPONSORS deleted file mode 100644 index d7df35891..000000000 --- a/lib/hcrypto/tomsfastmath/SPONSORS +++ /dev/null @@ -1,5 +0,0 @@ -Development of TomsFastMath was sponsored by three groups. Two companies that use LTC and LTM commercially -and one individual who decided he wanted to help out by being generous. - -Thanks goes to them [though they wished to remain anonymous] and people like them. - diff --git a/lib/hcrypto/tomsfastmath/TODO b/lib/hcrypto/tomsfastmath/TODO deleted file mode 100644 index e69de29bb..000000000 diff --git a/lib/hcrypto/tomsfastmath/changes.txt b/lib/hcrypto/tomsfastmath/changes.txt deleted file mode 100644 index 721e3f3fe..000000000 --- a/lib/hcrypto/tomsfastmath/changes.txt +++ /dev/null @@ -1,95 +0,0 @@ -March 14th, 2007 -0.12 -- Christophe Devine contributed MIPS asm w00t - ++ quick release to get the MIPS code out there - -March 10th, 2007 -0.11 -- re-org'ed the source tree, it's cooler now - -- cleaned up mul/sqr so there is only one file per unit, should help building with older compilers and/or on slower boxes - -- [CRI] optimized fp_read_unsigned_bin - -- fixed -0 ... again ... I now have less hair on my head. - -- [CRI] renamed bn_reverse() -> fp_reverse() - -November 1st, 2006 -0.10 -- Unrolled Montgomery for 1..16 digits with TFM_SMALL_MONT_SET between 10% and 25% speedup depending on size. - -- fixed fp_sqr_comba.c so it builds in ISO C mode [Andreas Lange] - -- cisc@broadpark.no pointed out fp_radix_size() had a few typos that affected correctness. Fixed. - -- Added support for ECC performance, e.g. define "-DTFM_ALREADY_SET -DTFM_ECC192" and it will disable - all of the unrolled code EXCEPT what is required for ECC P-192. It autodetects 32/64-bit platforms too. It's super neato. - Support for 192, 224, 256, 384 and 521 bit curves through the defines [see tfm.h] - -- AVR32 support added, define TFM_AVR32 to enable - -April 4th, 2006 -0.09 -- Bruce Guenter suggested I use --tag=CC for libtool builds where the compiler may think it's C++. - -- Added support for k=1 in exptmod for RSA exponents. Makes it more competitive with other libraries - -- added cutoffs to the comba32 sqr/mul code to better handle 640, 786 and 896 bit operands (e.g. for RSA-1280, RSA-1536 and RSA-1792), really no effect - for 64-bit boxes as these represent 1280, 1536 and 1792 bit operands (not likely to be invoked). - -- Removed karatsuba from the mul/sqr since they're not useful and slow. - -- added 20, 24 and 28 digit multipliers for oddsized RSA support. You can easily disable them by uncommenting the TFM_SQRXX and TFM_MULXX lines in - tfm.h to save space. Now GMP and TFM are roughly the same speed on the Pentium-M for RSA with LTC. - -- unrolled SSE2 code and optimize for platforms with load/store pipes (e.g. can store and load in a cycle). Got 4% or so boost on my Dothan laptop (marginal improvement on a P4 Prescott) - -Jan 26th, 2006 -0.08 -- Fixed a bug in the generic mult/sqr where we overflowed by one digit - -November 18th, 2005 -0.07 -- Fixes to fp_mul and fp_sqr to clean up the handling of the defines, fix to tfm.h to also clear up the prototypes. - -- Updates to build and run on a IBM PPC 405 [using GCC 3.4.4] - -- Made the "make" command renamable in the build system - -October 31st, 2005 -0.06 -- fixed fp_mul() and fp_sqr() to trim digits when overflows would occur. Produces numerically inprecise results - (e.g. the lower FP_SIZE digits) but shouldn't segfault at least ;-) - -- Updated the combas so you can turn on and off specific unrolled loops at build time - -- Michael Heyman reported a bug in s_fp_sub() that was pretty substantial and a bug in fp_montgomery_calc_normalization(). Fixed. - -August 1st, 2005 -0.05 -- Quick fix to the fp_invmod.c code to let it handle even moduli [required for LTC] - -- Added makefile.shared to make shared objects [required for LTC] - -- Improved makefiles to make them way more configurable - -- Added timing resistant fp_exptmod() enabled with TFM_TIMING_RESISTANT - -July 23rd, 2005 -0.04 -- Fixed bugs in the SSE2 squaring code - -- Rewrote the multipliers to be optimized for small inputs - -- Nelson Bolyard of the NSS crew submitted [among other things] new faster Montgomery reduction - code. It brings the performance for small numbers on the AMD64 and all numbers on the P4 - to a new level. Thanks! - -- Added missing ARM support for fp_montgomery_reduce.c that the NSS folk left off, Officially - the ARM code is for v4 and above WITH the "M" multiplier support (e.g. umlal instruction) - -- Added PPC32 support, define TFM_PPC32 to enable it, I used the "PowerPC 6xx" instruction - databook for reference. Does not require altivec. Should be fairly portable to the other - 32-bit PPCs provided they have mullw and mulhwu instructions. - [Note: porting the macros to PPC64 should be trivial, anyone with a shell to lend... email me!] - -- Rewrote the config a bit in tfm.h so you can better choose which set of "oh my god that's huge" code to - enable for your task. "generic" functions are ALWAYS included which are smaller but will cover the - gaps in the coverage for ya. - -- The PPC32 code has been verified to function on a Darwin box running GCC 2.95.2 - [Thanks to the folk at PeerSec for lending me a shell to use] - -- Fixed a bug in fp_exptmod() where if the exponent was negative AND the destination the output - would have the sign set to FP_NEG. - -March 1st, 2005 -0.03 -- Optimized squaring - -- Applied new license header to all files (still PD) - -September 18th, 2004 -0.02 -- Added TFM_LARGE to turn on/off 16x combas to save even more space. - This also helps prevent killing the cache on smaller cpus. - -- Cast memset to void in fp_init() to catch people who misuse the function (e.g. expect return) - Thanks to Johan Lindh - -- Cleaned up x86-64 support [faster montgomery reductions] - -- Autodetects x86-32 and x86-64 and enables it's asm now - -- Made test demo build cleaner in multilib platforms [e.g. mixed 32/64 bits] - -- Fix to fp_mod to ensure that remainder is of the same sign as the modulus. - -- Fixed bug in fp_montgomery_calc_normalization for single digit moduli - -- cleaned up ISO C macros in comba/mont to avoid branches [works best with GCC 3.4.x branch] - -- Added more testing to tfm.h to help detect misconfigured builds - -- Added TFM_NO_ASM which forces ASM off [even if it was autodetected]. - -- Added fp_radix_size() to API - -- Cleaned up demo/test.c to build with far fewer warnings (mostly %d => %lu fixes) - -- fp_exptmod() now supports negative exponent and base>modulus cases - -- Added fp_ident() which gives a string showing how TFM was configured. Useful for debuging... - -- fix gen.pl script so it includes the whole source tree now - -August 25th, 2004 -0.01 -- Initial Release diff --git a/lib/hcrypto/tomsfastmath/demo/rsa.c b/lib/hcrypto/tomsfastmath/demo/rsa.c deleted file mode 100644 index 93b9a87da..000000000 --- a/lib/hcrypto/tomsfastmath/demo/rsa.c +++ /dev/null @@ -1,83 +0,0 @@ -#include "tfm.h" -#include - -int main(void) -{ - fp_int d, e, n, c, m, e_m; - clock_t t1; - int x; - - /* read in the parameters */ - fp_read_radix(&n, "ce032e860a9809a5ec31e4b0fd4b546f8c40043e3d2ec3d8f49d8f2f3dd19e887094ee1af75caa1c2e6cd9ec78bf1dfd6280002ac8c30ecd72da2e4c59a28a9248048aaae2a8fa627f71bece979cebf9f8eee2bd594d4a4f2e791647573c7ec1fcbd320d3825be3fa8a17c97086fdae56f7086ce512b81cc2fe44161270ec5e9", 16); - fp_read_radix(&e, "10001", 16); - fp_read_radix(&m, "39f5a911250f45b99390e2df322b33c729099ab52b5879d06b00818cce57c649a66ed7eb6d8ae214d11caf9c81e83a7368cf0edb2b71dad791f13fecf546123b40377851e67835ade1d6be57f4de18a62db4cdb1880f4ab2e6a29acfd85ca22a13dc1f6fee2621ef0fc8689cd738e6f065c033ec7c148d8d348688af83d6f6bd", 16); - fp_read_radix(&c, "9ff70ea6968a04530e6b06bf01aa937209cc8450e76ac19477743de996ba3fb445923c947f8d0add8c57efa51d15485309918459da6c1e5a97f215193b797dce98db51bdb4639c2ecfa90ebb051e3a2daeffd27a7d6e62043703a7b15e0ada5170427b63099cd01ef52cd92d8723e5774bea32716aaa7f5adbae817fb12a5b50", 16); - - /* test it */ - fp_exptmod(&m, &e, &n, &e_m); - if (fp_cmp(&e_m, &c)) { - char buf[1024]; - printf("Encrypted text not equal\n"); - fp_toradix(&e_m, buf, 16); - printf("e_m == %s\n", buf); - return 0; - } - - printf("CLOCKS_PER_SEC = %llu\n", (unsigned long long)CLOCKS_PER_SEC); - t1 = clock(); - for (x = 0; x < 1000; x++) { - fp_exptmod(&m, &e, &n, &e_m); - } - t1 = clock() - t1; - printf("1000 RSA operations took %10.5g seconds\n", (double)t1 / (double)CLOCKS_PER_SEC); - printf("RSA encrypt/sec %10.5g\n", (double)CLOCKS_PER_SEC / ((double)t1 / 1000.0) ); - - /* read in the parameters */ - fp_read_radix(&n, "a7f30e2e04d31acc6936916af1e404a4007adfb9e97864de28d1c7ba3034633bee2cd9d5da3ea3cdcdc9a6f3daf5702ef750f4c3aadb0e27410ac04532176795995148cdb4691bd09a8a846e3e24e073ce2f89b34dfeb2ee89b646923ca60ee3f73c4d5397478380425e7260f75dfdc54826e160395b0889b1162cf115a9773f", 16); - fp_read_radix(&d, "16d166f3c9a404d810d3611e6e8ed43293fe1db75c8906eb4810785a4b82529929dade1db7f11ac0335d5a59773e3167b022479eedefa514a0399db5c900750a56323cf9f5b0f21e7d60a46d75f3fcaabf30a63cbe34048b741a57ac36a13914afda798709dea5771f8d456cf72ec5f3afc1d88d023de40311143a36e7028739", 16); - fp_read_radix(&c, "7d216641c32543f5b8428bdd0b11d819cfbdb16f1df285247f677aa4d44de62ab064f4a0d060ec99cb94aa398113a4317f2c550d0371140b0fd2c88886cac771812e72faad4b7adf495b9b850b142ccd7f45c0a27f164c8c7731731c0015f69d0241812e769d961054618aeb9e8e8989dba95714a2cf56c9e525c5e34b5812dd", 16); - fp_read_radix(&m, "5f323bf0b394b98ffd78727dc9883bb4f42287def6b60fa2a964b2510bc55d61357bf5a6883d2982b268810f8fef116d3ae68ebb41fd10d65a0af4bec0530eb369f37c14b55c3be60223b582372fb6589b648d5a0c7252d1ae2dae5809785d993e9e5d0c4d9b0bcba0cde0d6671734747fba5483c735e1dab7df7b10ec6f62d8", 16); - - /* test it */ - fp_exptmod(&c, &d, &n, &e_m); - if (fp_cmp(&e_m, &m)) { - char buf[1024]; - printf("Decrypted text not equal\n"); - fp_toradix(&e_m, buf, 16); - printf("e_m == %s\n", buf); - return 0; - } - - t1 = clock(); - for (x = 0; x < 100; x++) { - fp_exptmod(&c, &d, &n, &e_m); - } - t1 = clock() - t1; - printf("100 RSA operations took %10.5g seconds\n", (double)t1 / (double)CLOCKS_PER_SEC); - printf("RSA decrypt/sec %10.5g\n", (double)CLOCKS_PER_SEC / ((double)t1 / 100.0) ); - - - /* test half size */ - fp_rshd(&n, n.used >> 1); - fp_rshd(&d, d.used >> 1); - fp_rshd(&c, c.used >> 1); - printf("n.used == %4d bits\n", n.used * DIGIT_BIT); - - /* ensure n is odd */ - n.dp[0] |= 1; - t1 = clock(); - for (x = 0; x < 100; x++) { - fp_exptmod(&c, &d, &n, &e_m); - } - t1 = clock() - t1; - printf("100 RSA-half operations took %10.5g seconds\n", (double)t1 / (double)CLOCKS_PER_SEC); - printf("RSA decrypt/sec %10.5g (estimate of RSA-1024-CRT) \n", (double)CLOCKS_PER_SEC / ((double)t1 / 50.0) ); - - - - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/demo/rsa.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2005/05/05 14:39:33 $ */ diff --git a/lib/hcrypto/tomsfastmath/demo/stest.c b/lib/hcrypto/tomsfastmath/demo/stest.c deleted file mode 100644 index 330e198f7..000000000 --- a/lib/hcrypto/tomsfastmath/demo/stest.c +++ /dev/null @@ -1,148 +0,0 @@ -/* A simple static test program. */ -#include - -#ifdef GBA_MODE -#include - #define DISPLAY(x) modetxt_puts(vfb, x, 1) -#endif - -#ifndef DISPLAY - #define DISPLAY(x) printf(x) -#endif - - -#ifdef GBA_MODE -int c_main(void) -#else -int main(void) -#endif -{ - fp_int a,b,c,d,e,f; - fp_digit dp; - - fp_init(&a); - fp_init(&b); - fp_init(&c); - fp_init(&d); - fp_init(&e); - fp_init(&f); - -#ifdef GBA_MODE - install_common(); - modetxt_init(); - modetxt_gotoxy(0,0); -#endif - - /* test multiplication */ - fp_read_radix(&a, "3453534534535345345341230891273", 10); - fp_read_radix(&b, "2394873294871238934718923" , 10); - fp_read_radix(&c, "8270777629674273015508507050766235312931312159028658979", 10); - fp_mul(&a, &b, &d); - if (fp_cmp(&c, &d)) { - DISPLAY("mul failed\n"); - return 0; - } else { - DISPLAY("mul passed\n"); - } - - /* test multiplication */ - fp_read_radix(&a, "30481290320498235987349712308523652378643912563478232907782361237864278207235782364578264891274789264278634289739", 10); - fp_read_radix(&b, "48761478126387263782638276327836287632836278362837627838736278362923698724823749238732" , 10); - fp_read_radix(&c, "1486312771227034563307950634490737985563993459700941115664257275795366623795590136120579100118233580357115074068815507257715906295105536107921754177810976863679300283932188006885811950341132768970948", 10); - fp_mul(&a, &b, &d); - if (fp_cmp(&c, &d)) { - DISPLAY("mul failed\n"); - return 0; - } else { - DISPLAY("mul passed\n"); - } - - /* test multiplication */ - fp_read_radix(&a, "115792089237316195423570985008687907853269984665640564039457584007913129639935", 10); - fp_read_radix(&b, "174224571863520493293247799005065324265471" , 10); - fp_read_radix(&c, "20173827172553973356686868531273530268200710714389071377794102651988800859098544338487575161443744102709980552583184385", 10); - fp_mul(&a, &b, &d); - if (fp_cmp(&c, &d)) { - DISPLAY("mul failed\n"); - return 0; - } else { - DISPLAY("mul passed\n"); - } - - /* test squaring */ - fp_read_radix(&a, "298723982748923478923473927489237289347238947238947238947238972893", 10); - fp_read_radix(&b, "89236017869379132235512787068367546521309689412262624434964313994127411682542855190667724226920696163962644836740110835385588789449" , 10); - fp_sqr(&a, &c); - if (fp_cmp(&c, &b)) { - DISPLAY("sqr failed\n"); - return 0; - } else { - DISPLAY("sqr passed\n"); - } - - fp_read_radix(&a, "397823894238973128942895123894327123941724927848927349274897238978927593487012378490184789429812734982738972389", 10); - fp_read_radix(&b, "158263850827461677491961439999264901067636282938352531932899298293270945997930087353471903166601507321298827087008336951419604640736464667188494668962822678461626245753696845719301945679092882499787869509090904187704367321" , 10); - fp_sqr(&a, &c); - if (fp_cmp(&c, &b)) { - DISPLAY("sqr failed\n"); - return 0; - } else { - DISPLAY("sqr passed\n"); - } - - fp_read_radix(&a, "13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084095", 10); - fp_read_radix(&b, "179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474097562152033539671286128252223189553839160721441767298250321715263238814402734379959506792230903356495130620869925267845538430714092411695463462326211969025" , 10); - fp_sqr(&a, &c); - if (fp_cmp(&c, &b)) { - DISPLAY("sqr failed\n"); - return 0; - } else { - DISPLAY("sqr passed\n"); - } - - - /* montgomery reductions */ - fp_read_radix(&a, "234892374892374893489123428937892781237863278637826327367637836278362783627836783678363", 10); - fp_read_radix(&b, "4447823492749823749234123489273987393983289319382762756425425425642727352327452374521", 10); - fp_read_radix(&c, "2396271882990732698083317035605836523697277786556053771759862552557086442129695099100", 10); - fp_montgomery_setup(&b, &dp); - fp_montgomery_reduce(&a, &b, dp); - if (fp_cmp(&a, &c)) { - DISPLAY("mont failed\n"); - return 0; - } else { - DISPLAY("mont passed\n"); - } - - fp_read_radix(&a, "2348923748923748934891234456645654645645684576353428937892781237863278637826327367637836278362783627836783678363", 10); - fp_read_radix(&b, "444782349274982374923412348927398739398328931938276275642542542564272735232745237452123424324324444121111119", 10); - fp_read_radix(&c, "45642613844554582908652603086180267403823312390990082328515008314514368668691233331246183943400359349283420", 10); - fp_montgomery_setup(&b, &dp); - fp_montgomery_reduce(&a, &b, dp); - if (fp_cmp(&a, &c)) { - DISPLAY("mont failed\n"); - return 0; - } else { - DISPLAY("mont passed\n"); - } - - fp_read_radix(&a, "234823424242342923748923748934891234456645654645645684576353424972378234762378623891236834132352375235378462378489378927812378632786378263273676378362783627555555555539568389052478124618461834763837685723645827529034853490580134568947341278498542893481762349723907847892983627836783678363", 10); - fp_read_radix(&b, "44478234927456563455982374923412348927398739398328931938276275642485623481638279025465891276312903262837562349056234783648712314678120389173890128905425242424239784256427", 10); - fp_read_radix(&c, "33160865265453361650564031464519042126185632333462754084489985719613480783282357410514898819797738034600484519472656152351777186694609218202276509271061460265488348645081", 10); - fp_montgomery_setup(&b, &dp); - fp_montgomery_reduce(&a, &b, dp); - if (fp_cmp(&a, &c)) { - DISPLAY("mont failed\n"); - return 0; - } else { - DISPLAY("mont passed\n"); - } - - - return 0; -} - - -/* $Source: /cvs/libtom/tomsfastmath/demo/stest.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2005/05/05 14:39:33 $ */ diff --git a/lib/hcrypto/tomsfastmath/demo/test.c b/lib/hcrypto/tomsfastmath/demo/test.c deleted file mode 100644 index 81fd67ff9..000000000 --- a/lib/hcrypto/tomsfastmath/demo/test.c +++ /dev/null @@ -1,874 +0,0 @@ -/* TFM demo program */ -#include - -void draw(fp_int *a) -{ - int x; - printf("%d, %d, ", a->used, a->sign); - for (x = a->used - 1; x >= 0; x--) { - printf("%08lx ", a->dp[x]); - } - printf("\n"); -} - -int myrng(unsigned char *dst, int len, void *dat) -{ - int x; - for (x = 0; x < len; x++) dst[x] = rand() & 0xFF; - return len; -} - -/* RDTSC from Scott Duplichan */ -static ulong64 TIMFUNC (void) - { - #if defined __GNUC__ - #if defined(INTEL_CC) - ulong64 a; - asm ("rdtsc":"=A"(a)); - return a; - #elif defined(__i386__) || defined(__x86_64__) - ulong64 a; - __asm__ __volatile__ ("rdtsc\nmovl %%eax,%0\nmovl %%edx,4+%0\n"::"m"(a):"%eax","%edx"); - return a; - #elif defined(TFM_PPC32) - unsigned long a, b; - __asm__ __volatile__ ("mftbu %1 \nmftb %0\n":"=r"(a), "=r"(b)); - return (((ulong64)b) << 32ULL) | ((ulong64)a); - #elif defined(TFM_AVR32) - FILE *in; - char buf[20]; - in = fopen("/sys/devices/system/cpu/cpu0/pccycles", "r"); - fgets(buf, 20, in); - fclose(in); - return strtoul(buf, NULL, 10); - #else /* gcc-IA64 version */ - unsigned long result; - __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); - while (__builtin_expect ((int) result == -1, 0)) - __asm__ __volatile__("mov %0=ar.itc" : "=r"(result) :: "memory"); - return result; - #endif - - // Microsoft and Intel Windows compilers - #elif defined _M_IX86 - __asm rdtsc - #elif defined _M_AMD64 - return __rdtsc (); - #elif defined _M_IA64 - #if defined __INTEL_COMPILER - #include - #endif - return __getReg (3116); - #else - #error need rdtsc function for this build - #endif - } - - char cmd[4096], buf[4096]; - -int main(void) -{ - fp_int a,b,c,d,e,f; - fp_digit fp; - int n, err; - unsigned long expt_n, add_n, sub_n, mul_n, div_n, sqr_n, mul2d_n, div2d_n, gcd_n, lcm_n, inv_n, - div2_n, mul2_n, add_d_n, sub_d_n, mul_d_n, t, cnt, rr, ix; - ulong64 t1, t2; - - srand(time(NULL)); - printf("TFM Ident string:\n%s\n\n", fp_ident()); - fp_zero(&b); fp_zero(&c); fp_zero(&d); fp_zero(&e); fp_zero(&f); - fp_zero(&a); draw(&a); - - /* test set and simple shifts */ - printf("Testing mul/div 2\n"); - fp_set(&a, 1); draw(&a); - for (n = 0; n <= DIGIT_BIT; n++) { - fp_mul_2(&a, &a); printf("(%d) ", fp_count_bits(&a)); - draw(&a); - - } - for (n = 0; n <= (DIGIT_BIT + 1); n++) { - fp_div_2(&a, &a); - draw(&a); - } - fp_set(&a, 1); - - /* test lshd/rshd */ - printf("testing lshd/rshd\n"); - fp_lshd(&a, 3); draw(&a); - fp_rshd(&a, 3); draw(&a); - - /* test more complicated shifts */ - printf("Testing mul/div 2d\n"); - fp_mul_2d(&a, DIGIT_BIT/2, &a); draw(&a); - fp_div_2d(&a, DIGIT_BIT/2, &a, NULL); draw(&a); - - fp_mul_2d(&a, DIGIT_BIT + DIGIT_BIT/2, &a); draw(&a); - fp_div_2d(&a, DIGIT_BIT + DIGIT_BIT/2, &a, NULL); draw(&a); - - /* test neg/abs */ - printf("testing neg/abs\n"); - fp_neg(&a, &a); draw(&a); - fp_neg(&a, &a); draw(&a); - fp_neg(&a, &a); draw(&a); - fp_abs(&a, &a); draw(&a); - - /* test comparisons */ - fp_set(&b, 3); - fp_set(&c, 4); fp_neg(&c, &c); - fp_set(&d, 1); - printf("Testing compares\n%d, %d, %d, %d\n", fp_cmp(&a, &b), fp_cmp(&a, &c), fp_cmp(&a, &d), fp_cmp(&b, &c)); - - /* test add/sub */ - printf("Testing add/sub \n"); - fp_set(&a, ((fp_digit)1)<<(DIGIT_BIT-1)); draw(&a); - fp_set(&b, ((fp_digit)1)<<(DIGIT_BIT-2)); - fp_add(&a, &b, &a); draw(&a); - fp_add(&a, &b, &a); draw(&a); - fp_add(&a, &b, &a); draw(&a); - printf("sub...\n"); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - printf("cmp returns: %d, ", fp_cmp(&a, &b)); fp_sub(&a, &b, &a); draw(&a); - - /* test mul_d */ - printf("Testing mul_d and div_d\n"); - fp_set(&a, 1); - fp_mul_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a); draw(&a); - fp_mul_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a); draw(&a); - fp_mul_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a); draw(&a); - printf("div_d\n"); - fp_div_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a, NULL); draw(&a); - fp_div_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a, NULL); draw(&a); - fp_div_d(&a, ((fp_digit)1)<<(DIGIT_BIT/2), &a, NULL); draw(&a); - - /* testing read radix */ - printf("Testing read_radix\n"); - fp_read_radix(&a, "123456789012345678901234567890", 16); draw(&a); - -#if 0 - /* test mont */ - printf("Montgomery test #1\n"); - fp_set(&a, 0x1234567ULL); - fp_montgomery_setup(&a, &fp); - fp_montgomery_calc_normalization(&b, &a); - - fp_read_radix(&d, "123456789123", 16); - for (n = 0; n < 1000000; n++) { - fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); - fp_mul(&d, &b, &c); - fp_montgomery_reduce(&c, &a, fp); - if (fp_cmp(&c, &d) != FP_EQ) { - printf("Failed mont %d\n", n); - draw(&a); - draw(&d); - draw(&c); - return EXIT_FAILURE; - } - } - printf("Passed.\n"); - - printf("Montgomery test #2\n"); - fp_set(&a, 0x1234567ULL); - fp_lshd(&a, 4); - fp_add_d(&a, 1, &a); - fp_montgomery_setup(&a, &fp); - fp_montgomery_calc_normalization(&b, &a); - - fp_read_radix(&d, "123456789123", 16); - for (n = 0; n < 1000000; n++) { - fp_add_d(&d, 1, &d); fp_sqrmod(&d, &a, &d); - fp_mul(&d, &b, &c); - fp_montgomery_reduce(&c, &a, fp); - if (fp_cmp(&c, &d) != FP_EQ) { - printf("Failed mont %d\n", n); - draw(&a); - draw(&d); - draw(&c); - return EXIT_FAILURE; - } - } - printf("Passed.\n"); - - /* test for size */ - for (ix = 8*DIGIT_BIT; ix < 10*DIGIT_BIT; ix++) { - printf("Testing (not safe-prime): %9lu bits \r", ix); fflush(stdout); - err = fp_prime_random_ex(&a, 8, ix, (rand()&1)?TFM_PRIME_2MSB_OFF:TFM_PRIME_2MSB_ON, myrng, NULL); - if (err != FP_OKAY) { - printf("failed with err code %d\n", err); - return EXIT_FAILURE; - } - if ((unsigned long)fp_count_bits(&a) != ix) { - printf("Prime is %d not %lu bits!!!\n", fp_count_bits(&a), ix); - return EXIT_FAILURE; - } - } - printf("\n\n"); -#endif - -#ifdef TESTING -goto testing; -#endif - -#if 1 - -t1 = TIMFUNC(); -sleep(1); -printf("Ticks per second: %llu\n", TIMFUNC() - t1); - -goto multtime; - /* do some timings... */ - printf("Addition:\n"); - for (t = 2; t <= FP_SIZE/2; t += 2) { - fp_zero(&a); - fp_zero(&b); - fp_zero(&c); - for (ix = 0; ix < t; ix++) { - a.dp[ix] = ix; - b.dp[ix] = ix; - } - a.used = t; - b.used = t; - t2 = -1; - for (ix = 0; ix < 25000; ++ix) { - t1 = TIMFUNC(); - fp_add(&a, &b, &c); fp_add(&a, &b, &c); - fp_add(&a, &b, &c); fp_add(&a, &b, &c); - fp_add(&a, &b, &c); fp_add(&a, &b, &c); - fp_add(&a, &b, &c); fp_add(&a, &b, &c); - t2 = (TIMFUNC() - t1)>>3; - if (t1>7; - if (t1>7; - if (t1>6; - if (t1>6; - fp_copy(&b, &c); - fp_copy(&b, &d); - if (t1>1; - fp_copy(&b, &c); - fp_copy(&b, &d); - if (t12H?mpK}vs4zm-d|Z6u9(31s!1rU!}Y3D z_Y2mqjQ9KJ&OSbM#iowpV|I3S^K4jHxL%z9w9k$weY)-)J6>ZcjhY*a<{v)naGG83 z=EJWkthNEn%O)NEQoBHP?h>YN0Y!~c%MO1~^;;?G@YeR9pR(h$dm3^!Yj!>pn}12e zL1pQY@|Bt!#Ja+(U!DB9d2vvvYTOdRg9fG*zH#SfKRveFq)0qt>#_5m4X$r$7CxHy zc>9rMlXa?01gsNQ>rc#j_CtGPQ_{sB$5(qq-LAe@eIUwnzu)`zz5v&1iJ1$k4erih zt$)5x&DuTYb;9cIE!!VGy|MG0-q`{r1JgHR{b}asoMrjU*uzU4C#)3U3I8*ad ziXkzanwJ7f6`-^LqD{<=xS&FYm?_2(q>NyasSWil7BLstdw%_l#V%J(Uggz36VuS+ zoPIzq=;@<|>)nMt;?0kl{?$eqOL-=@U6H#pE$Z&t@AK}}Nb)|&__Y3y?LFS}_gg;x zN}LhyF7toQ#kU_)4}9v^y!p7hS>}L&n#a67vi$OFIzKaPRHT|a9Uec-+Y!KSE4e{X z*7|GU;+As}rHgr4x~I&kx*)umebJJCS9z}eYIwCoeTr)Ko?q+KnT#YNzp0yXGFg3% z^XE(Q>Abo#Z11V10ySS=UB1&GGd0X|*BoKXNx!V-t0gDJuZaFT(b~|U)l{*qbiT~< zpEm?H^xmy|{Zo_QDdA>Wxn6mZ$Zx;9ua>H@>nU#i7I^pi=e0H2l{w436@})6$vBn& z{M^;6YtX)h&t31VxDx-g6|a9pEIvJJhfm_<30J!0PiIcIj5uF2Z@G^~&fUy~6M7vb z|K5Gr-&n)szG%kbsUA<3O|`jhw?O?gi&JXggv39d4m-cElAoriuJl1;hey6p<+8et z+pZqx66F#XWqjrlzGQSX=yudQRmG#4QU*brLe%f9*v!qE$mO))`>W<{OsS8y{tvD^ zTQNbr(nM?akMj8kLs#a#oPJf4L+#M3?wUX~w=li){u5?gadqX%J|Ccbzd(z>uQxd4 zdu*@I=^FK!VL3<2W>wzb_CEbc%%^?g>9QszzfP$%ZG7|nXu;k%<-cBgM2-|Tg|07F zewL9o>FBac8hs)byK;h?PI@F*xbB|tZ+D5auP&izkWW(O zq~?1I;)~*5o@_RdO`5;i^Jlc4Q^pCsxt!*8Sqtp?z27dGubz0jQ=Owl=tLmn2ea26 z5exUe$A6)SD@3&HJ>-=V~*Pnhk zHCXt~;n{Hiz_0)ET!FJClFh>)o`D z&1?6{@txPZayu(0m1)~H_Q!?%XM&5rY%kq!edX9aiwAyb>y8NKe0Y`W{?X3u``MK5 z!d8=J`EE=L7o$DyBx->sZodB5#Kxb1US#p%D!1jn}674NnW&pPm? zlJ}NE{DUn_T-u73->)YA@UHvMxb~N^3`Pk6&fB0Oz|z>13t9viSzuHeMwZ0X8gHXc z7Rk5@?DhX3So}t9QTM7dYu>utNZ>e-a6q`Apg>?!j^%_Wyn+wbt8d=EYTn9;Xmsj*c_*&!y?F(tqW)nnBMZe(%byUB`|_%)Kr!)%DZW z`CA_<{>UpmvzD#%#MiS9hS~oD%-t-VdiLw?n|d=*F0|xRd6EIl4Buc~OGqhZQd>ST?;~F-_^$tJ+?z2;U>!*#=r46hqwi2(4zEyH@Yg)5KiS z886!J8HTKXeN5~9MW@?yryrQiBbzd_!!h&G_e~bFwyvI(&f~D1_3>w26Alf2^S19v zNix49L>Fxf(UiL-{2`_0a>nDS#aGwwY0Nmd`&G+y*GHyBUsNcC@XR&8`h5@I z1HHmseG4shKNr8tY37<&e$7DY)C-O2VbQ54^kb*V-+1p4f8AVBMvhvhv?~ zyO}S>KH&APkiJl%d2hytx-$)$e8Oy&2E2JwCfLia?{nJ{{QBpO$D;nsYj3|lxX*n9 zqs8yS7=6|sW*&Y9@q0A`?>7YBDh_(Q=9FIEnyD$7Q%ldKJASh`+7Nt_!7q|+_t~Q& zJ+9i(F<4o!4ZeMCTKl zj{kgaRa&jO*Y|!Gix=m`eoejg4q6uF{!$%f2d3QoSeb7ns3vGr?{JOLENs3{QO)&P zZ$8yl^B;I*P%SZu?Yi;bCnA;NcW+#j@YL_!x?s(Ho@sXtnqL3hyLaY&@dLA~-f&f2 zsxf@lEN8d&@T!k7ZSi6PCr&DVV`M57UvXRJ>)QoooUi0xx7GXp`(<1;H8lD%({AmJ z*N(hk>wTE?%T29NxIgXH`kXsGVsCUFot6r0-lzWH%#lKs2NSj|TK}|`^_h2U?wUnr zPmH#%Sn)^YsJnsF`Iy-=j`o@dFK?a|vSn7Xo3?cz&y1~U#%hdNp)Q|hcYEZf-pv0P zB>3|5Ev;PN14b7uCP<`B>Dw1|#b#fxz^eL`oi@$e=CD8QHDa1k&1T)WS>xK?dGp@= zd|meKt^P{uE`{`@i(As>JX!J)O{$xo&%Q(;{z{Bm(w*BPT3 zzk@P@w^+_E2=lxj7_v)l$+|{1@rTPMZJ#e9^IcV4xv690iPcGU~D_^EezWApY8O*3l> zmDL<&oEEJXlkB(9T=*|7$+PwIQlVQiJxs|x-%jn=XuacZb<2(}-nJB$R^bDe4ELXq z$dNqq=l!fS;~u@EI;>AW+rAS%Y?{!n`9^F?`R6uf-ICCMuT@i5*=ot=d(BtxzUlwx zyS@Z_pfN_32d>LNRi2@lg*mLwGd9Pl^Nc~&Ai-wu-4O5m%MJqjeuw|q(f#D@o^OWX z0t$>%7yJk-)DQ_`@$}$!`cs`Ie7!7?OKSy(mb}r-@8`as&57c;;qY!S zcc-n+-B@eoB|poz`LMjip4-3ovKnlaG6|ftt^WFh2kRw7LT~e^2He)4ovgkuxNU;Q zuIKYi4W2%_w(oJn$+^{hu3I+zeq-nosQYg3`=k>yZ>+Ux;W(nXtCe+%kkE?PwoGj2 z3eRj>BRFM~Nclr+PL4@eY(LFn_Vjso#QOrriRsT)Y|)mOctJL7se#I^N-w|EG&||t z6<6&uXJ`g&JpOI@H;X%^4K97|8+XadB+lbsk$lE6?zNRzT6VKD%Fp@05sr&nezF(tKkU1uTv^g7QMu~qAA=z*}3&nYj3yN#W(&-yuW9|d+SNZpUlEYir^#$ zN{XhY7O<3PVuXgYaeWi z68lj%CsAUZi)VAtlP5>)?8-icXa%iIe*61uWmVzb(|O@OF>Du5Ir=80hyrnaVVe{dS1Q!`pj2)=S8J zuz2nlJNIGU23cK^I92UqN2W7ykg|WjvpiqKw^mT789bH&S#^d z^X0Y+){1{p{&MYaSJ%_OpF)=8b}jP_G!ebPZq2_U7@-?cGX+{JSxm+k~e`JYGuU6|-!^r)6oG)ukF)OTO+nnQ~zrW^8 zzt_PT+9k&4B+jx`xIWhQnQ=irJMf@e@5-$IXI)ZTH^!w4FE-FxnziVVRO*IHdXG|C zLcG+YmINK+-2SIq=gYCm)N8%QVU^vz#!eGCH?T@4yOanXyYkQeLciaV2h&dnA6a$c zRrza|h*w`bWv1=v&G3{K2>Nt-evx-o*5c{cPg(gaY26&Q^J%_BtVMF{t2Ya-OYzQ} zx!*cALUD0V-dzsSbHXy~_Ac$c5LNL^JEE&J!KA2F*wC}$?JR)>wMCV_PEnJ2zaC;= zY54crhQ0p;%@U_N9t=?3vej^Eo1yCAxWfU>nv;ufSZOw0^?P2pfq&h(9G!rQ#zGUv z_FiV2gN~Zk3Rz}4Ys@(VE>=}`tv#T$HOQpHGmvFwuc0F6=07Eu9Cn#>`F~XOU%1uy zv@WmgiNB{mPZquA5r17K`Ngz3xjW|ePQU*!ea@c3ey2@2PxC)b_Ki3s{VMt4T$8yw zz9t^q^zLe&?5B--)*td-pRY1?o;Qa>*{b5h@u$WG$AT-)yR|oeOq<^YYyGn~VUrTWrztVN-TXC9BJJ(u z$lc<+P6n5ncqcu~%h<81K`VRXrR(PmKgio(I8&med^~+_pqrTmd;Q(JvKKPX2r49q zva{{kz^F5Qhxe@qXA{pH^iPZ1zqD07$2Y<*m8*{>>e_=)=F3@~oA3Ca*`1&HF)-u# zZreQvCj8{6^L?D`$+i5?{Mn85%cn-n5#8Ok>?*^?K39>7n{~O?Uuz@nXS{WF%szBO zbOWz#&ei;km2xVJZ+wj2_+--e8qM(6%1I*e|HY;EtS_^fa{T>yecQY10{wqAJ<3s0 z;;It3J87-#!-KmIvEDA0m=QN&t!;axP5V5K{&SgW)~3=|J|4cpywl0-a-W}C=q(9_ z+TM*R3mkT(Urf}nda0?HkYVhU593JFB>(vUz@_zT}+}C)?T2cH>sIm{$9W zDC@IF*qEKI6W1=halpGTysySjCB`CqYVon^ecem9U(E`(`Z3kCV&6Y6%VRpf1cN8e zX%VyQ%T!r6WAgLBZ)Ku)^^VS*vq$novc#rYf_B0ieVTHnOG>Ia-Sz&iP`UNz>y8bd z%?g}yoa^SambJ}Zb$Y>%8|z!Gne8v#_TgAGKh3dB%OhJ|ra|2`PTDKZs4(!>BJIM| z7|A75YK}H<;k{v0{ry?&1vi!6%Tp>(G~6-pmv?{vM8d`A$@L4h{nOWGe(W+#y?MmZ zSHXyDVZ-W-i1-wT;wZ6{H#S#`86s@$0?luUoNJpKDiRj+NN|4QuIqs!tVMgyZCT?aQDC()uRChKXz!1D*2ili1p^hzrbYX*77PFG)rp*<)7ftSDNdYNOwa`UqH#}sX!%B8xt3gvCyA@#Ll zt)_`UeM(SAfmqLNE!ha(^Upb@7I>|?BzmAuE#q=nZN%SIwN(=3)Bm-)eQufQ=FIhY z4^Mu0wdMJ2{`j0bC#Cw-`{EwUINnN){r}@|2g9o)TYmB^e!R-)tDo?b+rd{9sxvqP zFYVKvd?r2j&dNKT*VauuSY`jBO~=#J-7Y#qK25tR>dWq%787?alHZ@PZTjXji@U;K z?|vK>ZRC``+5Cm+tExygqs(*r*iAS1EH&%UT~{t?n%Hsf_+9p{r?#bgnT?%T)YqT; zc;L{kEDaTZwJ)v9zpYcLxTtyL;bygWKU-~F|0FS$9pHOtk*)lcJvU|1hQt=8hsp)M zwnm|DLibCPCS90V6fSQd|N_xPpYV zEtjoz%-(t}R!s<NDow4f7cNxIQ~UBIaz&QD4aYqD>rQX?mK+y2RBzLGSXM+{dsoeMDZa#Wj2kUa zuGJ?9S19ySmLU(A54ZDS)1ik7=jyJuQ{cBvf(buYG{1G}DahEaqE}z2+%k--IVN2{qz$<&p1<~w`_0l_ ztMX+c*95O0F$Y(>wzJ)1I;>&({)((qkRLv&XetY%g=Bra z&9|eWWeR2A<1G85#bpj9#&*QH-=3JQ%(~~;O!H|^>+Y0A@ju;E{nz47;^dj9xYs^! zZ!!yuT-EH${r~LO&6kZA+g%NP^SX4xy+uc3PrBAd2m5IBylnT_tNe-U{qh6dmb3R+ zdac{^W>&7j!Gu#AdKp(sZQkAEXO;2tu~F#1A8IQdXWIRd?lD|4@lsXbJO4uqj&Q^U zR_kqCE@LXZ;4pix<>Zdyjd$nN1dFUFja@e3d*rW=&9nZNUOv1^W@6KxmF4GI*2-oJ zvspK--;f)hv`=T3om|S^H*#5P0>nQzu%CGPF57$Cv+16x zQ~6$9zpLW-fcXRCoACCa70#XYU;n@S+`L|{G2q;=w6qs#ghaW`L_{c`qAOUb3xFYo8_ zOrFB~{PT6rJzZNuE;_8=9UFSkk9~(`>BS?3mv5DH8tq*1_lw{*@#YW5eDzO#3o^Pa zUlGp9$-TF=b|_tb72k2FvHa_F`}%*P!M*<9OoC$V)YPP&xy;PE1p z<&R75xow)g{si7W%@|hK zxGMNi!!!L`Vi|&Fmn~;5_Fc7e;;+!c>;!+2yzr&BS8_!&o!j)WK=fK4XSm5Oz2v3o zW#XsJ3NoK2gciu~m{-1h)pn|}yyV4pt~SPJ=Q9=CQZJog)jHF?%KBMsSkwRVM;HIJ z^qKFN#8zWadinC?ZKZ7-+e*vC_u8mFY?eDCSCXH*S|N_{ivNKRQ59=LZg2XUQ>@OL zF8)Ns$MUdeeA#3@w&aWxj7L50FLLHz^L)i_2D7e$m5CJvb&VODI%iHZ*u=g%ENOyC zOrL$C5(l%}F4urmCE+KVe(?X;bup_@!EE1-&EIYKY+~2Wdl)ZgEwIC88pA8`FBJln zoAM=AemZ5n)Inio7eoKDwnh9r8@Cv^-#m9iK`H0M4EFnF+gBMmxhRItyZZc8$kODN zA1#*zColO@-fZwIkhVn?Kc+8p{!q<5?=~q!>`XyVr zv^i}Z)56TxinyuG<89mdEcb5PbH*9A^=;MNCtdfM&xv>5wJ|NfsVKWX_^8ucfQ9H+gcs&N_yRMQamXbdSEV+R5DhZex^dM&X=gnhhH^ z{Jkt$!}FwHa)#pSF6Ls-r!(CczwGs`tGZ!Ow%ven+N%yPogKU<_sxVHG~1YCK+ z^IOjSmzudiHp?%uF!`s=W%!f=y5X?H&YEqHc^o&qu(~h{}5?<|)o2O=}X73acnxExSyW@ZH-bm#sj}KIKuC^9r zxU@zu>FO!lDJ*d(Y^n?c&(6Pe+cvSbSJ|uW=8Wpi3qKiL=lWwht8T`^pyHL$6Ce15 zFVYQOrOw={Rx$mn)N1v~Sr@-NK6p`lzw_1Qtt~vgADOnSnc^4GaOgk7)*D}x^`0J_ z&+M_^=KQwqfK5t&TW8;^{=)8I5*FQJxx%k~N=>zm)?ieC~Z!~2NPMqHSH9AgQlsO?RmGf2X%0z=Tzu&(6rSUsn zBw1x{RZuFg!Gaj?el!2V9Rg;DgC1?0rh8Q797lNkmg*@o`r(bXzfaHCkTlr6Bf|BW z!PXejSTg{#*UOlq1Oqnk zRquUgQQW%Monvudcp6KFQB1JM!D7KphI_hZ-QnIVWy)s69WvkgN?FsUW2x_2*R7~@ z^zm9%x0HwdYdkySBwMlAwzUrTXOup*mEFi}+1RP_dFR2Lp1gT^=DnN#pD|4M_iEOO z_Z~{eQp0oEmxxbj%AfH4lfYi{_maJ9@7wn7-xt87%z9qQ@UYp(h-)YBsGL3(S!Q)K zW@nzk&G2aMxtso_MXr04e?w93)>l6J6&jYxIyK5qg+f&yXudPsRmi4xps0Cs^P~$Z z-Wgj?3i?N!dG=<*%>vi^Z%U@_o^<=!I$o)syX&sX`;~-FJjy1rq4HXm^wzBsSKQc@ zz1jS?o$sF6dZL8)Oq6J2(2sj(r@j2Rb0Sma8`bhoR&DtLd5?hhwasVs1h}qvNC;M+ z@mla~!LEJp1ThfHOhXoDtqh4iA(Qqv(bCYetN;rpa1q> z(ebcV6{zFg7segUIMx+_ih)^oU^^ENKX=;Dp*JCyY&-Mt);+Vmye$M)e7j>e7tr{^qbkA0x} zs-gRy8(+gD>t}LD6xd@5&atm{%J}dt?c#QZ>&@FPKX}5&ym8V3Gutmy3&S@q6BE9x zF4Y$K!bqK|)$r({_8uP5qpsW79#3BzbK^2+gkjS)j$My>DnhwyBEP<@(2+KaJT8(I z!ZoM-VPMkSz4x89WF@!0I$ap>qR9NP(B2!SFTTq(KDoSV$MmcDoF=bt#$8=`_t?Ew zizBxl8nG2=O8?C%$+(=#mhk(~lWT!(>zHR`8%V(=T}Vx`|eB6i=CvhR%%w7GJ$?Uu!eJTzGQITXoWo+vRHta4&6b#~;GTY$MN=i@ z+|HkGAB2aTE)BWFv%7B7qNN=>YEB5%obeQteqESvc=(LfyR%oDFZK$reYL)H@d1~; zh1>sK_|}v1+WTA1_8YF3x6am;XVO{l+A8m7&A}Y&xxc;sxe9Eb&Z_6}>rI&(cVzgr z!Zq7JTxHI+s&;=E@%pEnk|ra=oiDljcuqc@FzdZjWZCq0b?)Wzm+tPreAl|9+`YVh z;cm9y%3@QN{^a(5**g7hil3rIt+3F$d(wJm(k$NUZ~S!CtbSVHd%4R`Hy3d(k$Agh z&9}o<$A5lGubQ6wf-&~q^3(q>?)C}X&v$>X|NFYl_oDZOye)dN@5UOe(<(iRehICA z5;<9<+N<4djrGlP7t?vXGYZ!|5}qo4u;PAbkg&^#W_{nAss1ZdS|+?Y{e8Kl%bBj@ zJ4_WW9^~_on>6LCxQOP*ZFSl;TC&$QqLLpspPBQ^c*mcc{W0GkzHVxnv;S%56u-Ww zKQ1S(iZZYLX8LuP-ixARf#(el?|bsS>_Ug4rhEHo=|#IruJKA;<-h6uXGvdG#=6oY zs~^rgxB21k=ndSFM|sw>&uz%dKfI4UdgJeNg@+gA{5)9?C%QelB z6TXmNocGc(DJ|!v6i?=R_vx1B+3kCB%>RgOdiFE=@PFT1*FDnyltvw$T6a;>cCPl{ zHubK6-Jczl#a_+ZRbzCB_wn_^=hLOicWWtq@_#3B;GMkeAMStu_`_$&>tJ+Pz#WnN zq%1CDLsK(YhsDeQV_M71keCk3*_g-xVjCOK*fF9d9=) zVAAF&S;ykNdy>x2OY{9j*K3t+E>BNgFD&t4+l`z}9@jozJy^L_aPl3FKkNV0{&@7_ z*Y&#MPk#fm?w&Y%|JLPl_w{`#Kif6-nw$4MWX?7(?DDhRY*|;N;$6SoJZ`t=uCpJz z7w2y;+P*!wzWuiOZk*pOju+M0>FSB87h>D@KTZ$Q*!(v|U0uF(!hgGe+7q;F)k9w!RI*=@ zvuEPsHaz%zos^j3@{F~I*8RRzzTT!rKjfdwA+M62dn^m&J(?<2dW^Hb@ExBP^jb3_ zMpj^Xuleom)~1&Hzdx+`Ry|K{4)1OE3ug~cxpuJVYswO{S-9G&%E-{=GNf z*uL?bzqZ@M7shd3dgXJ;fQ*)a4;4|KKjh?=Ot{r+=5@@IMbZ5Dd|BE5FK@s7sCOV} z$?=J|R_<$HoKkf0P{0PK#4We$_HgsHiF*XT_E>-a!J(edMZYaCEbHOiSmLAOxPCs9 z`wI)n-u@z^4Q7X{4^24rLbEJ6==|{yw+@+E?5t(7P7b-Ual$;i`g;64p9f_0>{?@dYh%bX1*zJWV-SzLUp660hMpI z8M^$emFoC5>zkTok zxp>DKXQoj^Ak>+_S2CuDEPcoRz`;H7!bu{nm>5yDMoQXZR&HWoiGu zSJ7!M-_#D}9oTk%xBFRhZhQBo+vl5Ue+aDpB{g-y<$DiQw)gk%v#Q#9@#dVyMLg0g zLt0Gp=9s1hG3q|*wRXS$zGh$L=U;ChFMfSL=gGyd{vYej_wC`Ve|P8BpNB8L%{?2w z`dZ;K&+gJGrw+<2*wj^-V%9IcDOu<||AP{TjHQ!y?B@&F`RG*QnF9VzDVj4&m~I(7 zNI55bq)q(@hyUbr91B!lUYK>!Z&UI^c{5r5S8ucUu70TKoB6NiRI2A;EuIrKmitXi zUp_z9^je*DnYZHk*UysYa@RtsKP&H3d=21#YKue|GAGVz1x?Cl!e{Ib~T2yvqW}msJ z(z;Nj&-a#vPg+OiCr&MC%lmvMB|ZttbJ%V7oc}FnJu~yL*?#pC3Ax7nrQ-c@&nqgyD>8(;I7%_7_pL7K-_r);UruYUh@0FT12O zSC`-R^POwECT=z@*~pZmw`%#DBtsj9G$w)5DX|ewfxLd~no7@7dawS8i{_V&S^m3IBN9$pBpPH_GqcT^`{pHu&mQ$ug6+Luzzs?Yv2Pd+xi_{^=A%#yXR$pQo`bh zOl3o>*^O6kOjM1&ZR)6b{`*0XV9lF8?}P61SmwOw=e})q*ne)CnV`M{6{U;i>U3l>4&xYU^hQjZ~^fw57GA?VC+jrQpK4+f5 z=MstMIx=51s%7`|GhJK%^_z4?PgtXw^xR9I^G@t}{!8d#$G^9eR{DNO*#2l%>Dl9~ z%4vSCG69iOdw(RX_-~}x zs#4BIhQ~%875U)~U5A_3_Y@wRDz}II!R4KQ=B}Q1-+S{E|2I`@U8no~e9g77?bh}t zg{42Mo1Sl}IJSU$+p%L0KiagPXPx1>VCA8NjJ=+>ly3|2w@p8qZtujw?sYg&Wm@Lp zSC_f0!-7)+{GP85-M)x#jYl^Z*PTCHK3)<=8glDv<~|qedjH%1rt0Jt-$H&(rp=E; zub%(kSblr=Ugi$f z#@Y~GQ-haPH=oo#(G7Yr@mAf;$A1zfGR`heKDeq|_L-6Yu~4t#n62)44(cAqX6$^Z zwrC5772`tx>OVbl_KS}DzxbF}`K9i+c-GzJ?(&Tb^8(wGv;NMAvR{7ue*nALyV$I~ zzH1Al*mU+7cQi%6u6^}ecB`G+ZoLHk$!)9Go?rR?@k5T~D-JQYeW|>k{^f^){V%Q! z#jk~{Y8?B8zb@765?=V@;(?XFO0*-VyVs`ffBz}|;f1*;e6{|^ zI$!eqlD#SE?8@@a#$6v0C)TrWu$u74x~j&#zu01yRJHl8jNYzZ2B-2Yy+DEV1a5`p zZI5^NM6OsLm>aVf<9j&IP?2&&8*n;LVt^ zXp#m04~LtLf77`ivIVKFTibs0`n&U6IA5*VWgPcaL$ZRk_I&r6gkEPxpQmgSMa=i` zO*XZe=k-SL)@1FFtZKojwHZq%P1)e~;h=6v+P^uj^52Y3Z0Y1(y+7xSe@FYmZ>i@P z=AM@N9$55psewkHo$U5w)yfA>@-6(_6p@lX^T44>{kdOPMe@F!r0p#5SWUR<%jP9) ze>3@vPd!(8E0h-eT8Ay+vY^fDIOCQ+Ax+%}!qJb5)2z=_*Si01TrD!=P)YlYN|nny zx@DiST;I#+dhzhrS61B|0%rS`zxUZQ;fQ6~o`R^dY?%$oe$LXGi+}m#^uN+Ca|%78 zQ4nz?=i%3`Ro#p>Qv9p@RxkOqPA5$}!1S@n2F~f{^ctoot8X!w%NfWRykK5<_=;B6 zY{toQ&68TLG%k{SE@9aI_TaIGmRKbbxwZacPgZRgz0mW1``4Pl)vGrqZkgT|DOFtY zCR2x(>%+{C>_=iR-I-^(ZMB2a=W?0VY|AR=J=VIrBrl+3Sav?{)kAQ&+djbtx_0$|HSt(fs94v}`lp>x;khV7m5{p@_#{{z=W!8&55l zxig>IT9;NO#9{EcgMm*~r#i)7x+h{|<&6vz-KQSWN zI|+UtF(=vfpqy2gAEmoRGE5T?KQ4JgIryJ#)U<{k(MiRb2 z)F6K<^Mu5!bG>&QD!Tn8+uJ1C$h7soiH4O$|J&&qwJrji7qMtfkMuIq=l5ypO5ip* zTAHA6tNEaDS?-5j=WMwgL(Ecsu>KRx%Xpt4ST<9*Vb5Qt5E3 zp{`07+K+$dQ9tf<{HmU~gq#9n{9DGK>yPe=){Ty6F75QU>UD}2K9O}aqe%9_)xOZ_ z3%tb`G_0yUcCty$XfBAoXr&s%BQ>j~pYzsBj|&3Y3BC=Vx}^@!iq%zo7AYX?*v-#g zd2InlpzXeR3GOtfFoWrw%Qs#SKbkG$_Tq?96{k)2yoZbrz1O&W_$Dx?H!~|;FEC)m z9s|$hC9hS&HJsuWb7-^@A6` zTzY)%o>#h8Ikq}&UoPIJQD~}oZuRGg%4vQ(a@p?7bS|CA9gsCQzi8vstxRoC8@x7d zVG*wIa15HX^_kj9#TU^(Ox#vD+bjzDViu-Sn|H4Bq~~^>wz!n&tSQUBPxjuD?fd%i zErzPVHww3HzZB;y&dm$jc;%o#+>7=^#ajHUILr`NZG4Ll zEpeCKtET^v*(SjFXj%2=2?`fjJqjvbuD`1@S^Hd2{H`eb>Oi3>8$Z1|#p~|n$va8t z&efNBZ42z~U9V2d{BhO5pZCf)(KBDePE4?5&$)PYimg<@S%yh2+J8Oppk?B2_m!u3KKkzJyKj>FPIKd$t_Qz%e0!|8)o6mh*6K&O7v#fb`(GZ| z`L*Hd6lsrlKJ%m=P0<$Jxmf7GWNn8@Z|qSaB_xS(UQeSs?`j9_npdpsa3vRkRyEV1@Fn1qo{fVl=fKnp+58!4g7R&l z?K;JNSQKm&g6Z! z<2u*O#Em?$GMze6Ml74f?;hXrMEEeVW#@%iF{v=0R@iZa&T z=UJuR{ORh&dd9v&?RboV7&FiS3uqw5#Mlxs5QDkF(~PJMo@b+>12GErNfV}jVVNQJ z{&C=>r4fEpJU$)sOnB;e>6O8rsI_{>`~KJLOWHj9Xx_OuZ?e=mcp~<`QHxyjd-bC| z@!fIjSpQD{U;DAF^mS+a{(n2X7H9ALclpbg$FKf+J+pWDS5^C*MR-a4aXYK0XMR1o z>hJC+VfBQ_g|~`UfOZ=i^ZBaZ@12S%U%EP zvHE%VyYkvgS-1Dz^stFa+%aYM@>j?LGkXYo3lf4d}DxBE)| zk)1Ymqqts4zIlX~W$v!>2+=RD!n-fCG1})iYzPc1l{ZWaUH@F(ODCn}b)7Zuyz}we z6KcFJD{BPaEf!i;daiu`1v{zpmmM7qC*S|eoBLw!OSvT9RG*F`SE|)lA7A}F+jho* zYhM!A?%~+Wm3@LkohQY$Ty9OCZN-j%UmkuweRb{r^-o`2yZ&Xrb^p6Z^V#Fq)^FbR zJ>l<V#XtW{Lg4=yTM8z4Pq`$<`9{g&)PLTCg1cwVda$!hrODHp=gPHT z?{0pn6Ii;*@Z|X)b`F8|ORjrGo@M=07vQg(^Sv^tVUb;>(4RvVCszeb(aK$=t0S`8 zDD}tAHMf%9t@vC~^t9A&s_?Yef4UQ+7dqP|{3`R_CbiY0=$6*PUmPFvQn&r?E)hxo zazeyt$@9xU&t3Ytq|5APPto4STX8<`Kd)3}o4IhWM%ZDVj*5%ii+^6;y-9Q0r9)o@ z^FC*?_ZlCo5&twX+b{By?pkKX%B?AenU5zO-SW%l z?tzF&znhL*=tr;GQ@3ko#w+tBDyJrDOF66X8_w^ryIK7{@0Od&qwegCk?mG8Y8ul$#)1(n*V{PmC7FU|MgbysQG3%-{14{Ya5xx>*Vb+MYC@sO#> z)irCraC34@ak=@onz?q9;Pcg`H7N)BTSF5XHcbhVIHUD((}Yu@_7k%f=UVT4q&LsJ z?@uQm(<-L~#dUk?Y<=hD`<@CkVdLy`oWnjW&XFj)TxEp6p(bFugtT(G(WV_iHs8tXf0Xw1N6^u$Ts9$7qpj81RjQx! zUtrPYF}m+;qB!^ZrUIj#Ut}dGyNMjtymn5@Xy)QnpC>sJ|66M(ra2!fu?Q{qh_u_8#QDrK5frpBLwX=(rCE#1US{4Jkqz7keh z{6Vxu=FQ$m8v@l>H6nf7rXDvqFP?4vXJJYq_hyD-;UrOuX}21$->6YyO}PEDg5j8v zl+y;@{oys>#Gx^_1!=A!^(+La9(gNAm zh+exE8FI@bi%;^L_FWnCIgbL|^fd)ie=t3%sy*Y!p%*20D#9R9^73n=Q!J5bz4v76 z9?qBcnlxpt(6;ka+;81Ge17}mdzEaAlS;ZStQOeyJF~gRT!{VVvNIEIDo;+;7LpN& z;i=TL-`rFfJkPw*N>ZSvPAgI+x@+eguJr;;LbuLyi7-UCZS!3o`dQ;w%(1xit0H@) zML$P{^6_RbPihQqoMsot!NYiu?{>wh4U_ik&CFSOJpCAMG{nh$`_A&sdGp*OUAJYD_OCeBz9OTc zrE=o>3;$W>XQem%;`$rD`hn^RTm6TsDw5x(ekcjp?Ol=bKj7vqrvv71zfQmYA>rbb z2a)+qoL@3j4H?)cZhLt)CYx=Yu+z$&ep>~%ZZ>hcS!iI+`>XiU4;^mVkJa{b&)l48 zbNp0UQJ~YE**YP~s}9cm(aNWJ!_&X@ZKTq-0*1Sc97*r~cueQor?Ig^cGrg%*STU6 z+1JE0H2Ihwec7XRttH`Uz*#M~-5STU${<&u2a`7&GsrwrZjvP7rBQSIx zTg39x*dV=>s&5Zt{MyIS@UhJLzIq7CcWd5~0wps)0 z%Qm7DF7CW==EbJ?BR|{k=*>+&^`!Q(Cl<}FusZyI^QUUN z-q1~FPujLlx$>>jZdPGvhRk8<@L#o@3qKY7$eSi$cgX0HwMxt3$;Z!~Jb1umkC)k; zUk6{Y%{s7C<%IB&h0paW-~ZK{egB(6ixQ*Vfep@|j_t`lTd~SUv-s^b{Zx;OXS%Mh z6cxx*$p7NGcfs#}JNCv;j9Pi4eO07q?@WnJDN8QdJTS?vo6>%H`jk(7!jhVcS;~Yi z=}a>IWRg26?d0W4akZ1)Oj3?|Z+?x@O2 zuRmj}={&(EeNz68id9|dbCc)uNiH||Hp$?#vS6dm#g zFQJ*!%%c6ogZa$aS-*rhPQD@;P<-ie(o+`Psj{MeFv z@6+lMr>tFEAa?V0xCuw@l!rzCJu;UY7O)j2PVo@@%3JMlBXQS}4VzhVR<3zjR+&2a z(+uVE+H=t5*otMp|hrFOs?xvFl0snKH4v0zF;Z z7Jk{lDfrD{{lh+w3-E@lhvmrxF9%-FuBo@jY$|oY4B!>4I*>+5BgH-P5P+^89&QF-QA!wuyM}?8_yY@{rm01?UzrzPAu+i7xjL+YFgE=wUWn{sU^m6*gxF0^UKM1 zTwb}=%O0g3cgndF=sh>j)0`{c^8>ME zUO5_?@s@$9+0NnDt`G?%B zBJEv5?T5F$vk|#eWSDwmXUx~vQm&Jxhw^xb_I!E0c#Gg3=g)G7Tn|s(-1?$O>OuLJ zvR_O2nojD?U3|Z=^TjKX4PhphH;iK)FV&sQEjl&**XEn5zaH>^v-@dos?xA;*OmE` z_8njSpXohcfF5Qq4%9mX_2P_8jNuy%%`vCb%|X3Ag8P+^#zfDSG0!{u*~Na5{BGg$ z&hOs$u5H>Ic+D>-a(0FAbH`0NkrPcOm3~~e$bLTaCXc48IxDNwqJI9VE!(;31k*w0 z2MjLf^Q8?>_AaP@_W$3PKaalI?yvmwOX=?26KChYx_Y_$zTT5R_DOZspMTc!Y$y|6 z{$h&p?BDxiPW-HePO1NWF8+V()ZKgMI*DA%Sw45hp1`o&(p{2CS9a|DE>|S6{cp|o z@X29OuinltuL@!+&VT>zTN0>~wmts+x1vjK5AN!hl?jEh-QD|Py@?N3>bCkjCr`S| zKB>R|U%W%hRy_2zK_z?Ud;6vqGj3scSq0^Y8E7QTu)N+1cUw_4{`Gm6xt8{5}6={QUZA_WwJ7AAR;-Z{MEX3wLJJ%<}Lu zoay@^G3Z{h*87h)gO^3!WM6N_*j;S(p|(Tnd&{A6mwTQ0o~c2z-macI+hog@TE^DL zy3&8YEtlQho!HVQQ1G>;oi{Ab(>i`v#ub|rTdHXGJ*Q6O8XMbjF zzkbk{&FW9vhi>sHI^MX=Au~nbK z{xx1n+sInl2`J+q%6$ljmdtw<@TzouXeFF-#Xt4(w=hZwtDFs>7JuT zDtk`fFRM0R`JnY~TV==MnH&4h<;QQk`17=0%iHE(6U|eE9kqD=u})i%(vc$j^rQ9; zYvIMrbLLI%7cz5ODC5Ja)e~03z_>J&-rDnZo~BtZMy+&P?O}4Vy2U?#W8miz;?5Yg_q5 z#jbHKYkx=dqh>b+(SrvAHQ#LiD0I$WbBD`g%Nw&*_vW&FnsY|Y$LaT4O|=h&4fCt# zvOdU}d7Y(V$3}~9jt$0*`_Fq_Gn?jpYq7rOftLc^*O_10_kGh|Q7!xSV8?8y>I3R_ zthe^gZrNG5<#|Qp+n>|E9q|y~@&5c}>xZ)+vkNj>n2_)HOzghG8N>J0G6RIoH8SW`3 zEv_xG(l@@FlC>lF`nUXu4^O5{oTR%WPWEB2ANzw{{vThZT-*IDcn{Oe|15S#8Luug z2vv1tE`4ra7dy$LNL4>=Q{_#$U9UL(I_IayrEaX-b|O1!zjg6}`H$6we|R+Qm~h?I zvCDS%9yyDbN9L-|4lIa?u$N_ht@h%{$(D+(>fsvG@nW`W#_V`cH0`8YcBjJz>xCRm?1{y^qw@I<=K^YXRNW9nZI6ga_76r5|bzHII-)G zvLX9=ll2?#tPB5qSz@y0PK%ju`){{>2#iegpUv#r{9|2Mn#nhvD7Vy4Q^nLKPfH25 zf9JRGM0!~4M(Jfcvv2iU7KhAlRuQgP`0hxTwEGp)yj98E+Tj7ec1gZ0FghAztjt?h z7sdELE3M_tCAk?BRoCc%@wqbFR8`+R5nqgTIz zLsMfDSB0i>78mV_3!b*1>cvmlcGi0vf3+NGZnoLLP>du?^Oiom_%FLHr z)Mc8_92>pU54Puin7!(HNuIvoUD3I>ulsMmx*`1bo1L@dTb|$lslC=(Y18#6`MI15 z@*)8TE_1C_wt4i@dS})XGp7~OoPxE^zK*RXjeTp^EMG7o@T2IJCA>kr3-)jMZn*OJoGDoFamhOCl-FU^ zf-g9NWe{Hj?b?rK=`!b>bK-W~INgro;M*ZmeRygZ6$HEU^ zPa8eXj^TLocf(e1rUnt|clEV}|K&RZFDCYUNxb*(O8d0(yNboLOnL7Ay{c#7)4#Uj zLR?P&eU)?m>}9#XQ128Vx3gL>(^uIKAud_E%Tidt9<2 z?f7l%efl4MN;`5;S#f#O*BHI%z&Am7-Rg zm9}U&9Zq}q+qp;2D&y0%R>{L6JTDsWvSn_2FI3R#c4t{Z4uknhF>BvbLK}mtCnotf zbU7GvZa#nM&C*k!3^KM{O$$|AZeJq!<{R!)fJ-gd&XUj~SWOc7=?#m@!&rfK4`Bwi*T=Jjfhj|XukV(* zvoX|`sWazjNle_gkJn%A^5k(>E9Wu!w0h%x_al=$*^TeGn>{UB{o><=+3N2(zw>6) zTuBoOJLnrd`PKTF)7g&lw$5}a4n2L>`=k2m6SE@1pT)kHI8ZF$x^toFpUwVu>&$N- zH=eP1M~CJNwO=}44|APgD(1VW&6{CDeD$U+C5JMj@0qaIxIh2w*?TE#H-o}Nc7-?B zPUIIY?=yG2d*|En@UOmVBG1Em1X5Ov1G5tutU@+n!}2}g&wuAl-)hGHr`xE-^t6>SMY|KwWYZ7N0P;tIT@42|;J7V?PbIvxg9+R3leUF2Ax%;xCJg=CKD6}74 z^>to>>U;gW77~-P4I`Lsj^Eh&gm+q2THhAebA>uQJO6KvS=pYp?$z#eb5(J<+1pMp zJF#}_9EWE&eKfyiDRTL%#Pl3I#!@*oU8rmIS5N6L1xK#6B{uC*Fbh}yv(0g@xXY`D z$q9$6|2$9Kb7G;uM$J`in|H;nxuh8AvD3BtY)bXK{1_t+T~FmR3b(>PO;7caP)=v| zZ_QObcwzemZq?Etj$9c8{xt;vu1#X{xeMs>J*aSFo`4{B)L+ zv(=aT!uQBva-_h`$Q5?e1$S;JGX1wachxbcO!JbIt%s(V$l5&A-umqJD#iMBJo?3s zyzJZlE)+Vl|H|?IGnJR~Z9Bao`fRTM+_ijqkG*ysxU;hS(Vblj1X6sK_qa*zU)<^` zJmI~W)gR|j$JBkEl9T#Qi>%&Zvh|P2nzIIrUwgNB9Ae_U$}Z5hZ-46RhJRu=-Mu@W zZMdUuzMO2luqdOey?*;(3bU0?+bp)^E0d3qEhCDQPzO=f5-aCX-{$v4qeFw~$n|$Lq4>f|jOmS$Gq{E*sH!X39N^6+BE1xbm0;+u>b`Jd@r znCrP=6Z=c&Qz7?sR?T_&>~y15+s7`>@B;oP=XQM03q0bzYGSNcQ32EBKVijX-kz8C z8D+oT^epIxhe#CSC^))i*++}zZ$OE&HIa@&&rI{wo4(>N;ZIU!YX?!zlY;_uiLyJ;hJOelD#Rh z+g_i}x{^2JlhnBlyB;qt(OUTTVBgXOAIkJ@@0j#Q$4KefOu60-yHi9&?B$-@S*+x> zmk@s&boJpADmv%d^odk>V%(*0_%!&Jun+SQn<^b@LIbIX23{@c3zt9-iT$r_H_ zuTPdem)2Z&;&o(q-@CTDl>d&|7cX9uzd7IOUfZ)p6&sZr|81J-bbdXT)BWwc+3RLC z1)h8&Xg$q(-k%>ur!~#iw9fu_W46E<|2fm1?yNM7EpBX7FI!V_aKa@4hx!1fcZ~58 z;R}L$)h-yy?7rD%JhPbX=@G5y#gj7<#3m%Zo6l;JC9pw3%59o*-<>Ol;(OmeIc{{y zw97<8?5gGC9VYJQdk@c3dq3UOOeNzASJKP;jW70jCB103)6R@s>^=ST@#2YhEwVZy zwpLF%K5N6adz&_Wo4Y4E?$yrS4P4fNS3ghqcD&=qe2riG&fTmzkfUYT`_7sBbZ7f< zGuO5VYdfCnn#R-rpEb_BthmlPqExW&#_q4pSB+lDZnb=ICDuqU&p5GdYExQzt>5I^ z!B&iZ8qJMas{dacS!w%W`P73ON_hW!s6YF>{@jhg=X0Oky7|=WWBV*u56{D&j})f+ z1?tw^@T%1Hy){>C<2DhwO3PhSy-Mc?cKa(kZ*+a^re$~fwiwUu>xUd3%Di-a=JEZ? zoVAe|0cY>tW)r#oZrl3}6@s@`FRKq_nZUL8!)Lb(*F68RiWS~+Iw>JjT6(Hq+WGlG zlfS96!ul+>hDxn@t)3^pF`}U0g3}>I=74w}tw=lAX!@#oPw5dfWAr!uX8Roeq7pY=6E-(&CFd zlXS@~BYuV%5*5J`xie12R4;8eOO>9s_-$_K0o&vS;;9i)PJUC`7H!w>b9vuvxHO|E z)`Kb3;{Lj&OxsJkFBN({-jx>{wPEv@_v4E9d3U?pw{;S-M+nrhQys zF`XrDsmYh`OL*R|oWIy=>EzsHf>Whu7UymkJwEr#xur}iL*wftH*_uzw5_^x{fma} z6w{5K9}`2?ysz4lcmH$W@mU(5`YqG`+ArPkWQytH9V|Ojb7BqOyNCRqu=Bv#t)|;~ zPyCtX^z`r=8&&JL6AAyU=0DIjE&0yRS8~a;>07$rOLhNOHP@#6(%K`R#(((m=DLqd z4QgFDPTEhHRLkL+d-=l}Q*W8vor~_*x7Qti`eV7>W7+i~rGmM?`6{j%FAV)v8QaU) zyP>D9)v>vEMo7uys7KL$<(CRqgofK3d3CDaWXUw!eY=0yuM_^i24h?gJYEMH*E6w1 zoI_{<8pHz$BKGxLfDVKsIIg!f)H`3sRp6P;BljMQuO2=-Ute6W?ANntfkTd1qk>Gq zwLawn8EeBwAD^$B_wwz_$Z5>%TPAIfjb8un)$djBtGRF7{-b$+ectZL-52)P-S@pF z_gnw<%jxg-9sbm>d++bdFlK`)9ao=N|i;_UJ4s6o{Rv$l+F-Oq0(?Uis- zYtu+7(2`CzFz8Wyk$ZHeZ=ce}7ju5D63Zxx<$2;@v+1YR@x?CZpS^r=!0PqIn&{+N zezQNA)q6fL)LWXya_vU1L{eMAk_B$w#zLx^R%Or99Bi$$pPfxm6c{R8P0Q9+mqg{dR%H&6(BZiy8h~~pB0%U_K2h@3OyH`o4fn-yM51Rep>8s z#h87=Mt-xZ4~DCsm0X^iGw-{+oZR|dliydp@tgP5e!2d<7uTO<{tqnQ_VWDy#Z5P| ze#Nk6Ogmq^SEBRCl@||wPxC)ME7fK1!~genywmb7zcnxASu0W(@TK%nWmmdr#%IrE zGj7F32s*P*Rbb2dQDDo_q2&B5Ox;anPI%~h=R6aY7mqgPo`_ZRV<=j&X6c{Rr;49B zJC*RpbJ?HtT`cd(u|$63ivshXogsxA-c8dn-mvIa2FuM4HEWgMGA`-Z+6<0Uf;`m-+g| znO9~_H8a=uwAJr#xUpih;j?>pxAvF8x`Gy3vmwHj9 zE>IdP*!;z`|L_zqKlb`ahBz!t$t~cw8 zP4en&rOcUk9ff69Hf~gWaX9AqvZ+jU=eMYLpK33!Qn{dR`R@DAUw^X}-McnDEA!{s z#ETNwF8@@ITxhiC-SyA!@+Ayjp2Eo1;Oq*@!4{SVu+484upxY;Tn##KlyI(&jLerg zE_m*zgf3$;_?&IWYh|iBDq;Mq)6~+2D)fWTI6zi)5QPt)>rkdvz(SB z#LBcJ@O;VK__@EgT|8wn>;ISk^Y-18sg<7nxqNoftr^eGKfY{lo^QVFfB(Dvd2(+H z558*K!qw=sxqhqR-|q*_8aF9je{(-)-uC#M@~EE=lDOW!e%mK9apN}In^{wvuc>V{ z|N7$T-)uCd8xoGxSh$q;)l zxBJJ*qkcBRvw7YJ6zIsUIISiamj_ot8GwjaY-u&=`b_ctzwx~@0e|W=!86wh^eNp@B?Y6UZtNdvT zSjciW_}Bf3HXh&maybl?tgdZP*e9YGdNAPR{&k1u8u%W!eCMDLUpC|0f!_=-UoF&f z3;lFlSFtxcds#@^b)J?PKO^pltx;Vlq#8AA@1}hzvO;@a9esEst z*%p^5228mvDRp)8wFParTA%y26|PSco4auS!!*H-jvFG+KW_>Y*EsP|K0E6{8N*eb zRPEvoQW6_q9CLoNpz7fFrN7i3uYI3*aAN!Ja}W4@K0b04UA%<*kx#X9@5hS$mAfi$ z-&l9>rsY(r6YW;hr39R9RNhULlg;nz+n;yu{=L0-Wd80ooW0ooQ+)rvpG^N{>TmwZ z`ut-@Wz~lGS<|jAj5oS)#85od`MQy=lDouv^EK1lk9{^W=B=E6#<^?eWzWprYf{s= z?p?0R3@VqD%9}JdZK=*;of#h_y(C4p-aE5uAESkmtQPmt=LdBRB3f3L`&AiBRWYz} z`-+D}o?6ntANb;odTMpS$*TLR3p3h9wrF@KSA0HenB!d$ofOmiP= zd2&%>b@ckqx4%@EbzJ)I$TCN#YHOmj$}E?+7q_RRGFUv~On9SxvrbEWU6=gp$G){S zk@DxKEjK*0&bob_!p%ts+b;Lzo!R%G#$xa4<;ySU&t&@fZTiP8KMsU=?~9uHu6<`o z>o?b>wfm}0$y{tZ7BIDIIQuUyW5^^*VVmq=UNb<6Kxy?p%Zm)}*tes``) z`*OlH^yMl$r=%~_?^u3!(=oXhdg_q!A))=V4GJ^rFB~lWD}JJEnrPha73Sw(zYMjV z%e9v~Q{hJS%XkLEfO+D{I$+BPCBgw0rJ-e#w=&f6FRa z!)#S%OV@JwH2X}U-MbuP^4KbBZV1&sx0-&yGAwM*Jf&4B@iwRar+vN{B7J}SB`?&8V~9j+>K_neO%gOzV-4-%jhpYpDQ=Xd`jbD6biDKqV9d#W&Zx_@1*R{ zY>;%AS$aZ@x%K2r$86ncb=z{HJ?v%er+*N*A>3KdYjX9VYD~a1pSkbO?pl4^)Gg`_ z-*VU2o7PRyi!4$3rEsy-+-Umj?z~g|4e9H?ZokngKK-lN`<#F!rnkOV#b%s~op?@5 zYWqIrJ!z()&#rFch&FtGg(XJLR46DSz9Qttm*g7tzgwmX)xEpqpu~A8Yul}F-K`U6 zFueNR9J=>@cF3%lYsT--9cE$M+q%cYd~f8Wc_}rC4Ldjfj%CVoEm`3CV5@%i3nBH@ z5~nm)MZVJ8vuu~i6eC{N)_mPpoPRb)`CqWu$!NN$Eykc(B3E2Bqq0d+YrpQDV80b+ z4Mx6x+K)|~xfRZq2jA1Zw(`63sZZ|(Pp)6T>b&}A+xHg^t?Axuwekgj*c!zq``dm6 zIkVGZgZ)>X{(bY*-)lzeCq;hNvd>$K;iBoIxE#x+pY)^4q@Ih#bm8Jk+d z+GLiPJuOS3dRlj*BKxnn37q@8O8f2N zx88pDttb6D^GpR-j~>nPa@p9gSFh);(>mvJ^rio=+Tv|DsvoYJ%-^lC*5&Kz4_~f7 z%2K>!Um+EHH#(`QAT;5i*Xq?zKRPY>=(s__X~mpPJ~y%|xBXcB%{O}n|D6~1)9sU& z87`iA&S;%sWo5_4@3W^FzuhVH^|70w=8h|0{l6TU%l&opvZERA=B}S!`Q)%p?Zqu# zTF$aX6*TKs^ncA9axm;e_vP?%)#ieh09Glzb z#AX`9A$h{{kJS&hYRh6buJx}!FPj?S^D1D!bX#2Vu8Urxi9T1)Zl~C?#rv+Ds2w3o2MyUBR^Ab;RfRw z{UyRY?~;Arte>{ww@uo-Pn#yhCYx_y_7mCEypYLnF;8`B*Y%5>ojmWEmfF1j(>d8` zfy2?HqU5`m6#82CE#7nHN{Qq3{KfG?tG|D136SSYop#OS z()HsUyWBobv8$6|n}Nde;x&_P z6P9nfmZfH!_^l-Pq-;(%%`EFmGN|$ne~F5EegL6?%c<5BBo(+ znb?a!MlKP)6VnR&8ktMhXl`2gs5b1v`-yYjF{)Z^pCUc`gHhg+-&Gt7H>9muzO4P7 z^qPB0rXd?lYM-xU+;wD*%+h1N)yz^WPu)=e@RTElCH`^8+T{iUt&+b)e%{o2_aIvP z$prV#Uj#MzHeuZJ8<*HdzSl|4+=Rt zesh1Azv|@d2ibQ%R%yO=_Y-`2O^LCS{}SVY*EI|?JZGe;orynP&ARKzONH4=`!?1z zhQy?W%{%#nrCRL?f5&{2yN2fzc8R|hiR8@Eun1DncFA8XZTRW4o9DAVrc1dG&*9~X z7Eka0FMGJH{@_gByXKeIZ@>HT>d%Osdmqo7H&3xGs8H`$mii5gvp(J50v1{LHj1hW zpKho&vfRIXzn9n%JLy?>wR_)N{#nkJGJ|{0v#`g0kL~()RfhlPVU6n#7#n)~r%imz9)r{Rk}<_~-0(!YJFDVL~W-h5ttUgVj1yS8oJJY%nu>c_dt znWx@rK6>qX-7>u}{=Co0TK5BYjz2O`RQputT&w8NWSPF);PiCo^(({|PYcl5dCkq@ zcH?SpZ4(&}r71h#9!juVaId7GWBc-2m!wIV$w!{7otn0a=l!XmqEp~Spd`_`Kj zHPn^68QR#ih`FYpTf6S3nZ&xCeapATO0U}~KQng23|~w413ho#=1<_xKd>QpkAa9% z?U4m!VWtU7klLqAk<+XUmeW6Lh}~6KdwKPXO$YxSXH#XIdhVs=+Qu}_x9)2d4?df+vO{!v z(qAj9%S`SGGiDS{)Z~>~J-cwCrtU3;OXiDf%bwP9wcfd+`uJsxRdR9nj6WTr4xe6g z21U#{e!7Rz*q9~3bw>XC4?=5Ccm&#aMlKL|lavxR&u(J%{&#(hPqSARvl*=6*vcd; z_}e1J#x6JM_4aK(3qM8G@3?%UsnfEVy)282niQ;i6VGMymzf8UYO?85tVG@2RoG97(bSwQdNG zBt4DH?3dXtc=q{E(a#%ie+#hb691%GB;w*(qamljk#jiWE${lWuxgJDf1m&DdXu-Q z+9JwhQv*XIYj@J*(4$GR?+fGBFAc~(`JcC5et(qh&+YN^@2|b|CTi_}%ig-Uy>Tla z$`?iKt=n~!P5F8h*YhpW`RBv3BHr`-lTbWd^*ifp?f2CE6AxK^I#??H*NuDaRKvT0 z`mQBGt1jG~a`Sgw=L+Sc@3tJDvoWl6``=>~>Q3nqK?e7-zd!ya-&`kTS8?>$S`jM` zp8s2K)qSh|F3w?~6?L3xiGu8jpz@QuM5Y~Ga=LxR4V@Z(FUPm5>lU|kAB>7%crPKm zcIC9N-~F3oZ_RusJo&*s zg_KW!qa=K&q{Q{mgv&2qIKKFJhwb^ac`Bugj_YbHOjhK6I3z{{LauHs9^MAMvJHvyX8AY z<%rB(^G_dI{qnQ^gvAfi7vKCI)*`UDu~z5AA%FEX?0KCsr3IU>sl@J`604*l8UFH) z_d4YQ=%iLPt%Hgz2}|jI|D6SjZYKZT*KPm+2r%@ zo3|(RW0-_WkYLI2OP&^zyW>9x$(~6PcgfVeteYS)b<+)byfUjTrx5K)d&+ML;?56yP<7#SkQ&-U`p~5LsW-ON1yTq4! zS$2|Q#mz(8RZe*9*mk4%>W)LP>zRUtwm!=Bx}wlK>u2qjv?4?4ttZ12w-!u!vANK5 zX`foy#Herb(>G{rEQ-9jk;DI9>>~dj?qaD-V{c_CV~(XQ1*SsROJdu;Pv|vys8kk~ zmVfHQa-%asHCv`QwWjZV9w3?SfBH@C%)3)>%I`9&4O<41-}GS9nYiz99$ta%b9(d=i>ga|KVJp75?Vb8_$`xD|=p_ z`Vu+wo^`!coLTG%K8Jqy-L>~W>s$A2dfjVwXq80qrM%*6+TF7X4OQ<2%;LE?qj^bi z>hnGBTkE6WW|_8Ww=pp;o&Kt->XsJc(tDxW#heC-9_5Q)8#7c|^nF~Y_OI8G`G82) z^X)6MtEbL-yZP;_qp!ZsdY#ymE-j~_e=+IstPq#&JU##B*~Qyd{=53?-?xV)U!T}# zZ>{=N{_pC%11Wh@e1dDq1Hy`%NKy8qnq zTFk3z^q6Bt&z8^()6#7&@5J7ns+CYrfAiwGg_6HefWVoKJLa>q($;1(FX7qJac<@3 zxpjxRL@TAvGK$_f?R;*Aq4l4}C)!*$C8xD)3R!yd=p}I-;UB)t9~S+sZ!+nXJJ@9O zIWhB<%yM;sZ_9lzD=a+hYx&F6`eH?h^*#xnM&a2rId8mLbw=b(QAAhEZ>jdnTo!xU z`i(EF`kB);t1{%$*LmVv2TeXqY`ML^GW_Js^tfL#uR7|d-cY-tQB)u@kK6KS(=$uf z)2FhGn2V)X@}8L)Yk8*qSH>LcYm4Gn>I7FuN7ww3ka+$##l_@`PQI{~ybxb$QNt=u z$&a;9a|54+r+#p4v*Wp+Z7H7I6w>-MahCSqNi$VF zR`H*)xoBMQs8LgAYs|TC4+8T1B#Sol{Ss(1cUzco^xfx}awdbL&uzN%923vQUJ6>f z`~D{ZlU;JtmhLRGemTuIrDwO*3QISg9beXoF38#UHe<|CK+qpeh{FwvHsf4s@)eZ-#%LY zRPa&JubO$=1F8x<_=OGLYWFc@Yh0alOxo>cU9g(`sSjGU&p(B1yYD>lXt?#8XX|%I z{rqsN@I~k0MFHF9S@2AdboJLJCB#| zm$Lm0PvRzhewFZF^71?9c~YNFvzfQm7Fe$j*D7*cJw+t>yPP;5<5A`nd2AQF_MMX# zH*22hGuw-~GC1R5-bsPW0#|Qpb;|Y&o<33%y`KB|dw<36nqPXHjM|TtZnJzM{@bS_ z>1F1@-4R(*o4OV#^dt;fa7wyXFWET|99`Zt9@MgyZq_G?!WIh z%gEpN{29vPFxz7P&mXsDpOBg9yw!a2?Oj13bDr+Wxbs?Osm=oCTb3t0EJU|=%#fHG zHlz5#5yz_z-%`7S!e?vA)Gm0@|DY*<0(UQO)-{H!u2{S1Zu>mNADfrE|Ew?cf4ceiLG^oEb~&F`e=w)- z{^IuHWg?0J8h4AhKK7>^ZEli3-}v=lpWO2T=k1<6hc#kadbztUa^3AJGho{qClXLI zVafUEO;dL$#k+r-vvc{fJ^mjA?wE?{`R)t~5j$5m)8micipr+G>KQFJG@3S_j_-A7 z?=6-0`M{%iG}T6ARa?!knaOTim*qrfCz^iRF`+`{{k7jFdK)+YDSh^%NZ(t^y!_co zm0f9toUd8_$!73uRZ8`H&Q^7^DS5i8ZkMuze4|J9O7WUJiD&b(HobazG&8)ZK&kTm zlZwojCpw=g2FJz=FMS`%8+Woj$S)(&QGr@Y;1-pUC4481p#kPVkf8xlBSCLrM^h@; zC&^Xw@VkoTOH_7$7PuuG#H|M~F^3tPGYx}0^JiWfW>#W-9>KnG3U&~q=urS{% z|3z2+%KVzO^i%x_o2uI1Eb1Ej z`;@E-(rQ0dEdBIjg-eLxy1iviJHMX%`Rcb{?zXTNjkPaRs(1`v)zAMUD!#F7OUJiE zOzVn^+AhD#*%mZIVe6}XcQP2gnqL0%@W1r?M(yUCR*I<~7Fw@Vet&KI{k&~bTR4uD z?7DCE!!Ku>T|)rlucen3-OrnHfp5*LcNe`9mTa1~KI;2_uJ$HF#ZPl@cn>qS~6@#4Go9sa2nky*7bYf7u&EenNx zdB(}xA56R{RQ2x_FUQMXlM^CyPjnp7`1883a!DNLoaa8}7x_)rS>N|~7*nEFqHi93 zfcL_4oa~M%&cu)#-O{(HjNA^QunBl*l;=hS?Dp0MY(zF)coivr!Q-F+FJ zd10Eewd>qZ9U5GR7JLxy-&%6uT4h{c*nB;+6QZIMj?G`)6fSpV?R)`d<#)+9Zq1px zMDKyjXUXML!>6yPKlUTz#;s!ZH|LeO{HttP&VDVJU4CnlPq(1$?Ht~&2(`|Oi~CURBC%9oP&2+H03 z6j}RwgWvBOFN51nf^YWrRCa$Ut4R@N&YFHQddYVCP02a0gyN@MKa$xh)+ZyQ^GA8Z zlwRBQ`SRDc`%k;Ef5R=le6HWRRemMa^L@8VZ@&MR>&<=6rz`GHv%ZtEcN|5dSws!L6#V%JSv4594vaoy4j04j?%6avF^YAghrj_xwF;Mbjpkz;lN`#bL z<&OIgjV-tEABk-VmnfXw_qnq4W$W(7-!)|18T zAe_iG`F`C4|{?q?} zR-&HE_cWHWc)@vWDNE0(*_O>X&-p;=(}_1vyOVyWceAapW~q~HUOvb5#N*RE!F(n$ zdYgVrw?;1x)S0>aP)PgDca385hA$Jk_UC+5jGU4gwWm$tz~>z&e0CiRH7m-xqq1kE zLwb%hYs0jhYuCAhXF5oA?+lyow~D7JU9pMH{n>#_>%-Jata`muq^uY0J-;u=>%F`8 zz9;Q+Qv!^(KV0jlwc-o!%7oot8ZB2kJT2ks;xo!P{L$y6So!B`Z%(tv-#@kT#`)5~ zAi>sqf@Q`xS~#W|omOmh-TqwlkJQYk=XGCPb}@5Zd23m~rHd!FyCLm2j+Ng;qqH1HfP^z(WT43Zk#qz?s3=(r3Idgb{PH3xp{ugf-fm6 zjLs_9obSlGHu=@hd1BLilbnleXOw0(zxlY?aqgCj*FK!8j46zX-L=l>N6qQY{Y^?H z?QBQ2;|^*D@lKty$kd$m$ZbDC0om#Uxmp6xm&$E8NIMB`a-N)Tv^{ zY4Esn#_wvYTT`|$%6^Q=?2hq0wN5xNFEjDPORt%`4c4%QX{qqdwLX>Y&wJ+V^@ujc_vPH$ zU;enR+-UMD%KX%x>-$Tey|oaz{W@utk8abswAd_%MeJ9Wnuzi~x!S}~rE=;{z7fX+ z&FKmUd@6T}HSRmRJ6lz){deq@<&6gnxxDOd%*g)rpls&}R?>}a`pZnsU z#;pU-uPm;6u{ljwcV*JNdns!+ElN4?-f*FbQ1PR*)^rKespibZ+>i2pKGQuW%_#im zM|Y$5wVRoL7HaBVx*r;Lb$aQ8n2U`)o~&ogq)*w~?Nn5F-V1+D@S1*Yg`535KX108=5o*Fk99vCGvCEJ`Sii&vF-WYvYv{G-r zNOGW|*b=tmVmEH5rG4~FxGr+zfA^WJF_nI{#Cv`lPWd)a7-Vb!}lw^bo^R}NM;opIki zdm`IL^<3w06V4gtmp_(26)Wva5ap)}r72(4cKM@_LWRssZAo=205o|`U7NwiD;>}Fwl=Tfjx z?B!M0d_`B!-XONXu64`BDYMycdp*9z%9E9lP&le0tFxfvX1{P$_IZ}jnyYhu zu9)#_L7$)QG3F(cC+|+MUvirF#jY#2?l^}>q&aQY`@6|dFP?Gh?c;)Pn6qo|w5Pf+ zG)}(BVI5Icz*3xWZMndChP5Bh@&?aep}r^Sc!ybS_Ho`-TR40b-|pC5dn?szyFl9c zt!bM@=f4fsZ`+acE82d0@_&nUcawEJXYw8P=-%6{_)YfQ@7dzKhZ;HFY0Yhun(S2a zMq`@Cw6ZNv1QNAAEq^a0XUVd`dYc31U75Ytc0bwQ=evG#w3&) zDoGzHU$E}t%aS+F&-~QuPCU)NVp(;trC(7b>k+T-LKb^g^GLPhJA_UAmYu$nrmq>f zu<*tCA6q}17IKQZeTDDLuXp=J*?R1k`J76*!s{wDZL@LQmFBmPxjr>j*_t$WTd&Ya zKM>t&8BkK|?Vu%py^qj8g%d7sY1?EML|6-0s@~wvViGd~2_UI~3k(4{1I!=hKR{6GCDf*7NS$;uO}L zT=jFG*P5(I+wUgt7g%Inb=;w8YPM3_q{4qQ!>#>6xBi$YvBpG zv077m?|7q@=F@ctyy~ij-d^TibUk6By#3Y2%RP)I3orXC6}9tinN?gPQf>Ta&&Dge zrPHT)9Zg6->?3siZJI$yQ)J?{gr&@E^};uP>~ecAu(Yf9*SQPE@}Z|RkN>rrk`&=* zF+0Ro(S4z1@x9!-`Tz48|Ni?e#N!t&{WYEY6wjU+-xS}PC9r<-*cNI3Xq`-dRzU6H zmmsQ`9@tV6zwoRh$+%BfXeTp+vo++PBE6 z_iBdvTPO2Rt>+EWKcybr;h9nNuw?Q4p8Xkdm*3{bJQGise>nN$;r-9&{qLy$bCBKT zOU^0TqDqzwm0PoB-dW$ZJ3B2t2`GL zhh?vw+VNjxML@l6?yXlZ{;@K(DejoHp1I#ZGv=xE+U#Gu5*KgV?|trM)WX<8zhdq-{7?GAGOvTxsq?5v$;Ct4)bKAL|&eJ;(7^MUWJ)y0qBiky+Y7jb6U z7u~CNJ=a!FZ&u!LMV;%@fxbs3DW3)6@%@zu)heeRbg!S(}Kz z`~m`}axl89kX|ULziMn|2EX~u&;av}X+s0h9dQKb0NzGN7vJ3`c<%GeeP86~xElo@ zViCLk^2M||%G^EmHh%f?|2c8FDZkw3-@A9u{t)M}oMw)& z$i22zyC%M@<&I_#^Vn@`b-(7m!)?ij&iN(Ex8f|;_GJ0Ud{JcJD?9hla!c;J?Q?|| zI5>U&E!Og?@a?nrYejC&jx*=KwNBjY`=uGrR&Qf2*fC2cZtC7kXU%ifSsel{{NYUB z$q;82zkROg-Y4DmhvW~wO89)IUj8pD=cGPi7KTIFOJ2SZc{$4e9Zw5n!%t|IhM=ygz7jAx#QCOSZ_c8rt!PjTJMc&%) zw`R}tFZTQ3`@FSC>U`hiH7^~_^dG(Vdi5;l2K&sPEyvarE~}K$yzbTh%yi?0h|E1_ zt*>T;d$C9!`u1Y>*^ATfo4cF%S7#nDIlstZ3)`JV!BL!?3oCDB+2kBpep=_2c;G#w zFLt(*Ug$@^Z2j_Jw*1XS=a=8tfAr~r=%q`V7cAD?{B(V?)e~`lk9S_0{AWdlTCZ52 z3`A2MJf0YXQ=6{}=bmDi9jkXwT5yh31dnah zojFBSRwujTw=OX_^+jpLMGLVr$71!eRQTAhFBG^C+U;ZdVAl8MfF&uXZB%tPI4Ph1 z{=vlfY303Ce(f6%eqXz6^}FsZdLYqh)t$RnydLbmaBcI^ z_`dGTEBD*ovbnS8)}aP|1=~7pUa_O6@_UOl{QU(E|7D+D&A;z%+}?e4n|6LbzxK|Z z-^PF6|GU5M(0;i;iNB9Nd(D2keRaX%9z)K&32w=*-M1s|m?-fbpV@Y~lldp-){-UC zM-A*2T~Lg8*t3VT*YPrUxqos&%W?y$;FTQHIDdYe5jX3R+sSKyO-DY2>KQ7Iv<_N%5be~=DV2hS6{GsF6;i5BYJJB|E6D?FX;!@ zMXu&K&n_ouvpJ}#FFVb-%D1>Fphosv(zN>p7Q$-oBbIE|_OK)Dh+G-edb=xP6 z=W@Nd-@}?OdYojLc~>);@$j@6OFpeWzs&SydVcHGy!EHfgxWL7hMUNrZ&~?C#wYr* z=X!~Kl}?36qie2Tzp;q5fRn>!5x>h3i3ukzOuG_ME1ZzI@`a4wA<@9;-J;(uwHWRn zS4cTK*GlVv#f9uUZu+ucw434snRTYWz7wo^a^s7dnU2OKRTeLL&VCVF@OX!iGlTJz zh{-j}=Pdv1*QYSEg*AAx?a!(!4+6jKUp(3KZP=7mY1dxJTsoAPZFrM0e-XdHDOTxi z3Naz;EL;^+x0x$m=}&qbxGU+@$2;o1Zd?-fJ8T7_MGii1bFEB!WSXrvSB1e-YL!~d zkFLbx^A8_xv8sADt5ax-bolp&Y?>X1t|x1l6>MJ^v1-M`40m~vu9rbew);ft3vWGG zKjlZy8MpO&#pYk+=a6NZoPVx$Q|ZO-t_9DGrX4%{HEg|%-g=XqypjhDCYvAYykbgx zr}84D_lf({c{cNN!bLM*<$nI-SE=5!Kd`L-qjB24UFAE@-A&zhYjW6QGo~vG$}K0$ zpO~m6(WHLjq!<6@KXRGIE27fgZ#gsja%bo17u`~!zG-&?7RpXJv*2~>1m^dT!z91V zEZgz#z-5Q{(py4F9CkY0Gk3n3dPaV0oWuq0?bF{BXJ)E8PjL-e5^roJ8jz83dA-`E z8O!3{ZIco^rKeQyBeCwfjEk?W$x+8;n)L}?#R}&ygsq85^!lc{_4c-$|C+kTO&2o< zFgnZK`rmP5j$hWioO##UAFc}WRz7gz=%ycOz03_p2_Jum@OP~FcGWvRc-g)gk0bqE z4wZDCd;eyYrcU>ij|&3sO!51-G|O3G31>SO_urrG;moVlz4(*4t`*#g@;B;D-ErMk zs=2Y^_CAiZm4OaZ-?BDu_vfy6*J@;K3Oj2b^<{0u?;v;Pwyh4i0+)lg1~bOWq+CnY z6s%K~{aAX|!&EINFLeI*>oO-e6i@ST$F4T$TW#IlnCT@SR<_2fd(oP-uUB3u`9&tY z)!D@%ekCh*lG@Uy8!m^vE1%dbneI*wCV=F-N#0!u3pBj9+VHl&@fvmJyfN>kA)^o}SEqHaG5^h}N;knxT(d zzi!r)3r`LT%L(%qvz1(sa^}eDlh4;{xxNgsS~KhHjDUN3JafXnOj`Y8jbP%njFglT z-w5u9zx8%}^;5Pkm8$iQIXWRfX))g>h8l@qQ9Cbl(qmSj0vt-N#XbdZ>i`AyqxL8~7b ziHpf5W!T!MiSG+DIPDPmvv>FO3rA-$@1Fjxgqc_SqHOQs4W@b(w|8$-|GDl(?AKYZ zwfgH0?7ef&+xSc~?=s=f*2b5)SD$_RZf|}~`nSv9bZVyPKH>_KD~XT(8ud8${<>?Y zjlRu#!BYNfbC2Al&ygR~+eLR@Te$LRPVqe3WT8!b%l}vLm%Rx0&e*b6$g*dvRF7>% zfApz&OIL;6(QCYZ_luQxrcwQ*56)P99^2~(KGaNHT_}Ue^kFfD<;_wM< zn56yvMdSU+*1V5hy=~SSZ_Pfp>VeADi|x}7S9?9YdtFzC^vn2VP4m6tqEEI#A3Mo;O!(Vsb@ zcc0BYH1!IPR>FtxTO32RRvlmxyJ0iUF|@$$<{9xXc2yPDN}pM$<)5~SeCPJ@Vuj+L zOK&#LD>B@%p>48ZfPA-q$rTCP*rVC~+mn{W1nGa0)X-zi`kH#twb%Waj?C)5?Q0bU z{5}UMYhNkdXsWqzv(M>eYgVq)ExRgteu2dC+)vIvxf6M&tKM65($?`q!)x~Ve4hEg z*NEQzs9IG0I66S~LWkkB_4k_8mYwf@_(J*L?7yc@@K{9H&0RE4X8y(QlCsq?Tcu_l zJooaKn`B#Q!QW$6{OZlKymev|!}IsX6+GbV>9q}E{U^TK{fubX`U9Djnvs%IpZ?Hu zc4l4Bkg^~+X_wvCY>zghE83-Dk_J0NT1~Y(O{_LDWoURUD*U@K*kPxupoR67sK(}- z)0)2C()!fB_1_hT%{pS&-X7knGtI^Bn}q7y8+-5Gt;uXWcaP)R+)u}+S#iwKukt&_ z6&bo`>!nt+b;-UZMP_rW_8YvuW;bQJ;o|dA2TV*>R@KMs=A3J?citzfUB9eNl#Pwu zqa!}N>H3-F^6Ht`oT7=W+Fl3BcWH%J-+f(jb?vc(QB4oNez27};uQJmblonOcaJ9@ zW&LXM?D)p4^d++I4)01jcz43gNhSL_W>}tT2^TarS4_MAQ1XJYJ4a2^v2)Q2w9dNi zn9rc^B*&I>`j()Ivy_Go!_SnGb?2XHNYu`r?r8Kc^WK(A4RxAlFRp*FX%BPs+p7^Z zJGQs%op$|gDs#lw=zU){vq;|6&V6hzcjM?>dC3HcOV1r1ZYer;Pk*oO-+AmaJ?F12 zP42ZiFSOcrugS$_zZ7In>|Ja1k@HubpoPcxrkFeK{JFK8In2A=QfErseXysjr+HQ0 zo#ULpH}U+|a<*f9npZD+a_a*nf*syEywKt6i<{GFjoP0+6j@nxK1AFe&ZDZ1FSvx;*viW24_WH=;LbSzf>W@`gyY>6>JwR3YC*ZVS(|EzVKM z|0O)l#ZUVE(kn&(!Xv!SE!FWC(q7u&zNR5u@%TUKumd|p)?BF;O60j2$vU0+iq{*~ z^n4-f(_Cs_*0GVuSl*~r%@WXe1X%Wj;e}H)dinIzkmF@y!&qRd#laW zA5{N;{cuwGPw}Vzclx`JtKYqB?KXX5q~-DB8ncpK7hTY@`gCQ#?1Sw2zvJ6%67dwzF(iOUXicfaek+O@BhaPn{}I7m)x9xZE61TiLO`nNPO#HSd{X+ z|8d#-O&1yx>W-KZC)E;NbvR|lZcJ2-hy$btxYM-|KZ+Pov zE$!CY6D-!$W$m^;N;ZS*g2a=*LN3d`*Im%~zO2RsN ze(%TEwTet)o=)dXnhL@=D_dNg>?9|7wY<5$_MnW$!HdCDG`iOIWmg`PR9UyJd+T}j zC$m4_3%G5n$r#xppT1#j^U0qKR|Ler6`pNgy(x8H)QQL3rE(J!=XUh;&){*46kb)Z zGGWCw)vSbOv+gQ=3+R~b?rN)1p*4ImYiZ__?W?_;P1KMATPrc zrkbW%!7BIKo|rxDV2wTT(BHLawx^<1!I`Ef>%)$=wz4OjU6-;!F2CcE;+8Dg=Q`TT zd<};AYu%3QoV5M3ryslIPu8Gy*N^C$2Tp1&^qag%uk+-tNqq(qVz>D&XIaKB$=Vt6 zG4|Q3c|snntN!QS3csL{&{q_8kn{eu7n#rfEdP3iai8K#(U;}^#I_*w@J0oHUKQ!) zD$mEC&pY;>^x|Ie(6yKda=MQZUOPp2-G>w2+bL+gYDMuSq7jHZZ6>upm;GE#?={D;MgR(HAs_OQ-WahP-v~?feS#xOq;^5mRQ_mcE(SPN! zSO09uueXhSp1<+s36?&~W9(9J^^QOx%bb7d<-b_JzdC8epnh}D9_^#Qf|>8e^St;ay!hbx)I?8)w)`9K z*R0j_om}+c>!zRSPrs}*=5bv1aLTM0nFL!u{uHg5cap3;&N>EMT2-~F#Mda*)ul@- z^nufsf<;TG9rXM&uSr?FySHV*x3adNM{~M;S?&}lA785ZuW(Q8%}t%9n`U#&yjQf0 zV`oaw367tF+J-$hjhDT*woRd(^J1W7r*`e?3Q`zw?$_bX|20l zZuv8J=2N>f${%B1?APEvcSQ2ANuSmC`sn5Trc*73HyBJTCul+?FOD1G`n z$G5Eg(e-Y=+#{NiKWqN#2t2NAj`(v-Wd8fJcNvf9aarihu?^|px2P~Ck~9Zhk4xkPsJsr0q)zdoMrs4JA8uXMG`ZPCMj znQMYOmsuTqbLaYdx7Vk{0`1pN`4aPN^PSI=QkCvH3Hkq6G`s#@)AXd9^J=GXx~Be1 zJ=j*jU_5)wWMeGcISH_4*z5>wmJhY1G9DTo2pM$&isBv)NI;P+#7>v_+lJNFlbW!3+={BHNla}PVt-qLt|=F6J` zl{Cd2Q!bxuJbTaJ*xfIi`u5p=xXHc#Pf6K<8CPccujhBaH0!2sS6I=dsKkG@f39!Y zKWpvgIp4zT%6>oI|Gw}4kGo&aI^MWxn6_Me3%~ij%T_sIhcwq7vb&a8^Q+P9d0(OZ z+~ie7XEKa!m)ib((=)4&f8NcxpOWtnj_NE`c(y^b zysP>7FT1=~J#*hRTQ1Wz^Dnt&jQr&-fZaU_K_o4({;-zB!0YsndQOXG7J zMUO9wc@^njulR3CbAV#d9e(G^qi%)Dq_Lnw)=8>wFm18ye z_08eIrilOS9VfNk&1AkPBNXfPU^ud!K51zbnNQgR7slU*QN&2MREXLZdFO}aP zoXOD&KJyS2{^;j>S5o!eR`w!*)EHgX^E8_lY5>O{_(Jwx&Qj1R6C37yxyKl z=Pm{PU=b*d+!Cky&Zc&;M1O( znE7@x90rFD$UTVZ^M4rN(RS+0wQaAD_KN0)i^d!c6}M5|b>+<0(xsJA`*umx-anCg zZnhA&`^0u-Jtc9@!UJ*qMHco92g+xhx-Iawz-?0ZktK{vRw+r_O!k^H?_s;Np7aqj ztFyrmJKAro_vcmFxK}ZJ`Eqw|$-~VV8E-uz`ghhfa#(oiU6B%WDOR>D5w0n5mA5Sj*4Y;Dp%GSF04*{4D{!N-ws>}|V`o=`cr+U1fysqcIQxK#1!Prah zrpP^+wdCxANAr%E%l%Pe610@lHe9%N;iImkT%~TMrKh$(t9;%)LH5I*u2~TpY)u}{ z@*IAP>H@``H;HDH^G~@J`NU`Aw#jNDcjM*W%e{$voBF0gMsdTNy^DJ8zL~n@S<~WW zC*M}@j{g4c{r!FWEN4q0FN>J@vo){Q6pO6kGMn@by4I`&4$ zigKD}b2Kdu>(y90>vsxMl$Jqt;BMXXr_WppU%7YI^u?9(Nj=vpYWV$js1zK}X9@TH z-S%f?X@cXS-pek_PuvvfJv8Yx3-_E;zucGB21naT_sT4vaiVw5wKMakKH<6)t|Hy> z$xZSNgJ4{@U14RBLxV`%uUQZCW@t`evo5XPpmvh`PgL5e#$y|J&zOF-%HFV3f@QXD zmFD`={fv7JYA;W`t+Kwhna5{>mRxU)Gh^*<%OcmKrlsM(V+8M+m`t0+vbj*m)WW6v z+Py8AF=wZ?9ZWntTSF&hq8Hl%k2II}$|75z@421z&tbWY&%V_Qcdp!&btac>H`nB_ z@UYyag^V{0+PrSB2&nQt#3H-#Y;e=-S+{q2Pd&BbU-pXHnArH)x7!Y^6=ka8yK_2e zFZUrs(J498mZddKPtU)3obl`JmF;oML!*3V&5WE<*l1{dBx&vqiQ}KW*jy!E zc|`BO+IONsNL6^x5<|zVj}xRm-PD-7TR>e*25n<*VhE>}tB? zB+JQf$tslfHoM2`lkp)wex>Uc9Jw~TOXjYO{}_1W`_#*6Q;!Dpe_ngdJwBDwB5Sd; z(Y#gj_srZhKj^|m!_}tRv8^8FVPSEf9t$k>Sgg1=j3+^{_2P z$Z*&DR{`%Yel}y<@9|cC|J@evc{w+te_B?Br*(z3?wS-ip)97lB=qwA%VzJRI_Dp{ zwDs@d&?WL8mW%!H?(#V6STQXtXL?G>%3aZAoRzYBBX7UB-cz?V>&@=Fj+bjbPcfZr z@h0(q%;Sur^b>6Bl0%pXUT%YT;LT^4tzu^_HIew#Uy(N*Paj_LaAr1c{+=kwj!8xHB*Mpw^E6bJ+e_xi7qakN>yVS4{yO$;WHo**|2M_uG4eLEEKGM+Giz z{Z|%xEqH$a#Q76{8O7~3z9*8f!g%X0kIMn()32x<3OKQ^pg`%%wg%(82&S9z0_y{n z4dvb$KRdqp*N-K3{{rOCUtY|+ed?6uvm34y=r4|McYkdv>p1n|?b0v)rC;nzza+}q z%ANbWtxsX$bM+{O3mxfQ5)dI`QO|B~7r zbl}x9TLqqj`%gFqd3E!>j|eNal2@^~8X06QzO*-OkAB!xuH!AUZSOf;{O|j||5V+( zisWW-=6|!d-WFYK`0%h$AKTf4Q^{*v7i!FHyez+ct>LCK8y*=pN@{BUs(#(s_UK*q zr_Fo5Y+a+~p(qpF^TN2dAWCs}(xXcm3VU05JHJ|{?y+h4Ugh>dD%Ye>Vez7bE9}|t zw69#>A2LH+tycW&Nn7i6PM!|inciOeIyErJ-m7f;`(>6~UPXnMgihsI?)fRE?|8%U zer@Smr2@8`J@x^{=@X06^WVQdJN?x=a)O%(P{*szyVqS^dYbEi&1BIDtAO*a|N zonO9cdG)HQW$F12Ejlen&V5_DYuCHb*xyOIRXfFg=>Mg3k!gt`!yMyc2n@3-qt+3_IzS}S2JQw6~FR-p%fvvgo@WPq=48TV$$oyYuYzIZf|%7wx&NaMI!U zEXmuA6QZ9c`mAW2$8Q$hz_GpH?%s*qcMm$K>id4rVeXJj4gEere=4JfUdi|Qy-fEW z-Q+Lqf8G1>?&QMr+Dq6bL?3FQJuhwV{C#(~ko8_>khqWp@wHR0e zVl*Gjc>iyn{ZEryi~|1*&Scq~{#bc+mbl6PrycRZFI=5`G$&MZs&pqF(AVzWa;vQ0 z{h7Vu$v?aYtbUx$TBpo?%b@Gw=`WnK1cexwx!4ysFR;+R8F<1)`d7y6%{+Y89N!z} zb~$vjtIYOUG(X>g*^!&~^0w-V32$^GG`GE!%S}pu>Yuvvm7!^a^~*Skw--{_9#)CQ zq_PK=&3)?_`aFv(LSEU|N545`)_Fc%7siwK0LZ+i*efdXPw79nL64Jzr1#&WLfcv4V@99YLg;#CksAp&rNL5`f0B8MefP` zn);{F5-KXqToZZiCuiKA?3=8I(&O6ukew%h&MrGUD&0V+m zUuf*&yOUkHd|Q3Ou`ZEGJ@=v?aIDxSKeM^1W`=)P(aEIO8Pyv?yTznyv<~$6h}~Y* zeoS_8%wx4Oss87MSL>Yh_-7vz_vcTDnVb14>~gWF$()u4qH}sD9NYTdO~N<%dP;r7 zk`A{xjt!6M#4akyRX1;B;PbtztUSd-X;0dl3nDX$3jzs zDr`0uruR=geKCGofrU@=3*m38g}*Hi4E?ryll_qii{ET|dnV8($!l!3O&0*I)r7=G;KWq?9+H-cR-aDtwlPvd6sF^2rieKxEZ1VNM zpc?7eR_WmIX<@b3xaNN|3i+{Tf8e(5d_qwUa(e1pHk^&HKJ?5mu5$B6+anHE+alOk zGP^h^FE-rHbnJM=v^!dX_dh>ap2<3KJ6qk#OJ6SPEN}2&W!B_5>T>%GNU5 z&b6@L)9+m`*AF}6LS07#r)cr_pCrvq z2K6QHb?qzP```OL`FoxIz3946_vY{UzUceEjLmsr{kIohd>_47x9G_trk$rw8ZYhQ z3n~Z~@7or2z}#ico-nJMZjCw!wkN%WF@2W>jqa z!7@9}qS+?+GIQLC>sCu!-?!@IWk&fXopK6Yzf8@}{Zzvimw0>kCsU_7>%EUXTYfwE zrD2Rk%5#e;AKNGGN>}}wUJ=VWA>^`&fqHaTr_pagU6;zf9={&fBc4C!);xHyVbP(( z?(L>qIU;)g|G#!&X4$`Pu{#R_uW=Qv)vKO|VSL0Tr zH@(F|Va*IJ4=2tEKjx6QbVJ1IWiMteK5+QEyGf19;{6w1WJ}pDxj5Zq*L9bDE7>j{%e%_$G2=@Z<){5zm|#p+OL{bKPh?#X5Orw(i>t2gVKzy4Xs zH>GWDr_EjBPx8ksdg#45TCvBIsiR9H{m#q}OTS**d_er>1Mc`!>pqC~)?E!Le%7)- zx9^=9XYEwI+i})QWtX!*yYVvfhfI@_zvz^kYlX`;M=w8rbFKf5lh${o&a|;#FI;ux zihrd#i^KaXKc9tGv1FxszG+?a?zZROut3vCO(&zcN^U)6x0hXNes1%2oFcyvpU@94%eB`pD@!AKB8-M$7&-`xhn%p9jH@7wR)tfb1zFuo5zJDxh`>{5IS0Y4djx$TigwC(>Q7k15D%XyA zam3||RJF7^osrv?b!g9|UMBB%bIv~dwByU^G~Gk5Sjmo@-zJ^d<#u zy0PetOTgZrhaHV}?3{YeGb}Xua%)u9%BuT$EKdK}`PEL%i~Fqcl&S51+{=w6OKs#s zHP3IC58L*W?as!!j+ zEy4dof9u;GJGXh}vB@tM3S14%H*o(d9jN+v@ea8yB@OdB(v1ApD>zEkUHJL8GIW<$ z-^*{W>YuE*?u@1B4{FeZn*K(X=7#Xu4`VE|AI3z@e!Pu(-7jM*^nYLdQI36I1de^Y zoqJF*mGeCFq87`A!j=nFf496bmKJ)qe)*}~-K%!nZrrGd+XgXmKWV$=BQ5#Vp%=+osZHtLn(!IP7Ic7-tUXmO03TI{VuUz zTRP|a`lW(Vp1Hf(OTV!E=-Ga;JYFX}C_{T{@m=$;ztc}oHS~)R-~GNpVlH3uHPgP_ z^>YgEK0lDNcS7w8yR;|np-t-(&2w|*ci(;L#l5)KNaalZwfH90kO$KYj&AjJ5@a8)&{mA3GnvvZ|>B8oV=jB&%oC&SP=)p0C%-sx;?q|KUem*H#v7;aQfLrGGW)@6~g^ z_P&?o(<@};P2090Sn-`;#kxxYrx}WrwuMZwT@hjts4VGFH+{eIw>XACM!V$sZBBe_ zn)Ce~`Pc5<*z;{q-?3`xm#!?$G0jESel0k_Rq7sbqSMnx~VRx zuQq3gYUf9ubFwL$FBMxZ<5qlLdGwBC*6Nn_^X!L9?#_PqH6dI%HuB2LdBzhIuCE9b zVGMAzmR)}S)=?#nHzAVB!YrLpoexAdGtHd)w!?*U$H&aG2Rlx5Ra`vR^`P51w&4TA z(HHKYXUZM^W_GCZP3Uyy?j}_ejRm`x`>(!oSo7qH^yMZU_SFKFv!Y|J`}D)bB0Mx^gU0|L1K^%t(-U zxa00Sdzr0aTn8@b$|&A$?YQZ5OETn|!=3G2x^;dQd*u|~^Deu<^Yh~yrk~!Ql8gj2 z4edoj=3G!+mDo084R8O+)jEv7W|?l3XQ?dTxk>4p#QkrX6%L1;rRH7upu_L%v1gfv?ev*3I7I-?3}ml`yU#y-cnP{mskvxLK@|Or7Ia zqQ8azj`}?FqGLaUzB(QJGV$}YpA2&kt1fVK7v_HFRpt0RbmIE@ZC56IuYQ|-f-`0X zW5BZOiv?o#{79K~jA8m2s^_>fBtIJnvut>&91-iX!{64T>Zl@_pp*<6Xd{ zs$l7oDH8oswa!fQAy1&T#re5EI%1w$L>_iMUE6nD%V3Y2#Gjz=iSL3>UsU^(-cS*J z;eVIHFU~-Dfv=vzzvS;9IlbV2zJyb%_?-#AW=JzMF=g!t+Ig?WZIZWvNd$xUs`@91 ze|cW7{$y!l|N2*XrG_{V(INv z2kV!Ua-3OTBsNYwpWD`L)V0;pXMX&&b;qS{e!jJlQ)kBd%m+c)EIjp#Tjr}kCX zF;{3^(dmPYQ;f<_@tnCn`&>t^5eMsvOsfZLo*nefjxbxZBWdE~4w2Q7pBt4NmANe2 zrf*+)>~mVP^1W^QZ^iX7-ikSN_5OOcm^M9V+Sj|{CHiJNt&XQpJZsLmOx(<^kL%wYgEcReidQ5F zZQhuD)_d7)H)Y%Uj|$ow!~XYssu=g&Q@^v48Mer4 zy0`mEJr0W>wGH)S?L4(C_F_`F%U@IfU`F{?uBmGmWZbfjym#+&X>`^sB`ZmN-u{e@ zlQ%j=vTZBetM;X%&1vuab>&%}zr~`m!dBVmP2*dmQfaYH+)MaORq`@5neDA2QVQP; z1QHn6n^?u_8GD_X9ebc@=9H2LC)QLvkN(K_aKZ^5e|v$iqJif-Pc>|`7u)!dv$H2} z@#@|CCfa0LOit$tVbjn%?|ws7CRq37Mi$WO30?W+H0=oMmGv5 z+VXspVQX*6&Rcj=>}Ic>Ok3?6_cO(p)ws9#T9>;%vCXo2@%7HB6L%D*8?Ml`*>Fes z)83h3JKPq(IjX9*+_)^K%;nWL_a##9M8T4(vPuOgYd%|D*o;uiW<_ki)cN{NKLYU9Fo z_uGbs_HWGRC#2bjOG;JmG5cm$5`8b+d@slK`Q2OUlP7kY9*}xP9{=!Nde)}7-I#4NaElAvHZw-r6KRZPSk@TSiX%KM z8y!74WV>M9{ZsujyyS|GRkXaDt`xw!?Xkti$qvuXE(xk&zc%AE({AbGQ%}|VZ$CG2 z*LllXa~ZF_32^$*R`I&p2C@FV}n`;Xm=XY(I=^yH03uz1$T=~h)` zUw(P;)}LssF3jhZU$MbMsq*dHq`yx*c>j2IE(wZadEEM``)l{&_tsluECnZ*Z2Md( z5p487=D%c%g}G4Dq7MpbdmGp9i&(d0L!i{vznPgWVL`Xw>Gh>>to;4E=xOT|!y|dV zbK(WR9xO`TB6#uExo?|~UFdwO#S*c-H0Hql59O(g%|C>e9D3a0`IoKzme{Tkrb4moDM3`{sSJ=~w(#?-;(?nsUkJf)$^3 zB~H56cdNj9U6u2?5{6k<_S)v_g@-NS=zd|xEW1_Av+dnU2i}F&XAe&};G5sTc*W)R z9KplcNjnr?ExwrE`fJJx{mv?;!!Htl_MJ`@-mmcLv19uS%fpiw?RtN%^OrL3>GZ@S zA1YRPv!ml@s9Kjvi?Hsxg8;d6;aWs*+{l}(>%rT#x3a_aC*ubJh`g7jys{32{v z{7Lu5sy$y0&6=4inld9qbxL2R=OnYvWu5(=dzQR?Mc zE5GvZULf!Lg0O89tX=kA_W7LO@vC(5uDn^l<#czRwce_*y=(Fz>HlR97nQZ0&bb=7 z`{t_81>0VEhkc4$-6pHzvE4fFOI+b+&8_xJzb(J=Z%6R#q|~TFN6m&A9@z(e`tj_@ zSRpXQn9re5(`uex<8`gMRX66^+}Iwl^>V93Gvl79jxV1#FKt_^qH+1Li+W1Qnk75$ zhubg)E)qI6+u%y3S0w*7wmS8_POGgs`z~`mbtqkIx?t&lop32HE9PyM?^gP`pZl=N zucgj+gU!pCMa&l&gla-g@9|x`!tCqoT}90IB@%Nz$~FiZDear?ctYexPyQyCfRhS5 zmlOV`>^#$LCG|RQv0zXlE0gLBW67jxr+P!|m$`2G%JjuQU>~c*r(Kgv{{20Zzc)V7 zE4wQ*hl}f#G>?pO;j5sq@Alp|V&+{B%-^wOL4!lb%t;?oo!DR7uC-shV=AKw->0yO zeJvtY8xKcaFkim)7(45M?N%1{H?Fvx&AE2|0rU2gr+;a`xp7R2L+7vG#x`YEvzFdO zyVK7#thv&e71FfV_^GAdx!2yWR_*XkYGMa+h4BjS~ zYah~IX1G*AWLaUyv&4xXmWhiTtl6u$ccab;_so^fA`-_^E@%FlTv|A5veq*m=4kGv zhdKnmiAnIS>XR#qY!`DxY;h9)?2qcJ4 zo!E2GsMPGSfUnhwJx4cgk)CAL@M+4GtFyXJ)}Nc4cj3j9FvnwcQ;PYf2%A2=a47K5 zy3Ef%?Qbvk)9zjLq}^)K%*c!hLi=UKrg<${eDUS;htio!($7q;1!V9?&Iwe?;!1qh zYACRCf5LYij@7&Jr|&qH@c2c+PrljlaUQuFZZo!TXcy7>))Vk+Q|yDA3a1ym{kZ2_ zT)$43WxVOPw&Pni?>Xoxs#f-W_Nkxw^Vqg@iY@kax77R8nWH!-Q>4+jf`pX@i{G&so!*#-%73@`HkPgFP}WLFNteUmo)QP$IZD_?y604rH`tf z<|TWdOXB{z%c_uN+ePzTTXx=GJ!{V|H<|4v`KN7l&ssfu%d|IAcau()>y^m8HoYGv ztCe~`t@rER8@jfB+v=*_d$(3;iz;Z}d?)agIXpkrHScs+NwI5@3d1*#+ZoyGH>~Gn z|CA#BBmU##^C@{{hYy+^KKa%u&*;d+-%oP_dwb?jowoJgwBF4WTVBh1+|KBif5M3I8tHq{Jj0eejdMXejf95CI3d1R3WO zk1uU#_{S(!QQ&K<5iqIc*RA}GyrDAw(h*f*X*{d}f+3de6`_;Z*OZpz|4E*BrI_u! zByU{DrG+(Z#h#hJS20Yw!Oq~ec8bSSVN0#H<)32NEUv1}_+|HGRr3Fp3Rb#{mN>Tk zx*+`OWQ%aLe_BmcSKqW0=RCosw=cAG9Q(cJ=9BHr?Hv5?HMD4qV0OYANuXXNDnX0>I0MbZ-CD=m-p zUNg&?v~v1Q72_?rOsg;Gc{~g{{kOfQ=4JY zF^L~J(gH`XXFI;WdtGX8ULKES_02+_xMJtKIjwV+8h&9^Tz=46{OR|`IWY|P9A_kC z^>a<~y(V|{YO~)p>pPboz7jnlyRJ&LAVHul@cmwHp`SOTLWNmO?Jw9>%+4xnGTZKc zL}o&Z`8vVkIf9=h0?&x{##}V}tZT(5{ln$g+v9Kie2NtGLUd2dEaINsl~=q_i9a{; zB;(gtMweFZwX(_lEVgj1f!@ccsIS`_M0;0Oo>{o2j$hJl{@qgXuo(-9N2aV^()FrRgw;EIluv;Wf+ocb7xqx3f=}z8SG(eay1DvE6mSwFmOg zu4k1o&HfNweMKx^_>kOEN3-p>xPENj>HeNougXETsX$cl(SNmvF=m%m%-Z0`nf_Ss z;m!v}LDQa#obO!mX=exY0~AtOe>YC_ta~ymEU!OUT$&AaP&MAEdB$gkN(;x^`uke(r|-VAG@jgYw_Q}|@sAyEi+1Y8Pd&YV-OUr% zdH#FX^Y?{?@7wyi{e0NM^0U|f>#S8@9UpGqshG! zTc@TyN!we$WtZ)Wvtj+`jMugm9(G&ZBDV5!rT)U=Y~2eB&wRMr*6-w*+&24%b$A$W zeEt&+3*oFA_j7KpkhvbjAAi8(_0q>FDSx6Y?PKoeoIUa5!`ovoFGkq^*>TfLae+6F z{ehY|?(8<(IsO{Qw&p$iC&Z@xVt$Ey|!X0}z=cq>OlcFCcmw#UVXWw9Y zC+M1oru*^+>)-7M1m(>6Ki@tfeXjJ67t{YM9ILtiWX-m_&BYyTD7ZgN`bI}6&rQul z@0f}d_2)tTQW>{T1$r<2TOh>F6yI+?sXykxyZO%Z!<=3|O#ErucX`8cWefS_IbX|m z^cPE8bOxt1npNl=)}C=kYDPi@r_O^*n)Wt)E(S|4-RXM$P_U=C>`4L3^-~9S@EHBe zP!=sYbn`yU*Q#-;a2^zkK$Ilb%x-Kkj8-^ts`Q0B_~ z$G@&=C-{neZ#%PgQqq$P(e?FhbJI*tEwwECmR>RCK*S8YwR&?}u3F!Jyo9SFi}j|Q zj#fjvT!p==Wc2)(r2+8jOkcZCD@iAnn(YjUd1l$+-i+{5N)@}6^_6<;ye1KXb( za_xrOPEXjC@+Xwt^HBWM_Q}?oRf5~pZk(|BxlFHOhhw22-;xt4Utevwx+TZ+vI?8G zjj;rWnaAy#NjqA1Pwk4=%AJ~jcBM+!ggLp3(oau5Wp`smAg6w9(*7W$w~YKrYStRN zy*DXaO4zCGa`HGbwaZP8oVq8cl&>sUI3cV5 z826N;O`8{ds+wf!_H=pI!^yn2RJo7+x8rm1e%28X8k+saLm;A=>*(eq*F@z-PpaK& z2rgp2=X#0vYV5VvU8h1+6(+BYmhH?jJ)FNozW-dGhgsyu(2dN2r!K1<_{t!AVa5q7 z!SI>-OKpQ9`n#_SN}YwfX_sjIazN|dF^`oXSM zFTS&;$%u>gZZ5k2BG{%xeyW4j2EDM7ublPY^0qJ?m9*J0P3(?Zh1gry4f8I24h(a? zwaV9+|Dx$1jt%UlQctQU1Tj~zbnJHj8Wm-KXyTrIUmi?~a#1YL3;8FrXtl%xcDwNZ zPxP6%r>e5){?t7##XWnvN#6vQKP;!FhATJkJsY#a{`&aQ$gl>}ABZZf11^ZJh%bz`b6tiJU!HXxMk0)4Um@{|Zkx*NB zFv{}lESdFkv*m0p(=K&O8_H~a%Vec+T1d3|4l~zzrOSKcog&y{cg+`4<-N3$apmsK zf7o3kp2}1)Ph2W?c12a~ZvnNSEH$egk8;d+R7lNWT9A7y>~&z3+e8l&!+OzJ!594p zIUZHMET4IOv4rX`F}ud(ON&jr&E$0Sj&K_vX?>BFX1!U^J^Xm>>umwLJwm#VPTlVp ze6TqB?s~&a)s%Olz4P3ygg4sey-`u(X$(_*EhXA`#A)9GhSFuOw|gokX)8@D{k(UB zLca5MC+QUVJ&{|_q-6j6vu1vRMauU4lF2n+H>|m7^pWSMs_@i_fpyB6M_cYoc3tp! zVCtlBaQX$myt_Bwxas|tZZA0H=5x@N<>pNb=?z9HclqMJRxSzIJmU<@&9JwQU zP|!F&>Otjoj>_r@497r`HjfYl#Nv)hZQ$J;OQ#r>i*f~FzIq`#GLc9 zO`7W;`T5UH`;hWr>#Bb?4rR0b5d4)3H}HqHro!rSD- z`{v93TW)YeNpP*Hy3qXcTu*Jo&_#+(8nd|D7x6coZTOk_xujQ;Zw14Qy61kPQcP_T z3%|umXp0^wy6@=mgdxd6x`VO3O`RwAeXe_+P}5A$|A~bx!YdX(=`eISo_gfTbW`8B z(5MAQ^Pe&n9gw`S?RDxYhmxJ&pFYW-uFAz;<-Oo)6YtaYb}U7`uEB=6OeKX2&YC9* z&(M2#`1u9R+8=+5JO1<(29+2uVEeGre6vV~)M-iCHSWv{gHKN17aX*H?@UFt8R}v6 zTEG7>9GuM*5|ny4vTIX?zlqh)$#VCn^i`g`Zaw?n872kx$F1?==@vg;TgF#uHzozH zns(mKRKN7whL&^M9rmx^B!{$y3(onGlGLCTVX0%F&*}NY*0Ym^St0BF?vrO{6=!c? zd$Z*K>7++n@2RRSx^cMsMCS~%=H3g_7o;XBy9BvswtrU-GBBJ_CbBN=@`))&9tK+X5-Al~9`r=x_wt@+HYuCEVw_Z;O{~i|pZC{kVeQjZV>C<-8_}HI9 z|I5E#GySpo`^{f-uYTS8)x0}AN%+*IsS*ha8-8rydDi@B>y7f+x<{r2HGFWqz+><6 z;l=+ZF|}VJ_Yzh8?_L$+5Hn%u`<%&X);ZzJnkP57W={B0ZQ(v;k}k(y&ALDN0uvKt z_+LETVD|p{v*uehF|&`a%*>T|Eqj9N-ioRBW-rX#du;XoOS|K%>(}kQfA!wqTfZ~k z{@rHo-0#X5Q0>EivuD+EhsC}}rWl+KlDK&IgF36r9+l#0KaQPOUdK@({AZD;Bg>Bl z*&QKw3pSrDD?MO!Om@SR+#+W~)^{$=Ny{sC@*3XOX5AB&vg@pQLPhf5qAh{b<+Iatcd=~cgFc6Cv#-y&`{Kxr-K#|+Q~oVCdGz_#?(pjU@4n7k%9iT?KfKxA zk#|<~<*Ln+uBD1qbJsSDYvl(#IbXz{AO0!7MD>5#+r3}iY8pdl9ONnJ*I>EM_%vio zMaW53zbqg9MvmG!vpAl9TC)9h(EjW9<|nAIZ+U*^L)^a?EB^i2QupQJ%vqdT!VjkJ zXlZ&Cki4-bb;_g`|86$l;C(9pCkG28o;%vTev2Rf8cR{jIR{R}HwHcIeHN=>)9GD* zJHy;)jmRsh+2T`JR(`zYIq~-iwa1DdpE;ikwOOrJcbDb!UXk?KLT7@{ZQf-vH?H{p zjLTmWR?d;DyVDZVIZ60vXv3xO1n9`_3LsC(VS$KGE}i1~Uqa z+V7OcbC=&OR-U)5|Jjkftj71+MF(_RoHwc&}1J^(3=h*2}&rZx>lt&YQ1&l6`CC zZnMbTH2uY;rM?bq>0H*%^N(!hx#uDBD#-f6|1^sU>i2w>bDV9yrE+f4Rka-FhrA0u zC_ZY>wQ%q+HgYzem^pKK_L&nrXD?fQ+wd*Oh%CcvLx!&g!EzGA-zVH5-?2Ub;N~Q8k=Z3X}e_10pUE}4BHSX)J1p4J} zeEzdr)^6qA`6_QWA5Py|yk6+D>-OmjLJnPCz5AG7*-1uAM;+t4s_%5Ko%(0}{&DKv zXNz~rZh!IT^pWqYZ5Q57-~72oy1-OKtkax3{PG;{@*jHF?!~>}vlmUe+I@DL+QT)M zqKkevT$J8n9Asz7=n$PL$a|sVeL-Kphih1{xQe62p1F5^x4u$W6yKP?A}ToLljqZL zof|ho`J5(X?N_n77kq2uqu-CWL??>ReE8(W)u5?)|D{T!w!L80yBYO5GsSS{{5gvr ze)zoCbD_e{6|o()OWwyYvZ&Z)U6}apDQAZNKMp3g^G7lmV!yt3l)t{ZRA*0f0C#h9 ztmxCq75jWF*q<*~TM+L((Q*I7yDcU&SUi&sL`Gb9QSuF8x3b){jHi3bOrKom)g_y~ z_(amb1oSbQniLoJPZMgFGEuuNWs-Wct74+GEpI6NIx=f#jQuhn_4k>ky@HS3*$$lAvZgL7sKO?) zc%HwHd5^ep$&w_cX;*JAQ~F$y#d+({^~1-wmppmWcS_2twsw_h6a(+4V4Y`cnlbAdUT7$OVcNELGP6XXNuS!C`Z3IeyA~Wt9RXp?Xz@W{OVqL z*6Hkt7l&4~-n#QR;!aaOPn59W9fKc#)i1BAnbUBsdD*V#u_r%d#&WFSB&#-q$~c2PDJ& zf2IdD`V}YLO_|}kbVtw3rlTH?Cy#q<;GXFbc7FNV=3)wx_^CqreWZmkj%yl%uiS!bIq1h5Ec*ldnx_nhFjJy zpTu5mI?r(0aF5MypWR2rHMYv`jym;d>OtSFir!xh?{c3%Tw;A-<+e$)FIVY1*{xF6 ztWAINU@QOAsOg82=luv?C3rb~PsQI-{QXX`=HvDyDy)`vfOfSEqr!Kx%tRFg->EMWc{5b)qK)C2{pV9{rrShq7Vxvz?N6SlDZ}Ju?V9vZ zw0U;Q^rm%s_tz}jvFQ1Ey@Zm9DvS>%e7}3+ppUlN$<=ubCF=#ODxa|L3vSdCOnv`U z$ItxdwBsvwc3k-5bp27tUDY4zJ1*si{bvkV;rI)4m;pR^02*d6F*HEjN@0R!M#}^= zAVF|OD>vk1o`|8q-tXaCjvN(xb?CR!0|S>tQ5BwA$C(;UK0-<-+=LWcew3fe-F;fv zt#*d_`LFXl9H&5aTpIJV7O&|jgT-uiXk zT%l^eH&4@Ycm%e1o?Xr8&2>Y$Z2k?|B=IA9+pTKcBxEYq-^?;~Um~@Xb-vy;1#jDI zqaBClX|o1ad|Q4X=04V?M%zr3HKgUvbw8Ss#Q!_C_a%hi9fLA zxx9d#+O{ap>sEi%er!4M=Wv6THlHHfwj_~4cfs=-Nx$W^{UopdZAz~9{NCNP-!|v6 z%I}Z=V<*-rD{d^^U(;^R&UNog$vv-!rqj-v>g78`2%qsPI zsnXldV77I)*QV4dKiIt8EE=>z!j^x&;KVF;;9dIi>~%U3I{f|&>a%*6dF~KgpYHm$ zF*RO&?P1BOYYG)+Y-67O`HAOEEq1q+$JEM0BSUXD2|X&hD7U%s)Y9fVvb+0#{AFg5 z3%0?M#z83;l*Y|W5C_?sVi`#@C2AyXZ{+Q~$7TX=H}7-m4+=D%^YDYw`b_Z^)r_-R z8|`#{UC7y#c~NcmP3diafAOihF3G)Fn$yi8WX$Gz&a(KSxUyvH+s& zL+h=`EV-z)8VmyF=63`3m7ZP8b5LMn_P#CL0dkD>(SH?QH?NP}=zi(>))AFz3SG!Ydw+esV73#lYZ)nDj+wKn;{(dh@3{B9zu-@8u z?XqXiyA8aA6;1A+2;fjjmzG=ZCc}N8&Q$Ws>e;U(4ww}P9@unVb7N58!`(1QnW8d3^d=;fb=6;crlk>jl z{WxBI@21g-xwbq%`Ko7bDY|zyZ~c?TZ*PjL*_Dq9*Pdv5Fnjlt$%X-y{mXg2o}MSO z;+jXQ_5;1_DMxkdZMS4h<$W=$e{En;tL+;Diw%JXZ{Ori3u(K#R`Snw8KHR>lH%;w zUk}o@I`hkx&-vYTTh*-`r+#!Lw9I?;e7-X0{NK)^o!gR2>jQ1&tcoOGJX&^m!TNcc%t8WIRUG+rn{qE>@2O?qtncGlzXS?`gKlf*81~c!Q)`J-A4N^ zmbp~V*7`j?L}e0(WcQx}wyMAf`L{Wy%06Us4qTft*|_B2E+-#X52eoi>XY6DdGM$& z{30*xbal3KYnBMpaUlVL#ZB|(GMuyyjFx58%$HXyvOIbsSim9U&`oQRPrG;uj-O}U z=e;p2{zwsLDF2!4Y3Y;R=AJrUKDTPK&sqCi2UZD%{(Bn~BTM(cTiMQcGr{Z2w4%CW z!ZoLh1&yC8X_(3;>pt$x((nDYXKPQ4WZVhA50f+>-wwHIw_RfHTSI#(xn+D#cJ}gZ zr#>W}sk3Wa!6CI-Yrm|#()F@Q1xd#^-m6v>-Aw1_^<>-gK0!(1MB1`-7Ti+}9X?$- z__>|yg%QiiH+Nb7&i(?;rOx#VX<7Y-`~; zx)(D~*>QcltN&-?d%oiM#|3>HA41w#{FOPQmupzxXt-C(QgK1EDoMcNi|Q?=o9>FT zP4&-p)x-^F?0vN2Zc%fvWL;i%_KNtoQ#iKn>S(yHC>r+kyE zSDv<~q~;UD)Ixy^92Q@HMJAVQmtABSzsi^moe zpUQpYzxBtjNb%hXyRT&@vK_pd*#6P9KcuoCRX-pxJyqW~H6=6ADZfG?+CafT!OYM|!Q9d)mP=nwF~}RBh^JE|8(V@S5fX+b zpd^GAhTw%zU@@o*O^|LkqemE;Acvs|mM{d*pP{&rq%b5df5d{~2$7JG8`Ja%1XD=N zK%&VM6a!!nBN7s%B@c2WG@6jxLUeHonxe%1}XqVJIa}(23 zov@T^X2|858J2R*3=-Ig*fs+t!GUloa+sQ72~#t8c7TSd*#L#9ImB_0^l1)q1URM< z>C+rNOf5hH0}!SbkO+sk)B+T-XfCyY=PqcNT7Uw1AY6(ZrWRPj)B;q_fn5)EspSBL zsU>olT4D)POY|_c9H20@L=IC+EMW@14jnm64Gjh;Pz?=0VFW8t4GrLtjmT7n;G0HK zT?;BQ1|YE-f*XHu*CJY8$gYJ1KB8PTGz58SKwJxndPpf?XatI4a4;gd7JQI0SP+`K z42?jkcpzMB1j$k`*Fw?-N>kj>2vVsbg)O*2JRq(`30q@qVGC}DqlB$7ZNnC`bA!?} zH^kO9Hw5p`M0F)?(<>HNqJ$;3_PHTO1Kp6uEp(g>D?^l~x*@iQ9_f4_oeQ;AB*|nhR7~)n1@JN9Ic&MOQLEk$wrC1@F z3t}X+#D?ZYaK|%<3!HX>xWJJT#03ops0F5wfCIONgSfy=%^)stJ1&R|+(-)I0=Gbd zxWLtW5ErEG1ks>cDToVF-Uo3(N>UIFiu)igLvZc~(NI3r6_B(M#AOH${UEMb1%2oI z(!3G{BU7ZF4qC~fpzoYml9-d94)ZlAG=jMFeN#&kQxZ!O6$}yWQ)tN!avdbRz`=zW z1L4y55Aanmw6lXM1P_ToRR)=Jf%F9-6}cdrV6uh=T!!GHPd~_l3taIb6oLmXUHFh&W*1>dPI2l|p!DNxl#Ns$`839v@X%HxV!({Qh2%K?YN-+!qrx=(l z0fRu%2vdq_5Gd|ovZkh7kQ|5-Tu5<*#lzt4Cd>c~*2=h2br63nS=AXevr8dmpQmV(ho8>;xY%fV-RT>++Bm& zfMGwl{|1vqvL9{}l0nGvh-naV@8 zX_DN4RD>EDaT$V(c2Lm@D^K-<3_)c$tPm&cP~?!ubSSuwL6$=i4#E~b;JyLOTrAe& zC{VGbX6%W;2*1C;bq36SqzEA10{qn#q-l=D0&?<>A$YhOW*BB@q10mpJ%f@yu*D7j zx(?DnhB*ewHiAAQY%%^gL#aBEEXEdRNLdlw6ot7LGw{GQBTO2}4_FFgWTj4t#i^hv zCjH1@$6&7zZD-$LA43ChU)LqIIJqdZpd`OY!4y(kfJd@Hs=4&tGK-2!oHG)O6im$Y zeG;K;3rqd*%#@Oh;%EgUP~F94pkQi%i9szhG|Xk7U~X!lU~XWcU~XijU~XojU}j;c zU}kEpU~XXwmNPa3wKWYC%#2JGEDg=UV&>)+Tp)Gk<`xR(#%2npre+ZR;6OGs0MGE4 zn;L+o*7B0`Q!?|?^}{ps9P^4ZU19v-(xej5gdWIuhKK+Mx6Ggc3J)cx&~RUuAZ=$~ zrwGhY0`FxHf;3_=Ldg;lN`^+p@L)1EH&sB!1}Hp`3{pUG87NqQ8~zsHCc8PWy+>{F>XP{tWZlYjfYNB9b zVh)x8nQ3MKY8!#Qh7=JBhUTCM4bsOE0T5|u41gj>A0B0(_<(cJqE5Lr_vNHGssmp|OI6nUR9Iv4w)Ufw_VO zxZP#~jYTtaGX+BfGmx->f`y4GmpM3vL9&^-1*k!2VQQdYXb5geBijPo?{RWO7!P;sXikaM9COMZ&cPs>C~EZ`0x)J%9{@%N1iit^TW_6-TaEC;}i z0vw6O*aSJTn8Fi_DJT%ZJyS>!!}vI8E_88-E(nP(2jYVx3u*_5kB$u#Kq4UhAQ}l{ z*aVY<>45Q(X|Nn9(c-ZYSv?juPJ6Mag}U9;$P}q~A-0?c_v+E(*WD+`%gqlIzn)m) z7nI6y#IL0VQv4bk!sFKjJgo@|Uj#;onHn0B;c{>eMt8YuxTjZmu(q>rkU4rG25to7 zaJLDPyUpOqlFQW0QUQhyz$}RKL1GXVlmwMGCdTA=0^IaR_l2*st7DK8s5KIa;SEDj ziKu|X9|nlvH-H5`mxU#=%M=XFAw3?P^$tiH>LPMW5d;0)%)HWKq;dp2P6Ra-UXBC? zI)*#Cf?^9ZnSn2D!r@IrLxev;RUE9&F|{xTw}C+IAPZ1?1aIA9pa3csAnh|~Jc8S8 z#uk)RP7DU=1DOjl1Jp7wBD$3a(gCU?h-v46+Ku3r z9*63^r-EsSH^B}zH3L^Spx^;jJH`fP;HnG62RRnZH?jch0tFvP9PD9JGX+y4 z3k73KBL!ni6G-4d#X!wfkQ@ku%rr%>vOtY9JdGTXG&EU|o7fBu_0!Vy(=zqba`e;E zGP#UR^b1S#OHxyka*8t3GfKFOEg=FBo~03lmy(o|lbTk7y^UmOj?{OB++B)%b*a8j zYF>IthJvBFft?-v64TgzL%u@>Jg(p8D4BaCb4IMvNqx!Sbb$5Jk(EYQIxm$x_-3N% z+VL=Y)8GAHb$0!`Gx>bXogf4LGj}RCaX#Om(p+=kqVVJcYt4UNzM7>bJM)E}m0i5x z&n$=SU&Cz|?l^sUVc!!mql1rRwjNxP>2l4iH*0P%&&hvl6S#Ta9gk#DaNHQ?70OyL z#dM$a>7|FZC>LyA(lSN6f>qmQ-iP1OJR6t%(E7$!W)P+YS~CZAG;C}cJkkJ-2YB{$ z4vX+~^Z^$`Sn{VKr1=_>ADWj5y3SPr5@tBEEK!M%VlV;pITU&S(cas z>I85Z8kp!O=A|bUB_?O5mVi<`5*M5!kV|QhKcVh`Cj)8r;I=-h8YqtoW{-)nsRBqPh=z!Pcwl!a7=T@AVQ2ehq!1_~e-nVTDdMNCXB!L}NknkX2XS}K5O zkV+E^a$42k?2aDOj)4)b5su)P#wdJVXgqqhJo|$bzTTK})|ujYgP^fr1%$>IBLM_k=7J zOpGiQOpJ{cOu-Fth@7#Bse*~2k%B3>8)5+|=($Xx{xSjg#ZAG*1!(xh2vk&{7ORj@ z!;z>B!GQ{m26Bs4BP0FXQZ7>q{esk@%={Gn0|NyRHc&7JuNyN4M~JDR2{@um4NVl#F({dXnpTit29w~L z6jW!MgCot%(o(_9+)%*+nk_(T%uI|FEWxtomX=%~6`*lRGX+y~Lj{N~bMT-Qgaqk; zVo(%=Tw!jgU}9YS~o?%8f zC~M$|aC38{j*KC^S)^bHSyN@eWnlpFhlK?wor6LF3kIhF(2#?ff*C06!D$0oouvg- z#uC&6F;FnEuuw2DGe-(dVh0Pr1L07=g98;*BJl2hz%=?^%+V zlbP(8m!6ZVV8EpxT#}j_reJ7h!KLq;SzMf%mk#a=Di|9ZbLoQy=z~*BH1r+yo%Egc zUG!b`-Spk{J@h^Gee`|x{q+6y1M~y+gY<*-L-a%S!}TNe(=y9a_0#f8i}dsJQej!X zB%>%bRllS>UlZ&@x6GVWV+BKSU?8u+01H4v2eZq-g*t5K4C_J|n;2Rm^&zH)bB6?n z@3Q+i<8Yv0uIa2TeocEruk^8szTO?SvCH+9wESWvClL{r#t&@{LX(O=&2Mo~=+F>g zocKXtW7fv3H$C2^ zO*|mQUgXmJMXHl-e*PyiZO){*vot?%1B5~mRs-F z<*A-8#4N6UTy4eW&GGzmCeD!9aiUsDw_u``@7!4n`##^5oi=C6BG2&UY;J1DR|cC0 zi+ugGM{=TZ_#SDq`fE+w#m~i=q!<2}w9|X~Uc0n6J1%?_F`ZS_S~d5VewLA_&t9+A zfWs>cuM}kIh`RJHb_-Z|#Usncw5zIlmdDq{aZA_&m^CF$JEWXWE&Zd>d&IwJo4bzg z!tGz@+$i21qL-Vp%&`9t&zr8ezg4wYcCS0X!LIE8!+-Dg>3==@wwvkA->UDge?$uH zoWfP$eemhD9V%-d@!ryP<%`ss+_AEE2md_QHz8`4+^^OoY|IP3D-xZnclz4x1sRDs z>v&@f)-b!u__XteZJu}9{Phj1XOFp@+ZwOW{JN@8Zh4{b`nfz@yobeSa{p8cyK|6b zN9hA6?U+Y*qCC5+&2+8q6sN}Y?o<)~bRgx@^GB2C)t@po{1|=cVEHP)iu0TJvmPez zI~j9J=en-W&3yLL*W5yL)Biqvr6$I>nY&-a!jXMWQZmaDt=fcJYv&(|vtWpQ_IFP} z-ddqIIeNluHLiuy-O5LTZgSQHcA5GdIA5}}`%~bBkC&OG{yyNFBw0SIRV3k~$g^;* z*$*E2Wd1Te?C{X}hMvr}EltAbKIj#%^qyxX{Vyg>Q~XWK2CSX~CUBq8IDdbhV2aP3WLy5Z3tqJNFKDiAGH;$49`I@l*U~4u^E%FMnpDro9I>9_-wy58_ zS?s(v$NZ&~&6gJ5Qb`t@&M-5n{JeGe^XxI@bAprSLWtEvqYP!SAO8AiT&2?uq&Wh#MOv@TYoR_JjtHwRdVIG zy>&j7t6zSX`Y1H=`pM*_bDPep`aelNt2u#%TQ{18Y2jWgeeL-0j0-D2RJ}RUe4+8t z+5~3Di(eQ`v~t%~!QKbC*`lVGQ>KI3}PES<&2W^hRF zReh`Y_Pxq_|3rTGJa4s6r?zD1+!9*R{3^}l=(RI;&evbv^Ip9BUBb+|*^wUVx%2;Q zdAoat-i^GX0>ycMi-K3#RZ0ADJH5U$)U0{!iL8(X$@A8q{=~YENo1EY;En1FTa>fZ{iUQD_pBOb*6mXlUcB28^!Mw*?QfSi?yah~ zn`dds%O5AOrc1&!^=^(r`IiIN=kqMB{-Z0^`^PqGnZy=}vu=VJ#!})fza9#R_RUfL z%sFH4;X6C`vamm&QSf8S!d0c-hZeOlTfefLtz7Eb*HT&JM&TK|lr39tc=1p4tZQ^Ub=NQ=h~Z|MZsjJK%q8=J zS+-s|IcKd&O2L88R#zj=zx)6E@qA-D!3QhepEqAn=T~Sx@sR8hi;H`$x6F`Ko&9)5 zCF|Er$M+#Oe9fBg<(x6r+?sv;m~MN-1&iW+4v)|OZ%|{Lb>yG*%{Q-g^w$PHGW3hA zxI8J(q4|LaE7u>HuQp${doN$lSpD;N`A6%8D93Z&_wzKtR|M zCq=%S&;F>yGHsY`y!w_^^!GQ`aT}{vUcDXjaLV-a&U#m#J}nmMjk@4^^ZJ>cX>T{> z=(V4&I~Ez|@oZW`g1W))iGMZIbvAx(d$Evp!dLFp*#DhI>)G_G=Kf`fY2O>Ced~zN z)mwATF0ISbpOfDfAf?XuC0+g3g|CY;_V9jZ=l2lb`oj8V?DNI_55=mBQ_STS9eKXz z`k(5RKY9E=p7}U$x}>Iq)q~n6#}zbLUiT*G%vr7#_POdr>hbs+S8CTjJQy~6rB8f{ zS%zim!A&hJhoVis-<$sRkl%{%gLW(YbI)gWtoPl#S$W&34J`s&)-Lf|u|hX+N_5nT zqBQ&ef(E@$CyPJcw?t#t|KCUU1?=;d`F7->*aFi{m&#_pmHDwO!F2z*J&cnST|L@( zZZJs3`Ij5c&o$4e(3`CvG&AVS#hAcfhqgaD+#uWgd!9?N7vtWqx~~>n{XJ`cZ@-sJ z*WVYRo0>2EZ8>D5QT@m-c17I38=7a+au*ieJ9DH~d$*HAQ8jDlE#yOe4 zlm5Z=Zt=z=Z#u(vUNaYqKeuCwqW$irDSA&f1Rr+(XJPY&BWc^THw|7(o0m*-+HBY! ztoFck4_}2)P}f?w>X`~5H>Sp_&wa@r{@0_#^atas{;KPr+^@#2TC#Wco6p-0_&om|2{Pd$F&8_hS2U{sLpo9%EE0T^&UNr?w4Yprp6!mvDSJ2`Dc8K-UgLS={#m#cUNK^OYGg!XxY%DZ561I z(>ymIYu)2q8BT_(`-fIcmNqYBb#4q57U7-Ne1W0swv)I`!*>hTlVMrUdSiA6Hwbk% zH%w6Bsoc~t>j{MgUyT9qB=K4k@vmI{R#NRy(&^!_oA?a-Co5dn+QtBIC;+EJ|1@ATy22RNU3*MAeM+lVU#6 zPZESU9)~`A%;wb7XDm@_aavfrKKRT-*#ya9{_9I__nX_ie{+Z2?}r&SDModLc{#f;Uc3`?f1`GFb&(-wlUnNQo&8pR zOut=UKe9A7_dCYCaX(l7k=0#YJ**Sf3;dNR+P>_ix69)2@lvf{IENPaW3+>hmhG2Zkh3pujZ6Z;iX4Tn=SVT zy!`lm%_Y&I$_dLItR;eXee=DSaN>k+97B$n;{MCO#Pxsve&}p;-mY`f`TJL=S$VI@ zkJ1YL|LI>HS5irme&mwn(?vepc?Is60G ze4QQol&$f3rNPUP)5hVFk2;M_T|KLvQvI7xYSY&6y3b75I9>Dh zclo=eJU5)z-PmsY^+tYeOV;UEQ(sR%q%`Ax*pI2b`sTMAYS-`DyDseYoh<@NpN`F& z_nF^B;N%Gzw!3rdE026Ky*c~ZY9eJ`RDkx^@b+dgmpwT_d$UFch6;uTriKb;mKK=3Su;xuE~tUrRwKHI=lKs`o;Risb#5o`o)$bgJbxDKmmQY}Duk^YduFgJ>^w#ZIxI-sP($R-p48&&{_|4)UG|e(Gok&t6O`%G5u!SX{wJ;>^bg};%2aV2J4yMXH?RRl8>)R6Eh5+ z5qL%_&G56C@vOqcX$HYFx1KRc)A`J|xo75S3j^sHPkTfcr~NW!No)hmS*YvxnF7J77xgvdE))p=2ugbeS_nzu~_+?M|`iFbJecARt_Rq0R z<{QrU*k#r}|7v^bdwTbGUB8Gw7xcH?Z#I9dldH?D^FHG3hFwd)h2DR$e_MUP|N1>a zZ;BFi;=Zm}o!~G@-h)e~_3(#9OWtfacDPAedcVRfA4Tp)c}4pJ2ZdhGbP;*LH7|j^ z?&Kb6qq+PXkJaLz>%?jPb$Vfa!Ee%Z5v^C&eA-Xf$_BUY*c2UzYZ>twVwVM`1qRDdVbNX^OX-zy!lbf{9TdMkE|1^ zQcE6P6;NB~_bz<-ilhH5#C50M(Cio9VqG$EL;LqNomMe{kyi@(KdfAR;*e#FvdzXy z6FKz<*6tJiPv7O-y|pSfXOYCKErwaPA6%F%Ry|EVz^HNMiMs0344t^IbG}FGxy_$g zzcBhluSI}D_0vr|E?IOiNDHO0{Zrx=tg0=zv`t0!=yZN#<TNW>BaW1)~0V? z$)kYG)?-r-FI}m%NhF?2WoGx)yeMZ)cO8b`arTVqr~9(|Ogv_a7Vy1l>e~Kk{m$%T zG4C3kr^pI^(pFS9m+hMTxtF!A=0Ug0HTU=HxY^<(c;$nh6{{9VoGN?$tx?agagD-L z=1%o_A+@R-XHPoT#Qx(z3de%i^9nQGgseDG#$}l9Rp%y{(V`xZ-4@Y!+p>E;`#!xr z#-H{Xd)eGJ^zAr(O2*u;KPHg>sP{{sTTG+YoA#K8an2=gV+RHI5=T;ba=hhR*4_k^7`swDJvfDQnkMO zU`@N49y?FLg#S}wL^Cq=pGz^%D!b0ypIrZg%{0UKrJ$r?_1m=E9d3Vjd@WD=nQ6uQ zKUDHXm9Cu9j$NzbreGwYm`wlg&zBaU^-N)!K_K ze>mmX^q;JO6C~Dp-=9(||8snzN0K0AB*g=xo38s5rW z{F(Yk&!fp=_5~jev8P4b82VSPXc2zum*lwT<*{uc`cvn9pRuEjZ`(TU^~D$BZU(m3 zix(J6b{_VSxG2Oc>1(HAm*L&^xU9!b(0$SN8#gD%2!$QG^T~I9ZHeVSwmZ$MPsW@6 z-TLp+)=S(4qISINqGNWOq^jw#9Ip-DBVKW)w5NcvI5U#h=yh?G?KZElExUOXoio~3 zx>RR>4bC}W#wZ&(i|?P>w?lG^_ba{6v|7IRo%WQM=QDPi9NPS@DbeC9cUSFd2ew3Q zzO+J}GqcR)()GW8!s>#bep7bW>V9=@hfL)27n=`i#)OzJ?oxjL zcj454wyP4edUXT5H!iO7zB+Zs?1Dd&rPX-WZ(mjOq{C}Yzt@iU73ZV=2Fom4y!nG! zOm<#d_V@RPmH7E1zHDoYcq10IZSJM1L2Nx4+57ccLytbm?0Y6ExtV8|%UwB-2Zujx zO-=pD&Og=V`i|o}R9P#!ZsojRWGT`qn4M;kr*$Vpavdk1#}5uAMYW?_^*X}K4K{if zE6-(Hn?JiZ@5PO}hrcfV(C%J!^y*XX1eum5YZWP*%a5`aG8hH(Em`(?dS`dT-WyyY z2aW3E#f=)i6y|2`tY9rNy<4K3eeqw$U30a_e6_n8Z_*D*$t;~BFT(NT-BmXk-W3o2 zyEy23iCXt)t}|M4z4NI{=#PWW59(JOyjSnr&Xn7uSGGQG@`LR@^1Kf>u-52*P}%FH z@K;aeVMWIBx`!V(N-v*($NBd$!{rnt^xzu3VoG0^A{v6v1M9;RgWmC`CI8+5L3rw1Oe(_#^ zxtPq*+Yf4)%P+>KCH-8iQZr+l3b)F?PtFzye{z-IhjV*!INvN=L8Z2~ds%l>)t;#x z@_Vq|(P>AU#tw}e!4uM2m|c}}<=7|n>N+l8DDZ=84nxNE9edRl#5}H6(I|D}`+qCz z@2w>(1-hE!kSdKI?-xqxJ^#_RBrS)7H0@pDf|+>lT?{U-e4=1LyxaUw%wl zBVv93k8kj<*#*p3r{v9V7M=4;AuZo>IPpN~hq_N%LV!};gS^RiCIJMz_^?|lAjbp7JJHR{4A zH6A&eJ@POT+`OvJB+ky$a;?SNguL|iDsw_t{Ftb=ar=@Zx}O3XZCn9G@O_tB zL8dsz$Ev^YEG`}{4m~}or&pxq6Y2uD#dYmAmKH!@n#3EO~T-*>Gvd zg&(~Ox!cYwJ?1X-*|S2w;jiHO*U6sYwJ8$4nJ<&PPphxv7k+h+ZF#)g)#8wS<>i+g z&t`vqRp0jL!)=C3xv__zs+zY-%2+L1rLykyp;fa}t%7y_?iF0~Y}xvF>+-aqmyv?< ze=paU6>Te5-lx5r^R4b8S9jaByT5(zV&nWC#Mrg`mGHfX3V)1xd*2u_Nv=4xr(3z< z|DMfrZ|vTfJ~{LC4hQ`z>+H0hd++>{Y(K2{`LEBRve$lpAK3TQc;&nZxV-XIPW|1ES4&kd8VdL<_u8oQWnokiC-wbfp4Ooep|S4AFHdU|g@_w0jz z+D^uz1ue^;eogone?lTXY2*91*OTuBo>E*KF)u3f1lzx|-tRiT z3Tq$y^i;{^m$b}~*|+lVm%fnu0XlAvQxa{=^OACIRL!5ImQvvL?qtfw>Ng$wuM$*U zBad6Ax=;DjJz>`5Nrl`$nnf)By2WzLRle4^zVhCQALTc;>T3qhU!o{CSK4#I9^bDg zdfr)dP1d(4;gzm`{^5jvS4pl{jpdCe7n{>%jZSYnUR*r$pN3}F({8Und|$W3K5m$E z=gJoS18t`!ef3WU>#FLOxA?a1+mslMIDkSU| zb>|gqxiz=LR8my-DgTyZE9M%`Gken>WU*d*NkH+f6@OQ<87x_vJ#P_H^#n$(c=K&% z3Qk6_PQ9>Z^`h)&vpq{rJ)OV2{QW!m?9$iu)(7kFR_)wX@%v1@?ZN-+xi{^Uzka=c z#+JP1>J>ZwK0K0QKZEO>oTJ~KU+?BWul=c(8qstmWW|BlA8kVQuL8J^PLPyZ-n_T^ z$jo!fD{>!g-z~bS@s7jfy)BLIWm2vHdO}9C2lyX^NK!{nF0<3ts=o?SZi z__^IFZ;d-lpZdNOJy1V!&zHp!wj1T%hImv0j9{(IoD*Dh_kN8O8tvOOgc<)fu*c{_OtvR%uao_!ZoIE+BSelId*Yl`4pZJoQvVX-tNxKsj`|BD_UT@C5zViGv zo1fBrPSLxgm*gMGn(=gPrQXRueg4Bgc^0R) zNuPYrXPttq?;=rx#T(iTer{8T%&2?-Xp2Tdcu6lC*CsxK6B0g?EV?iGHtC|O{U*zf#@g!?GL(E zcTO~am?LoT;2m4-WTwTndu_xT#QyX~b8Vj7|J2DiUN-LC>)pCn@*irZTZ!-zMNY%yL@@ZCi_Kd+7rsT zWM3*o9Z4-cb5?1ke8<-n{z7X?`yLY2 z%OE0XMHO`53-2JJ55@*NltDz$?qG8R1I$50a{~k9K}0Z@m_bBy11_{BG3KT?m&70s zB!U*hgz1OtC+a7m3?V|6*u&SyAde!#1`wf3h`p{zdwYA$8u68-HRYYy0R7_#~<4H$WEZDI~LrY8V zt`5^CP3sjon@aEJZMeyrA|4qf*yv{HxX4Y|*T?5dXLLzVpQp*Jix;DxOg#CY>&g@V zXYu=fa_#G1mcRG=t9ixeZMUcNMDn|-P2Sjdj_{HoSvO*8vUfsJh zx!}RK4+ifAqMs+|zn`GcmbgrJwz%w*mv01w-)y~8xcht8PwQ>FbT~d1a(#`Jc=lXs zUsa(?N<&p{$b$CUEhmGQotydXTFGfiW63ld<0&@}tVwugEIcEz$NKRhodh+b!!xJ$ z2pe}w9$b?oW;A)`#2)R<9g;`aq=^}SJ0q3GY1|umde70G#5*%edyF3+IFoSA__U;Z zn%d>|m*;sB*o?OEoaaemGj8lLO+LKGHTd|9iw$Noo7XIB5AEmLxim)g|ACyQo0gwd zpQ(!|i|*_?zD7Fx(XS%LJ3HsK&EwZK(y^*~`fXQcW`59h^nelVexStyUhJ*`5G+^YO0#EURcFPsJ~_LEr{}n(rRHAUmGNIVSaPgil);6 z>mK^#SX4L{-W9%Kf zZADVP$rX$K_Ef9TJgKTK8olm67vH7TzkklX(C_-p?RTs4(uKt=L0_LUT=VkrUMJ3e z{j}5tA@N16F<*|(tBJEwd2=P}aZt;W6>q!MnB3nm9GA6TefXe-#pg9@uB)$RZ8^1N z%Z*rpLo4}@hDTXVr_dWsep=S9^5a z%|S`Utzb(0DPy7ib_Pk7w%0k{G}j+Cf9h^6^JBV7%<)HSW`CFaXYiT(l67?F;njTi zn!?^4?2%5H<#27n`3jxmN8en&bn~@%h2^AqUPiNO4nJmpaW3h+(xIHVXWz{drT#0r0l7IUau)W$Y&N}@^gY=GK<3^|B z-dDWME=?`;jTYDCnNst^#p|^9vfQ-8-P=Q~1EY9kEvMd?l-R#~@!6Hvk{$;xmG1Uq zD;9n|hsAyBq7y=q&uioM*2J#i?|sK@@xXXjb!79VZ(kyvElnJ~w-k1>xE9>ZUYa2~ zIr?eFs~P9ipJbIz{IXB>Kci{SnjOnO@4jO(*GxV~>p;Ldk^D^o%Pz~FxUpXU;#>B0 zcb0HmKC{eKis!wPgzlxHZC#IoCWg&jb=k?{x@GL81%)4d=5XHiD)7{-nvpVp!Q2(u z)5=v!d>)@xw2hhZ`bAYz;87c|2ev6pl8)Pi_+@HsFm~k32D98N`Gyqsz(~V-)d5l z_IKl_xkuFgo#^~_Xz_vCs%xzglLh-;Pg@m|x|Y$)OZR4xmu|`0W8Zh(ochB-Z{1

U8ocWw*@d3NKXI0Au_Fr9fQ{nCQ%76K?nGHYG)_!lh|EgB3d-cV6uMU{? zC_LW4Ul=GfJ)Z6J7XRMF_lH#XE9YI6J1X7q!J+D1(dWA_c4uDPcJk7$*uRfVeb#rm z=?Go_6fK&a{%c$AifA8AC7$YT9@WG1eB58RZCmr*|5DH|^I0}NS(D%II+Dkn_p)pA z54OHP*{^SAAHR3cW#h!1TfJv}-OTBnnQc&C#&2oK)}>q#GQ(s2@~-sxqEf|Qqk0{0 zOr0RXEI21U_DkcYUrp20=0E#6x#Q04fnUmYUbN#wRp?!_PI368nzJ zq#9paAzCbaC7D%R=ZGhl4F54z)|Th9L>*@&-23Uj>o2o)XuD->bXlVL<-0obZL76Z zk8mHZOjh$dI`7cCA4?=Up4s#mPMvye(K55`&F|j-vRqky`I~0=gqig@^Xq*&R5qss z%lcIoY~@SlKbe)E_@el*t|i|g)jyrG%NI6;%`bTM+B?_rYoX<-SBJWKlxm~6OjS0< z9ND*mnf;sS^e~s}D?{Z3FA6rfw}yYS`ZeRwtM6hgPby4)YbGyRRC|y;;svzKA99g*N^Wi{rol7^YpD-&r1%sehyFw{ra*{h~es&=c)|BnhavH zn}43GzPoctz#^tT2kSe{-(P+fmR@6b)b7l!M;ChA4$sp~ZoN8%=dg%{sFv)viT6Z! zXZ;g?%abdy&2&@S`NHSVi#BezXxDE$6MIt1dkY z-Y0*kZi8j(-%l5w9pOuUQn&QDqW$4nbC&MZE_%rF{iUsj>&`^Sj<^d)(>#@;xL!Uz z6`tnxD&zk#|K2+W_5n&q`n&FTKXd;-asIDRIWzxP67SSD)|c;|p%i(arRU*#&vh5X z{v=xJv_0MOaKT-UX;t$R&QCaTqk+YA4b$)1bJO?swbt=uaQb)a$!7nbFU`!h@qab* zu8O@2_Ig&H`0tZpRZux0SmUI7@$~EjUyJ1~-}q;B+&f$JW#W_M9i2Sx;ai=u-{bM)>ZH-OSBQVF!*Dy?T~n{8&}1GuQrMfoIDTiCc=#XK%Y& zRmt+BvikZjQ(4n%W}GQ@kv_JEZ{DAJUHr;y`4;Zjr%!eIQZ)?x!4xWi=J9RlJHzU-$PdJa3nC zE=4IiWPjoPyr-Vqn@^rUG_U1(<|(C5$*Y?aWtVqVOrPPadP+)Wr~8F>?O#rWe<^yo zY`Wj{xynzTr9BT1tK0H2Y|WJ*_1bTLettjqy>m^_&D@S1_Y2wQcb|^Gy|DDnoU^CX z&-<>mQGMV%&EoGeP0lwfx*hek)*bMjyr4R|@pIi~w=|*9H8m=Ce|=lRv))tX<09pA z`in&-sxR6Iq%PX{cfLsS1wH4Uz2^d(}_#z(+lpVt*UP3)8A-5KXS^vpA)w@PEebcwSfId+1v?d>*SMO zvaRGiwNPdLh8qcWZmVR(cm1=f>iBB%OlS7K^!yyRq^cr6jU^3gx}LMm+ShDR;}P?| zm{{`bmY?=nS*G2K3Tx8$pLx-<#Aw6GrJ_?pKgoQLwpVYx`S6naY$Ffzly}eL45MqV zT=RW>pilMBeAS2EUXQeXd@4QqU81V}m3&pmLzBgC1fF)ZFVWMoIcZ<;qvggbA>y_Y{+8QoDMR5UTZ=5JlGcW06IiaMcN zB1H{p|4ww*@+U_w^~IU2+$YPEf8zX! zolG$kJp~sOw%A^|bMC#-_8iI3Z_OVycdzZ-b$L2V2j{cy zm-OOZH_O~Dw%^S1>snnD*1YWcG3lshim0rw+tIgvUb8sOw7$)WF@A+h3#3tnAcA} zlJn$P>p$z(x#ePFI;|TYJd=5N?yo(2+Rd|*pZ8B`J^ybz)Bk$54g2TMn`e7C=H$BS zzm4wprkh=lx*ly+&CT{dYVO7N=x44~1D|C5e4fIa5>MYRyz}~;yj@{Yz4705`V$zt z%@41-u=W(g_g>C_8w9q^yAkU)(eQHAo|b>lqdtb)74N@S5WQ;oSCOfqBBJaZQv*)^ z7AwnkoIGoV%KNf)O58^oKFh1TP!D*)oZu6FA$MD+L5hdE^PCsg@6Q%-oON-F+TX+& zapSzrGk$QVcX&?M>Im~*wopLUWvi)G*(zS^-T$I_s*R1h$y2m zyfj8wl()40f3~CEsr^6q@X8fsB>qi#TwT3>Ybth73*@@f zJZ)#+=Id5fE2gMSa8XkUy4$&}Q!sts9n*CmHMnm4|Bx$lBSwFBo9%_jPbYtWFq;}9 z@ob;u8xG-(7Jnz~zBDB^fZH@CIACkLm4=7y$CFZ431@cw`>y`J{f~oM80Y=4+CQ8z z&(~SaQ};?TJN@+SSNC$c6?QQ-du$$FIOel(=gVRPhI0NnOw7UNfoX3(++O(c+L27< ztt)3eG4W^$(L2VV8WhHUW~xyAP7(fu^NZcG>~#E0;wS$I?@P6*seX3oYVy*b$5%aI zYHvPK^FgtBnw9>i6`iZrt=6&*nvxQd>uZ?#1bb-*$J4|GwIBgR4VOG!suJ7dy|s2QsDJMFNj_59 z<(2E^v4ySdDCd*F=Um02a*A9^!5gpsI$ly`!P37w?ov-;rw`Awlhaw^mjCj8)Bd>E zeqp6t>{QFXgF)r96~sQZe+voxAIq5jASpQa#ch4N7z8+LfD|I+iw+0L5% zOTv?mekINmFZLGxn!w|`POUvydz;{bZEb0Pg97umJ(Rw6(IRGzg3QM5yOIwcIqf)d zazkVE6}HH!zdsopxBhXuH7lCo_CONzh0m~#I>vH23q!#)2W9C)c*&|7V_ zvGqj9**})a*Fx6rc%&-u`D>uxgJXi-@L!Kpw|0a*y~-*Op#xv^q=9?TfThH zN2mC@=SQ9$mAkkq^ft?-&$|1}er1RHZZSM1;+6Z@`hAPVt=-$=_t(7n(W!M%OK<&Q z#r~AE$J2yZZ%#QmODEu(_XdO6fk`(%2W(radg_#J^=qBA63_NCDE0}KU=GlNkE6;@ z%Ho1uYUGxmR{|P9g&gh&-qGg=+Oz2Ii+-pTcz{;dL_ycc$Wp=7*j&NP(gZd@Ysv-N zvuI{%f;>PA=7P)z?^!f5vc$2<)53sD-?0q3UD4FYluO??u>!Jr5yC^>&IlI4v7ONq z=VnIGBGAO*lGLKi;%xmS{iMX??Bbln;tYMzVGya{qaeU6@F@^rLD&fqAmQxP5{N{y zesX?Jeja4!Gh|I^VQFHHewu!|etJ=AVo7R|eujQVWkE)2o_?l&mVUN=j($#Raj||b zXoYEMZc=Jdab|iRe4S|l=vFYW^GhEgLht64jY@z9j zuUA9gt`=LJoBKB5{?2a~w*C`lQrY+G-tX&N+~>~j{5@y$_wR52zHRQ<^vb!@Md_qb zy7+X-%f0n|;%;3nfwe8$k7P!u$<%DUCB@c}*bsVHW8bZ?7xpZ!w->x@*4*f^rReRq z)PuiMgW~h&Z@4HteXnuVu|GfS<@c&w@P76BrJ%{Jo62X7YhO_A;bC&i=lk~ME7xRS z>Afln318G6OD|k(UfEjZsl4agtZQ*%GCS;T&UjnhvaDD?-K1mD3jS+)6Im;*^n3a4 z?asZs>2F-#>*?)pZf|gUwYM;J#rb8SiTh?B{u?t#=})XOv&|x=?>TdSoLh1-cv;^} zvu}4_8gi%aF%RCDaqXL|b-AV9f)y*TNSx}8^4DFyEHHWH+be8YtWQ1mdhhkkT@n_= zz2fB+i!9--U9%i}mzxF42N=crdS^hc3#5_Na&&i!j?p6c9oxLGjRjiv8L(vxo!zb<~( z%O!o)=GDvSzxSg4g*674daPjDyWm3igcA)xJV{%EERM!4^5%1JPUbjKX*0c#v$f$s zl*ZF&Yti3lloJ{5&Y6AxNV$i}g0Ej2PjKX^`b{j6{Nvlt!|%e*VsB`~!GGh(VXjgJ z7DpbHs)vnpqpDe39J`F{R8<+1W*)H8cwVVs z{&$*w-O;%)%Q41m{v=7hqJ$4dic|iI)Ti~n&D^BYcZr+*>!Qc~M-K%xrb)lJ6qTea zl2mbL`ZRAvg9U7-DrEQa{66;1d!j14#fleKPPyb3JvEt<6aV|xmwUoymoj+jrcPz> z3b1Slva%18dh%%Pl+_M%=dvI5S-Zw*mwlAjqrwZD-yS`FVxK|xYb)Db%gQg_wlh}{ zKU}a|f5KveDY;ES{&||R%Bss=FKGEM5q~>XZee5zr)9$8DLDz^QI5B3|2+D9IQ{%| zmi5mIp2T@x-@|;YGFbQd$(Qr(ZT5X&F2BD*+|h8#lc!Ttp4Idgb)7SQ zbxz<{ufDd5Z&XIk1fhVuW#1iUDH*mHzBO>_zw>q5eW?j|Hq5PvaoEh+c2VHhYpwMC zw*UMl|Ja`SMC#1F6;_3O>kP}U+a5{cbHC6fu<33TQ#bQmu3PV()^%5`$VjQ(`gmXB zZ{Ooy_c+Bj-r#dp==--TapmsY_jot|oM+K}i|54(N1Yvu!q@p&&@7G&;tXwZ6`VLn zeBGok$36=)uTuTCH;}>d;+FXvM7PZ{6XZWwcHiHzHemkydWUT?-wqVtP(Am3UTyW~ zXK$^|!~Ewz+f%`LKlPAnf8NW9Tkn0F!1z?){)vn7=@Iz>G7sNfO5J*7uHu3RcUxt4 z87@8Wy|m%nlDD^B{rxuOtz4(;fZAK^_x{Sqny9%eSIU;rLf_S%ALf=v!2fU-58m=E#&sf3A5byN6!#wx@r=2 zduH65;AN|r+uIhMIlN~=u=dNjAI*!!R=nj2lN9f{&Rtn`QIL68X{e41=l7dND|n|Y zRa04Bbjl>)nAhJDYg742XO2u#=smFdqm)bC;>3>1D<79wiaZiNtl)7{eg9*LUFA|HK?3b8Kz zule?Z+KJv>U2U&i#osSDbvr3h@z$9v?S-Njv+Ir=F8F^^cmuE8m(LYPlzs>MXZ3Qr zO`9S&^-O#Hi&+vp-H9J(&T#Mfr4?QD{nXJig`COH_MiR2_IeegtkQ`a>N4rvUW)8o zyLNuMab)V!v~_dbTZR5?2%e_UF5+QO$hz0$>g?rd%XAJ~dFH3+NnT(~y2~D$c5x$z zY}v7Mg1LGs-}{4=Z*(SPJwA72ZtL*^!F31M9-4eKT&i2{kZp#i zPO0WC$8#I`<|J0`$^P?fLdVPmy93V5s|-5Ub9KD^mZ%wjbtT90YWEEO-nRN?x5btj z-(*ZUtv^Ius_YUKvG-v(AaVJ^FV2{ow7L z3r=Rmh=1QVyXDs%tD8}4pKjbgo7GTkM&Mhw^)4NEpP1GEn{@T9|GaI|`}TbQsI>gv zq?R^;v~{L7^*U~rOI#K?in-=r(ERl;{lbBzPv7TW44M9NonFHX*6y-%&$js(gvu)m z)*ZWk>~c}^r8ibtys=T&b%l=2=IFfkDsWev%ZF7ePKN|Fdp#u#%jervZ+pTy?SsXc zKUL1ll`b60Uvo1;L04l<-ST>ieMP6I-PKkX)|%DR{`%rNJtH3Tnw%Ss93PJt+h!*^ zKdAoVp>G$K)O%!|aO>iSlWYYp7YVG=+L?Yg{`i}R9}2c`Yi_@=cf)S&mtM_tYjwYQ zMo%d*x!MqBCzto#aMGgEH|61V4$PLN8I>uz2BEVyG0)nO{Mjx>Ir{aX+md{-08 zWBI}mUu@DJ(E0O3#GR#yDd86<`Rm2GTCcx#Exym_RC~W({vP8y@8UmtG)~*RPHy?R z`l3fic5)vt%elEF`+8Vi8~^N;HZs@P&RpJIZY3r3dU5HVZ7bAPN6g*4-)bkrj8Cr? z{d%>+?Rtgz)c1aN%PuT0Qa1>mu0L=0?mO#Ey0#w#BtURy!*KZaU zleZ6?c>l_hhuNn;J=8OhJt6h%P1K%hC-G~QZ};m&?qc|ylW7_9%tfwi{iDfUsqB-x z{X;^wJh4BqlVScr&u8mJ^zxWW6{ibV*EzXG#lc=sw4sz!Utb`xq^p&lKdm3;7YrP%~?0ZuHA}ukxzh`yYK_ z{PnQRe(`3Fe%{kvXQrgFr>@m%>YuS|*|GQgwK#cBKDlyH@?!7Ztp^nhr_H@!;<{n5qN zE#du{`s$j}y0gFc1i5D&JF{%P-~YDAwe@A&#dkevTH(E?tM&Uu&ucnH7p+dlr#LNt zwExA8|Lt9-q1STn-rHWA!FFGt$m=Dm|%{`qvqlSk+4ZbhwZ zUwmfqclk$kGI5EK%RRTgm)*Ng;!nnI;wYS#_p<(KN6*R(HOG}#W}JE+ zx#UwN|I2%S%obz)P(c70g&;K7Fv4<4*4n7eM3 z*YU3*nYWA018@4SpY8TI_XWdh@1I&iX~xmz`4JLtrj;I;{MlkcnNR3Kt?t>~Y)ojXRR+&QJWi^L?m6nZ0#bg-GSr1DfrdbC>5Y zu3H++T(slNheIO1{oCLAUh(YZ^Lg}b%MP)f!uj3e`g49C^jyB)>8H-s&l@I{EOR%F zf1Uea(FJ+mHMioqMGr)DrG5FpyXfZhFL}l?kN=1}6$`ho`hQA%j=#TI%RSqwEe_XD zeKlKm?-yB9wbyR)yIy&zYnD^nGCpv9y!l?#;n#D8j?)v;CrndjE|QFm zsC0>_D7o<4{!pOFI{~SJ=FP$_@%JS-CQn;wtiaB^NnOAy`OUO9_a~fn+vhmlvP5fJ z)QNu8|I@CW;cYmnlN$JhFWRBwRY=0Aq?#K^a;YX$%J}YH?#^oY`+xDm<4QIB-4|@L z@6N9N!6xPTVY5;^Z^preLaP>TnE5i)T&yCo`@-X(mnu}foX2=n`ZDLo zaA*E~Cw{GIb!WfDm)Pc(8I_mU%+JXA{Nt{;zMQ?Q*)fmhnHPna zgTTa;MN zUZl3BQ{b1$#!$xPq3w+qOUtLqao(KiX~Q+)PT61ey6W#15mGC9S885;x_y=9iQv_y zlB%zgPOv|df6g@RbJ_9_T_ri2b3b)Vy&nGmQkCxZk0Rp!DfjNHw&Vy_r{25xZURfs z=XuTYTWzykA8$G{oq?StUb$n5j?&)MUj@5wZ{BB{`<}7x|yt;J)2z-rFG@=^nm)u$8YF$wG^(| zq$ref;K%HMMXk;@`_w-6y@-1xEi9*eV7B{em9kt}cYoQndYy4+6I)eQEswchoqOs3 zoJm?285X6pz3aRyedZ)TTlkMgdloIH!@Gl5i!EHo-TB;BT&S=dI zpHy4^_^s2KqLzNL>%)WkcP@MlYaSd;JhE8u{xs2NX^xtcr?2AVJhXeG?YZNB{m*6G zJT^DJD!-W5p!DV}n|nDuCO2NF?mEQuYX9fX^D}kJ#pAhH-DU~RRMGc2=lA@gjgHpQ z;*LKvH}HS1cv4d76r^=x=8`!lZdGlOzPY$&@$Y#Vt%65p{aFn+)ZDqaZttt$RN3XerH>CRZ}ri8)VRNuwa zyWK9g?t$xc1<$hVj7Aw5CIwv&QT5}@Z|~PVzU=z!bFJIy4;9(wpPTz%NaQeQE=WpI zy?E=`nO}=|*75Le`uCOh{6~W?y1%ohw{Gvv%%1lxbcS0=`cvSuvz95 zCnq^ir{DMChw%D!K7E0VDwZd_7Mq6dTzb@UZ&Xmpu?9P(JDf)MeyovhZ+mQaBg^Uf z)!Vz`J@W6fNA7h{7Vr$Uv*@qQH|_lCVsh`p<>%$M?;jNYaOCQa`_;z^&R$+@e9Yh9 zQ!Bmmet*idP?>*fi&mO?9h?O$Cg zShHEPZY1eP+0e5cG#rzzS2rX&turNOgrp%pHWj=x}>Se zFz#USi~H=2{N3fF)3aBf zE_Gdbv~y?7%ag&q;*FI*j-HFuzGG&!bC2dS6~$K%9!=K6Du#tV|?d3XqT z^G}u4vR%8*FmZ`u$lL?%s|x4yJY8Df{Y)+7__OB{i#d;awsP+LA^2%i_><+Ug&R9N zySTfR{5?0>IQ_EwBs~9)=%Wp%c5M3NQ(D)_`9b6Hs*n3+)UB?SFZj#mA7nM3JL$`e zy(J#sIb#y+;(tj_d%&o@ZT*+kp&32rG(9yv&Oeco&X*QFx7PUHyT+pVe;@9t?+AIh z_RbVFc8;Vsb*8Vv-l_b(e3Rd7-R(VPyPhvP6s%ZNR+h(?F=LiSuZd2~JNwT+-4^w= z*Z=);^Q~<79H||8|My9G&(T)>68%3*A^Tdo-5g8Qbl*ZNn@8|PXZ(8=e&?>kvWm@=?rJ_roe|Tmpsl z{_omobF0V|?=|cDjt1)-^HcMg7{2^V%3ICD)Jeq5bvqUSc*2*4G_iINZ=E^0j^?$A+s|=3R^w42U{i1M{*8C+O)KhK35J2A0UP zE{KyN!P6{=lOn-f_^gW|uA?=~&CnOcgU;G;&PXf*pA(s+pRJENZ2-Qv0(mt$Sb*ed z12bdfbK;Xz5)zXVQc_aNzwv%FF<~$at@AMcHzDzt;^{kgKO{f$*T0r0_bg9tTB!Zb z)_u{Ob>`3huTwv8;LM2^&xGI3i4TaJGIL(wq6H7vtW3zr%v|?i#_XsmGv~}${$O^* zq=~a;M=(8kqQUZ9J$>17!>&r*q zU)DGJKjTO3)EBE8xYhQv)^-02`?Ypi(W&qE${XJ=x<7T_>eGMc{ixoT;dN`(>FViq z>2b9Ib%#6eYMYl9zloHSpAfKW(p&xc;zEMrSI-{&uDmeu;rGwwX*z%AZJYY>_qxl+ zpQk?9iL_IvtR4l*1h98*|zeoaryUcCS@g8O3P3F zz4qhtiq)G}uiPEHDbeffo~e_k`M;cc`@3zO^X-?L-Z`9nH|^cGzFXh46z-mQxMy|7 z;cuXQ zuJgO~KF{2g@vMpUbl6+_ZJE#Sy{o)CS*mK6Q1mUMU9&A;Eep|!-BI)I*wU%lj}Hk6 zO*VeoWV3p;@hXLTOl)E|g5S9B6Q84eHe9Oy$!;sD$-9D8&u-rp|MT3Zxu17mEB~7R zuli50@##&*Pp$ra=oCxU-Lb9q)GpEcH=n5MzI!*2ThqIPAuiFzoq|YZ_cgnkK(r7@4S2?ym0RGX^)c(=bt~kvw(}ApP8BA(?_+l zSTZQ+j96$&4uPHD4$4C46Qk&Ns=%_Rk%5A_rMZH+p)qVy6p=m64M8W?Bq9!SHAXtf z)yM$HoT#CpC3^m}08OsK@~0#8G#mH;U zJF-~mNScRW_pb>)k}LE@D!aO~ue`Jmd?&TH+?}U)$%~YKvBgSO{C+l>h2~$k*db9oL*Aa+_L|ng1Qw>G;*$!oM^5%=aZ07cReV zoTub18^J1UEjokWMUiiRMf)#{lLz;4&pUWouQPe{M!0n^LX|?i^iVUUmXtJ=$zYdxI62S%I6y9J?0NRO3ylS z2^GlK$N6EiPG7qIkO-gMf{*eq zYw8X?-_B9J+WVK?xo>+|z9*O+TFZ9x@Pk`Q9cpS%j#vIQ+`+Zufc3PMN}Hk|{3-o< zIe-7-sp_YNO22d3?RGlNxToFR_@3W)yXn7kzR$ie_2Bxne{p?o?~Vu;bK4(K=38H{ z>B!}|Z(Ggr-|^pg;&v4|a#b#3Z&_{s-$IQ2-N!HIRuwIN*x~8B>!jp&$q$W7J@gX) zwI6StRAb=0e~-)Q$2*#)bLd{*uvp-Y%~kH$yv9GU_o$yQ zT20~D-M#YBF;Nyj%5I*P|5ao6-?D#!`G@WOEDDkK@8)DR*WQU1{kr~bMY7)18GrLW z?watLV|jV&$)|~T>`qKLrWh7Ay(TPT`eNSI^E!D}gq#$-TGjH8Rqgn+510j(A^7Ga zVoEGu^!t;bMV5hrxrK>>k+~^mfn@~V9S1M4z+6ya2wKH~ySOq(+EE9-@d#xr8~DZw zl!6GUO+DQ2dRz&xC#Bm3l9ANm$uq4isCo%o&VWuHG77%(t=UhIeMiW;PCfOxB`K=ezcz>%+O zVxXW4y70l!z`zo8d1kD>TTUYC;p3*LJ1s$6SP}qf#Z_sU8lqQP1P&kf#=2q$wC6Gc zdUPA|svV?@TL>-7$xP2EfgSah3SFZEx*7>|H&Q0_Z1Wt%A#i9*cEGE3kk5kyug)Q~ zP6xWtvk-dY5?DEm16kPv=0TXKC(IRt7bBsr<|%`13dK^dgAdY2TEc^Te>w5l$->YO zIX|tfSil?oUvG@Cxz2Zi^8s7`0eH!1Dp2eH2J;`^$na_5Y8IMHZQw_e? z-6!`J=E%G0O+FjFC(*CK!{b^tciPdM?@`-J%5pY*|F!*j%a5E0GxICuKcf@tw4b&9UOz{EW9ikV6S=F!-*FW5 za(#)|Y+-ex`0a*=%5Hs9wrOv)A0P9d|G=#9*pidY=KF3Xd!6?Ue!Oh&wY}npdlK1< zrDvp`iAj?(o>tj;^Mp?Ny`;G0xWqOC?HQG4UZ1gemYSw&JYVuWPimMU_YBT625F|7 zC(Jy-lO8kE^^8gy%jUMoGd^iF#M@*KB0UXr}a z*mlM|AN^(Km)l>SwlHE^oU+a6yfL%nyvoMTq&;zhEs2ul&$j98>UI{F|EckF<~r_O)2uaQHi`TdF`Jg|ZP|AF#M{ce1I4O$MeZu? zy8Hg!t;b*G`m3tGyt=)5!S`MFZltHpf3$D)uYV7A+$r2&G{wmA=jG2gYxw`2;r=Av zHMh!oZh>D}+cryq`6CoN@i=70FjpzvkktC??HJgvl4Cds#> zIX?8%(esA={J|^Y{S<0X#ynW2dFM;ySFJ+v-O^n91z)}8vcGHbfhB(i-@i1y4NZHq zf_|^Or4?bn_m{7tO@L15mn`39+hg;^#iLS6*KU6D=)pDBny5xQZN5hi%RRjn;&Sg> z9AERftK77pF=uDt{*{7n3S#2ZAG~?W&*T?VvVs~1AKl-Jw;Uzuo z-J0U+k7W0~x?`AZcwxEAi|x`%3T$_LCc5on-@VX6>`=mT$NAGtrbx``l*zpnQ){(k zcZjLu%!G7jUhc0O1(@QFDG0}Y;G5#O(7rEcvgLABwVcZ;ZtM8wZI`&Dz_iHw?aP~H z8qZcO>Q-K)B;0%_`cL1y+vUGXS{=$wPn~IqEy?KIVwp6(*jsPWc~|vR+p>f0HXAp+ z%ZhODzmZ^*wyI4_YSP^x53v;w7jRAAU>|E$`Y&eQYp+I?Ki%5bFF8w;74GP2jZWat z@zJ=M7Rk8zV6OLvAiv6=>CJ@#wiK={sK% zAFxUv?0(ddYj#5^^F!IIuPd__DO{e**}tx;ILgeI@yTtkZ_+P6{wdvjkew-U<;Cf0 z3wvtCPX(QBD&*W~J$a>yuA)}P<$!{P9ERIwyjsY4uhmU9cH2pbXx^n0lKsw~I(+cO z>mFf`F3;?1P3KrADJ5_BFvu~8U$!FarAw#@@6)~>*|K%l*ME|+zFa6E6QLXyGkx*0 zQkMBSmoL68N~ua{UDV8EWyW%+ZOii~9JN)pG8fG~EG3!RSBEAop6Gh^f5}OYGalzy zr`s5$FMqyp;nwAwH@=;;XtH&e+GqC-)BpWpo%Leh;hW}PD|@vzHszW;jTO~;ld?-m zZ%Z@$01C)S|+?H0wk0!>~YD`&59tMSwOCLI5)_|pNFmobi9M>w8ra`IKP z4$(5I*U3JlcVMBDdMqd z7FD;Ucf4+k;W?0NV`u+{^QGsnJ{2P^zd!zqKUlu`dANLqh=)eu1#46p;=mgfIeeyfp^7=~d@2Rydkj)9XtrYDdF8ynpMG)VV z*n*&A-L?0gif^*eIe+lnzNwQ+T~z-anWT8W!BM7iqgTcJo}Ab0E-+7HzjR;M zXZG^zp{p+3np&|TB=XCv8w+~hO^iMu`)Adm?=9~x&uy!{kYW{GeIe_9aJ`V!0@Zu( z=81bN3m&#r=DxQ_Rs6r&y(hEp)$8x|o3zSd?{vkMrn*+mkV&g*k6sMS@?8|RSm|=d zRGlN`LB*K|jAPbJeaXHu;Adc8MKgPjQB^?Sluh!E+jd!q)Sfgym-04vYM99^{jJJx zgRGsEZkU(utPXu~>fg40M$<=Iq%4nZ_j@q;Gw-pCS<}p!vqfDK3`HbQmAWyz6z8Va zcl{JHQ$CyFalK>lZ8@vwDw4dB2SlC1W_sBi3OoGpc**vEZM?s7H}IOx__Oq|E!%d1 z(AzxImOZ-^qIT(?)iFKmuMs>qRr6&pTg}yP)Y%%w?WuX_SLD9l*L{6V;+uMW)Pzrp zJ!)M)>EjPGzn^@eC!RWmEs`>^=3OQ7>C%Br7q&aMQ|{*3v>h*e`|f*SS-Om5R^Ut_ zhj5MP*cZHa@2*1nr1c>U2YN!E(*^Y=N+O;z5n9=p6cr>`eSQ$Fs6%lV}`XVXGw z{||n9FV`k-Ra2J5HNnk%Q|p^+mz{PDn{(H%;R*MYNQvXO&m{c4_f?VA{`)C`U%T(0 zSDtt@jy*7L+Uz7R?`zpXU$p)!K2B6$!@fRN(AV+(0oIHsJz;jj?swMQ;l1-X=FHkE&Ay2n!!%Hf1XOW_BDqo7q-p%WH#xO8Mka%?D3UfVjhd;>gB40 z^0IjpcAjNetxy&4C`zL+xI?RoC(=vMXsTG;&*Jo%CstisIW_2+nf69A7AZcSo=OSyjs=Q}$Rq z70o>Szp(5_?lbgM}zVcj3R!WCW)y(^CD<(|UZrirH>4}V0g25)EQ%WbD40SJEKWg{>bIQN@ zss1*yCx7)62iUFg{9^OHs{RnKoM)UutvsLWyT`S^vvakK**>KRa5EYnocOSllTk76 zz}dRrd}ous_vhFAay`AobkefE_a8XQ=9C!URy({-{N4R&k8KJ$`njwt`7DoKf4`^r zKn%-DSEos4YJ!J$bUa$|>XwqX>*V~uv$n^@8ha?bk#3wnd9}a!?&}pdLYU7MNX*i_ zTfSlQl0#1ZQQEeg-$Nem{I=uK#p6Xihq`V2!V~yY*4h8c`*Hn=t7zq?-9{fnoTSdo zztpsoeVxPM{G(p&sy5TgU4Hg4sUKRvo9D3h@R9rT%C7Z&-F^G-vo^2F*9Xe>OS&C% zJELZ-*%V{-y636hZv*`Yp`ohN+BDTxGrMy=HVnNOc(H=DukqE@qb^57wVDhsEqwcC z^WVt%iVuUkTxVYUcP7tv=Z7cLCVx^mx98a7h^WKwYNn+!HG5u=Tr^2x3iq~Sx4pDK zzkbD(z5UF$=nbll0dYt5bOQe_`+d!xfB6dKc~5tII&-$DrReyq$ARGm-=?-b_B*vd zQR3Va^@EE)WhKW3F4eN$zh{}`j@t%0N=F0)ZgMrU+I?G*x{)#ZK=c@6J)-VzjzbS20oYlJMV(WSvhIhw}N-U>w zSH4Pd=DM2IyW0JNSV8lKyAPjRZqjQn-#TI4bjD;$odb>6-`gKyob37Si;7Xkg%ZV2 zAqOr#J+PMh&Lhbnf!r&rKTM6O%Pwh{=9UzDYT=@&?7#OWoArxU3VrEGSA8M7?eRjs z7i-rYnZ6`%`B&b3Z!g$4w>SNkTHE*gL0on1onw7%O>Cl4c^mIPvtxZaW$tY^&dG+G zg{RnxSO{r_iwZY3O;S4VV0uSwU(~aRc)5>!$1cYEow9z>n_V&c+i8m#hu41oKFjXt z`!C@ao7Nqeuupi0i$`yuV7i%D&}XBbW1EZ)rZ5F(-el}=X44K$_;w-Q&QfrTwr2d+ zwdbsFE6)y&i=DcC!2_TDZL4axZ}2|$!(noQ&$)#O54jW;`+Q~AzIxikRz;P|>g~Cd zwda-}6Mm$5vg)T!#M5}07}=GpxYu5+nRLK5+visA1fJan^<@3z7gsjH&6VZl;paqDJSgL?D%FE^LU?X*X)!T4*x!}ANtyVZ+Y+zgUO+C zu3>>b(G6{DtN*Nc7{$F?z;Z(Dl0!G& z-22kQzmoNn>6&Zo7u{ZjepuWaAX|NX&9_k9w5jc$;fs9u;#|y3w%nff^=tb7vV0rK zG{L&}Q3dM1tHVVCo>vuFl)C0m4nN8A$no?W6|Y@Wr|(};mA^eCDro<-IY$k+*=`rE za{YGM^-Z|u@yMXu%9DO^hg1`}4sTh|sJtcSN%)d!s(a;COygGVEQzy_-8O5k=#$60 z8Qx93U>A05{#${tH$RVjJT-ayirl(}{LcK(DGOS<`HM|L^mF|;$EMq4u3FHxeWCJg z?yZv5p{L|89ks2AondNWV5DMlL@aCl$}QJQx1G51vv+l&O{i#3<`>e#(6@MX|>1amg!>cl$I&7QXot!Mb+||KxMZlCi z&6ccnTE~QBWQ0X`eGB>UQd@q`eszu8QOC>H@~*$J&(@~q_qVPOw{CTDz0?c}b_g^- z+qHRCO7GMewd|W$woBZ$>dkj{E!mx{d*r0+SBtK1ze6Xi-k#;iD=5SJD9l4br-D`M z+syhF=P%C<-z;YQl*I1*FmL7YWl=#9v*x*nuI!nnuW>8PL#u<(;dDtnGTpECW;{)8H{8C>nY%OX}PW*I$kbudwRy*29VX_ebEOO9IkGES|S z?0q#(W9cWsl!&GMKXMI9`7W8VHd?eSC{AnAT+6_vV5@Gs{qnU-4>oR``YfR(wo@dFu1??x<(w&x~55D`iqEMlfA2s{g`)>YimIEimB^9wR(K8 zR5U#><%^%}lgzE&%_l78@yPxBm0^Bqtxz~u(*63wljrG3w#Y0rclh>>Ib;e)8ut?i zkyO=Kr-kiFx3 z@luytvu<16r3O3QLYb3=a($(@YMQUqhQDX!u02$C*s9io<>0rz923WlcIJl8lf|cq z+Rj{J+3)5Zwa-MZvZ~ho+m;Q-UZ}^`i+n2m$@s$K-?KRr6Z|G_N;a5~fOepc*}|J{4$7=${h=AN59Z)$4hfu!!O$qie7y|Xqu zK5e!1`^Qtdr)$rhQkb>ptK|H5p>GQ%EMEU^y&k&!P}oN8Lng0sZ#7FY?b^7-<=xlp zPxp53t57bu{A{N#&!!_`SEod+`gHk~xn$^7UiVM08mxTdKdRY&9P zZEIW4-pS@ad@k1FO3e-*kE1L97?gdPv-X{|jdb6>+eOUFQ@Mor)~s#TFpV-l6`lHM zdQD<*>09?>=NvsWdUKyEJlSzjic4_9qRTH#QwneMrEl^w$>h4dGq74p>vp>0XAK{- zL(}?d>NR+CYYq0j6@R|w1y3yFlm<=Z#S>nC*s{McMn=i+VIkwWQ|Igo-|RA3!*i82 zpzG&BuN$`v*PQ8TNa?t}bF$GRCd+p{)BjCZvTJwc+x@^P>8#H=&lZ*G3i-F%yn{V6 zuia&+zO{VP8tpe8{8k^NXUe|WRC8;8u$KDA-QV6=1_h?(-w7{?=n7k5x573m+o$u= z&9%SYxO6Oz_Vc-{Gxwd%-}aQutSK* zwa@>($?^Bpe{-kzD^_Q9TP&$<`tgKm+TDU6xq~y4{N?QbvCpgtI4RY8v-N7bWonH} z;OSrfzwPIW_Wqcsu`Iu^yEAyEr(yp*ouexa*H^q>S-x5Ofr3d}*pHCPS>a9UKVD7G zEx#}LV)NNhDebTpbJd8IRnspOluezVYSj_^%X`P4>5fw@mM;JP{M}Tw4#!^(%u`h& z?l{ibFQIcg!}sEgAdNz|ZIxD&J(CtG#?JRl&ABeQB1`?;pE7}b!%8o0zh==-e{=FJ zg+p)a7)6FipJ~%E_}{&Hy+c*hKK)%=w_44feAb$~p~y&kFT?Uq$#XxVqSKB~*OR?p zc523oO^?o~8^t6|Uc9`b+g`e^pu673BO}ApWARc0^U1qxCSS~8Img0ztKo{J_q0`$ zCOPn1>6tpuo>>0a_>Ef0jp(Fp|2Cac`u(p*CVx`Mytd;a(N4b>B{QsJkYTo{=0A7r z-i_@JLP^Hcmzrjm_09L6a=Nv2iMPD8%ty{VAc~(h8+g|m0k7|qFu+U+ zv-h{4)_vi=#OXCt4*T}4GOTm*p5Xdz;R}W1UKh_Te&rPDS0(mjx5$d_M?qf&WVKq3 z>)aI)3vS7`5?6huc5LNjp>i>SgCd#}?8=2deVJ0KSNQ6OOKFvtXBQW{uF9&`izjb| zXsK6mtQ9YK!2j`yZ~Kp?xvWPkf3oiE)OeA5C~&{_YNHZKtIc||zll`3vR2-DbK}i9 zxB6A0{AQ08yM0PBrgbM9OgnDnnkX5eb8*4~rP7G?8ZDbvXmt1qc-XE?7ha^O)pcqO z*GqL*CYNZPfUp}k4F#_E>F6(soELvay0@+6=)wH_vfxY;Hs*}m#WVl^e12jc|NZA* zP5vJJIrHYuOT5!|8SQw}qr>n0G@|?T591{zthXas=by;4o%r~b@E`l#Zh_ZlZV6sA zIVR@Ht7GXR9xEPvnpAv+^VVGJQl_7;@24+U4LZKQJn*^7bJ1nbpUqm@I&oWA`s|$d zyl3_)if@0AD!0$$_o4rneee5ee``oJu)b29b70SwmmjRo_{i_iKlbmsp1W-06Q5ragv|c{?fVA{{4YX%n7^5w!7<}ggDv8bZAP?+s&1BKq$)K z*=q6Q{c(~{_=MzEn3>(=4_MJ!qjmi7+Vh`96S@SZ>CNL{oWv9TVr^e|VeXZmuO}Vj zW(-Q)$$R$8^Rnth&V=KyKh3h*+@W{YVq0X{s?wf4rF?Y<#ch2PZg1~8*CM*|Nd5__ zea2fquG+R=>(TsWLATC^{`vV_{>`Sv_K%-c7hM!h|D4#hWxnN~O_z4d2Uav~esRGfuua&smO-%5crB_3l)>S^-AE}nQ@0pP93FlKAZ}ZEC zSZzzV9$tUs`up=0Zxb0koS@LY%UDxt9UX?3tt~glt z#K}>);P<^=nfXiN1$RY?ZYf-?cVf{KU3C)Oprjw(1?n1WteZ(9m-Bv7C;Jod3;4_+kwt+Vyla7s(uTuu1Szr%Ug2cY>)Rf z&(B;%+j3VkhwXDH;kwd!-f|1O-0m9p(+pO33v7PQqtDjZ<$6{RuYr-De@RTj~4b?JK5aeB6>_S^A*lOnu}|4Zr`Vo76j3?fg0Y z;#s3N*L05OBt4t${?F)FqH*QN_aAerZH^v%YW~hNSm3_v``_K~tTb<5kX-*+R3|NI z{;_0H-C1kR6z_50Vb*?>dvtfvw|RH}oD2D6^U}XUXjRZZC!G^#Ya2f0|MR-8sb1s# zn!`d zzgI%`jiy-2dlN6=%9x_~Swb>Lr5_3W3kX}Zylcw;$m>d{A|K6=NuMy|&7$R!{tSMV z%_Yw4N55~MWq;%94&y^g6|YPW3LMW}?WLowuYd3By;svBlRdwex~K^pwcjK9bFun^ ztKU{c9_3&EESPatb-Z3%hyM>5Pwh1_7qvX}FNkNH-eGXm?9t1Bl?LL^=V+fee`=3g zwJG0Tkyks+J9LU}S6r%>4m@~Tr1o7q-@$`14<)$Y&$@rsZf0Cu#p?s?`}^6mbYFeT z_;E49Mr5jqSp7cFkMGyaKjv5&%gwgYsXvxF2kE2Ri)m^PrN!;DLX0K$Up8&)sOENmG^#db+z6URUI56+iTGf z%C6LBrMdo*NTKll%;{z3QwrYK-za+d>F3tsu&Vr+XZklD{q&#JC)3V-=P&2-aVfq!3Fv-)J@7LV0tGxQ5uDLGegRxaj@#Fm7SIu_1PFqa%$_tIn∨^ zw3Yedm*D&5p@LS>=CpNl%_`5ao1eQf_y4O6DjqX(CpWH`+8uS~S#IvF6MPTM@9mG& zdf+v0)^e%j>yG{NQzH+v-iQ0=iyiSz8_+g za476IJ5*K67hPdx6gcTc$f{rlEAn#-rX_O;_Pb9}IKhMEOe&|UkS z+*NkFmM>uBbNqWv==-0BFRB|lXYVR~a%8#iWp#-=FGG&R{a>^8$t`)lz0Y=+9a1^0 zwpiig-VYD9#l-0L=0sYz+AZJl`P{?i`X5#sF4liv^>lXamdr!nmW4_x9_UrO6LsiM zx`N~V`p^F+?AotxW3_>Qf6mVj9=;|Vg}XE|3zitRg{r?6%50uQwO6y%|NZ^t zx1zl0|BR?VFYVR#Z_jHsV>Qc)onkK8Jnz!}|NEc+J2ExyqoI>ab9<_7LGp>>5RQL` z8GihYmeYN+g_s)|DwvyMJAfOs4g|5%*c`+qW?6^<=<+|<%EiRIbm-y@@B#@07qTuQwXig^ zEHNiFFF92o%Q_+x1p@_?bwnTm=t3ys7e1Jnn<6b}gs&qi2dyIlEkZ^tB>KDiefq2O zYS$pEkX7xcao3&~`7`gpe_OAH#@>k+&#GIkU2>D+l|+p<-l47}njRG~D{|V5$+M=< znKfhjypSm~=FE+nGp+Gd~HGzBaGF z&a8Osuzl&wdaM5%1n07b|B+f&G3`%(c)d!(u`4J3SDp-GHhy;e_4`B*u|00v8a6&P zJp6ti>;9(a#&zkx;*R|J`|Z5MMb68+)l0q?_+-zz6mb3Cl?!^`Z$I@9imok>E}x!K z9$tRC<=6Xj^+GCYSH7E`d-H6DS?Z}R^WJghUVd7?`;SMGtKnyZ6DOA5&tBkG)_nDE z*}sVj7tQu2XXTo^I|m0d-*EZ)-objpo6H%POmf}+Ps#jSR0Ce`oAO)Npt08YI&+?- zp4jJ~HgjgDe*`a`+Nkm_23rL-@ygU%qz%}oTKJ_KI< zn~rpeWxjrXUaCIy03pN@qY{1W%Y#kPa}!8_uqnz)91?*-{46^i6L+Lph)heiXsa}iIm}z!XmD7Oqhi4!EvXP5 zsl|aY$!q4UQ#+=jHalNUK61Oe$;}+q|2c23h4_CB`Fj0x-SOXh-GzeJa79O`ocNOC%*UD@{Lel< zr+hlQJ4J8nekj>eT>15?XxTf?K+QtIL?!G028B5xPBUiw7tG(TX{e;1kP=wBhg*rIDVxnkA~ z*E4Dohvv<2wmGh>s^R2!N3Hne?J&Wx<*eN-p~2rG_GjG9{5$tT^bcWC=dG9gzRX>z z7tFjoZssxH)icV{eWOsVMJ?8#c*(Nsne3L`{2sa#?rF z*;D+L1#UkCX8oM}a?0{GzZlYu0@%G)uip@*Tqfq_pf^1&;o^~2OPg1_wdA&*4E5gD zzxZ2Wqo&B)B!S027%ty9cJf}+m)X-N3i$5+ZaVAeqgacU&bA3|7ZWZu{Na&linF+G zm|#(}WTW)22LWl(DaZLfG-q_M{(th|$XjcpMGf<&nEPiJU0bxHj(g{;&rBtk_ROkO zN;aCBcIT$-fnvx1HwEpR)9YV$tU1=tllf}rR*_BXx0waqyL8I&+!y{+<&U(OXDXbY zw&Yk__co@vJ)K!!u1&pFS1Z2!?ThykO@S}?R^E%=&F-b}IXrQ)$%)T`UN2W1Fp*9* ztWwR`$GfXLcVofJ?jM>q&v&_;p?WX>i!L z&-v)ZXaD>2{23P}ozgp3((x)NOfIor;9e8AAbTy_o&$_Z36pCA7yMqgf%l=dj>)9R zboug=-=Ej-QG5_T{p_9B`)gyDvQ$cH>)wmz@Z7S(a(m$Fwb|MJMsH&Diq2`IJoQjG z^0{t#CeNwh3w*f+KR1Tkcx6@X@brIRAj@U-wUbY?^vO=|6Q6_bE1c*3l-PIlyEE^F z_?VjaRkOF0m#bgDUe9xC;hCbTPejF^I_k}hoqKsj(Dc_=Z?@gou3Vm;x|#Fr#?n2) zG1n^h%iWNToqPUiN@|yakXhOC6_^#h8-I2EF<#+$M+u;Ri&g{FFmTK!X zGiWsU_{Np)V=K83axo;<|Ni;pX@|C-&9b<08^a%cUN^7bKK1hT>Ibz8@)ffyo}RsW@SNC`pLt^bdf}5}nKg9eP5#?Ed;T+jHV!%*q??2hGYatdvim<>VVQCCy~_mWhXz zU!3Y-aGf>HF#45K+k@C&e=k4(-*)Fq#m{qGVKbSJUhVI6Rh;6Q7isusX~SL74YgO6 zn~6M2I_PzM`Zn`cxsC_Bly`sDPcQTKPrWWKCtS{QP_620bX=a|KhyT@8>Rh4;wP4$ z3=OhNmE)HCzn3ksna1|${7vzaiYQfv6*{6aK27^{m=8%^%=D@ z@0WHuTAomMvgT=gC_ddrPAF=N`{wtHH%EOskt$+mwoZJ;JlCkUa?kpV_?&c)T8#_q zf3g1TGP!wH*Vk8|EymqYG|Nr*65BE*@^%?jsEi~Qp(snD;moh`+S=YohPfbu!&s2HK zYdZC*XinxzCJ_g1#oZaTpV}_S#%%P7V>((ASQ%J(^+%|S?aTSqPnLgYIgvjhQ}}g| z%gaYoT52WF=2p#ZoGYU3n>}y2Du17{sQpFr#rzUGLQ9O(Z2nAJUMHQyq93>=dQtp5 z`vfMju&OT=U)S!NQpIG~x={Go#Ch4L)+e?cv;G*GX8vQ9vB1n~v131f{NY$K7R*eX8LVt7oL&glO9?T$Yq#>3y?e;s)PJ{#`%LhhI4MSQy^Q*8<7ECE_0+ zmwwQ@RqCDa$$7OzXTUc1U6%Rzj&%wuA2i?U=VaS`&&%fCUw(709pm>*7u}ub)*Ed3 z-jo{M=dg0!)`gcREc861&$zSa>K^l&5}p_R{uP$`_n*n_n3o?rCv9$)(n|HK%GWZu zo}RX^b8M(HEAC-CwRx%0iHVykDwK{zwMb15xTsnwH(C06ulw#>`DW{G-v1%b2RSeanTCwI|Pg^5uIiXxaAaxWGyCOYF;Jd*ap!Y%Vz%IMz2LB#D^WjMt}E&|!D}ADNGhhM#_3Wj?MFZN1}{$pq(P$(@%=mVMX1{z<0t z<1Cd~p35Y~gKmg@6Er zJL(x1EsD#=(!DT1>W<>?U$}+)gobN7`}%sCqx3Hf4HQhw4awQ*i)(L=ImY!@D4Q~p zP&ewBp?3*D0wi|{jLop_@-6=M^{WZ{#t@`UzCVGzahMcvQNDeZi=?$)|@Mt!$t-o0F2zTITIiQ4vQ zC#JqIPi^~i?){p{Ioj{myTM}^|9R~*Q)ho~cQw(f zzrB$+_?q7Tb6WO=apmv#v`TM(AF*TK?BvV0Y`!lEx_Zaq=c5%TUUcN~?fdl8{_XSs zaYm)DO19nS489p&eD@)2U+b>3_I?%n_(tL&_S=zsKc8Wy@LY0+}**QU9`k# zreJPqMowZh!`0Qr+}CPgh}6|})A!X6(GS&6)KAsV(9Z#%n~Tw@g>+|2^~uqJFNjC#r-mWfGN z>HD*Kv#XVFU7lMzXLIqk&;N?wTfYDN=ic-0f9lRV3pFybcusos;zr8{kN?-T|Hw?L z*KDYdWO3b>cmI|GhoGZJ!gFu^9v}CvOpPk8D1)g26I0IYI(zYy&0MQ&_hoLsqQ3Mm zc^DWt@zPYwqS9$Pw&7B<*PWd5d`b3)ey3S0rlg)U-DU97tJP`NgZ>lK)lPhVnzh#E zv1ZX0BlYzT%HiJ0QzeT^^&AC^i<74omHN~zTc+T-J8t4U;csp~{5c-QD)n@zCv~_a z$xU=wqj*hNy2JH|Tauxm_a5IPg25e`M@o{|4nEk#(RE=mPo&E|&JMm8Vyazw?B}@d zh*s!pSiYE5(RIT)cTrieomHRR-L&=ssESHp7eL&JScHp{EcE@hVl8{&Ixz6PcSqoO4Ge?$Y<&gFWH=_J=X)X zJR;jR%WU}4EIq%@;=%b%Jbt@W|416QeyN`u7Mf;wL*WXWSaztc*5|Xca^?0b-;3fh zwAgUANbJ@}$u_h41RqVA=^u`-cwAc0`jx|2L$_eg!ia#LdNb+Gg$F&SSpVc;zgZ@@ zHD2W7MUB~x#)tnYOkk2U^Pi#VQ*R(Yv7_dLfNy&1S|_Q=Oq-f#$$kBJN>HMq?zH6j zkI$5C+uI9v9>217rmW@$HjxR5Rp$DUJ5|>P@R_)+^ggPwVu9e=Dy}X3m+g38&RnIn z!9n-$*I(65KiDU(=L&9#j6e6Ejg_zF@hY>1O!@Rn(l?vRCv7rwl3KF$8Lvj$1DiQZ z&i4A4&Z_=gpdZsF{Q8X30{P_GUn1k>c@gB0yu`vCUt0Ut z<}egnUU(|A-COC*(vq}uyYA;~dz-%2w0G^bThI3RUFEpYzbC!kc*^x{%i|_po)|ed z&wJJXO6H!6^V%LBuitj=c4p#P(ce4y8`d@Q+fAuC?(K2&uYXzBq_ronZI*FLQv4C! zcKm;O-KX!;+S9)-SdsQgTR&;8lF9t~UdNz*1=o#M8#D9Lek2LUe%VBPoaE`mT^sPV%i;b6ZVuDp)I6C)#53ttqp1#3rYQ=?`TQyvM z2Q%{~EVlK^@=T4L-tvCo0@hb^L(Ph<`&_se7+%-YnS0^P-e8xV-SZzSX8+_7v}dQ zPWzL7uDo($!dBV%>oYEW^uAKTmGS4geXEG+G=_)8_OdJQKDq9!wB^9|X+O7n6(|4Y z`Lnq0&*bxsT{35{+ZRsQo18KGyV$e~7OT=92$d}Ro?|~LY&PqcPc1i0Z}ZPw^No31 z^SeX4?jGanTRmlm-kj1hrrIhC)1XOSM`wpkRe$zJDR?{QlP~AriC46@TbDDPs?(pz71-ps=IKwd_wQd00_v(%FL7AfERJPGl?@w=E7jm~L{-V>Og62r}PY)->PoLL*{}9KW zmhNvGm+e-bCuftsx6(K88_Vac2)69RnRap76F#=i^xw|kc6`pat-L0aGk$k)nEp&N z&^s4%C~e6RarIeR3z;m0)0u=btRM7j-9A+=f2oo0FV~!NE$r+cMdp7<;M;nl#rB8J zOAY_~PQkV*_jQ--ReB`8u(ii8X4|Tme3OtV?#`TYXFMORo45Ms$70U!Ffty4O+he{IWFA;m}yj!O&d z11B3+Ys)x!+Xme_;uOXEbmkM@Gj?~JUJ1w&$`1#D^>vaUgvv_98EG?V7^SVzHv*iVc^CmnK9yK^0U}R6~ zXfE7f823Tz^duecZ8>jWFRq=gtH0@qY$flFoTG+*K29DDEi+9rjWZW0p4{@+;nbd@ z_0}`P&0_tnFVEz+a<>Y9Up@cn|3CBWyCWt!Y=~HsDj69$bGG@>{mYKZr5=^@?)a;` zd(z5TyN$n}3i3#Cel+Rd@vygl*i|YyQr9`n4inB1d)@lCQqr_$<$^ycGc`(MkNvuG zHhO!W=iSIyB@KP8Cri^ryH0tn;&%Pv9{OtGtVN%MCVu(7(t7o(pv{lfTUOpwJtWk) zV@buwyOO3?|5ycfDwwWbw!`IsGRLFcmlh@cyU5I5zF$GdJ|ui%WTeJQyN$KCm01d> zRLr~KyT>O--Ar(Hr^zGFM+P62KAv~s+t^>xb;JLSQc>sh4xS{{ja?svPg=MpNfyrh zYVvw9i~8@xZ51aEd)ICLBK4f%`R3F*qwYTmmDjqKhwb?Li>8GhTwOc)3?@vwL z>!eb9`d1bIL6J7U`*yNjxjY*M3a?t9?lV0i_vjW=0;BrPYfq+WN^dn1O}(;m^_L*u zwQcL4J~ytO{B_gg-NubJi)KhzO4nFd&CaX6`>d6(Xj73&xwGcxu%%xbjwWy0a%<(h z^~ZiMcG%Svpc!y2OQqzZRHoS;w|@`jzS@3l(ZPFhtA2+5ytru2txrPt3^ST)vJXdS z|4@AJd53LXhC2HXv!yE*eav|0^78igceRbvz6Du)n`qAA%Hf*d-yX64zSAE4n;Wm( z$jVdRw_xSUz_c6&Ud^1~E#JSk9M|7t_Q~e6#^ggb=hoc(^KA3|1;_vY-FJRrX;!J* z;wW$1-F=CTGAI82;oiKy{EyKuGg|}W+BB&}2DfA$O!mC5Ho@qRUW`&m)hyGx$+Dl% zFD*X%Aah!7fTXm>R?pSVX+iJWrhOLcon&-HK4How!8m`rB?hNwUOh9}=hm^8XXcm0 zY`HsUX>6;r=<`I5UAv;#n-BlfPEfSfGSKk-rN(^q!=f(_I2C@jz3ba>G?V+%Z>E^J zB0ZbhnhvW=WjCD3oh7&1q9d$y?o#%9vt%UMKixeLw)WZz)0Y`BB2&B!ESWP7JJ~0n zuQ@O;WzvpUMT?g)cgDv-xL+bJyv+``{$6+(>J+SJad+S4jBaD6-<5k) z?b(DTzEGUfHt&zt@2IN0dnX@pMg2VX@m!Dv+oYtaAyM~g7gJms_8B~UH&|D3e(J+e^wr55?jsh zKF>fvO+o7Sdd6!pAMZ?#*?cyMo&DuCM_beVy~-?;J+&=+O4F~*G)YkLUGQb6uHWib zDOYX1Sm)UVd!j8qPp{uDQXqS9!lEK4Y0=wHgICEcQ8e*3S;*gSm%- zUVYd;)5mVt)fWa0OkdQR9naO|+s#^|W43BO>n6p2`tlLg`NwA8@|DS10 z$IY!9{9Gf8-2;TLCmm#wpo9&v_|2skS`_^q%Ajl zyp}V%t){@b_Thphb@##)CBD{3ZP{_zDk%Nxj=eit#a1!D-SX{)1B2#gF~7Y+uSD}Q zNRfa5UHN_T3uQYin^>xY*ccquc4tbAaT+iJ2z3wR6sVK+Q+MGQ3 zc)Wl5B=75De_l*muFF<2J3nsJ?Ek*z@%BB7bFU zjoZTf_`H>hnqvbv%l>DVo*I&j?m-3Ggvw#KL3l#9K0 z%KENVvfDpRpVOpe_pjZ*R(|>EvTi-U@Z#fF6ZsQ19p8TR*rfeib&p7GjPqQb{aJF; z#~qut?PNOgB>Uo~&+)wrw!ULcYjRw+c*$?=IIAXgr^he5ESO@$ADL+0^tr-&Cihk9 zLR<3*Z`i8!QuE}mXO*lfQ45|t=hW$Sw%@a!xb{46pXrh&xw+`}m5uVJU;JMq8R&aD zA^X&`wbIw$C*M%qVwJ-`TXxFLG_&KDYYktQxY=|~iL39J_`omQ(Cy~iH>#NYnso7ev9WzwgGyjr?o zsn3E>m1nLk;1xG|7gCIKw#})j*2uHvCAau= z-oB(m&Bv?zOb>Le?YR5+kyM32$6>vU?};^^%A^|H!w>6an@*VZ?5L&9U1lL!iC(Q) zl_hl%p;-ZsEJap+IQ&DVPGbJyx*e%6j%OVyei7_EH-vp!RaDN!+XuMyx=%lfDPV8h zAw2VMYyLs`1;+39cD}UxcR;D5Y-R7(8%i2J3V(yU53HH{KVZMZMUlYvb8qttf6Gj{ zYumX=X5xy6>Ae#;rOt>f4a}R;++<@BSF&>d@=_HSSG7Ht>z6hDie02U*%Uatk(S*VMgwGn4xPgHF=q^Boh{Zk=%;#qgPA$WaA#>AjQY zz1w#oV*iVfy0eB~zwxZvvt-8#7cu|5t=}7!9`8%9)al%vk#pkz{*9cGG50ucRo{A4 z*w429)~)EYIeR72%#1X?n{cF-ma^^1tobi~d-8_Z_U1459b3!)D2CmS{clE}1r(b=v z?ZU<1*Og{Czjab4)}ES1jHh40^dztR8Z?i|PP`8Tf_8GJo@-NA2{w>HZx zsZvv2`$en6pJ;pgMuoQSiwphtU>c))$^}))UI%iB}Wvj3lDos%0ly@R*wS@>gS>DpKQ%YNO_3932Z z_UeCThRLd;xifB^s?j-r)!ZraRNKlm(Gpu%U#R+WMBMWFc6sZAt5+?1RbC*gc!u+R zYq`2%)QN}lUe)sFq#wPPtlr(Iv;M`-t9)@{??fynY5V6`1`Dc zH9Ho?1ss0A!uILs+jrznWf>;_nVhzHWoG)##xAa?g%J^-rFP$Y_m}0iUDijX9p``j ztTnT;Ir>((t-s|@|f9Awb*t_sp z$g)K<)Svx7t8lzrIyfb+a>M28ZM^HwzTI!qwa@;<{43=LcqL}@eBbriJxlH1JkQ_v z!<~xPJ+X|OW)mLR(f|6BS?=M@YBpcp=5M}!(_8&&>$6MFKK<8UKR0N-m&&Yd_k(Y1 z(#dIkN1h70Cn-7pF<aM~x zHbFm}%ftw2H=||`%>VtZTDf+34R3GWmG~hzRQM>+!yF$KRPR?v{)a!J}t9CALrp$sC`b*Yz9i76C^-#pVQRP z$ONg+xi*43B;@I>dxuZFnLFu8s(3|~S*7Co&ROC2U6h zndN#7ck+!76iB;#Xi`*&I~^UFIWIYETA9h|H7EMs7ucP9`QL2G*Z=i@v*&L8w>9$c znW*ae`@i?T|7`RAa~`MhiN=W@Dt&R<;niL7ciz@dyfMFYgS|Ry(x2y-_rC0Vpu)P` z@%Q{vPWis$?F;7{`_*+#^isKZ+PuouP4!qyYs;~nz29d&Fgts>c-!qoa~%y68yN-j zw3#0{HJ7m+xhT)I-E?AOqGMsF{x01hjXPo8{zrDLg2zr_wJ48PGc`gagoQ{ zjEbrQd{_<}$Z3nYvg9qW-@B+OjPu#;@Zmn73^K_n1+vKGO_Nv@ob2eM- z&DWgOD_`{OIjP2dwZcImr*Z0o^d}-$-nDrWy^dyI#8)1++oksF z)*J7$LcgcnyIxtkF)d$6rO`}VyR+r{-9pd1g5tXzj%(gvK4z8C`Zr*y_1dR7Z?gX8 zNryP?Q#?N5a^oIuv6Ft2JeQg5WxKM@`ntoGn1kD-`ws_Zuq)rWP_XUp8?S(;%dZwM zxfyrval)sS%7GUZWS$90wfxOo&B7jg^ug+&-+X5tKV&m;dDp+1U+W%+{-Ln(ej0HmuiInzV~|D^VibOt~%VvrQqVT*sWWq72W=+ z%APi1;^aFg3=Y}PXlM@1IHdl$J7hs%V_Eq$n{(B^U)UbReYfd*eDU$+zRgF~w;HZJ zwAiG3>1O}UpKbcw_J8Z1|4R3PSMmiGXPKOKmcK#FXNzX9Q(_ZRh@Cuhp_20n8*wA9 z>sdapY)+K6Hg%mUv+b>({fzep*S`g=H@9qg`lfw@`Bj<5e4*9ckq%d)r=7okv~hLQ zTQj*9Eei+lZ}Ted=(atn(r7(2XU`m)ISq<>7TqhpExVX%vTnkvJF*(ncHXUMy7ng5 z;DGpF)6cCE!Fy&XXByibx^FRi?^9zKoU1hEL&W_LOHA}Vd>g$W&#rybmY3}8S;Z{_?Kc)XzoVxhla~t1ZQZ6}lPD=k` zK=DJZm<5SPHga!iUE8#`E7w#cZgTkT6E=}HDNbohov(Mla57Zc>B^lkKVz!Nog>p` z2URn*ef)7|2K$kjJq6{;$|pClKfWmG{^y6X)#;OZn;P$PFkaiyd@w0bYgB)UEpyjy^CGRKIpQ=+A=hqW=Vy z4o8%(yWjcKMD|>sFo%EJ-v@opc6s(mD+S`x3xgIe?v0%_@4D&@`3>E_^gd7Em}UEs zYrigM!BwX@j-U{20t0gzem~K4?sEG{-6ndfH*z=&zeDRjAej7c{ zeYtV9^wPc7z51V@PMAMy<;5lGC(U(uwy(8&%eO8?cBXThko_j!=aXLk5IgsmbN*p< zE(Lo_R-?0)J`q*_} z+_|&2w7#_dQ{)!E@%qQJa=)3k8-71|W3p>%&dZ*ib&gwqC%1|iyCyF6IRAOFOI6#o z2TlK&vh60^I-aByKb3jf{A)Gdt6!U>@>F)&eE!UBA<|xEyXIW*^JU93jW(A$-PrN+ zmhA)X+piwYDld6?&PjUt`iGxC9=)CVwSem!+l!MPf_D#vx!t^By*AD#C#HXkx#0e1 zh1xT{EH`z<1)t1$%l?U#3saKPkS)T5#VXrz;O;yuM%Cp8QOZS5xH> zPx&nClXuizGK;q?Y+N<_@zdS)(;spDj*zpImTc!%=h*v>>FE`{vW?3EL?qhJtzFc& z{mNrjuk#nTf6VC@`TjsvE`Hj==<{o<@AvO@WoevnT&MO9d&=8mm!~keKQ!6$|CkBy zw2u)-&7?nBJ^7yUg7e71^Zj)bcJ6;$cCGFAtfOfy|Gr+jm-+XvMw?IXH>LFfY&&>O zRMzY{eNR8=jL55vN@u@oYq>ZgB-O9m zPMCPH{(|m5oz@V?6Wgp}3Ljp!Ib<5Sm+WSNOKz(Cve!pG<$>Z#lVv`;g*cfr+yN+)Eee zEH~LdJ*SMDju5P$> z`%QW4!_917=H8-qfp)ybb-H&8B>fm)&oWY4zI3sJK8MiMi;KN3-Raf58}#R#-S+tD zSE4+8CuVPb`7$!gb*hqikJI7Q$Ne#TX!oQp2gsJho{^_ zPWJok2B@6=O$pC@Whzg2!! zb9L*6TE)t4uSLaT;)f;It=#pNCEiKnPmD<#lYyK#@#!}2m`k&pJpGN%)QS0wQ+ zKU}?uk@GcsVEoPh^Pd*{u$&kec2TG_dgE;~8Tb2#*3J7}dcMbFWB#H`pL6f3zdxjY z=lheB=Q%nkmk_lSRHk>1JNH$|_yuLWis z3p=g!%}jbP72Mn^sw3&8=G>+J@#Udw_rJ^jeE*wo*@pk&(YL!cpY-1GaJIH?>{qAC z5bq4eg4PM~YFX=6hHha}&apVI^YeJ9OsM|R)J4zwHcu?vp%k=iwyagzqPFgxu2K<3 zFE;NGp8hRSNsyGZ!W-#?Dsm^HU+$Bd4S zR}#_5zP^j+>~RRY^snB~zB{YuY2d}%ykdWE2e|Dn7uV(8ZDaj>LBjM+%nug-z1_TR zX7`VquCIctY%7ho=FhZ>&01!ox^Y3p@n3hJeLcP`V4jWP?c_Uu`0mSWz3?u6;W5RD z^HrZ@e{X$RdiLOh!@763Tu5eID0aozdEMeL&873TcC&1nc9&JswX&)o#qV3VKj?wq;#h0wyV`T1s|60a68 zye>6^fC%x)oQ2$QhMPIXz)_Rw^&Mf)i<>BRd zUg7*?MZIqs-}t{i&utF9&(?l$Rd)Rvd;3k|{_k$zdUF5C`>17iW^SDiM2UW8bAK9B$X6W-pxfEU7z9nm5X^SWxfYeU`M?#G-wxECfszgsygY?m0zo z@o&Yuw|2G3b-9n{FLIV{o%@sbK{jN?wQOqRe)W?v%H{jRG0;^BDVXV^5P75~s z>{~H;{*Hp>|I_|IOMXB9C&%(9r`X+`moEKY8O40>pJl#f;f^KDzZxAsJ1uXD{pG7< zu&X4rP-KFn$b`%k-}pt`H*?H`W<6`Vw{@emREFJO6X_L)IT~z#g&$S7YdiF2Qb5S} zue+YSGfbNnXlnHA*_1zR9`3J1?mMc^pUGcUC29Aw?0sBxaq(G8K_0gJOOQxM)I}Ecm^GuPd|i}$f5MO5*Vz;w&EFEP{Ox0O!2ZRi`_wjMa912$ z)^MV9<$JbmXWFJGUjFq%ch0+i^$~lO)c5m2TWp1zpUz)>c9Oil$4BW&=bZbF z&6w(5A+twzI%5^1U#^RMjhy>TA2#JD1(jLBX|GK5l_Isj&lRy2J0bAll=`ONln=X) z{Ct;mOZQWePvxQdXqn)bukL0%diXh{B%(h^zNGGB@~h{Uwn$2Cb(}n1bI)cu*%O-` z_!uOGeQQoyd=g))W-WbX&anxB0VTh=y!=jCzrXs2<;9oR9cEXX)cYQIZa!l7rQ^yw zPj*Hd1?`OuOSKp$u@o`zpE|W5NRt2K$)chOGAWZ^hNr4d;q<6KxnfJ$#o69R*!HiR zaB%8#)z%30qs%)d+55i=+qC~2quXiw>oZi--y|>j_I2;RJ%;xan1sV;&6+-M%380p z(-#d5M;+VGB-Q9+y z*>|HvXve(2llLCio$+{goWlCazFMMBJ?5;gZOKUpPyJh(Qc$AH_wV7J&>|Mq6$^wD z%<7Kbx7v_mB)QWh#re>YIjifOx_8~bH<)+Z|BV1)ghg_KKI_tr_#bI8h@O& z3f_`fD`un+JAEOu==4qEr{q-+wJpy1#?aMLd?kVZ{nX(3lc!Huby;=!>66v92m83z z%st7L9m4(8tMyION97aEGCMB)-{*c(Ph|O~*|ysX-ze?wc|Tb&L4K}?>i5E(qVsnK zrcAThka#Os^WV|BdHFuuSLQylDR}z+=+8(sQ(o`6dO3bKCJ8!}Udewy?bH?--4_ks zty}Igy-W~x4Bd1+by<;uMv0%@AK>zR%9(bpd<%y{V5h z{xr4EJ7ipX{A~N~dpo((EM~>Z9%5Bjb#V=UvugeNH5oRt6^EKXY_U>8Pq`D){MB z%bhpnP3bH@_At)7^Vwd1al)f_^?hf`yRDK>Jz2F^P;_ObOy$Guy7bf-*)2uyYfC=- z&3=AeFLG0scfy>SM*jO^vGd9_7gU|!SWwYC`}?N%d!~!c-(UFj#?Ahyx>n|Ak*W#$ z6K-*@aEboSm2_j_sa5yFS9!!*x`~`Ru}$fk*^gHOKOZ=5KI`WnQ9O6fx@nfSCk_6y z_J};q!ZLgdI$a++u!wi~*4Np`)z4Ym+1Duob^O-QNWsv+oUDb@Mz|JEn_=9oU7J&NGEiG7yJ^7>Tn(BxRuy~aYa*>8@6_ESZ!#ix?D$WLkK{~+qJWQE3pr>1MW_>Lu|P1BjA zdYb1&(uEh#jAq_HdiYRYV)V4!li!Y8TB`p%_q}%i@t+b(#Y#MfPbfbQQ*X8O<31`b zdGWkwO=s(*=kY%4O4(Ssxn`dAw>!>lzNg`|t-*!K8+e2_`w6eSEdDI#{e(SdiLhLX|vY$d7nLdA#Le1ujxKt-C}Q*<>oyM`nu|jPwAq^t&Ve7m}V4z z+WOLXs&Z-MuRSrjeO7+c*PT77*0LjYx#c-d%eEsrPLDiABE5t>Oga@EQ{lAaRQBiUu?5<@9<;wW)HVO{ zgoeC{YZb3J3x|X(Gx0z1a#c_|ulXMNOQ9thy=~GPO&WN2JyfU(K6(3kf>!&ckNX~S z`~J+=dik-QtsrQrWxq$|`WKf@$GF7z9NW1j!zIoliscxSf%r5n?n&EU2{kPL%ozVp zew~y5mzDeT))~y!I-7RY?y-9Hf*JoGtaCdtz_|&Sk+iZ>u z&s<^BDEDKo)X(YD%wDwGZ8)U6^7Gs|ay|(gUg$j2%6N8ko)+JEAKNuIx7U{&|CrbE zYw=e0jlnf$>$9?^2=(qc{K?}`Zu9XAihGy2$T%l0XVa6nYnvpq(s22Y%Y0HIX3yrh zI5Yp+^oaM2*oEg?mz&ISYqj_gaQ=7qN8cD@tHwO9s+N7a7j_yH=8Mc*&`_LM_(J-D zKkL;sRZq<{C6Do+yHIsv;ryJUtsmMW-WO=Tjh33M8s$8lC7|(_T}+dAUR-8oZus8Q zi7|6G&+XQ4?biC3-nYx=uHYx5NtdsAUYys^7400lcWvydu-i}D_;xVetxUfx%P?gT z3q!J1;Y}U3%lvCr9G5-R$(E6AR=fY(uB`0vKa9OoRFtL&ty*AbuXn6~=k?F08NrNG z#AluAJ{`Jq_Vw4vvPrW8HmtTvy*mGzQoqas?kfS`Uzw~FkUn6wCiCTC?@3+j7jfw) z3uxzFXX%;xn5ks9ZsoPii?LD*XLS{HSemUq5PY)yuEEFMOftVZlbP6@TtZA*E-%%3 z)j$2oyUS;o?cIMJZ{{&Np)^sasmhacN3QF?jYl)q+~BSLF{Q6*+qZAe=B=K6Ue#s) z{4I+9nQm@=;eY;GUpbg+!Rl+{bK*V=ewb+@@nX-<7n83CuGGCPm?i>e^hH^I>5!#?hZt{hf9?K0Pnm zv~lG=DL!-Uwa4{R`5c6Q%sVJ>z%_jHZSMXR+v08n?%rfrS^viI#q)M~2jf#&LSL?) zTJ`AgCG{u%p;xzgv?YH2?b+#@?!KCLZP|Lsu-}F!j_>yP!*#rM<1}k#gH!$i*WbTj zdphO){3T^k^Uh58C0ufDLRZ+i-SW0i?k3zVw_5GX&Q`&llz6(pE&kluP0|PKt;^Q$ z+_~b`jBLGo*M%*O={7Vn3miH>BUT5A_@vExa!S-TTToKRKmgDNP!Y(}R=RS+lTvjn5({+Gz=eLXLTYict&($)kDC%mL4{RCZb5Ep zNuokUZcbjYRfVlOSc_F&u@y*IUtIyLq$Jx`J;FCYp(H;)Cp)u5!AQ?i&rsLUSVtkP zC^0v+JijPg!BEdk-HywqC?(A*$i)q6U{Ok%t$IdDNr9EVetCJhUb(Seeo?xGK4vN}{>W&~VYUa=n7O?t`sx%!zA`i6Q2`Y?+?Yh;Tu z3raHc^Atc9Cnn{Wme{JBr&^eqrWvN`8YCu~=o%WPn(G=E7#Qf9q@)^~CK)9sCmAHc zY$`x$_3z5-H#TZIShC8#Mv?vFhqEnLfQ*%;5E-KbH)HBpqS4c^=O3N?G zO)RlhPb?_N$xKcJB~$%^lr(iao0Md$lFX8vR6B5fam*=!Fmf_M>E9|RF)!U#y+Su7 zH7&6;r$pVZBrR7jr7RN?`Z<|)5C&MAKEfz0aRU|#a&fccve5_UWKgcQ<5Hj!pq@d9 z5-v3_#a6u>RDPxAr4*MGr6%TrN=#7W73m^5Sbo&NmV`CA^ueh-Gd~ZM2{c@+Ksm&~ z*wDn#($vDlOp{CBH$MfJ6j*D1kw!{cWKwn z!3t)krpBfUX$lZAGh;IoO9il$LLNlS(8$=#+!$5Nz|7dh&=5_`)Y8b@1WnAqz`)QH zL(J6F98Jv3*c?Nhxq+zxnqET#OG5(-G`;2^=c0-k8kibcn4yXpm>HX!ViChoXKHC; zjOh5oQR%YfV zrs(P{%uFpY>@~J9!VG&0jQB9MG_}O^ubBb5e+`U{LANb}V*r|749v_d4banug`ok4 z`^?NtjL_{cH?=TBOMeDt#+F7#7;$N7iY{hqX^vrsfw3`092uAxfNr!zb+d_q0lHhv zObm?C#Y`3z|g=Fbm9R@_!*iSo1@!nW@3yHM`k9*rs(lzW?*KH?iNE+V@vcfFth-zjssb1 z04oy>%uF!Tu9=AmX8B@ZVS-_Yg{2{SoEsTiV#KAnAx2&`G%_&52zzrwV`H?mVQ6S- zXo#M6%?&I}(89pb(9jekOwCM84bjvYn3oqVl#4Ov5j4drO{AOYax*8f3fJotI zhEcAWnV6ZOr)M)mLkslqGcvKn$O}g1CWe^lz#OBFGBYtZK?^GbGecvH^k-ylf{~|< zEX_Ce!> z!~`SVn^_nep~t1AsS!qgGcz^B%=@O8<*AvG0Y>>}Y-x-U&L)PYm}$t=7$Z-cnPMq( zjEoG?!`{Tu6eAs&m{?$zYo;ccdB)TPv%WMkwnPsX6B7$d^tOeGxur3BUWK#IySc%)DS`WR7008JHTFV8pqpu>q$0 zOwBRND^qiG^l&jVvam#t4^v|U3-mN@YHoz#Uo%q+Ea}PuqiixWHo&mg)Z7Ro51Lwl z+VtpQZ;7GT%*?<5qZ~3eGRE+Sg#kwU%GA;bvn^m|fYJUlGs6r6b0cFj^fY8{W@Lbt zR}Cx-G5ZD<=7z@T>MV_ojnLDdrHK(}uQMnR;B|#1mUM4vW`tfZ7#f(Eqx;v;z|<5y z9~l~0V5Bue150BwwD2=DG&D!=_ZS+QnqY_-8CV*khl`n+1!mo2Zj7$iz|6t~-ChGT zOU$r0voyjib1W?|$_;ZvBaCo1H#A328-_+k#->PRdr47ZW=?7mmyL~resE@0DyWmF zpdXZtmp.delme"); - -$l = 0; -while () { - if ($_ =~ /START_INS/) { - print TMP $_; - $l = 1; - while () { - print TMP $_; - } - close INS; - } elsif ($_ =~ /END_INS/) { - print TMP $_; - $l = 0; - } elsif ($l == 0) { - print TMP $_; - } -} - -close TMP; -close SRC; diff --git a/lib/hcrypto/tomsfastmath/gen.pl b/lib/hcrypto/tomsfastmath/gen.pl deleted file mode 100644 index 6107499af..000000000 --- a/lib/hcrypto/tomsfastmath/gen.pl +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/perl -w -# -# Generates a "single file" you can use to quickly -# add the whole source without any makefile troubles -# -use strict; - -open( OUT, ">mpi.c" ) or die "Couldn't open mpi.c for writing: $!"; -foreach my $filename (glob "*fp_*.c") { - next if ($filename eq "fp_sqr_comba_generic.c"); - open( SRC, "<$filename" ) or die "Couldn't open $filename for reading: $!"; - print OUT "/* Start: $filename */\n"; - print OUT while ; - print OUT "\n/* End: $filename */\n\n"; - close SRC or die "Error closing $filename after reading: $!"; -} -print OUT "\n/* EOF */\n"; -close OUT or die "Error closing mpi.c after writing: $!"; diff --git a/lib/hcrypto/tomsfastmath/genlist.sh b/lib/hcrypto/tomsfastmath/genlist.sh deleted file mode 100644 index 98239b298..000000000 --- a/lib/hcrypto/tomsfastmath/genlist.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/bash -export a=`find . -type f | sort | grep "[.]/src" | grep "[.]c" | grep -v generators | sed -e 'sE\./EE' | sed -e 's/\.c/\.o/' | xargs` -perl ./parsenames.pl OBJECTS "$a" -export a=`find . -type f | grep [.]/src | grep [.]h | sed -e 'se\./ee' | xargs` -perl ./parsenames.pl HEADERS "$a" - -# $Source: /cvs/libtom/tomsfastmath/genlist.sh,v $ -# $Revision: 1.1 $ -# $Date: 2006/12/31 21:31:40 $ diff --git a/lib/hcrypto/tomsfastmath/makefile b/lib/hcrypto/tomsfastmath/makefile deleted file mode 100644 index 773fc33a5..000000000 --- a/lib/hcrypto/tomsfastmath/makefile +++ /dev/null @@ -1,159 +0,0 @@ -#makefile for TomsFastMath -# -# -VERSION=0.12 - -CFLAGS += -Wall -W -Wshadow -Isrc/headers - -ifndef MAKE - MAKE=make -endif - -ifndef IGNORE_SPEED - -CFLAGS += -O3 -funroll-loops - -#profiling -#PROF=-pg -g -#CFLAGS += $(PROF) - -#speed -CFLAGS += -fomit-frame-pointer - -endif - -#START_INS -OBJECTS=src/addsub/fp_add.o src/addsub/fp_add_d.o src/addsub/fp_addmod.o src/addsub/fp_cmp.o \ -src/addsub/fp_cmp_d.o src/addsub/fp_cmp_mag.o src/addsub/fp_sub.o src/addsub/fp_sub_d.o \ -src/addsub/fp_submod.o src/addsub/s_fp_add.o src/addsub/s_fp_sub.o src/bin/fp_radix_size.o \ -src/bin/fp_read_radix.o src/bin/fp_read_signed_bin.o src/bin/fp_read_unsigned_bin.o \ -src/bin/fp_reverse.o src/bin/fp_s_rmap.o src/bin/fp_signed_bin_size.o src/bin/fp_to_signed_bin.o \ -src/bin/fp_to_unsigned_bin.o src/bin/fp_toradix.o src/bin/fp_unsigned_bin_size.o src/bit/fp_cnt_lsb.o \ -src/bit/fp_count_bits.o src/bit/fp_div_2.o src/bit/fp_div_2d.o src/bit/fp_lshd.o src/bit/fp_mod_2d.o \ -src/bit/fp_rshd.o src/divide/fp_div.o src/divide/fp_div_d.o src/divide/fp_mod.o src/divide/fp_mod_d.o \ -src/exptmod/fp_2expt.o src/exptmod/fp_exptmod.o src/misc/fp_ident.o src/misc/fp_set.o \ -src/mont/fp_montgomery_calc_normalization.o src/mont/fp_montgomery_reduce.o \ -src/mont/fp_montgomery_setup.o src/mul/fp_mul.o src/mul/fp_mul_2.o src/mul/fp_mul_2d.o \ -src/mul/fp_mul_comba.o src/mul/fp_mul_comba_12.o src/mul/fp_mul_comba_17.o src/mul/fp_mul_comba_20.o \ -src/mul/fp_mul_comba_24.o src/mul/fp_mul_comba_28.o src/mul/fp_mul_comba_3.o src/mul/fp_mul_comba_32.o \ -src/mul/fp_mul_comba_4.o src/mul/fp_mul_comba_48.o src/mul/fp_mul_comba_6.o src/mul/fp_mul_comba_64.o \ -src/mul/fp_mul_comba_7.o src/mul/fp_mul_comba_8.o src/mul/fp_mul_comba_9.o \ -src/mul/fp_mul_comba_small_set.o src/mul/fp_mul_d.o src/mul/fp_mulmod.o src/numtheory/fp_gcd.o \ -src/numtheory/fp_invmod.o src/numtheory/fp_isprime.o src/numtheory/fp_lcm.o \ -src/numtheory/fp_prime_miller_rabin.o src/numtheory/fp_prime_random_ex.o src/sqr/fp_sqr.o \ -src/sqr/fp_sqr_comba.o src/sqr/fp_sqr_comba_12.o src/sqr/fp_sqr_comba_17.o src/sqr/fp_sqr_comba_20.o \ -src/sqr/fp_sqr_comba_24.o src/sqr/fp_sqr_comba_28.o src/sqr/fp_sqr_comba_3.o src/sqr/fp_sqr_comba_32.o \ -src/sqr/fp_sqr_comba_4.o src/sqr/fp_sqr_comba_48.o src/sqr/fp_sqr_comba_6.o src/sqr/fp_sqr_comba_64.o \ -src/sqr/fp_sqr_comba_7.o src/sqr/fp_sqr_comba_8.o src/sqr/fp_sqr_comba_9.o \ -src/sqr/fp_sqr_comba_generic.o src/sqr/fp_sqr_comba_small_set.o src/sqr/fp_sqrmod.o - -HEADERS=src/headers/tfm.h - -#END_INS - -ifndef LIBPATH - LIBPATH=~/local/lib -endif - -ifndef INCPATH - INCPATH=~/local/include -endif - -ifndef INSTALL_GROUP - GROUP=jherzog -else - GROUP=$(INSTALL_GROUP) -endif - -ifndef INSTALL_USER - USER=jherzog -else - USER=$(INSTALL_USER) -endif - -ifndef LIBNAME - LIBNAME=libtfm.a -endif - -default: $(LIBNAME) - -$(LIBNAME): $(OBJECTS) - $(AR) $(ARFLAGS) $@ $(OBJECTS) - ranlib $@ - -install: $(LIBNAME) - install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) - install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) - install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH) - install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) - -mtest/mtest: mtest/mtest.o - cd mtest ; CFLAGS="$(CFLAGS) -I../" MAKE=${MAKE} ${MAKE} mtest - -test: $(LIBNAME) demo/test.o mtest/mtest - $(CC) $(CFLAGS) demo/test.o $(LIBNAME) $(PROF) -o test - -timing: $(LIBNAME) demo/test.o - $(CC) $(CFLAGS) demo/test.o $(LIBNAME) $(PROF) -o test - -profiled: - CFLAGS="${CFLAGS} -fprofile-generate" MAKE=${MAKE} ${MAKE} timing - ./test - rm -f `find . -type f | grep "[.]o" | xargs` - rm -f `find . -type f | grep "[.]a" | xargs` - rm -f test - CFLAGS="${CFLAGS} -fprofile-use" MAKE=${MAKE} ${MAKE} timing - -stest: $(LIBNAME) demo/stest.o - $(CC) $(CFLAGS) demo/stest.o $(LIBNAME) -o stest - -rsatest: $(LIBNAME) demo/rsa.o - $(CC) $(CFLAGS) demo/rsa.o $(LIBNAME) -o rsatest - -docdvi: tfm.tex - touch tfm.ind - latex tfm >/dev/null - latex tfm >/dev/null - makeindex tfm - latex tfm >/dev/null - -docs: docdvi - latex tfm >/dev/null - dvipdf tfm - mv -f tfm.pdf doc - -#This rule cleans the source tree of all compiled code, not including the pdf -#documentation. -clean: - rm -f `find . -type f | grep "[.]o" | xargs` - rm -f `find . -type f | grep "[.]lo" | xargs` - rm -f `find . -type f | grep "[.]a" | xargs` - rm -f `find . -type f | grep "[.]la" | xargs` - rm -f `find . -type f | grep "[.]obj" | xargs` - rm -f `find . -type f | grep "[.]lib" | xargs` - rm -f `find . -type f | grep "[.]exe" | xargs` - rm -f `find . -type f | grep "[.]gcda" | xargs` - rm -f `find . -type f | grep "[.]gcno" | xargs` - rm -f `find . -type f | grep "[.]il" | xargs` - rm -f `find . -type f | grep "[.]dyn" | xargs` - rm -f `find . -type f | grep "[.]dpi" | xargs` - rm -rf `find . -type d | grep "[.]libs" | xargs` - rm -f tfm.aux tfm.dvi tfm.idx tfm.ilg tfm.ind tfm.lof tfm.log tfm.toc test mtest/mtest - cd mtest ; MAKE=${MAKE} ${MAKE} clean - -no_oops: clean - cd .. ; cvs commit - echo Scanning for scratch/dirty files - find . -type f | grep -v CVS | xargs -n 1 bash mess.sh - -zipup: no_oops docs clean - perl gen.pl ; mv mpi.c pre_gen/ ; \ - cd .. ; rm -rf tfm* tomsfastmath-$(VERSION) ; mkdir tomsfastmath-$(VERSION) ; \ - cp -R ./tomsfastmath/* ./tomsfastmath-$(VERSION)/ ; \ - tar -c tomsfastmath-$(VERSION)/* | bzip2 -9vvc > tfm-$(VERSION).tar.bz2 ; \ - zip -9r tfm-$(VERSION).zip tomsfastmath-$(VERSION)/* ; \ - mv -f tfm* ~ ; rm -rf tomsfastmath-$(VERSION) - -# $Source: /cvs/libtom/tomsfastmath/makefile,v $ -# $Revision: 1.38 $ -# $Date: 2007/03/13 01:23:03 $ diff --git a/lib/hcrypto/tomsfastmath/makefile.shared b/lib/hcrypto/tomsfastmath/makefile.shared deleted file mode 100644 index 5cc993b71..000000000 --- a/lib/hcrypto/tomsfastmath/makefile.shared +++ /dev/null @@ -1,109 +0,0 @@ -#makefile for TomsFastMath -# -# -VERSION=0:12 - -CC=libtool --mode=compile --tag=CC gcc - -CFLAGS += -Wall -W -Wshadow -Isrc/headers - -ifndef IGNORE_SPEED - -CFLAGS += -O3 -funroll-all-loops - -#profiling -#PROF=-pg -g -#CFLAGS += $(PROF) - -#speed -CFLAGS += -fomit-frame-pointer - -endif - -#START_INS -OBJECTS=src/addsub/fp_add.o src/addsub/fp_add_d.o src/addsub/fp_addmod.o src/addsub/fp_cmp.o \ -src/addsub/fp_cmp_d.o src/addsub/fp_cmp_mag.o src/addsub/fp_sub.o src/addsub/fp_sub_d.o \ -src/addsub/fp_submod.o src/addsub/s_fp_add.o src/addsub/s_fp_sub.o src/bin/fp_radix_size.o \ -src/bin/fp_read_radix.o src/bin/fp_read_signed_bin.o src/bin/fp_read_unsigned_bin.o \ -src/bin/fp_reverse.o src/bin/fp_s_rmap.o src/bin/fp_signed_bin_size.o src/bin/fp_to_signed_bin.o \ -src/bin/fp_to_unsigned_bin.o src/bin/fp_toradix.o src/bin/fp_unsigned_bin_size.o src/bit/fp_cnt_lsb.o \ -src/bit/fp_count_bits.o src/bit/fp_div_2.o src/bit/fp_div_2d.o src/bit/fp_lshd.o src/bit/fp_mod_2d.o \ -src/bit/fp_rshd.o src/divide/fp_div.o src/divide/fp_div_d.o src/divide/fp_mod.o src/divide/fp_mod_d.o \ -src/exptmod/fp_2expt.o src/exptmod/fp_exptmod.o src/misc/fp_ident.o src/misc/fp_set.o \ -src/mont/fp_montgomery_calc_normalization.o src/mont/fp_montgomery_reduce.o \ -src/mont/fp_montgomery_setup.o src/mul/fp_mul.o src/mul/fp_mul_2.o src/mul/fp_mul_2d.o \ -src/mul/fp_mul_comba.o src/mul/fp_mul_comba_12.o src/mul/fp_mul_comba_17.o src/mul/fp_mul_comba_20.o \ -src/mul/fp_mul_comba_24.o src/mul/fp_mul_comba_28.o src/mul/fp_mul_comba_3.o src/mul/fp_mul_comba_32.o \ -src/mul/fp_mul_comba_4.o src/mul/fp_mul_comba_48.o src/mul/fp_mul_comba_6.o src/mul/fp_mul_comba_64.o \ -src/mul/fp_mul_comba_7.o src/mul/fp_mul_comba_8.o src/mul/fp_mul_comba_9.o \ -src/mul/fp_mul_comba_small_set.o src/mul/fp_mul_d.o src/mul/fp_mulmod.o src/numtheory/fp_gcd.o \ -src/numtheory/fp_invmod.o src/numtheory/fp_isprime.o src/numtheory/fp_lcm.o \ -src/numtheory/fp_prime_miller_rabin.o src/numtheory/fp_prime_random_ex.o src/sqr/fp_sqr.o \ -src/sqr/fp_sqr_comba.o src/sqr/fp_sqr_comba_12.o src/sqr/fp_sqr_comba_17.o src/sqr/fp_sqr_comba_20.o \ -src/sqr/fp_sqr_comba_24.o src/sqr/fp_sqr_comba_28.o src/sqr/fp_sqr_comba_3.o src/sqr/fp_sqr_comba_32.o \ -src/sqr/fp_sqr_comba_4.o src/sqr/fp_sqr_comba_48.o src/sqr/fp_sqr_comba_6.o src/sqr/fp_sqr_comba_64.o \ -src/sqr/fp_sqr_comba_7.o src/sqr/fp_sqr_comba_8.o src/sqr/fp_sqr_comba_9.o \ -src/sqr/fp_sqr_comba_generic.o src/sqr/fp_sqr_comba_small_set.o src/sqr/fp_sqrmod.o - -HEADERS=src/headers/tfm.h - -#END_INS - - -ifndef LIBPATH - LIBPATH=/usr/lib -endif - -ifndef INCPATH - INCPATH=/usr/include -endif - -ifndef INSTALL_GROUP - GROUP=wheel -else - GROUP=$(INSTALL_GROUP) -endif - -ifndef INSTALL_USER - USER=root -else - USER=$(INSTALL_USER) -endif - -ifndef LIBNAME - LIBNAME=libtfm.la -endif - -ifndef LIBNAME_S - LIBNAME_S=libtfm.a -endif - -default: $(LIBNAME) - -objs: $(OBJECTS) - -$(LIBNAME): $(OBJECTS) - libtool --silent --mode=link gcc $(CFLAGS) `find . -type f | grep "[.]lo" | xargs` -o $(LIBNAME) -rpath $(LIBPATH) -version-info $(VERSION) - -install: $(LIBNAME) - install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH) - libtool --silent --mode=install install -c $(LIBNAME) $(DESTDIR)$(LIBPATH)/$(LIBNAME) - install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH) - install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH) - -mtest/mtest: mtest/mtest.c - cd mtest ; make mtest - -test: $(LIBNAME) demo/test.o mtest/mtest - $(CC) $(CFLAGS) demo/test.o $(LIBNAME_S) $(PROF) -o test - -timing: $(LIBNAME) demo/test.o - $(CC) $(CFLAGS) demo/test.o $(LIBNAME_S) $(PROF) -o test - -stest: $(LIBNAME) demo/stest.o - $(CC) $(CFLAGS) demo/stest.o $(LIBNAME_S) -o stest - -# $Source: /cvs/libtom/tomsfastmath/makefile.shared,v $ -# $Revision: 1.19 $ -# $Date: 2007/03/13 01:23:03 $ - diff --git a/lib/hcrypto/tomsfastmath/mess.sh b/lib/hcrypto/tomsfastmath/mess.sh deleted file mode 100644 index bf639ce3b..000000000 --- a/lib/hcrypto/tomsfastmath/mess.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash -if cvs log $1 >/dev/null 2>/dev/null; then exit 0; else echo "$1 shouldn't be here" ; exit 1; fi - - diff --git a/lib/hcrypto/tomsfastmath/mpi.c b/lib/hcrypto/tomsfastmath/mpi.c deleted file mode 100644 index 6b0c1d910..000000000 --- a/lib/hcrypto/tomsfastmath/mpi.c +++ /dev/null @@ -1,2 +0,0 @@ - -/* EOF */ diff --git a/lib/hcrypto/tomsfastmath/mtest/makefile b/lib/hcrypto/tomsfastmath/mtest/makefile deleted file mode 100644 index de6bf580e..000000000 --- a/lib/hcrypto/tomsfastmath/mtest/makefile +++ /dev/null @@ -1,9 +0,0 @@ -CFLAGS += -Wall -W -O3 - -default: mtest - -mtest: mtest.o - $(CC) $(CFLAGS) mtest.o -ltommath -o mtest - -clean: - rm -f *.o mtest *~ diff --git a/lib/hcrypto/tomsfastmath/mtest/mtest.c b/lib/hcrypto/tomsfastmath/mtest/mtest.c deleted file mode 100644 index 715ef07a2..000000000 --- a/lib/hcrypto/tomsfastmath/mtest/mtest.c +++ /dev/null @@ -1,324 +0,0 @@ -/* makes a bignum test harness with NUM tests per operation - * - * the output is made in the following format [one parameter per line] - -operation -operand1 -operand2 -[... operandN] -result1 -result2 -[... resultN] - -So for example "a * b mod n" would be - -mulmod -a -b -n -a*b mod n - -e.g. if a=3, b=4 n=11 then - -mulmod -3 -4 -11 -1 - - */ - -#ifdef MP_8BIT -#define THE_MASK 127 -#else -#define THE_MASK 32767 -#endif - -#include -#include -#include -#include -#define CRYPT -#include "../src/headers/tfm.h" - -FILE *rng; - -/* 1-2048 bit numbers */ -void rand_num(mp_int *a) -{ - int n, size; - unsigned char buf[2048]; - - size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2); - buf[0] = (fgetc(rng)&1)?1:0; - fread(buf+1, 1, size, rng); - while (buf[1] == 0) buf[1] = fgetc(rng); - mp_read_raw(a, buf, 1+size); -} - -/* 1-256 bit numbers (to test things like exptmod) */ -void rand_num2(mp_int *a) -{ - int n, size; - unsigned char buf[2048]; - - size = 1 + ((fgetc(rng)<<8) + fgetc(rng)) % (FP_MAX_SIZE/16 - DIGIT_BIT/2); - buf[0] = (fgetc(rng)&1)?1:0; - fread(buf+1, 1, size, rng); - while (buf[1] == 0) buf[1] = fgetc(rng); - mp_read_raw(a, buf, 1+size); -} - -#define mp_to64(a, b) mp_toradix(a, b, 64) - -int main(void) -{ - int n, tmp; - mp_int a, b, c, d, e; - clock_t t1; - char buf[4096]; - - mp_init(&a); - mp_init(&b); - mp_init(&c); - mp_init(&d); - mp_init(&e); - - - /* initial (2^n - 1)^2 testing, makes sure the comba multiplier works [it has the new carry code] */ -/* - mp_set(&a, 1); - for (n = 1; n < 8192; n++) { - mp_mul(&a, &a, &c); - printf("mul\n"); - mp_to64(&a, buf); - printf("%s\n%s\n", buf, buf); - mp_to64(&c, buf); - printf("%s\n", buf); - - mp_add_d(&a, 1, &a); - mp_mul_2(&a, &a); - mp_sub_d(&a, 1, &a); - } -*/ - - rng = fopen("/dev/urandom", "rb"); - if (rng == NULL) { - rng = fopen("/dev/random", "rb"); - if (rng == NULL) { - fprintf(stderr, "\nWarning: stdin used as random source\n\n"); - rng = stdin; - } - } - - t1 = clock(); - for (;;) { -#if 0 - if (clock() - t1 > CLOCKS_PER_SEC) { - sleep(2); - t1 = clock(); - } -#endif - n = fgetc(rng) % 16; - if (n == 0) { - /* add tests */ - rand_num(&a); - rand_num(&b); - mp_add(&a, &b, &c); - printf("add\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 1) { - /* sub tests */ - rand_num(&a); - rand_num(&b); - mp_sub(&a, &b, &c); - printf("sub\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 2) { - /* mul tests */ - rand_num(&a); - rand_num(&b); - mp_mul(&a, &b, &c); - printf("mul\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 3) { - /* div tests */ - rand_num(&a); - rand_num(&b); - mp_div(&a, &b, &c, &d); - printf("div\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - mp_to64(&d, buf); - printf("%s\n", buf); - } else if (n == 4) { - /* sqr tests */ - rand_num(&a); - mp_sqr(&a, &b); - printf("sqr\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 5) { - /* mul_2d test */ - rand_num(&a); - mp_copy(&a, &b); - n = fgetc(rng) & 63; - mp_mul_2d(&b, n, &b); - mp_to64(&a, buf); - printf("mul2d\n"); - printf("%s\n", buf); - printf("%d\n", n); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 6) { - /* div_2d test */ - rand_num(&a); - mp_copy(&a, &b); - n = fgetc(rng) & 63; - mp_div_2d(&b, n, &b, NULL); - mp_to64(&a, buf); - printf("div2d\n"); - printf("%s\n", buf); - printf("%d\n", n); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 7) { - /* gcd test */ - rand_num(&a); - rand_num(&b); - a.sign = MP_ZPOS; - b.sign = MP_ZPOS; - mp_gcd(&a, &b, &c); - printf("gcd\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 8) { - /* lcm test */ - rand_num(&a); - rand_num(&b); - a.sign = MP_ZPOS; - b.sign = MP_ZPOS; - mp_lcm(&a, &b, &c); - printf("lcm\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 9) { - /* exptmod test */ - rand_num2(&a); - rand_num2(&b); - rand_num2(&c); - a.sign = b.sign = c.sign = 0; - c.dp[0] |= 1; -// if (c.used <= 4) continue; -// if (mp_cmp(&a, &c) != MP_LT) continue; -// if (mp_cmp(&b, &c) != MP_LT) continue; - mp_exptmod(&a, &b, &c, &d); - printf("expt\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - mp_to64(&d, buf); - printf("%s\n", buf); - } else if (n == 10) { - /* invmod test */ - rand_num2(&a); - rand_num2(&b); - b.dp[0] |= 1; - b.sign = MP_ZPOS; - a.sign = MP_ZPOS; - mp_gcd(&a, &b, &c); - if (mp_cmp_d(&c, 1) != 0) continue; - if (mp_cmp_d(&b, 1) == 0) continue; - mp_invmod(&a, &b, &c); - printf("invmod\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - mp_to64(&c, buf); - printf("%s\n", buf); - } else if (n == 11) { - rand_num(&a); - mp_mul_2(&a, &a); - mp_div_2(&a, &b); - printf("div2\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 12) { - rand_num(&a); - mp_mul_2(&a, &b); - printf("mul2\n"); - mp_to64(&a, buf); - printf("%s\n", buf); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 13) { - rand_num(&a); - tmp = abs(rand()) & THE_MASK; - mp_add_d(&a, tmp, &b); - printf("add_d\n"); - mp_to64(&a, buf); - printf("%s\n%d\n", buf, tmp); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 14) { - rand_num(&a); - tmp = abs(rand()) & THE_MASK; - mp_sub_d(&a, tmp, &b); - printf("sub_d\n"); - mp_to64(&a, buf); - printf("%s\n%d\n", buf, tmp); - mp_to64(&b, buf); - printf("%s\n", buf); - } else if (n == 15) { - rand_num(&a); - tmp = abs(rand()) & THE_MASK; - mp_mul_d(&a, tmp, &b); - printf("mul_d\n"); - mp_to64(&a, buf); - printf("%s\n%d\n", buf, tmp); - mp_to64(&b, buf); - printf("%s\n", buf); - } - } - fclose(rng); - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/mtest/mtest.c,v $ */ -/* $Revision: 1.7 $ */ -/* $Date: 2007/01/12 19:39:06 $ */ diff --git a/lib/hcrypto/tomsfastmath/parsenames.pl b/lib/hcrypto/tomsfastmath/parsenames.pl deleted file mode 100644 index d558d2748..000000000 --- a/lib/hcrypto/tomsfastmath/parsenames.pl +++ /dev/null @@ -1,26 +0,0 @@ -#!/usr/bin/perl -# -# Splits the list of files and outputs for makefile type files -# wrapped at 80 chars -# -# Tom St Denis -@a = split(" ", $ARGV[1]); -$b = "$ARGV[0]="; -$len = length($b); -print $b; -foreach my $obj (@a) { - $len = $len + length($obj); - $obj =~ s/\*/\$/; - if ($len > 100) { - printf "\\\n"; - $len = length($obj); - } - print "$obj "; -} -#if ($ARGV[0] eq "HEADERS") { print "testprof/tomcrypt_test.h"; } - -print "\n\n"; - -# $Source: /cvs/libtom/tomsfastmath/parsenames.pl,v $ -# $Revision: 1.1 $ -# $Date: 2006/12/31 21:31:40 $ diff --git a/lib/hcrypto/tomsfastmath/pre_gen/mpi.c b/lib/hcrypto/tomsfastmath/pre_gen/mpi.c deleted file mode 100644 index 6b0c1d910..000000000 --- a/lib/hcrypto/tomsfastmath/pre_gen/mpi.c +++ /dev/null @@ -1,2 +0,0 @@ - -/* EOF */ diff --git a/lib/hcrypto/tomsfastmath/random_txt_files/amd64.txt b/lib/hcrypto/tomsfastmath/random_txt_files/amd64.txt deleted file mode 100644 index 945b243bc..000000000 --- a/lib/hcrypto/tomsfastmath/random_txt_files/amd64.txt +++ /dev/null @@ -1,43 +0,0 @@ -AMD64 timings - -using ISO C -mult - 512-bit: 496 - 1024-bit: 1717 - 2048-bit: 7200 -sqr - 512-bit: 448 - 1024-bit: 1760 - 2048-bit: 7099 -mont - 512-bit: 1416 - 1024-bit: 5156 - 2048-bit: 20820 -expt - 512-bit: 1520207 - 1024-bit: 10603520 - 2048-bit: 84893649 - -using amd64 -mult - 512-bit: 292 - 1024-bit: 945 - 2048-bit: 3620 -sqr - 512-bit: 238 - 1024-bit: 801 - 2048-bit: 2853 -mont - 512-bit: 731 - 1024-bit: 1730 - 2048-bit: 5462 -Exptmod: - 512-bit: 641743 - 1024-bit: 3167406 - 2048-bit: 20158609 - -LTM exptmods - -Exponentiating 513-bit => 825/sec, 2183028 cycles -Exponentiating 1025-bit => 151/sec, 11900720 cycles -Exponentiating 2049-bit => 24/sec, 72376416 cycles diff --git a/lib/hcrypto/tomsfastmath/random_txt_files/exptmod_timings.txt b/lib/hcrypto/tomsfastmath/random_txt_files/exptmod_timings.txt deleted file mode 100644 index d6379791a..000000000 --- a/lib/hcrypto/tomsfastmath/random_txt_files/exptmod_timings.txt +++ /dev/null @@ -1,45 +0,0 @@ -LTM timings: - -Athlon Barton -Exponentiating 513-bit => 561/sec, 3909824 cycles -Exponentiating 1025-bit => 103/sec, 21175496 cycles -Exponentiating 2049-bit => 16/sec, 129845554 cycles - -P4 Northwood -Exponentiating 513-bit => 284/sec, 9884722 cycles -Exponentiating 1025-bit => 47/sec, 59090432 cycles -Exponentiating 2049-bit => 6/sec, 427456070 cycles - -TFM timings: - -Athlon Barton - 512-bit: 2289257 - 1024-bit: 12871373 - 2048-bit: 97211357 - -P4 Northwood [x86-32] - 512-bit: 8015598 - 1024-bit: 55559304 - 2048-bit: 409861746 - -P4 Northwood [SSE2] - 512-bit: 5895000 - 1024-bit: 39648730 - 2048-bit: 304110670 - -

- - - - - - - - - - - -
ProcessorSize in bitsx86-32 x86-64SSE2LTM
P4 512 8015598 58950009884722
1024 55559304 3964873059090432
2048 409861746 304110670427456070
Athlon Barton512 22892573909824
1024 1287137321175496
2048 97211357129845554
Athlon64 512 6417432183028
1042 316740611900720
2048 2015860972376416
-Cycles per operation -
- diff --git a/lib/hcrypto/tomsfastmath/random_txt_files/ltm_times.txt b/lib/hcrypto/tomsfastmath/random_txt_files/ltm_times.txt deleted file mode 100644 index 700d8778d..000000000 --- a/lib/hcrypto/tomsfastmath/random_txt_files/ltm_times.txt +++ /dev/null @@ -1,37 +0,0 @@ -LTM Timings... - -Multiplying 140-bit => 2950763/sec, 952 cycles -Multiplying 196-bit => 2150939/sec, 1306 cycles -Multiplying 252-bit => 1357066/sec, 2070 cycles -Multiplying 308-bit => 1055269/sec, 2662 cycles -Multiplying 364-bit => 817557/sec, 3436 cycles -Multiplying 420-bit => 636413/sec, 4414 cycles -Multiplying 475-bit => 536912/sec, 5232 cycles -Multiplying 531-bit => 433641/sec, 6478 cycles -Multiplying 588-bit => 372069/sec, 7550 cycles -Multiplying 644-bit => 322813/sec, 8702 cycles -Multiplying 698-bit => 275566/sec, 10194 cycles -Multiplying 753-bit => 242082/sec, 11604 cycles -Multiplying 809-bit => 214797/sec, 13078 cycles -Multiplying 867-bit => 189626/sec, 14814 cycles -Multiplying 921-bit => 168858/sec, 16636 cycles -Multiplying 978-bit => 151598/sec, 18530 cycles -Multiplying 1036-bit => 137580/sec, 20418 cycles -Multiplying 1091-bit => 124661/sec, 22534 cycles -Multiplying 1148-bit => 111677/sec, 25154 cycles -Multiplying 1199-bit => 102762/sec, 27336 cycles -Multiplying 1258-bit => 94519/sec, 29720 cycles -Multiplying 1316-bit => 86975/sec, 32298 cycles -Multiplying 1371-bit => 79754/sec, 35222 cycles -Multiplying 1427-bit => 74473/sec, 37720 cycles -Multiplying 1483-bit => 68827/sec, 40814 cycles -Multiplying 1537-bit => 63644/sec, 44138 cycles -Multiplying 1595-bit => 59646/sec, 47096 cycles -Multiplying 1651-bit => 56469/sec, 49746 cycles -Multiplying 1708-bit => 52640/sec, 53364 cycles -Multiplying 1764-bit => 49823/sec, 56382 cycles -Multiplying 1819-bit => 46856/sec, 59952 cycles -Multiplying 1875-bit => 44264/sec, 63462 cycles -Multiplying 1929-bit => 41641/sec, 67460 cycles -Multiplying 1985-bit => 39539/sec, 71046 cycles -Multiplying 2044-bit => 37591/sec, 74728 cycles \ No newline at end of file diff --git a/lib/hcrypto/tomsfastmath/random_txt_files/newsqr.txt b/lib/hcrypto/tomsfastmath/random_txt_files/newsqr.txt deleted file mode 100644 index 71a2773e1..000000000 --- a/lib/hcrypto/tomsfastmath/random_txt_files/newsqr.txt +++ /dev/null @@ -1,36 +0,0 @@ -New code added in TFM v0.03 - -OLD 64-bit...[athlon64] - -Squaring: - 256-bit: 89 - 512-bit: 234 - 1024-bit: 815 - 2048-bit: 2851 - -NEW 64-bit ... - -Squaring: - 256-bit: 89 - 512-bit: 228 - 1024-bit: 691 - 2048-bit: 2228 - - -OLD 32-bit [athlonxp] - -Squaring: - - 256-bit: 327 - 512-bit: 1044 - 1024-bit: 3646 - 2048-bit: 17055 - -NEW 32-bit - -Squaring: - - 256-bit: 332 - 512-bit: 894 - 1024-bit: 2983 - 2048-bit: 10385 diff --git a/lib/hcrypto/tomsfastmath/random_txt_files/old_sqr_times.txt b/lib/hcrypto/tomsfastmath/random_txt_files/old_sqr_times.txt deleted file mode 100644 index 3842a8661..000000000 --- a/lib/hcrypto/tomsfastmath/random_txt_files/old_sqr_times.txt +++ /dev/null @@ -1,14 +0,0 @@ -I started with: - 512-bit: 16338 - 1024-bit: 51020 - 2048-bit: 142718 - -My x86-32 - 512-bit: 2864 - 1024-bit: 10615 - 2048-bit: 41807 - -My SSE2 - 512-bit: 2168 - 1024-bit: 7727 - 2048-bit: 33163 \ No newline at end of file diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_add.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_add.c deleted file mode 100644 index d02a09bd5..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_add.c +++ /dev/null @@ -1,43 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_add(fp_int *a, fp_int *b, fp_int *c) -{ - int sa, sb; - - /* get sign of both inputs */ - sa = a->sign; - sb = b->sign; - - /* handle two cases, not four */ - if (sa == sb) { - /* both positive or both negative */ - /* add their magnitudes, copy the sign */ - c->sign = sa; - s_fp_add (a, b, c); - } else { - /* one positive, the other negative */ - /* subtract the one with the greater magnitude from */ - /* the one of the lesser magnitude. The result gets */ - /* the sign of the one with the greater magnitude. */ - if (fp_cmp_mag (a, b) == FP_LT) { - c->sign = sb; - s_fp_sub (b, a, c); - } else { - c->sign = sa; - s_fp_sub (a, b, c); - } - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_add.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_add_d.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_add_d.c deleted file mode 100644 index 2998ee8ae..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_add_d.c +++ /dev/null @@ -1,22 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a + b */ -void fp_add_d(fp_int *a, fp_digit b, fp_int *c) -{ - fp_int tmp; - fp_set(&tmp, b); - fp_add(a,&tmp,c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_add_d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_addmod.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_addmod.c deleted file mode 100644 index 4a40d8061..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_addmod.c +++ /dev/null @@ -1,23 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* d = a + b (mod c) */ -int fp_addmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d) -{ - fp_int tmp; - fp_zero(&tmp); - fp_add(a, b, &tmp); - return fp_mod(&tmp, c, d); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_addmod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp.c deleted file mode 100644 index aa265e98a..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp.c +++ /dev/null @@ -1,31 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_cmp(fp_int *a, fp_int *b) -{ - if (a->sign == FP_NEG && b->sign == FP_ZPOS) { - return FP_LT; - } else if (a->sign == FP_ZPOS && b->sign == FP_NEG) { - return FP_GT; - } else { - /* compare digits */ - if (a->sign == FP_NEG) { - /* if negative compare opposite direction */ - return fp_cmp_mag(b, a); - } else { - return fp_cmp_mag(a, b); - } - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_cmp.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_d.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_d.c deleted file mode 100644 index 13d17cccd..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_d.c +++ /dev/null @@ -1,38 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* compare against a single digit */ -int fp_cmp_d(fp_int *a, fp_digit b) -{ - /* compare based on sign */ - if ((b && a->used == 0) || a->sign == FP_NEG) { - return FP_LT; - } - - /* compare based on magnitude */ - if (a->used > 1) { - return FP_GT; - } - - /* compare the only digit of a to b */ - if (a->dp[0] > b) { - return FP_GT; - } else if (a->dp[0] < b) { - return FP_LT; - } else { - return FP_EQ; - } - -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_cmp_d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_mag.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_mag.c deleted file mode 100644 index 6384883b2..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_cmp_mag.c +++ /dev/null @@ -1,35 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_cmp_mag(fp_int *a, fp_int *b) -{ - int x; - - if (a->used > b->used) { - return FP_GT; - } else if (a->used < b->used) { - return FP_LT; - } else { - for (x = a->used - 1; x >= 0; x--) { - if (a->dp[x] > b->dp[x]) { - return FP_GT; - } else if (a->dp[x] < b->dp[x]) { - return FP_LT; - } - } - } - return FP_EQ; -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_cmp_mag.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_sub.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_sub.c deleted file mode 100644 index e26eb5f68..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_sub.c +++ /dev/null @@ -1,50 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a - b */ -void fp_sub(fp_int *a, fp_int *b, fp_int *c) -{ - int sa, sb; - - sa = a->sign; - sb = b->sign; - - if (sa != sb) { - /* subtract a negative from a positive, OR */ - /* subtract a positive from a negative. */ - /* In either case, ADD their magnitudes, */ - /* and use the sign of the first number. */ - c->sign = sa; - s_fp_add (a, b, c); - } else { - /* subtract a positive from a positive, OR */ - /* subtract a negative from a negative. */ - /* First, take the difference between their */ - /* magnitudes, then... */ - if (fp_cmp_mag (a, b) != FP_LT) { - /* Copy the sign from the first */ - c->sign = sa; - /* The first has a larger or equal magnitude */ - s_fp_sub (a, b, c); - } else { - /* The result has the *opposite* sign from */ - /* the first number. */ - c->sign = (sa == FP_ZPOS) ? FP_NEG : FP_ZPOS; - /* The second has a larger magnitude */ - s_fp_sub (b, a, c); - } - } -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_sub.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_sub_d.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_sub_d.c deleted file mode 100644 index 6e0b1fdd5..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_sub_d.c +++ /dev/null @@ -1,22 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a - b */ -void fp_sub_d(fp_int *a, fp_digit b, fp_int *c) -{ - fp_int tmp; - fp_set(&tmp, b); - fp_sub(a, &tmp, c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_sub_d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/fp_submod.c b/lib/hcrypto/tomsfastmath/src/addsub/fp_submod.c deleted file mode 100644 index e59ab3abc..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/fp_submod.c +++ /dev/null @@ -1,24 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* d = a - b (mod c) */ -int fp_submod(fp_int *a, fp_int *b, fp_int *c, fp_int *d) -{ - fp_int tmp; - fp_zero(&tmp); - fp_sub(a, b, &tmp); - return fp_mod(&tmp, c, d); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/fp_submod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/s_fp_add.c b/lib/hcrypto/tomsfastmath/src/addsub/s_fp_add.c deleted file mode 100644 index a52c73ef6..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/s_fp_add.c +++ /dev/null @@ -1,42 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* unsigned addition */ -void s_fp_add(fp_int *a, fp_int *b, fp_int *c) -{ - int x, y, oldused; - register fp_word t; - - y = MAX(a->used, b->used); - oldused = c->used; - c->used = y; - - t = 0; - for (x = 0; x < y; x++) { - t += ((fp_word)a->dp[x]) + ((fp_word)b->dp[x]); - c->dp[x] = (fp_digit)t; - t >>= DIGIT_BIT; - } - if (t != 0 && x < FP_SIZE) { - c->dp[c->used++] = (fp_digit)t; - ++x; - } - - c->used = x; - for (; x < oldused; x++) { - c->dp[x] = 0; - } - fp_clamp(c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/s_fp_add.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/addsub/s_fp_sub.c b/lib/hcrypto/tomsfastmath/src/addsub/s_fp_sub.c deleted file mode 100644 index 112d21ed3..000000000 --- a/lib/hcrypto/tomsfastmath/src/addsub/s_fp_sub.c +++ /dev/null @@ -1,40 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* unsigned subtraction ||a|| >= ||b|| ALWAYS! */ -void s_fp_sub(fp_int *a, fp_int *b, fp_int *c) -{ - int x, oldbused, oldused; - fp_word t; - - oldused = c->used; - oldbused = b->used; - c->used = a->used; - t = 0; - for (x = 0; x < oldbused; x++) { - t = ((fp_word)a->dp[x]) - (((fp_word)b->dp[x]) + t); - c->dp[x] = (fp_digit)t; - t = (t >> DIGIT_BIT)&1; - } - for (; x < a->used; x++) { - t = ((fp_word)a->dp[x]) - t; - c->dp[x] = (fp_digit)t; - t = (t >> DIGIT_BIT); - } - for (; x < oldused; x++) { - c->dp[x] = 0; - } - fp_clamp(c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/addsub/s_fp_sub.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_init_multi.c b/lib/hcrypto/tomsfastmath/src/bin/fp_init_multi.c deleted file mode 100644 index cce4dfdf1..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_init_multi.c +++ /dev/null @@ -1,21 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is public domain and free for all purposes. - * - * Love Hornquist Astrand - */ -#include -#include - -void fp_init_multi(fp_int *a, ...) -{ - va_list ap; - fp_int *b; - - fp_init(a); - va_start(ap, a); - while((b = va_arg(ap, fp_int *)) != NULL) { - fp_init(b); - } - va_end(ap); -} diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_radix_size.c b/lib/hcrypto/tomsfastmath/src/bin/fp_radix_size.c deleted file mode 100644 index f4773cb7f..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_radix_size.c +++ /dev/null @@ -1,53 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_radix_size(fp_int *a, int radix, int *size) -{ - int digs; - fp_int t; - fp_digit d; - - *size = 0; - - /* check range of the radix */ - if (radix < 2 || radix > 64) { - return FP_VAL; - } - - /* quick out if its zero */ - if (fp_iszero(a) == 1) { - *size = 2; - return FP_OKAY; - } - - fp_init_copy(&t, a); - - /* if it is negative output a - */ - if (t.sign == FP_NEG) { - (*size)++; - t.sign = FP_ZPOS; - } - - digs = 0; - while (fp_iszero (&t) == FP_NO) { - fp_div_d (&t, (fp_digit) radix, &t, &d); - (*size)++; - } - - /* append a NULL so the string is properly terminated */ - (*size)++; - return FP_OKAY; - -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_radix_size.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_read_radix.c b/lib/hcrypto/tomsfastmath/src/bin/fp_read_radix.c deleted file mode 100644 index 6b28b16bc..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_read_radix.c +++ /dev/null @@ -1,75 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_read_radix(fp_int *a, char *str, int radix) -{ - int y, neg; - char ch; - - /* make sure the radix is ok */ - if (radix < 2 || radix > 64) { - return FP_VAL; - } - - /* if the leading digit is a - * minus set the sign to negative. - */ - if (*str == '-') { - ++str; - neg = FP_NEG; - } else { - neg = FP_ZPOS; - } - - /* set the integer to the default of zero */ - fp_zero (a); - - /* process each digit of the string */ - while (*str) { - /* if the radix < 36 the conversion is case insensitive - * this allows numbers like 1AB and 1ab to represent the same value - * [e.g. in hex] - */ - ch = *str; - /* - * Don't use toupper() because it tends to pull in tons of locale stuff - */ - if (radix < 36 && ch >= 'a' && ch <= 'z') - ch = ch - 'a' + 'A'; - for (y = 0; y < 64; y++) { - if (ch == fp_s_rmap[y]) { - break; - } - } - - /* if the char was found in the map - * and is less than the given radix add it - * to the number, otherwise exit the loop. - */ - if (y < radix) { - fp_mul_d (a, (fp_digit) radix, a); - fp_add_d (a, (fp_digit) y, a); - } else { - break; - } - ++str; - } - - /* set the sign only if a != 0 */ - if (fp_iszero(a) != FP_YES) { - a->sign = neg; - } - return FP_OKAY; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_read_radix.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_read_signed_bin.c b/lib/hcrypto/tomsfastmath/src/bin/fp_read_signed_bin.c deleted file mode 100644 index 78155f38b..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_read_signed_bin.c +++ /dev/null @@ -1,27 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_read_signed_bin(fp_int *a, unsigned char *b, int c) -{ - /* read magnitude */ - fp_read_unsigned_bin (a, b + 1, c - 1); - - /* first byte is 0 for positive, non-zero for negative */ - if (b[0] == 0) { - a->sign = FP_ZPOS; - } else { - a->sign = FP_NEG; - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_read_signed_bin.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_read_unsigned_bin.c b/lib/hcrypto/tomsfastmath/src/bin/fp_read_unsigned_bin.c deleted file mode 100644 index e888cb35d..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_read_unsigned_bin.c +++ /dev/null @@ -1,66 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_read_unsigned_bin(fp_int *a, unsigned char *b, int c) -{ - /* zero the int */ - fp_zero (a); - - /* If we know the endianness of this architecture, and we're using - 32-bit fp_digits, we can optimize this */ -#if (defined(ENDIAN_LITTLE) || defined(ENDIAN_BIG)) && !defined(FP_64BIT) - /* But not for both simultaneously */ -#if defined(ENDIAN_LITTLE) && defined(ENDIAN_BIG) -#error Both ENDIAN_LITTLE and ENDIAN_BIG defined. -#endif - { - unsigned char *pd = (unsigned char *)a->dp; - - if ((unsigned)c > (FP_SIZE * sizeof(fp_digit))) { - int excess = c - (FP_SIZE * sizeof(fp_digit)); - c -= excess; - b += excess; - } - a->used = (c + sizeof(fp_digit) - 1)/sizeof(fp_digit); - /* read the bytes in */ -#ifdef ENDIAN_BIG - { - /* Use Duff's device to unroll the loop. */ - int idx = (c - 1) & ~3; - switch (c % 4) { - case 0: do { pd[idx+0] = *b++; - case 3: pd[idx+1] = *b++; - case 2: pd[idx+2] = *b++; - case 1: pd[idx+3] = *b++; - idx -= 4; - } while ((c -= 4) > 0); - } - } -#else - for (c -= 1; c >= 0; c -= 1) { - pd[c] = *b++; - } -#endif - } -#else - /* read the bytes in */ - for (; c > 0; c--) { - fp_mul_2d (a, 8, a); - a->dp[0] |= *b++; - a->used += 1; - } -#endif - fp_clamp (a); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_read_unsigned_bin.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 02:58:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_reverse.c b/lib/hcrypto/tomsfastmath/src/bin/fp_reverse.c deleted file mode 100644 index 4e9e3f663..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_reverse.c +++ /dev/null @@ -1,31 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* reverse an array, used for radix code */ -void fp_reverse (unsigned char *s, int len) -{ - int ix, iy; - unsigned char t; - - ix = 0; - iy = len - 1; - while (ix < iy) { - t = s[ix]; - s[ix] = s[iy]; - s[iy] = t; - ++ix; - --iy; - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_reverse.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/27 02:38:44 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_s_rmap.c b/lib/hcrypto/tomsfastmath/src/bin/fp_s_rmap.c deleted file mode 100644 index 010de8606..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_s_rmap.c +++ /dev/null @@ -1,17 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* chars used in radix conversions */ -const char *fp_s_rmap = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+/"; - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_s_rmap.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_signed_bin_size.c b/lib/hcrypto/tomsfastmath/src/bin/fp_signed_bin_size.c deleted file mode 100644 index ef2cd0a22..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_signed_bin_size.c +++ /dev/null @@ -1,19 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_signed_bin_size(fp_int *a) -{ - return 1 + fp_unsigned_bin_size (a); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_signed_bin_size.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_to_signed_bin.c b/lib/hcrypto/tomsfastmath/src/bin/fp_to_signed_bin.c deleted file mode 100644 index 5e507a432..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_to_signed_bin.c +++ /dev/null @@ -1,20 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_to_signed_bin(fp_int *a, unsigned char *b) -{ - fp_to_unsigned_bin (a, b + 1); - b[0] = (unsigned char) ((a->sign == FP_ZPOS) ? 0 : 1); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_to_signed_bin.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_to_unsigned_bin.c b/lib/hcrypto/tomsfastmath/src/bin/fp_to_unsigned_bin.c deleted file mode 100644 index 469efb0d7..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_to_unsigned_bin.c +++ /dev/null @@ -1,29 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_to_unsigned_bin(fp_int *a, unsigned char *b) -{ - int x; - fp_int t; - - fp_init_copy(&t, a); - - x = 0; - while (fp_iszero (&t) == FP_NO) { - b[x++] = (unsigned char) (t.dp[0] & 255); - fp_div_2d (&t, 8, &t, NULL); - } - fp_reverse (b, x); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_to_unsigned_bin.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/27 02:38:44 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_toradix.c b/lib/hcrypto/tomsfastmath/src/bin/fp_toradix.c deleted file mode 100644 index ef4971f3f..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_toradix.c +++ /dev/null @@ -1,59 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_toradix(fp_int *a, char *str, int radix) -{ - int digs; - fp_int t; - fp_digit d; - char *_s = str; - - /* check range of the radix */ - if (radix < 2 || radix > 64) { - return FP_VAL; - } - - /* quick out if its zero */ - if (fp_iszero(a) == 1) { - *str++ = '0'; - *str = '\0'; - return FP_OKAY; - } - - fp_init_copy(&t, a); - - /* if it is negative output a - */ - if (t.sign == FP_NEG) { - ++_s; - *str++ = '-'; - t.sign = FP_ZPOS; - } - - digs = 0; - while (fp_iszero (&t) == FP_NO) { - fp_div_d (&t, (fp_digit) radix, &t, &d); - *str++ = fp_s_rmap[d]; - ++digs; - } - - /* reverse the digits of the string. In this case _s points - * to the first digit [exluding the sign] of the number] - */ - fp_reverse ((unsigned char *)_s, digs); - - /* append a NULL so the string is properly terminated */ - *str = '\0'; - return FP_OKAY; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_toradix.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/27 02:38:44 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bin/fp_unsigned_bin_size.c b/lib/hcrypto/tomsfastmath/src/bin/fp_unsigned_bin_size.c deleted file mode 100644 index d15dc2930..000000000 --- a/lib/hcrypto/tomsfastmath/src/bin/fp_unsigned_bin_size.c +++ /dev/null @@ -1,20 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_unsigned_bin_size(fp_int *a) -{ - int size = fp_count_bits (a); - return (size / 8 + ((size & 7) != 0 ? 1 : 0)); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bin/fp_unsigned_bin_size.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_cnt_lsb.c b/lib/hcrypto/tomsfastmath/src/bit/fp_cnt_lsb.c deleted file mode 100644 index 98708dfda..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_cnt_lsb.c +++ /dev/null @@ -1,46 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -static const int lnz[16] = { - 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 -}; - -/* Counts the number of lsbs which are zero before the first zero bit */ -int fp_cnt_lsb(fp_int *a) -{ - int x; - fp_digit q, qq; - - /* easy out */ - if (fp_iszero(a) == 1) { - return 0; - } - - /* scan lower digits until non-zero */ - for (x = 0; x < a->used && a->dp[x] == 0; x++); - q = a->dp[x]; - x *= DIGIT_BIT; - - /* now scan this digit until a 1 is found */ - if ((q & 1) == 0) { - do { - qq = q & 15; - x += lnz[qq]; - q >>= 4; - } while (qq == 0); - } - return x; -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_cnt_lsb.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_count_bits.c b/lib/hcrypto/tomsfastmath/src/bit/fp_count_bits.c deleted file mode 100644 index 73e8014c2..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_count_bits.c +++ /dev/null @@ -1,36 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -int fp_count_bits (fp_int * a) -{ - int r; - fp_digit q; - - /* shortcut */ - if (a->used == 0) { - return 0; - } - - /* get number of digits and add that */ - r = (a->used - 1) * DIGIT_BIT; - - /* take the last digit and count the bits in it */ - q = a->dp[a->used - 1]; - while (q > ((fp_digit) 0)) { - ++r; - q >>= ((fp_digit) 1); - } - return r; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_count_bits.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_div_2.c b/lib/hcrypto/tomsfastmath/src/bit/fp_div_2.c deleted file mode 100644 index 464c440bb..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_div_2.c +++ /dev/null @@ -1,53 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* b = a/2 */ -void fp_div_2(fp_int * a, fp_int * b) -{ - int x, oldused; - - oldused = b->used; - b->used = a->used; - { - register fp_digit r, rr, *tmpa, *tmpb; - - /* source alias */ - tmpa = a->dp + b->used - 1; - - /* dest alias */ - tmpb = b->dp + b->used - 1; - - /* carry */ - r = 0; - for (x = b->used - 1; x >= 0; x--) { - /* get the carry for the next iteration */ - rr = *tmpa & 1; - - /* shift the current digit, add in carry and store */ - *tmpb-- = (*tmpa-- >> 1) | (r << (DIGIT_BIT - 1)); - - /* forward carry to next iteration */ - r = rr; - } - - /* zero excess digits */ - tmpb = b->dp + b->used; - for (x = b->used; x < oldused; x++) { - *tmpb++ = 0; - } - } - b->sign = a->sign; - fp_clamp (b); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_div_2.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_div_2d.c b/lib/hcrypto/tomsfastmath/src/bit/fp_div_2d.c deleted file mode 100644 index 33f2d54c4..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_div_2d.c +++ /dev/null @@ -1,79 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a / 2**b */ -void fp_div_2d(fp_int *a, int b, fp_int *c, fp_int *d) -{ - fp_digit D, r, rr; - int x; - fp_int t; - - /* if the shift count is <= 0 then we do no work */ - if (b <= 0) { - fp_copy (a, c); - if (d != NULL) { - fp_zero (d); - } - return; - } - - fp_init(&t); - - /* get the remainder */ - if (d != NULL) { - fp_mod_2d (a, b, &t); - } - - /* copy */ - fp_copy(a, c); - - /* shift by as many digits in the bit count */ - if (b >= (int)DIGIT_BIT) { - fp_rshd (c, b / DIGIT_BIT); - } - - /* shift any bit count < DIGIT_BIT */ - D = (fp_digit) (b % DIGIT_BIT); - if (D != 0) { - register fp_digit *tmpc, mask, shift; - - /* mask */ - mask = (((fp_digit)1) << D) - 1; - - /* shift for lsb */ - shift = DIGIT_BIT - D; - - /* alias */ - tmpc = c->dp + (c->used - 1); - - /* carry */ - r = 0; - for (x = c->used - 1; x >= 0; x--) { - /* get the lower bits of this word in a temp */ - rr = *tmpc & mask; - - /* shift the current word and mix in the carry bits from the previous word */ - *tmpc = (*tmpc >> D) | (r << shift); - --tmpc; - - /* set the carry to the carry bits of the current word found above */ - r = rr; - } - } - fp_clamp (c); - if (d != NULL) { - fp_copy (&t, d); - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_div_2d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_lshd.c b/lib/hcrypto/tomsfastmath/src/bit/fp_lshd.c deleted file mode 100644 index 2e055d69e..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_lshd.c +++ /dev/null @@ -1,38 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_lshd(fp_int *a, int x) -{ - int y; - - /* move up and truncate as required */ - y = MIN(a->used + x - 1, (int)(FP_SIZE-1)); - - /* store new size */ - a->used = y + 1; - - /* move digits */ - for (; y >= x; y--) { - a->dp[y] = a->dp[y-x]; - } - - /* zero lower digits */ - for (; y >= 0; y--) { - a->dp[y] = 0; - } - - /* clamp digits */ - fp_clamp(a); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_lshd.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_mod_2d.c b/lib/hcrypto/tomsfastmath/src/bit/fp_mod_2d.c deleted file mode 100644 index 675abbabc..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_mod_2d.c +++ /dev/null @@ -1,42 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a mod 2**d */ -void fp_mod_2d(fp_int *a, int b, fp_int *c) -{ - int x; - - /* zero if count less than or equal to zero */ - if (b <= 0) { - fp_zero(c); - return; - } - - /* get copy of input */ - fp_copy(a, c); - - /* if 2**d is larger than we just return */ - if (b >= (DIGIT_BIT * a->used)) { - return; - } - - /* zero digits above the last digit of the modulus */ - for (x = (b / DIGIT_BIT) + ((b % DIGIT_BIT) == 0 ? 0 : 1); x < c->used; x++) { - c->dp[x] = 0; - } - /* clear the digit that is not completely outside/inside the modulus */ - c->dp[b / DIGIT_BIT] &= ~((fp_digit)0) >> (DIGIT_BIT - b); - fp_clamp (c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_mod_2d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/bit/fp_rshd.c b/lib/hcrypto/tomsfastmath/src/bit/fp_rshd.c deleted file mode 100644 index 666b15067..000000000 --- a/lib/hcrypto/tomsfastmath/src/bit/fp_rshd.c +++ /dev/null @@ -1,40 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_rshd(fp_int *a, int x) -{ - int y; - - /* too many digits just zero and return */ - if (x >= a->used) { - fp_zero(a); - return; - } - - /* shift */ - for (y = 0; y < a->used - x; y++) { - a->dp[y] = a->dp[y+x]; - } - - /* zero rest */ - for (; y < a->used; y++) { - a->dp[y] = 0; - } - - /* decrement count */ - a->used -= x; - fp_clamp(a); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/bit/fp_rshd.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/divide/fp_div.c b/lib/hcrypto/tomsfastmath/src/divide/fp_div.c deleted file mode 100644 index aa8c2defb..000000000 --- a/lib/hcrypto/tomsfastmath/src/divide/fp_div.c +++ /dev/null @@ -1,157 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* a/b => cb + d == a */ -int fp_div(fp_int *a, fp_int *b, fp_int *c, fp_int *d) -{ - fp_int q, x, y, t1, t2; - int n, t, i, norm, neg; - - /* is divisor zero ? */ - if (fp_iszero (b) == 1) { - return FP_VAL; - } - - /* if a < b then q=0, r = a */ - if (fp_cmp_mag (a, b) == FP_LT) { - if (d != NULL) { - fp_copy (a, d); - } - if (c != NULL) { - fp_zero (c); - } - return FP_OKAY; - } - - fp_init(&q); - q.used = a->used + 2; - - fp_init(&t1); - fp_init(&t2); - fp_init_copy(&x, a); - fp_init_copy(&y, b); - - /* fix the sign */ - neg = (a->sign == b->sign) ? FP_ZPOS : FP_NEG; - x.sign = y.sign = FP_ZPOS; - - /* normalize both x and y, ensure that y >= b/2, [b == 2**DIGIT_BIT] */ - norm = fp_count_bits(&y) % DIGIT_BIT; - if (norm < (int)(DIGIT_BIT-1)) { - norm = (DIGIT_BIT-1) - norm; - fp_mul_2d (&x, norm, &x); - fp_mul_2d (&y, norm, &y); - } else { - norm = 0; - } - - /* note hac does 0 based, so if used==5 then its 0,1,2,3,4, e.g. use 4 */ - n = x.used - 1; - t = y.used - 1; - - /* while (x >= y*b**n-t) do { q[n-t] += 1; x -= y*b**{n-t} } */ - fp_lshd (&y, n - t); /* y = y*b**{n-t} */ - - while (fp_cmp (&x, &y) != FP_LT) { - ++(q.dp[n - t]); - fp_sub (&x, &y, &x); - } - - /* reset y by shifting it back down */ - fp_rshd (&y, n - t); - - /* step 3. for i from n down to (t + 1) */ - for (i = n; i >= (t + 1); i--) { - if (i > x.used) { - continue; - } - - /* step 3.1 if xi == yt then set q{i-t-1} to b-1, - * otherwise set q{i-t-1} to (xi*b + x{i-1})/yt */ - if (x.dp[i] == y.dp[t]) { - q.dp[i - t - 1] = ((((fp_word)1) << DIGIT_BIT) - 1); - } else { - fp_word tmp; - tmp = ((fp_word) x.dp[i]) << ((fp_word) DIGIT_BIT); - tmp |= ((fp_word) x.dp[i - 1]); - tmp /= ((fp_word) y.dp[t]); - q.dp[i - t - 1] = (fp_digit) (tmp); - } - - /* while (q{i-t-1} * (yt * b + y{t-1})) > - xi * b**2 + xi-1 * b + xi-2 - - do q{i-t-1} -= 1; - */ - q.dp[i - t - 1] = (q.dp[i - t - 1] + 1); - do { - q.dp[i - t - 1] = (q.dp[i - t - 1] - 1); - - /* find left hand */ - fp_zero (&t1); - t1.dp[0] = (t - 1 < 0) ? 0 : y.dp[t - 1]; - t1.dp[1] = y.dp[t]; - t1.used = 2; - fp_mul_d (&t1, q.dp[i - t - 1], &t1); - - /* find right hand */ - t2.dp[0] = (i - 2 < 0) ? 0 : x.dp[i - 2]; - t2.dp[1] = (i - 1 < 0) ? 0 : x.dp[i - 1]; - t2.dp[2] = x.dp[i]; - t2.used = 3; - } while (fp_cmp_mag(&t1, &t2) == FP_GT); - - /* step 3.3 x = x - q{i-t-1} * y * b**{i-t-1} */ - fp_mul_d (&y, q.dp[i - t - 1], &t1); - fp_lshd (&t1, i - t - 1); - fp_sub (&x, &t1, &x); - - /* if x < 0 then { x = x + y*b**{i-t-1}; q{i-t-1} -= 1; } */ - if (x.sign == FP_NEG) { - fp_copy (&y, &t1); - fp_lshd (&t1, i - t - 1); - fp_add (&x, &t1, &x); - q.dp[i - t - 1] = q.dp[i - t - 1] - 1; - } - } - - /* now q is the quotient and x is the remainder - * [which we have to normalize] - */ - - /* get sign before writing to c */ - x.sign = x.used == 0 ? FP_ZPOS : a->sign; - - if (c != NULL) { - fp_clamp (&q); - fp_copy (&q, c); - c->sign = neg; - } - - if (d != NULL) { - fp_div_2d (&x, norm, &x, NULL); - -/* the following is a kludge, essentially we were seeing the right remainder but - with excess digits that should have been zero - */ - for (i = b->used; i < x.used; i++) { - x.dp[i] = 0; - } - fp_clamp(&x); - fp_copy (&x, d); - } - - return FP_OKAY; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/divide/fp_div.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/divide/fp_div_d.c b/lib/hcrypto/tomsfastmath/src/divide/fp_div_d.c deleted file mode 100644 index 2d5739d26..000000000 --- a/lib/hcrypto/tomsfastmath/src/divide/fp_div_d.c +++ /dev/null @@ -1,98 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -static int s_is_power_of_two(fp_digit b, int *p) -{ - int x; - - /* fast return if no power of two */ - if ((b==0) || (b & (b-1))) { - return 0; - } - - for (x = 0; x < DIGIT_BIT; x++) { - if (b == (((fp_digit)1)< cb + d == a */ -int fp_div_d(fp_int *a, fp_digit b, fp_int *c, fp_digit *d) -{ - fp_int q; - fp_word w; - fp_digit t; - int ix; - - /* cannot divide by zero */ - if (b == 0) { - return FP_VAL; - } - - /* quick outs */ - if (b == 1 || fp_iszero(a) == 1) { - if (d != NULL) { - *d = 0; - } - if (c != NULL) { - fp_copy(a, c); - } - return FP_OKAY; - } - - /* power of two ? */ - if (s_is_power_of_two(b, &ix) == 1) { - if (d != NULL) { - *d = a->dp[0] & ((((fp_digit)1)<used; - q.sign = a->sign; - w = 0; - for (ix = a->used - 1; ix >= 0; ix--) { - w = (w << ((fp_word)DIGIT_BIT)) | ((fp_word)a->dp[ix]); - - if (w >= b) { - t = (fp_digit)(w / b); - w -= ((fp_word)t) * ((fp_word)b); - } else { - t = 0; - } - q.dp[ix] = (fp_digit)t; - } - - if (d != NULL) { - *d = (fp_digit)w; - } - - if (c != NULL) { - fp_clamp(&q); - fp_copy(&q, c); - } - - return FP_OKAY; -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/divide/fp_div_d.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/01/12 15:13:54 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/divide/fp_mod.c b/lib/hcrypto/tomsfastmath/src/divide/fp_mod.c deleted file mode 100644 index 80c8e9b9c..000000000 --- a/lib/hcrypto/tomsfastmath/src/divide/fp_mod.c +++ /dev/null @@ -1,34 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a mod b, 0 <= c < b */ -int fp_mod(fp_int *a, fp_int *b, fp_int *c) -{ - fp_int t; - int err; - - fp_zero(&t); - if ((err = fp_div(a, b, NULL, &t)) != FP_OKAY) { - return err; - } - if (t.sign != b->sign) { - fp_add(&t, b, c); - } else { - fp_copy(&t, c); - } - return FP_OKAY; -} - - - -/* $Source: /cvs/libtom/tomsfastmath/src/divide/fp_mod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/divide/fp_mod_d.c b/lib/hcrypto/tomsfastmath/src/divide/fp_mod_d.c deleted file mode 100644 index db3e2f2ae..000000000 --- a/lib/hcrypto/tomsfastmath/src/divide/fp_mod_d.c +++ /dev/null @@ -1,20 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a mod b, 0 <= c < b */ -int fp_mod_d(fp_int *a, fp_digit b, fp_digit *c) -{ - return fp_div_d(a, b, NULL, c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/divide/fp_mod_d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/exptmod/fp_2expt.c b/lib/hcrypto/tomsfastmath/src/exptmod/fp_2expt.c deleted file mode 100644 index 2fa4ff887..000000000 --- a/lib/hcrypto/tomsfastmath/src/exptmod/fp_2expt.c +++ /dev/null @@ -1,39 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* computes a = 2**b */ -void fp_2expt(fp_int *a, int b) -{ - int z; - - /* zero a as per default */ - fp_zero (a); - - if (b < 0) { - return; - } - - z = b / DIGIT_BIT; - if (z >= FP_SIZE) { - return; - } - - /* set the used count of where the bit will go */ - a->used = z + 1; - - /* put the single bit in its place */ - a->dp[z] = ((fp_digit)1) << (b % DIGIT_BIT); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/exptmod/fp_2expt.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/exptmod/fp_exptmod.c b/lib/hcrypto/tomsfastmath/src/exptmod/fp_exptmod.c deleted file mode 100644 index 50b00a7aa..000000000 --- a/lib/hcrypto/tomsfastmath/src/exptmod/fp_exptmod.c +++ /dev/null @@ -1,276 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -#ifdef TFM_TIMING_RESISTANT - -/* timing resistant montgomery ladder based exptmod - - Based on work by Marc Joye, Sung-Ming Yen, "The Montgomery Powering Ladder", Cryptographic Hardware and Embedded Systems, CHES 2002 -*/ -static int _fp_exptmod(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) -{ - fp_int R[2]; - fp_digit buf, mp; - int err, bitcnt, digidx, y; - - /* now setup montgomery */ - if ((err = fp_montgomery_setup (P, &mp)) != FP_OKAY) { - return err; - } - - fp_init(&R[0]); - fp_init(&R[1]); - - /* now we need R mod m */ - fp_montgomery_calc_normalization (&R[0], P); - - /* now set R[0][1] to G * R mod m */ - if (fp_cmp_mag(P, G) != FP_GT) { - /* G > P so we reduce it first */ - fp_mod(G, P, &R[1]); - } else { - fp_copy(G, &R[1]); - } - fp_mulmod (&R[1], &R[0], P, &R[1]); - - /* for j = t-1 downto 0 do - r_!k = R0*R1; r_k = r_k^2 - */ - - /* set initial mode and bit cnt */ - bitcnt = 1; - buf = 0; - digidx = X->used - 1; - - for (;;) { - /* grab next digit as required */ - if (--bitcnt == 0) { - /* if digidx == -1 we are out of digits so break */ - if (digidx == -1) { - break; - } - /* read next digit and reset bitcnt */ - buf = X->dp[digidx--]; - bitcnt = (int)DIGIT_BIT; - } - - /* grab the next msb from the exponent */ - y = (fp_digit)(buf >> (DIGIT_BIT - 1)) & 1; - buf <<= (fp_digit)1; - - /* do ops */ - fp_mul(&R[0], &R[1], &R[y^1]); fp_montgomery_reduce(&R[y^1], P, mp); - fp_sqr(&R[y], &R[y]); fp_montgomery_reduce(&R[y], P, mp); - } - - fp_montgomery_reduce(&R[0], P, mp); - fp_copy(&R[0], Y); - return FP_OKAY; -} - -#else - -/* y = g**x (mod b) - * Some restrictions... x must be positive and < b - */ -static int _fp_exptmod(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) -{ - fp_int M[64], res; - fp_digit buf, mp; - int err, bitbuf, bitcpy, bitcnt, mode, digidx, x, y, winsize; - - /* find window size */ - x = fp_count_bits (X); - if (x <= 21) { - winsize = 1; - } else if (x <= 36) { - winsize = 3; - } else if (x <= 140) { - winsize = 4; - } else if (x <= 450) { - winsize = 5; - } else { - winsize = 6; - } - - /* init M array */ - memset(M, 0, sizeof(M)); - - /* now setup montgomery */ - if ((err = fp_montgomery_setup (P, &mp)) != FP_OKAY) { - return err; - } - - /* setup result */ - fp_init(&res); - - /* create M table - * - * The M table contains powers of the input base, e.g. M[x] = G^x mod P - * - * The first half of the table is not computed though accept for M[0] and M[1] - */ - - /* now we need R mod m */ - fp_montgomery_calc_normalization (&res, P); - - /* now set M[1] to G * R mod m */ - if (fp_cmp_mag(P, G) != FP_GT) { - /* G > P so we reduce it first */ - fp_mod(G, P, &M[1]); - } else { - fp_copy(G, &M[1]); - } - fp_mulmod (&M[1], &res, P, &M[1]); - - /* compute the value at M[1<<(winsize-1)] by squaring M[1] (winsize-1) times */ - fp_copy (&M[1], &M[1 << (winsize - 1)]); - for (x = 0; x < (winsize - 1); x++) { - fp_sqr (&M[1 << (winsize - 1)], &M[1 << (winsize - 1)]); - fp_montgomery_reduce (&M[1 << (winsize - 1)], P, mp); - } - - /* create upper table */ - for (x = (1 << (winsize - 1)) + 1; x < (1 << winsize); x++) { - fp_mul(&M[x - 1], &M[1], &M[x]); - fp_montgomery_reduce(&M[x], P, mp); - } - - /* set initial mode and bit cnt */ - mode = 0; - bitcnt = 1; - buf = 0; - digidx = X->used - 1; - bitcpy = 0; - bitbuf = 0; - - for (;;) { - /* grab next digit as required */ - if (--bitcnt == 0) { - /* if digidx == -1 we are out of digits so break */ - if (digidx == -1) { - break; - } - /* read next digit and reset bitcnt */ - buf = X->dp[digidx--]; - bitcnt = (int)DIGIT_BIT; - } - - /* grab the next msb from the exponent */ - y = (fp_digit)(buf >> (DIGIT_BIT - 1)) & 1; - buf <<= (fp_digit)1; - - /* if the bit is zero and mode == 0 then we ignore it - * These represent the leading zero bits before the first 1 bit - * in the exponent. Technically this opt is not required but it - * does lower the # of trivial squaring/reductions used - */ - if (mode == 0 && y == 0) { - continue; - } - - /* if the bit is zero and mode == 1 then we square */ - if (mode == 1 && y == 0) { - fp_sqr(&res, &res); - fp_montgomery_reduce(&res, P, mp); - continue; - } - - /* else we add it to the window */ - bitbuf |= (y << (winsize - ++bitcpy)); - mode = 2; - - if (bitcpy == winsize) { - /* ok window is filled so square as required and multiply */ - /* square first */ - for (x = 0; x < winsize; x++) { - fp_sqr(&res, &res); - fp_montgomery_reduce(&res, P, mp); - } - - /* then multiply */ - fp_mul(&res, &M[bitbuf], &res); - fp_montgomery_reduce(&res, P, mp); - - /* empty window and reset */ - bitcpy = 0; - bitbuf = 0; - mode = 1; - } - } - - /* if bits remain then square/multiply */ - if (mode == 2 && bitcpy > 0) { - /* square then multiply if the bit is set */ - for (x = 0; x < bitcpy; x++) { - fp_sqr(&res, &res); - fp_montgomery_reduce(&res, P, mp); - - /* get next bit of the window */ - bitbuf <<= 1; - if ((bitbuf & (1 << winsize)) != 0) { - /* then multiply */ - fp_mul(&res, &M[1], &res); - fp_montgomery_reduce(&res, P, mp); - } - } - } - - /* fixup result if Montgomery reduction is used - * recall that any value in a Montgomery system is - * actually multiplied by R mod n. So we have - * to reduce one more time to cancel out the factor - * of R. - */ - fp_montgomery_reduce(&res, P, mp); - - /* swap res with Y */ - fp_copy (&res, Y); - return FP_OKAY; -} - -#endif - - -int fp_exptmod(fp_int * G, fp_int * X, fp_int * P, fp_int * Y) -{ - fp_int tmp; - int err; - -#ifdef TFM_CHECK - /* prevent overflows */ - if (P->used > (FP_SIZE/2)) { - return FP_VAL; - } -#endif - - /* is X negative? */ - if (X->sign == FP_NEG) { - /* yes, copy G and invmod it */ - fp_copy(G, &tmp); - if ((err = fp_invmod(&tmp, P, &tmp)) != FP_OKAY) { - return err; - } - X->sign = FP_ZPOS; - err = _fp_exptmod(&tmp, X, P, Y); - if (X != Y) { - X->sign = FP_NEG; - } - return err; - } else { - /* Positive exponent so just exptmod */ - return _fp_exptmod(G, X, P, Y); - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/exptmod/fp_exptmod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/generators/comba_mont_gen.c b/lib/hcrypto/tomsfastmath/src/generators/comba_mont_gen.c deleted file mode 100644 index 04870e3c8..000000000 --- a/lib/hcrypto/tomsfastmath/src/generators/comba_mont_gen.c +++ /dev/null @@ -1,132 +0,0 @@ -#include - -int main(void) -{ - int x, y, z; - -printf( -#if 1 -"#ifdef TFM_SMALL_SET\n" -"/* computes x/R == x (mod N) via Montgomery Reduction */\n" -"void fp_montgomery_reduce_small(fp_int *a, fp_int *m, fp_digit mp)\n" -"{\n" -" fp_digit c[FP_SIZE], *_c, *tmpm, mu, cy;\n" -" int oldused, x, y, pa;\n" -"\n" -"#if defined(USE_MEMSET)\n" -" /* now zero the buff */\n" -" memset(c, 0, sizeof c);\n" -"#endif\n" -" pa = m->used;\n" -"\n" -" /* copy the input */\n" -" oldused = a->used;\n" -" for (x = 0; x < oldused; x++) {\n" -" c[x] = a->dp[x];\n" -" }\n" -"#if !defined(USE_MEMSET)\n" -" for (; x < 2*pa+3; x++) {\n" -" c[x] = 0;\n" -" }\n" -"#endif\n" -" MONT_START;\n" -#endif -"\n" -" switch (pa) {\n"); - -for (x = 1; x <= 16; x++) { -if (x > 16 && (x != 32 && x != 48 && x != 64)) continue; -if (x > 16) printf("#ifdef TFM_HUGE\n"); - - - -printf(" case %d:\n", x); - -for (y = 0; y < x; y++) { - -printf(" x = %d; cy = 0;\n" - " LOOP_START;\n" - " _c = c + %d;\n" - " tmpm = m->dp;\n", y, y); - -printf("#ifdef INNERMUL8\n"); -for (z = 0; z+8 <= x; z += 8) { -printf(" INNERMUL8; _c += 8; tmpm += 8;\n"); -} -for (; z < x; z++) { -printf(" INNERMUL; ++_c;\n"); -} -printf("#else\n"); -for (z = 0; z < x; z++) { -printf(" INNERMUL; ++_c;\n"); -} -printf("#endif\n"); -printf(" LOOP_END;\n" - " while (cy) {\n" - " PROPCARRY;\n" - " ++_c;\n" - " }\n"); -} -//printf(" }\n"); -printf(" break;\n"); - - - -#define LOOP_MACRO(stride) \ - for (x = 0; x < stride; x++) { \ - fp_digit cy = 0; \ - /* get Mu for this round */ \ - LOOP_START; \ - _c = c + x; \ - tmpm = m->dp; \ - for (y = 0; y < stride; y++) { \ - INNERMUL; \ - ++_c; \ - } \ - LOOP_END; \ - while (cy) { \ - PROPCARRY; \ - ++_c; \ - } \ - } - - - - - -if (x > 16) printf("#endif /* TFM_HUGE */\n"); - - -} - -#if 1 - -printf( -" }\n" -" /* now copy out */\n" -" _c = c + pa;\n" -" tmpm = a->dp;\n" -" for (x = 0; x < pa+1; x++) {\n" -" *tmpm++ = *_c++;\n" -" }\n" -"\n" -" for (; x < oldused; x++) {\n" -" *tmpm++ = 0;\n" -" }\n" -"\n" -" MONT_FINI;\n" -"\n" -" a->used = pa+1;\n" -" fp_clamp(a);\n" -"\n" -" /* if A >= m then A = A - m */\n" -" if (fp_cmp_mag (a, m) != FP_LT) {\n" -" s_fp_sub (a, m, a);\n" -" }\n" -"}\n\n#endif\n"); - -#endif - - -return 0; -} diff --git a/lib/hcrypto/tomsfastmath/src/generators/comba_mult_gen.c b/lib/hcrypto/tomsfastmath/src/generators/comba_mult_gen.c deleted file mode 100644 index 70516d0a2..000000000 --- a/lib/hcrypto/tomsfastmath/src/generators/comba_mult_gen.c +++ /dev/null @@ -1,63 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ - -/* program emits a NxN comba multiplier */ -#include - -int main(int argc, char **argv) -{ - int N, x, y, z; - N = atoi(argv[1]); - - /* print out preamble */ -printf( -"void fp_mul_comba%d(fp_int *A, fp_int *B, fp_int *C)\n" -"{\n" -" fp_digit c0, c1, c2, at[%d];\n" -"\n" -" memcpy(at, A->dp, %d * sizeof(fp_digit));\n" -" memcpy(at+%d, B->dp, %d * sizeof(fp_digit));\n" -" COMBA_START;\n" -"\n" -" COMBA_CLEAR;\n", N, N+N, N, N, N); - - /* now do the rows */ - for (x = 0; x < (N+N-1); x++) { -printf( -" /* %d */\n", x); -if (x > 0) { -printf( -" COMBA_FORWARD;\n"); -} - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if ((y+z)==x) { - printf(" MULADD(at[%d], at[%d]); ", y, z+N); - } - } - } -printf( -"\n" -" COMBA_STORE(C->dp[%d]);\n", x); - } -printf( -" COMBA_STORE2(C->dp[%d]);\n" -" C->used = %d;\n" -" C->sign = A->sign ^ B->sign;\n" -" fp_clamp(C);\n" -" COMBA_FINI;\n" -"}\n\n\n", N+N-1, N+N); - - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/generators/comba_mult_gen.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/generators/comba_mult_smallgen.c b/lib/hcrypto/tomsfastmath/src/generators/comba_mult_smallgen.c deleted file mode 100644 index e744f1d0e..000000000 --- a/lib/hcrypto/tomsfastmath/src/generators/comba_mult_smallgen.c +++ /dev/null @@ -1,61 +0,0 @@ -/* program emits a NxN comba multiplier for 1x1 to 16x16 */ -#include - -int main(int argc, char **argv) -{ - int N, x, y, z; - - /* print out preamble */ -printf( -"void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C)\n" -"{\n" -" fp_digit c0, c1, c2, at[32];\n" -" switch (MAX(A->used, B->used)) { \n" -); - -for (N = 1; N <= 16; N++) { - -printf( -"\n" -" case %d:\n" -" memcpy(at, A->dp, %d * sizeof(fp_digit));\n" -" memcpy(at+%d, B->dp, %d * sizeof(fp_digit));\n" -" COMBA_START;\n" -"\n" -" COMBA_CLEAR;\n", N, N, N, N); - - /* now do the rows */ - for (x = 0; x < (N+N-1); x++) { -printf( -" /* %d */\n", x); -if (x > 0) { -printf( -" COMBA_FORWARD;\n"); -} - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if ((y+z)==x) { - printf(" MULADD(at[%d], at[%d]); ", y, z+N); - } - } - } -printf( -"\n" -" COMBA_STORE(C->dp[%d]);\n", x); - } -printf( -" COMBA_STORE2(C->dp[%d]);\n" -" C->used = %d;\n" -" C->sign = A->sign ^ B->sign;\n" -" fp_clamp(C);\n" -" COMBA_FINI;\n" -" break;\n", N+N-1, N+N); -} -printf(" }\n}\n\n"); - - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/generators/comba_mult_smallgen.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_gen.c b/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_gen.c deleted file mode 100644 index fe313a9a0..000000000 --- a/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_gen.c +++ /dev/null @@ -1,101 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ - -#include - -int main(int argc, char **argv) -{ - int x, y, z, N, f; - N = atoi(argv[1]); - -printf( -"#ifdef TFM_SQR%d\n" -"void fp_sqr_comba%d(fp_int *A, fp_int *B)\n" -"{\n" -" fp_digit *a, b[%d], c0, c1, c2, sc0, sc1, sc2;\n" -"\n" -" a = A->dp;\n" -" COMBA_START; \n" -"\n" -" /* clear carries */\n" -" CLEAR_CARRY;\n" -"\n" -" /* output 0 */\n" -" SQRADD(a[0],a[0]);\n" -" COMBA_STORE(b[0]);\n", N, N, N+N); - - for (x = 1; x < N+N-1; x++) { -printf( -"\n /* output %d */\n" -" CARRY_FORWARD;\n ", x); - - for (f = y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (z != y && z + y == x && y <= z) { - ++f; - } - } - } - - if (f <= 2) { - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (y<=z && (y+z)==x) { - if (y == z) { - printf("SQRADD(a[%d], a[%d]); ", y, y); - } else { - printf("SQRADD2(a[%d], a[%d]); ", y, z); - } - } - } - } - } else { - // new method - /* do evens first */ - f = 0; - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (z != y && z + y == x && y <= z) { - if (f == 0) { - // first double - printf("SQRADDSC(a[%d], a[%d]); ", y, z); - f = 1; - } else { - printf("SQRADDAC(a[%d], a[%d]); ", y, z); - } - } - } - } - // forward the carry - printf("SQRADDDB; "); - if ((x&1) == 0) { - // add the square - printf("SQRADD(a[%d], a[%d]); ", x/2, x/2); - } - } -printf("\n COMBA_STORE(b[%d]);\n", x); - } -printf(" COMBA_STORE2(b[%d]);\n", N+N-1); - -printf( -" COMBA_FINI;\n" -"\n" -" B->used = %d;\n" -" B->sign = FP_ZPOS;\n" -" memcpy(B->dp, b, %d * sizeof(fp_digit));\n" -" fp_clamp(B);\n" -"}\n#endif\n\n\n", N+N, N+N); - - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/generators/comba_sqr_gen.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_smallgen.c b/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_smallgen.c deleted file mode 100644 index df149c510..000000000 --- a/lib/hcrypto/tomsfastmath/src/generators/comba_sqr_smallgen.c +++ /dev/null @@ -1,109 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ - -/* Generates squaring comba code... it learns it knows our secrets! */ -#include - -int main(int argc, char **argv) -{ - int x, y, z, N, f; - -printf( -"void fp_sqr_comba_small(fp_int *A, fp_int *B)\n" -"{\n" -" fp_digit *a, b[32], c0, c1, c2, sc0, sc1, sc2;\n" -); - -printf(" switch (A->used) { \n"); - -for (N = 1; N <= 16; N++) { -printf( -" case %d:\n" -" a = A->dp;\n" -" COMBA_START; \n" -"\n" -" /* clear carries */\n" -" CLEAR_CARRY;\n" -"\n" -" /* output 0 */\n" -" SQRADD(a[0],a[0]);\n" -" COMBA_STORE(b[0]);\n", N); - - for (x = 1; x < N+N-1; x++) { -printf( -"\n /* output %d */\n" -" CARRY_FORWARD;\n ", x); - - for (f = y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (z != y && z + y == x && y <= z) { - ++f; - } - } - } - - if (f <= 2) { - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (y<=z && (y+z)==x) { - if (y == z) { - printf(" SQRADD(a[%d], a[%d]); ", y, y); - } else { - printf(" SQRADD2(a[%d], a[%d]); ", y, z); - } - } - } - } - } else { - // new method - /* do evens first */ - f = 0; - for (y = 0; y < N; y++) { - for (z = 0; z < N; z++) { - if (z != y && z + y == x && y <= z) { - if (f == 0) { - // first double - printf("SQRADDSC(a[%d], a[%d]); ", y, z); - f = 1; - } else { - printf("SQRADDAC(a[%d], a[%d]); ", y, z); - } - } - } - } - // forward the carry - printf("SQRADDDB; "); - if ((x&1) == 0) { - // add the square - printf("SQRADD(a[%d], a[%d]); ", x/2, x/2); - } - } -printf("\n COMBA_STORE(b[%d]);\n", x); - } -printf(" COMBA_STORE2(b[%d]);\n", N+N-1); - -printf( -" COMBA_FINI;\n" -"\n" -" B->used = %d;\n" -" B->sign = FP_ZPOS;\n" -" memcpy(B->dp, b, %d * sizeof(fp_digit));\n" -" fp_clamp(B);\n" -" break;\n\n", N+N, N+N); -} - -printf("}\n\n}\n"); - - return 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/generators/comba_sqr_smallgen.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/headers/tfm.h b/lib/hcrypto/tomsfastmath/src/headers/tfm.h deleted file mode 100644 index ecf16181e..000000000 --- a/lib/hcrypto/tomsfastmath/src/headers/tfm.h +++ /dev/null @@ -1,578 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#ifndef TFM_H_ -#define TFM_H_ - -#include -#include -#include -#include -#include - -#ifndef MIN - #define MIN(x,y) ((x)<(y)?(x):(y)) -#endif - -#ifndef MAX - #define MAX(x,y) ((x)>(y)?(x):(y)) -#endif - -/* externally define this symbol to ignore the default settings, useful for changing the build from the make process */ -#ifndef TFM_ALREADY_SET - -/* do we want the large set of small multiplications ? - Enable these if you are going to be doing a lot of small (<= 16 digit) multiplications say in ECC - Or if you're on a 64-bit machine doing RSA as a 1024-bit integer == 16 digits ;-) - */ -#define TFM_SMALL_SET - -/* do we want huge code - Enable these if you are doing 20, 24, 28, 32, 48, 64 digit multiplications (useful for RSA) - Less important on 64-bit machines as 32 digits == 2048 bits - */ -#if 0 -#define TFM_MUL3 -#define TFM_MUL4 -#define TFM_MUL6 -#define TFM_MUL7 -#define TFM_MUL8 -#define TFM_MUL9 -#define TFM_MUL12 -#define TFM_MUL17 -#endif -#define TFM_MUL20 -#define TFM_MUL24 -#define TFM_MUL28 -#define TFM_MUL32 -#define TFM_MUL48 -#define TFM_MUL64 - -#if 0 -#define TFM_SQR3 -#define TFM_SQR4 -#define TFM_SQR6 -#define TFM_SQR7 -#define TFM_SQR8 -#define TFM_SQR9 -#define TFM_SQR12 -#define TFM_SQR17 -#endif -#define TFM_SQR20 -#define TFM_SQR24 -#define TFM_SQR28 -#define TFM_SQR32 -#define TFM_SQR48 -#define TFM_SQR64 - -/* do we want some overflow checks - Not required if you make sure your numbers are within range (e.g. by default a modulus for fp_exptmod() can only be upto 2048 bits long) - */ -/* #define TFM_CHECK */ - -/* Is the target a P4 Prescott - */ -/* #define TFM_PRESCOTT */ - -/* Do we want timing resistant fp_exptmod() ? - * This makes it slower but also timing invariant with respect to the exponent - */ -/* #define TFM_TIMING_RESISTANT */ - -#endif - -/* Max size of any number in bits. Basically the largest size you will be multiplying - * should be half [or smaller] of FP_MAX_SIZE-four_digit - * - * You can externally define this or it defaults to 4096-bits [allowing multiplications upto 2048x2048 bits ] - */ -#ifndef FP_MAX_SIZE - #define FP_MAX_SIZE (4096+(8*DIGIT_BIT)) -#endif - -/* will this lib work? */ -#if (CHAR_BIT & 7) - #error CHAR_BIT must be a multiple of eight. -#endif -#if FP_MAX_SIZE % CHAR_BIT - #error FP_MAX_SIZE must be a multiple of CHAR_BIT -#endif - -/* autodetect x86-64 and make sure we are using 64-bit digits with x86-64 asm */ -#if defined(__x86_64__) - #if defined(TFM_X86) || defined(TFM_SSE2) || defined(TFM_ARM) - #error x86-64 detected, x86-32/SSE2/ARM optimizations are not valid! - #endif - #if !defined(TFM_X86_64) && !defined(TFM_NO_ASM) - #define TFM_X86_64 - #endif -#endif -#if defined(TFM_X86_64) - #if !defined(FP_64BIT) - #define FP_64BIT - #endif -#endif - -/* try to detect x86-32 */ -#if defined(__i386__) && !defined(TFM_SSE2) - #if defined(TFM_X86_64) || defined(TFM_ARM) - #error x86-32 detected, x86-64/ARM optimizations are not valid! - #endif - #if !defined(TFM_X86) && !defined(TFM_NO_ASM) - #define TFM_X86 - #endif -#endif - -/* make sure we're 32-bit for x86-32/sse/arm/ppc32 */ -#if (defined(TFM_X86) || defined(TFM_SSE2) || defined(TFM_ARM) || defined(TFM_PPC32)) && defined(FP_64BIT) - #warning x86-32, SSE2 and ARM, PPC32 optimizations require 32-bit digits (undefining) - #undef FP_64BIT -#endif - -/* multi asms? */ -#ifdef TFM_X86 - #define TFM_ASM -#endif -#ifdef TFM_X86_64 - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif -#ifdef TFM_SSE2 - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif -#ifdef TFM_ARM - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif -#ifdef TFM_PPC32 - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif -#ifdef TFM_PPC64 - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif -#ifdef TFM_AVR32 - #ifdef TFM_ASM - #error TFM_ASM already defined! - #endif - #define TFM_ASM -#endif - -/* we want no asm? */ -#ifdef TFM_NO_ASM - #undef TFM_X86 - #undef TFM_X86_64 - #undef TFM_SSE2 - #undef TFM_ARM - #undef TFM_PPC32 - #undef TFM_PPC64 - #undef TFM_AVR32 - #undef TFM_ASM -#endif - -/* ECC helpers */ -#ifdef TFM_ECC192 - #ifdef FP_64BIT - #define TFM_MUL3 - #define TFM_SQR3 - #else - #define TFM_MUL6 - #define TFM_SQR6 - #endif -#endif - -#ifdef TFM_ECC224 - #ifdef FP_64BIT - #define TFM_MUL4 - #define TFM_SQR4 - #else - #define TFM_MUL7 - #define TFM_SQR7 - #endif -#endif - -#ifdef TFM_ECC256 - #ifdef FP_64BIT - #define TFM_MUL4 - #define TFM_SQR4 - #else - #define TFM_MUL8 - #define TFM_SQR8 - #endif -#endif - -#ifdef TFM_ECC384 - #ifdef FP_64BIT - #define TFM_MUL6 - #define TFM_SQR6 - #else - #define TFM_MUL12 - #define TFM_SQR12 - #endif -#endif - -#ifdef TFM_ECC521 - #ifdef FP_64BIT - #define TFM_MUL9 - #define TFM_SQR9 - #else - #define TFM_MUL17 - #define TFM_SQR17 - #endif -#endif - - -/* some default configurations. - */ -#if defined(FP_64BIT) - /* for GCC only on supported platforms */ -#ifndef CRYPT - typedef unsigned long ulong64; -#endif - typedef ulong64 fp_digit; - typedef unsigned long fp_word __attribute__ ((mode(TI))); -#else - /* this is to make porting into LibTomCrypt easier :-) */ -#ifndef CRYPT - #if defined(_MSC_VER) || defined(__BORLANDC__) - typedef unsigned __int64 ulong64; - typedef signed __int64 long64; - #else - typedef unsigned long long ulong64; - typedef signed long long long64; - #endif -#endif - typedef unsigned long fp_digit; - typedef ulong64 fp_word; -#endif - -/* # of digits this is */ -#define DIGIT_BIT (int)((CHAR_BIT) * sizeof(fp_digit)) -#define FP_MASK (fp_digit)(-1) -#define FP_SIZE (FP_MAX_SIZE/DIGIT_BIT) - -/* signs */ -#define FP_ZPOS 0 -#define FP_NEG 1 - -/* return codes */ -#define FP_OKAY 0 -#define FP_VAL 1 -#define FP_MEM 2 - -/* equalities */ -#define FP_LT -1 /* less than */ -#define FP_EQ 0 /* equal to */ -#define FP_GT 1 /* greater than */ - -/* replies */ -#define FP_YES 1 /* yes response */ -#define FP_NO 0 /* no response */ - -/* a FP type */ -typedef struct { - fp_digit dp[FP_SIZE]; - int used, - sign; -} fp_int; - -/* functions */ - -/* returns a TFM ident string useful for debugging... */ -const char *fp_ident(void); - -/* initialize [or zero] an fp int */ -#define fp_init(a) (void)memset((a), 0, sizeof(fp_int)) -void fp_init_multi(fp_int *a, ...); -#define fp_zero(a) fp_init(a) -#define fp_zero_multi fp_init_multi - -/* zero/even/odd ? */ -#define fp_iszero(a) (((a)->used == 0) ? FP_YES : FP_NO) -#define fp_iseven(a) (((a)->used >= 0 && (((a)->dp[0] & 1) == 0)) ? FP_YES : FP_NO) -#define fp_isodd(a) (((a)->used > 0 && (((a)->dp[0] & 1) == 1)) ? FP_YES : FP_NO) - -/* is negative ? */ -#define fp_isneg(a) (((a)->sign) == FP_NEG) - -/* set to a small digit */ -void fp_set(fp_int *a, fp_digit b); - -/* copy from a to b */ -#define fp_copy(a, b) (void)(((a) != (b)) && memcpy((b), (a), sizeof(fp_int))) -#define fp_init_copy(a, b) fp_copy(b, a) - -/* clamp digits */ -#define fp_clamp(a) { while ((a)->used && (a)->dp[(a)->used-1] == 0) --((a)->used); (a)->sign = (a)->used ? (a)->sign : FP_ZPOS; } - -/* negate and absolute */ -#define fp_neg(a, b) { fp_copy(a, b); (b)->sign ^= 1; fp_clamp(b); } -#define fp_abs(a, b) { fp_copy(a, b); (b)->sign = 0; } - -/* right shift x digits */ -void fp_rshd(fp_int *a, int x); - -/* left shift x digits */ -void fp_lshd(fp_int *a, int x); - -/* signed comparison */ -int fp_cmp(fp_int *a, fp_int *b); - -/* unsigned comparison */ -int fp_cmp_mag(fp_int *a, fp_int *b); - -/* power of 2 operations */ -void fp_div_2d(fp_int *a, int b, fp_int *c, fp_int *d); -void fp_mod_2d(fp_int *a, int b, fp_int *c); -void fp_mul_2d(fp_int *a, int b, fp_int *c); -void fp_2expt (fp_int *a, int b); -void fp_mul_2(fp_int *a, fp_int *c); -void fp_div_2(fp_int *a, fp_int *c); - -/* Counts the number of lsbs which are zero before the first zero bit */ -int fp_cnt_lsb(fp_int *a); - -/* c = a + b */ -void fp_add(fp_int *a, fp_int *b, fp_int *c); - -/* c = a - b */ -void fp_sub(fp_int *a, fp_int *b, fp_int *c); - -/* c = a * b */ -void fp_mul(fp_int *a, fp_int *b, fp_int *c); - -/* b = a*a */ -void fp_sqr(fp_int *a, fp_int *b); - -/* a/b => cb + d == a */ -int fp_div(fp_int *a, fp_int *b, fp_int *c, fp_int *d); - -/* c = a mod b, 0 <= c < b */ -int fp_mod(fp_int *a, fp_int *b, fp_int *c); - -/* compare against a single digit */ -int fp_cmp_d(fp_int *a, fp_digit b); - -/* c = a + b */ -void fp_add_d(fp_int *a, fp_digit b, fp_int *c); - -/* c = a - b */ -void fp_sub_d(fp_int *a, fp_digit b, fp_int *c); - -/* c = a * b */ -void fp_mul_d(fp_int *a, fp_digit b, fp_int *c); - -/* a/b => cb + d == a */ -int fp_div_d(fp_int *a, fp_digit b, fp_int *c, fp_digit *d); - -/* c = a mod b, 0 <= c < b */ -int fp_mod_d(fp_int *a, fp_digit b, fp_digit *c); - -/* ---> number theory <--- */ -/* d = a + b (mod c) */ -int fp_addmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d); - -/* d = a - b (mod c) */ -int fp_submod(fp_int *a, fp_int *b, fp_int *c, fp_int *d); - -/* d = a * b (mod c) */ -int fp_mulmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d); - -/* c = a * a (mod b) */ -int fp_sqrmod(fp_int *a, fp_int *b, fp_int *c); - -/* c = 1/a (mod b) */ -int fp_invmod(fp_int *a, fp_int *b, fp_int *c); - -/* c = (a, b) */ -void fp_gcd(fp_int *a, fp_int *b, fp_int *c); - -/* c = [a, b] */ -void fp_lcm(fp_int *a, fp_int *b, fp_int *c); - -/* setups the montgomery reduction */ -int fp_montgomery_setup(fp_int *a, fp_digit *mp); - -/* computes a = B**n mod b without division or multiplication useful for - * normalizing numbers in a Montgomery system. - */ -void fp_montgomery_calc_normalization(fp_int *a, fp_int *b); - -/* computes x/R == x (mod N) via Montgomery Reduction */ -void fp_montgomery_reduce(fp_int *a, fp_int *m, fp_digit mp); - -/* d = a**b (mod c) */ -int fp_exptmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d); - -/* primality stuff */ - -/* perform a Miller-Rabin test of a to the base b and store result in "result" */ -void fp_prime_miller_rabin (fp_int * a, fp_int * b, int *result); - -/* 256 trial divisions + 8 Miller-Rabins, returns FP_YES if probable prime */ -int fp_isprime(fp_int *a); - -/* given a, find a prime a that same and larger, that is a fp_isprime think is a prime */ -int fp_find_prime(fp_int *a); - -/* Primality generation flags */ -#define TFM_PRIME_BBS 0x0001 /* BBS style prime */ -#define TFM_PRIME_SAFE 0x0002 /* Safe prime (p-1)/2 == prime */ -#define TFM_PRIME_2MSB_OFF 0x0004 /* force 2nd MSB to 0 */ -#define TFM_PRIME_2MSB_ON 0x0008 /* force 2nd MSB to 1 */ - -/* callback for fp_prime_random, should fill dst with random bytes and return how many read [upto len] */ -typedef int tfm_prime_callback(unsigned char *dst, int len, void *dat); - -#define fp_prime_random(a, t, size, bbs, cb, dat) fp_prime_random_ex(a, t, ((size) * 8) + 1, (bbs==1)?TFM_PRIME_BBS:0, cb, dat) - -int fp_prime_random_ex(fp_int *a, int t, int size, int flags, tfm_prime_callback cb, void *dat); - -/* radix conersions */ -int fp_count_bits(fp_int *a); - -int fp_radix_size(fp_int *a, int radix, int *size); - -int fp_unsigned_bin_size(fp_int *a); -void fp_read_unsigned_bin(fp_int *a, unsigned char *b, int c); -void fp_to_unsigned_bin(fp_int *a, unsigned char *b); - -int fp_signed_bin_size(fp_int *a); -void fp_read_signed_bin(fp_int *a, unsigned char *b, int c); -void fp_to_signed_bin(fp_int *a, unsigned char *b); - -int fp_read_radix(fp_int *a, char *str, int radix); -int fp_toradix(fp_int *a, char *str, int radix); -int fp_toradix_n(fp_int * a, char *str, int radix, int maxlen); - - -/* VARIOUS LOW LEVEL STUFFS */ -void s_fp_add(fp_int *a, fp_int *b, fp_int *c); -void s_fp_sub(fp_int *a, fp_int *b, fp_int *c); -void fp_reverse(unsigned char *s, int len); - -void fp_mul_comba(fp_int *A, fp_int *B, fp_int *C); - -#ifdef TFM_SMALL_SET -void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C); -#endif - -#ifdef TFM_MUL3 -void fp_mul_comba3(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL4 -void fp_mul_comba4(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL6 -void fp_mul_comba6(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL7 -void fp_mul_comba7(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL8 -void fp_mul_comba8(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL9 -void fp_mul_comba9(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL12 -void fp_mul_comba12(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL17 -void fp_mul_comba17(fp_int *A, fp_int *B, fp_int *C); -#endif - -#ifdef TFM_MUL20 -void fp_mul_comba20(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL24 -void fp_mul_comba24(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL28 -void fp_mul_comba28(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL32 -void fp_mul_comba32(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL48 -void fp_mul_comba48(fp_int *A, fp_int *B, fp_int *C); -#endif -#ifdef TFM_MUL64 -void fp_mul_comba64(fp_int *A, fp_int *B, fp_int *C); -#endif - -void fp_sqr_comba(fp_int *A, fp_int *B); - -#ifdef TFM_SMALL_SET -void fp_sqr_comba_small(fp_int *A, fp_int *B); -#endif - -#ifdef TFM_SQR3 -void fp_sqr_comba3(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR4 -void fp_sqr_comba4(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR6 -void fp_sqr_comba6(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR7 -void fp_sqr_comba7(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR8 -void fp_sqr_comba8(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR9 -void fp_sqr_comba9(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR12 -void fp_sqr_comba12(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR17 -void fp_sqr_comba17(fp_int *A, fp_int *B); -#endif - -#ifdef TFM_SQR20 -void fp_sqr_comba20(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR24 -void fp_sqr_comba24(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR28 -void fp_sqr_comba28(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR32 -void fp_sqr_comba32(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR48 -void fp_sqr_comba48(fp_int *A, fp_int *B); -#endif -#ifdef TFM_SQR64 -void fp_sqr_comba64(fp_int *A, fp_int *B); -#endif -extern const char *fp_s_rmap; - -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/headers/tfm.h,v $ */ -/* $Revision: 1.3 $ */ -/* $Date: 2007/02/27 02:38:44 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/misc/fp_ident.c b/lib/hcrypto/tomsfastmath/src/misc/fp_ident.c deleted file mode 100644 index e6857e99d..000000000 --- a/lib/hcrypto/tomsfastmath/src/misc/fp_ident.c +++ /dev/null @@ -1,95 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include "tfm.h" - -const char *fp_ident(void) -{ - static char buf[1024]; - - memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf)-1, -"TomsFastMath (%s)\n" -"\n" -"Sizeofs\n" -"\tfp_digit = %lu\n" -"\tfp_word = %lu\n" -"\n" -"FP_MAX_SIZE = %u\n" -"\n" -"Defines: \n" -#ifdef __i386__ -" __i386__ " -#endif -#ifdef __x86_64__ -" __x86_64__ " -#endif -#ifdef TFM_X86 -" TFM_X86 " -#endif -#ifdef TFM_X86_64 -" TFM_X86_64 " -#endif -#ifdef TFM_SSE2 -" TFM_SSE2 " -#endif -#ifdef TFM_ARM -" TFM_ARM " -#endif -#ifdef TFM_PPC32 -" TFM_PPC32 " -#endif -#ifdef TFM_AVR32 -" TFM_AVR32 " -#endif -#ifdef TFM_ECC192 -" TFM_ECC192 " -#endif -#ifdef TFM_ECC224 -" TFM_ECC224 " -#endif -#ifdef TFM_ECC384 -" TFM_ECC384 " -#endif -#ifdef TFM_ECC521 -" TFM_ECC521 " -#endif - -#ifdef TFM_NO_ASM -" TFM_NO_ASM " -#endif -#ifdef FP_64BIT -" FP_64BIT " -#endif -#ifdef TFM_HUGE -" TFM_HUGE " -#endif -"\n", __DATE__, (unsigned long)sizeof(fp_digit), (unsigned long)sizeof(fp_word), FP_MAX_SIZE); - - if (sizeof(fp_digit) == sizeof(fp_word)) { - strncat(buf, "WARNING: sizeof(fp_digit) == sizeof(fp_word), this build is likely to not work properly.\n", - sizeof(buf)-1); - } - return buf; -} - -#ifdef STANDALONE - -int main(void) -{ - printf("%s\n", fp_ident()); - return 0; -} - -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/misc/fp_ident.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/misc/fp_set.c b/lib/hcrypto/tomsfastmath/src/misc/fp_set.c deleted file mode 100644 index c3fa60e2c..000000000 --- a/lib/hcrypto/tomsfastmath/src/misc/fp_set.c +++ /dev/null @@ -1,21 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_set(fp_int *a, fp_digit b) -{ - fp_zero(a); - a->dp[0] = b; - a->used = a->dp[0] ? 1 : 0; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/misc/fp_set.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mont/fp_mont_small.i b/lib/hcrypto/tomsfastmath/src/mont/fp_mont_small.i deleted file mode 100644 index 5617d2f47..000000000 --- a/lib/hcrypto/tomsfastmath/src/mont/fp_mont_small.i +++ /dev/null @@ -1,3838 +0,0 @@ -#ifdef TFM_SMALL_MONT_SET -/* computes x/R == x (mod N) via Montgomery Reduction */ -void fp_montgomery_reduce_small(fp_int *a, fp_int *m, fp_digit mp) -{ - fp_digit c[FP_SIZE], *_c, *tmpm, mu, cy; - int oldused, x, y, pa; - -#if defined(USE_MEMSET) - /* now zero the buff */ - memset(c, 0, sizeof c); -#endif - pa = m->used; - - /* copy the input */ - oldused = a->used; - for (x = 0; x < oldused; x++) { - c[x] = a->dp[x]; - } -#if !defined(USE_MEMSET) - for (; x < 2*pa+3; x++) { - c[x] = 0; - } -#endif - MONT_START; - - switch (pa) { - case 1: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; -#else - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 2: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 3: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 4: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 5: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 6: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 7: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 8: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 9: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 10: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 11: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 12: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 11; cy = 0; - LOOP_START; - _c = c + 11; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 13: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 11; cy = 0; - LOOP_START; - _c = c + 11; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 12; cy = 0; - LOOP_START; - _c = c + 12; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 14: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 11; cy = 0; - LOOP_START; - _c = c + 11; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 12; cy = 0; - LOOP_START; - _c = c + 12; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 13; cy = 0; - LOOP_START; - _c = c + 13; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 15: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 11; cy = 0; - LOOP_START; - _c = c + 11; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 12; cy = 0; - LOOP_START; - _c = c + 12; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 13; cy = 0; - LOOP_START; - _c = c + 13; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 14; cy = 0; - LOOP_START; - _c = c + 14; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - case 16: - x = 0; cy = 0; - LOOP_START; - _c = c + 0; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 1; cy = 0; - LOOP_START; - _c = c + 1; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 2; cy = 0; - LOOP_START; - _c = c + 2; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 3; cy = 0; - LOOP_START; - _c = c + 3; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 4; cy = 0; - LOOP_START; - _c = c + 4; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 5; cy = 0; - LOOP_START; - _c = c + 5; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 6; cy = 0; - LOOP_START; - _c = c + 6; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 7; cy = 0; - LOOP_START; - _c = c + 7; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 8; cy = 0; - LOOP_START; - _c = c + 8; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 9; cy = 0; - LOOP_START; - _c = c + 9; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 10; cy = 0; - LOOP_START; - _c = c + 10; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 11; cy = 0; - LOOP_START; - _c = c + 11; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 12; cy = 0; - LOOP_START; - _c = c + 12; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 13; cy = 0; - LOOP_START; - _c = c + 13; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 14; cy = 0; - LOOP_START; - _c = c + 14; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - x = 15; cy = 0; - LOOP_START; - _c = c + 15; - tmpm = m->dp; -#ifdef INNERMUL8 - INNERMUL8; _c += 8; tmpm += 8; - INNERMUL8; _c += 8; tmpm += 8; -#else - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; - INNERMUL; ++_c; -#endif - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - break; - } - /* now copy out */ - _c = c + pa; - tmpm = a->dp; - for (x = 0; x < pa+1; x++) { - *tmpm++ = *_c++; - } - - for (; x < oldused; x++) { - *tmpm++ = 0; - } - - MONT_FINI; - - a->used = pa+1; - fp_clamp(a); - - /* if A >= m then A = A - m */ - if (fp_cmp_mag (a, m) != FP_LT) { - s_fp_sub (a, m, a); - } -} - -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_calc_normalization.c b/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_calc_normalization.c deleted file mode 100644 index aa834ff58..000000000 --- a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_calc_normalization.c +++ /dev/null @@ -1,43 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* computes a = B**n mod b without division or multiplication useful for - * normalizing numbers in a Montgomery system. - */ -void fp_montgomery_calc_normalization(fp_int *a, fp_int *b) -{ - int x, bits; - - /* how many bits of last digit does b use */ - bits = fp_count_bits (b) % DIGIT_BIT; - if (!bits) bits = DIGIT_BIT; - - /* compute A = B^(n-1) * 2^(bits-1) */ - if (b->used > 1) { - fp_2expt (a, (b->used - 1) * DIGIT_BIT + bits - 1); - } else { - fp_set(a, 1); - bits = 1; - } - - /* now compute C = A * B mod b */ - for (x = bits - 1; x < (int)DIGIT_BIT; x++) { - fp_mul_2 (a, a); - if (fp_cmp_mag (a, b) != FP_LT) { - s_fp_sub (a, b, a); - } - } -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mont/fp_montgomery_calc_normalization.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_reduce.c b/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_reduce.c deleted file mode 100644 index 73f82adb5..000000000 --- a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_reduce.c +++ /dev/null @@ -1,556 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/******************************************************************/ -#if defined(TFM_X86) && !defined(TFM_SSE2) -/* x86-32 code */ - -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - "movl %5,%%eax \n\t" \ - "mull %4 \n\t" \ - "addl %1,%%eax \n\t" \ - "adcl $0,%%edx \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl $0,%%edx \n\t" \ - "movl %%edx,%1 \n\t" \ -:"=g"(_c[LO]), "=r"(cy) \ -:"0"(_c[LO]), "1"(cy), "g"(mu), "g"(*tmpm++) \ -: "%eax", "%edx", "%cc") - -#define PROPCARRY \ -asm( \ - "addl %1,%0 \n\t" \ - "setb %%al \n\t" \ - "movzbl %%al,%1 \n\t" \ -:"=g"(_c[LO]), "=r"(cy) \ -:"0"(_c[LO]), "1"(cy) \ -: "%eax", "%cc") - -/******************************************************************/ -#elif defined(TFM_X86_64) -/* x86-64 code */ - -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - "movq %5,%%rax \n\t" \ - "mulq %4 \n\t" \ - "addq %1,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rdx,%1 \n\t" \ -:"=g"(_c[LO]), "=r"(cy) \ -:"0"(_c[LO]), "1"(cy), "r"(mu), "r"(*tmpm++) \ -: "%rax", "%rdx", "%cc") - -#define INNERMUL8 \ - asm( \ - "movq 0(%5),%%rax \n\t" \ - "movq 0(%2),%%r10 \n\t" \ - "movq 0x8(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x8(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x10(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x10(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x8(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x18(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x18(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x10(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x20(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x20(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x18(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x28(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x28(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x20(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x30(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x30(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x28(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "movq 0x38(%5),%%r11 \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq 0x38(%2),%%r10 \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x30(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ - "movq %%r11,%%rax \n\t" \ - "mulq %4 \n\t" \ - "addq %%r10,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "addq %3,%%rax \n\t" \ - "adcq $0,%%rdx \n\t" \ - "movq %%rax,0x38(%0) \n\t" \ - "movq %%rdx,%1 \n\t" \ - \ -:"=r"(_c), "=r"(cy) \ -: "0"(_c), "1"(cy), "g"(mu), "r"(tmpm)\ -: "%rax", "%rdx", "%r10", "%r11", "%cc") - - -#define PROPCARRY \ -asm( \ - "addq %1,%0 \n\t" \ - "setb %%al \n\t" \ - "movzbq %%al,%1 \n\t" \ -:"=g"(_c[LO]), "=r"(cy) \ -:"0"(_c[LO]), "1"(cy) \ -: "%rax", "%cc") - -/******************************************************************/ -#elif defined(TFM_SSE2) -/* SSE2 code (assumes 32-bit fp_digits) */ -/* XMM register assignments: - * xmm0 *tmpm++, then Mu * (*tmpm++) - * xmm1 c[x], then Mu - * xmm2 mp - * xmm3 cy - * xmm4 _c[LO] - */ - -#define MONT_START \ - asm("movd %0,%%mm2"::"g"(mp)) - -#define MONT_FINI \ - asm("emms") - -#define LOOP_START \ -asm( \ -"movd %0,%%mm1 \n\t" \ -"pxor %%mm3,%%mm3 \n\t" \ -"pmuludq %%mm2,%%mm1 \n\t" \ -:: "g"(c[x])) - -/* pmuludq on mmx registers does a 32x32->64 multiply. */ -#define INNERMUL \ -asm( \ - "movd %1,%%mm4 \n\t" \ - "movd %2,%%mm0 \n\t" \ - "paddq %%mm4,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm0 \n\t" \ - "paddq %%mm0,%%mm3 \n\t" \ - "movd %%mm3,%0 \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -:"=g"(_c[LO]) : "0"(_c[LO]), "g"(*tmpm++) ); - -#define INNERMUL8 \ -asm( \ - "movd 0(%1),%%mm4 \n\t" \ - "movd 0(%2),%%mm0 \n\t" \ - "paddq %%mm4,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm0 \n\t" \ - "movd 4(%2),%%mm5 \n\t" \ - "paddq %%mm0,%%mm3 \n\t" \ - "movd 4(%1),%%mm6 \n\t" \ - "movd %%mm3,0(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm6,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm5 \n\t" \ - "movd 8(%2),%%mm6 \n\t" \ - "paddq %%mm5,%%mm3 \n\t" \ - "movd 8(%1),%%mm7 \n\t" \ - "movd %%mm3,4(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm7,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm6 \n\t" \ - "movd 12(%2),%%mm7 \n\t" \ - "paddq %%mm6,%%mm3 \n\t" \ - "movd 12(%1),%%mm5 \n\t" \ - "movd %%mm3,8(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm5,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm7 \n\t" \ - "movd 16(%2),%%mm5 \n\t" \ - "paddq %%mm7,%%mm3 \n\t" \ - "movd 16(%1),%%mm6 \n\t" \ - "movd %%mm3,12(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm6,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm5 \n\t" \ - "movd 20(%2),%%mm6 \n\t" \ - "paddq %%mm5,%%mm3 \n\t" \ - "movd 20(%1),%%mm7 \n\t" \ - "movd %%mm3,16(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm7,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm6 \n\t" \ - "movd 24(%2),%%mm7 \n\t" \ - "paddq %%mm6,%%mm3 \n\t" \ - "movd 24(%1),%%mm5 \n\t" \ - "movd %%mm3,20(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm5,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm7 \n\t" \ - "movd 28(%2),%%mm5 \n\t" \ - "paddq %%mm7,%%mm3 \n\t" \ - "movd 28(%1),%%mm6 \n\t" \ - "movd %%mm3,24(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -\ - "paddq %%mm6,%%mm3 \n\t" \ - "pmuludq %%mm1,%%mm5 \n\t" \ - "paddq %%mm5,%%mm3 \n\t" \ - "movd %%mm3,28(%0) \n\t" \ - "psrlq $32, %%mm3 \n\t" \ -:"=r"(_c) : "0"(_c), "g"(tmpm) ); - -#define LOOP_END \ -asm( "movd %%mm3,%0 \n" :"=r"(cy)) - -#define PROPCARRY \ -asm( \ - "addl %1,%0 \n\t" \ - "setb %%al \n\t" \ - "movzbl %%al,%1 \n\t" \ -:"=g"(_c[LO]), "=r"(cy) \ -:"0"(_c[LO]), "1"(cy) \ -: "%eax", "%cc") - -/******************************************************************/ -#elif defined(TFM_ARM) - /* ARMv4 code */ - -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - " LDR r0,%1 \n\t" \ - " ADDS r0,r0,%0 \n\t" \ - " MOVCS %0,#1 \n\t" \ - " MOVCC %0,#0 \n\t" \ - " UMLAL r0,%0,%3,%4 \n\t" \ - " STR r0,%1 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(*tmpm++),"1"(_c[0]):"r0","%cc"); - -#define PROPCARRY \ -asm( \ - " LDR r0,%1 \n\t" \ - " ADDS r0,r0,%0 \n\t" \ - " STR r0,%1 \n\t" \ - " MOVCS %0,#1 \n\t" \ - " MOVCC %0,#0 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"r0","%cc"); - -/******************************************************************/ -#elif defined(TFM_PPC32) - -/* PPC32 */ -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - " mullw 16,%3,%4 \n\t" \ - " mulhwu 17,%3,%4 \n\t" \ - " addc 16,16,%0 \n\t" \ - " addze 17,17 \n\t" \ - " lwz 18,%1 \n\t" \ - " addc 16,16,18 \n\t" \ - " addze %0,17 \n\t" \ - " stw 16,%1 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"16", "17", "18","%cc"); ++tmpm; - -#define PROPCARRY \ -asm( \ - " lwz 16,%1 \n\t" \ - " addc 16,16,%0 \n\t" \ - " stw 16,%1 \n\t" \ - " xor %0,%0,%0 \n\t" \ - " addze %0,%0 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"16","%cc"); - -/******************************************************************/ -#elif defined(TFM_PPC64) - -/* PPC64 */ -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - " mulld r16,%3,%4 \n\t" \ - " mulhdu r17,%3,%4 \n\t" \ - " addc r16,16,%0 \n\t" \ - " addze r17,r17 \n\t" \ - " ldx r18,0,%1 \n\t" \ - " addc r16,r16,r18 \n\t" \ - " addze %0,r17 \n\t" \ - " sdx r16,0,%1 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"r16", "r17", "r18","%cc"); ++tmpm; - -#define PROPCARRY \ -asm( \ - " ldx r16,0,%1 \n\t" \ - " addc r16,r16,%0 \n\t" \ - " sdx r16,0,%1 \n\t" \ - " xor %0,%0,%0 \n\t" \ - " addze %0,%0 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"r16","%cc"); - -/******************************************************************/ -#elif defined(TFM_AVR32) - -/* AVR32 */ -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - " ld.w r2,%1 \n\t" \ - " add r2,%0 \n\t" \ - " eor r3,r3 \n\t" \ - " acr r3 \n\t" \ - " macu.d r2,%3,%4 \n\t" \ - " st.w %1,r2 \n\t" \ - " mov %0,r3 \n\t" \ -:"=r"(cy),"=r"(_c):"0"(cy),"r"(mu),"r"(*tmpm++),"1"(_c):"r2","r3"); - -#define PROPCARRY \ -asm( \ - " ld.w r2,%1 \n\t" \ - " add r2,%0 \n\t" \ - " st.w %1,r2 \n\t" \ - " eor %0,%0 \n\t" \ - " acr %0 \n\t" \ -:"=r"(cy),"=r"(&_c[0]):"0"(cy),"1"(&_c[0]):"r2","%cc"); - -/******************************************************************/ -#elif defined(TFM_MIPS) - -/* MIPS */ -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ -asm( \ - " multu %3,%4 \n\t" \ - " mflo $12 \n\t" \ - " mfhi $13 \n\t" \ - " addu $12,$12,%0 \n\t" \ - " sltu $10,$12,%0 \n\t" \ - " addu $13,$13,$10 \n\t" \ - " lw $10,%1 \n\t" \ - " addu $12,$12,$10 \n\t" \ - " sltu $10,$12,$10 \n\t" \ - " addu %0,$13,$10 \n\t" \ - " sw $12,%1 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"r"(mu),"r"(tmpm[0]),"1"(_c[0]):"$10","$12","$13"); ++tmpm; - -#define PROPCARRY \ -asm( \ - " lw $10,%1 \n\t" \ - " addu $10,$10,%0 \n\t" \ - " sw $10,%1 \n\t" \ - " sltu %0,$10,%0 \n\t" \ -:"=r"(cy),"=m"(_c[0]):"0"(cy),"1"(_c[0]):"$10"); - -/******************************************************************/ -#else - -/* ISO C code */ -#define MONT_START -#define MONT_FINI -#define LOOP_END -#define LOOP_START \ - mu = c[x] * mp - -#define INNERMUL \ - do { fp_word t; \ - _c[0] = t = ((fp_word)_c[0] + (fp_word)cy) + \ - (((fp_word)mu) * ((fp_word)*tmpm++)); \ - cy = (t >> DIGIT_BIT); \ - } while (0) - -#define PROPCARRY \ - do { fp_digit t = _c[0] += cy; cy = (t < cy); } while (0) - -#endif -/******************************************************************/ - - -#define LO 0 - -#ifdef TFM_SMALL_MONT_SET -#include "fp_mont_small.i" -#endif - -/* computes x/R == x (mod N) via Montgomery Reduction */ -void fp_montgomery_reduce(fp_int *a, fp_int *m, fp_digit mp) -{ - fp_digit c[FP_SIZE], *_c, *tmpm, mu; - int oldused, x, y, pa; - - /* bail if too large */ - if (m->used > (FP_SIZE/2)) { - return; - } - -#ifdef TFM_SMALL_MONT_SET - if (m->used <= 16) { - fp_montgomery_reduce_small(a, m, mp); - return; - } -#endif - -#if defined(USE_MEMSET) - /* now zero the buff */ - memset(c, 0, sizeof c); -#endif - pa = m->used; - - /* copy the input */ - oldused = a->used; - for (x = 0; x < oldused; x++) { - c[x] = a->dp[x]; - } -#if !defined(USE_MEMSET) - for (; x < 2*pa+1; x++) { - c[x] = 0; - } -#endif - MONT_START; - - for (x = 0; x < pa; x++) { - fp_digit cy = 0; - /* get Mu for this round */ - LOOP_START; - _c = c + x; - tmpm = m->dp; - y = 0; - #if (defined(TFM_SSE2) || defined(TFM_X86_64)) - for (; y < (pa & ~7); y += 8) { - INNERMUL8; - _c += 8; - tmpm += 8; - } - #endif - - for (; y < pa; y++) { - INNERMUL; - ++_c; - } - LOOP_END; - while (cy) { - PROPCARRY; - ++_c; - } - } - - /* now copy out */ - _c = c + pa; - tmpm = a->dp; - for (x = 0; x < pa+1; x++) { - *tmpm++ = *_c++; - } - - for (; x < oldused; x++) { - *tmpm++ = 0; - } - - MONT_FINI; - - a->used = pa+1; - fp_clamp(a); - - /* if A >= m then A = A - m */ - if (fp_cmp_mag (a, m) != FP_LT) { - s_fp_sub (a, m, a); - } -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mont/fp_montgomery_reduce.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/03/14 23:47:42 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_setup.c b/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_setup.c deleted file mode 100644 index d31b0a71b..000000000 --- a/lib/hcrypto/tomsfastmath/src/mont/fp_montgomery_setup.c +++ /dev/null @@ -1,48 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* setups the montgomery reduction */ -int fp_montgomery_setup(fp_int *a, fp_digit *rho) -{ - fp_digit x, b; - -/* fast inversion mod 2**k - * - * Based on the fact that - * - * XA = 1 (mod 2**n) => (X(2-XA)) A = 1 (mod 2**2n) - * => 2*X*A - X*X*A*A = 1 - * => 2*(1) - (1) = 1 - */ - b = a->dp[0]; - - if ((b & 1) == 0) { - return FP_VAL; - } - - x = (((b + 2) & 4) << 1) + b; /* here x*a==1 mod 2**4 */ - x *= 2 - b * x; /* here x*a==1 mod 2**8 */ - x *= 2 - b * x; /* here x*a==1 mod 2**16 */ - x *= 2 - b * x; /* here x*a==1 mod 2**32 */ -#ifdef FP_64BIT - x *= 2 - b * x; /* here x*a==1 mod 2**64 */ -#endif - - /* rho = -1/m mod b */ - *rho = (((fp_word) 1 << ((fp_word) DIGIT_BIT)) - ((fp_word)x)); - - return FP_OKAY; -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mont/fp_montgomery_setup.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul.c deleted file mode 100644 index 0eb9ede09..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul.c +++ /dev/null @@ -1,128 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a * b */ -void fp_mul(fp_int *A, fp_int *B, fp_int *C) -{ - int y, yy; - - /* call generic if we're out of range */ - if (A->used + B->used > FP_SIZE) { - fp_mul_comba(A, B, C); - return ; - } - - y = MAX(A->used, B->used); - yy = MIN(A->used, B->used); - /* pick a comba (unrolled 4/8/16/32 x or rolled) based on the size - of the largest input. We also want to avoid doing excess mults if the - inputs are not close to the next power of two. That is, for example, - if say y=17 then we would do (32-17)^2 = 225 unneeded multiplications - */ - -#ifdef TFM_MUL3 - if (y <= 3) { - fp_mul_comba3(A,B,C); - return; - } -#endif -#ifdef TFM_MUL4 - if (y == 4) { - fp_mul_comba4(A,B,C); - return; - } -#endif -#ifdef TFM_MUL6 - if (y <= 6) { - fp_mul_comba6(A,B,C); - return; - } -#endif -#ifdef TFM_MUL7 - if (y == 7) { - fp_mul_comba7(A,B,C); - return; - } -#endif -#ifdef TFM_MUL8 - if (y == 8) { - fp_mul_comba8(A,B,C); - return; - } -#endif -#ifdef TFM_MUL9 - if (y == 9) { - fp_mul_comba9(A,B,C); - return; - } -#endif -#ifdef TFM_MUL12 - if (y <= 12) { - fp_mul_comba12(A,B,C); - return; - } -#endif -#ifdef TFM_MUL17 - if (y <= 17) { - fp_mul_comba17(A,B,C); - return; - } -#endif - -#ifdef TFM_SMALL_SET - if (y <= 16) { - fp_mul_comba_small(A,B,C); - return; - } -#endif -#if defined(TFM_MUL20) - if (y <= 20) { - fp_mul_comba20(A,B,C); - return; - } -#endif -#if defined(TFM_MUL24) - if (yy >= 16 && y <= 24) { - fp_mul_comba24(A,B,C); - return; - } -#endif -#if defined(TFM_MUL28) - if (yy >= 20 && y <= 28) { - fp_mul_comba28(A,B,C); - return; - } -#endif -#if defined(TFM_MUL32) - if (yy >= 24 && y <= 32) { - fp_mul_comba32(A,B,C); - return; - } -#endif -#if defined(TFM_MUL48) - if (yy >= 40 && y <= 48) { - fp_mul_comba48(A,B,C); - return; - } -#endif -#if defined(TFM_MUL64) - if (yy >= 56 && y <= 64) { - fp_mul_comba64(A,B,C); - return; - } -#endif - fp_mul_comba(A,B,C); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2.c deleted file mode 100644 index 407f2bf33..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2.c +++ /dev/null @@ -1,67 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -void fp_mul_2(fp_int * a, fp_int * b) -{ - int x, oldused; - - oldused = b->used; - b->used = a->used; - - { - register fp_digit r, rr, *tmpa, *tmpb; - - /* alias for source */ - tmpa = a->dp; - - /* alias for dest */ - tmpb = b->dp; - - /* carry */ - r = 0; - for (x = 0; x < a->used; x++) { - - /* get what will be the *next* carry bit from the - * MSB of the current digit - */ - rr = *tmpa >> ((fp_digit)(DIGIT_BIT - 1)); - - /* now shift up this digit, add in the carry [from the previous] */ - *tmpb++ = ((*tmpa++ << ((fp_digit)1)) | r); - - /* copy the carry that would be from the source - * digit into the next iteration - */ - r = rr; - } - - /* new leading digit? */ - if (r != 0 && b->used != (FP_SIZE-1)) { - /* add a MSB which is always 1 at this point */ - *tmpb = 1; - ++(b->used); - } - - /* now zero any excess digits on the destination - * that we didn't write to - */ - tmpb = b->dp + b->used; - for (x = b->used; x < oldused; x++) { - *tmpb++ = 0; - } - } - b->sign = a->sign; -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul_2.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2d.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2d.c deleted file mode 100644 index 7b82dadff..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_2d.c +++ /dev/null @@ -1,47 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a * 2**d */ -void fp_mul_2d(fp_int *a, int b, fp_int *c) -{ - fp_digit carry, carrytmp, shift; - int x; - - /* copy it */ - fp_copy(a, c); - - /* handle whole digits */ - if (b >= DIGIT_BIT) { - fp_lshd(c, b/DIGIT_BIT); - } - b %= DIGIT_BIT; - - /* shift the digits */ - if (b != 0) { - carry = 0; - shift = DIGIT_BIT - b; - for (x = 0; x < c->used; x++) { - carrytmp = c->dp[x] >> shift; - c->dp[x] = (c->dp[x] << b) + carry; - carry = carrytmp; - } - /* store last carry if room */ - if (carry && x < FP_SIZE) { - c->dp[c->used++] = carry; - } - } - fp_clamp(c); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul_2d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba.c deleted file mode 100644 index 12dd9477d..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba.c +++ /dev/null @@ -1,368 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ - -/* About this file... - -*/ - -#include - -#if defined(TFM_PRESCOTT) && defined(TFM_SSE2) - #undef TFM_SSE2 - #define TFM_X86 -#endif - -/* these are the combas. Worship them. */ -#if defined(TFM_X86) -/* Generic x86 optimized code */ - -/* anything you need at the start */ -#define COMBA_START - -/* clear the chaining variables */ -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -/* forward the carry to the next digit */ -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -/* store the first sum */ -#define COMBA_STORE(x) \ - x = c0; - -/* store the second sum [carry] */ -#define COMBA_STORE2(x) \ - x = c1; - -/* anything you need at the end */ -#define COMBA_FINI - -/* this should multiply i and j */ -#define MULADD(i, j) \ -asm( \ - "movl %6,%%eax \n\t" \ - "mull %7 \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc"); - -#elif defined(TFM_X86_64) -/* x86-64 optimized */ - -/* anything you need at the start */ -#define COMBA_START - -/* clear the chaining variables */ -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -/* forward the carry to the next digit */ -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -/* store the first sum */ -#define COMBA_STORE(x) \ - x = c0; - -/* store the second sum [carry] */ -#define COMBA_STORE2(x) \ - x = c1; - -/* anything you need at the end */ -#define COMBA_FINI - -/* this should multiply i and j */ -#define MULADD(i, j) \ -asm ( \ - "movq %6,%%rax \n\t" \ - "mulq %7 \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq %%rdx,%1 \n\t" \ - "adcq $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) :"%rax","%rdx","%cc"); - -#elif defined(TFM_SSE2) -/* use SSE2 optimizations */ - -/* anything you need at the start */ -#define COMBA_START - -/* clear the chaining variables */ -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -/* forward the carry to the next digit */ -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -/* store the first sum */ -#define COMBA_STORE(x) \ - x = c0; - -/* store the second sum [carry] */ -#define COMBA_STORE2(x) \ - x = c1; - -/* anything you need at the end */ -#define COMBA_FINI \ - asm("emms"); - -/* this should multiply i and j */ -#define MULADD(i, j) \ -asm( \ - "movd %6,%%mm0 \n\t" \ - "movd %7,%%mm1 \n\t" \ - "pmuludq %%mm1,%%mm0\n\t" \ - "movd %%mm0,%%eax \n\t" \ - "psrlq $32,%%mm0 \n\t" \ - "addl %%eax,%0 \n\t" \ - "movd %%mm0,%%eax \n\t" \ - "adcl %%eax,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%cc"); - -#elif defined(TFM_ARM) -/* ARM code */ - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -#define MULADD(i, j) \ -asm( \ -" UMULL r0,r1,%6,%7 \n\t" \ -" ADDS %0,%0,r0 \n\t" \ -" ADCS %1,%1,r1 \n\t" \ -" ADC %2,%2,#0 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j) : "r0", "r1", "%cc"); - -#elif defined(TFM_PPC32) -/* For 32-bit PPC */ - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -/* untested: will mulhwu change the flags? Docs say no */ -#define MULADD(i, j) \ -asm( \ - " mullw 16,%6,%7 \n\t" \ - " addc %0,%0,16 \n\t" \ - " mulhwu 16,%6,%7 \n\t" \ - " adde %1,%1,16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"16"); - -#elif defined(TFM_PPC64) -/* For 64-bit PPC */ - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -/* untested: will mulhdu change the flags? Docs say no */ -#define MULADD(i, j) \ -asm( \ - " mulld r16,%6,%7 \n\t" \ - " addc %0,%0,16 \n\t" \ - " mulhdu r16,%6,%7 \n\t" \ - " adde %1,%1,16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"r16"); - -#elif defined(TFM_AVR32) - -/* ISO C code */ - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -#define MULADD(i, j) \ -asm( \ - " mulu.d r2,%6,%7 \n\t"\ - " add %0,r2 \n\t"\ - " adc %1,%1,r3 \n\t"\ - " acr %2 \n\t"\ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"r2","r3"); - -#elif defined(TFM_MIPS) - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -#define MULADD(i, j) \ -asm( \ - " multu %6,%7 \n\t" \ - " mflo $12 \n\t" \ - " mfhi $13 \n\t" \ - " addu %0,%0,$12 \n\t" \ - " sltu $12,%0,$12 \n\t" \ - " addu %1,%1,$13 \n\t" \ - " sltu $13,%1,$13 \n\t" \ - " addu %1,%1,$12 \n\t" \ - " sltu $12,%1,$12 \n\t" \ - " addu %2,%2,$13 \n\t" \ - " addu %2,%2,$12 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"$12","$13"); - -#else -/* ISO C code */ - -#define COMBA_START - -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; - -#define COMBA_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define COMBA_FINI - -#define MULADD(i, j) \ - do { fp_word t; \ - t = (fp_word)c0 + ((fp_word)i) * ((fp_word)j); c0 = t; \ - t = (fp_word)c1 + (t >> DIGIT_BIT); c1 = t; c2 += t >> DIGIT_BIT; \ - } while (0); - -#endif - -#ifndef TFM_DEFINES - -/* generic PxQ multiplier */ -void fp_mul_comba(fp_int *A, fp_int *B, fp_int *C) -{ - int ix, iy, iz, tx, ty, pa; - fp_digit c0, c1, c2, *tmpx, *tmpy; - fp_int tmp, *dst; - - COMBA_START; - COMBA_CLEAR; - - /* get size of output and trim */ - pa = A->used + B->used; - if (pa >= FP_SIZE) { - pa = FP_SIZE-1; - } - - if (A == C || B == C) { - fp_zero(&tmp); - dst = &tmp; - } else { - fp_zero(C); - dst = C; - } - - for (ix = 0; ix < pa; ix++) { - /* get offsets into the two bignums */ - ty = MIN(ix, B->used-1); - tx = ix - ty; - - /* setup temp aliases */ - tmpx = A->dp + tx; - tmpy = B->dp + ty; - - /* this is the number of times the loop will iterrate, essentially its - while (tx++ < a->used && ty-- >= 0) { ... } - */ - iy = MIN(A->used-tx, ty+1); - - /* execute loop */ - COMBA_FORWARD; - for (iz = 0; iz < iy; ++iz) { - MULADD(*tmpx++, *tmpy--); - } - - /* store term */ - COMBA_STORE(dst->dp[ix]); - } - COMBA_FINI; - - dst->used = pa; - dst->sign = A->sign ^ B->sign; - fp_clamp(dst); - fp_copy(dst, C); -} - -#endif - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul_comba.c,v $ */ -/* $Revision: 1.4 $ */ -/* $Date: 2007/03/14 23:47:42 $ */ - diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_12.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_12.c deleted file mode 100644 index aae9986e0..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_12.c +++ /dev/null @@ -1,111 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL12 -void fp_mul_comba12(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[24]; - - memcpy(at, A->dp, 12 * sizeof(fp_digit)); - memcpy(at+12, B->dp, 12 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[12]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); MULADD(at[10], at[12]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]); MULADD(at[11], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); MULADD(at[11], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[10], at[23]); MULADD(at[11], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[11], at[23]); - COMBA_STORE(C->dp[22]); - COMBA_STORE2(C->dp[23]); - C->used = 24; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_17.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_17.c deleted file mode 100644 index 6f3e5f7ea..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_17.c +++ /dev/null @@ -1,151 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL17 -void fp_mul_comba17(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[34]; - - memcpy(at, A->dp, 17 * sizeof(fp_digit)); - memcpy(at+17, B->dp, 17 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[17]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[32]); MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]); MULADD(at[15], at[17]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[33]); MULADD(at[1], at[32]); MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]); MULADD(at[15], at[18]); MULADD(at[16], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[1], at[33]); MULADD(at[2], at[32]); MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); MULADD(at[15], at[19]); MULADD(at[16], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[2], at[33]); MULADD(at[3], at[32]); MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); MULADD(at[15], at[20]); MULADD(at[16], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[3], at[33]); MULADD(at[4], at[32]); MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); MULADD(at[15], at[21]); MULADD(at[16], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[4], at[33]); MULADD(at[5], at[32]); MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); MULADD(at[15], at[22]); MULADD(at[16], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[5], at[33]); MULADD(at[6], at[32]); MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); MULADD(at[15], at[23]); MULADD(at[16], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[6], at[33]); MULADD(at[7], at[32]); MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]); MULADD(at[16], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[7], at[33]); MULADD(at[8], at[32]); MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]); MULADD(at[16], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[8], at[33]); MULADD(at[9], at[32]); MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]); MULADD(at[16], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[9], at[33]); MULADD(at[10], at[32]); MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]); MULADD(at[16], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[10], at[33]); MULADD(at[11], at[32]); MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); MULADD(at[16], at[27]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[11], at[33]); MULADD(at[12], at[32]); MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); MULADD(at[16], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[12], at[33]); MULADD(at[13], at[32]); MULADD(at[14], at[31]); MULADD(at[15], at[30]); MULADD(at[16], at[29]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[13], at[33]); MULADD(at[14], at[32]); MULADD(at[15], at[31]); MULADD(at[16], at[30]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[14], at[33]); MULADD(at[15], at[32]); MULADD(at[16], at[31]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[15], at[33]); MULADD(at[16], at[32]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[16], at[33]); - COMBA_STORE(C->dp[32]); - COMBA_STORE2(C->dp[33]); - C->used = 34; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_20.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_20.c deleted file mode 100644 index d4221c751..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_20.c +++ /dev/null @@ -1,175 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL20 -void fp_mul_comba20(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[40]; - - memcpy(at, A->dp, 20 * sizeof(fp_digit)); - memcpy(at+20, B->dp, 20 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[20]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[32]); MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[33]); MULADD(at[1], at[32]); MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[34]); MULADD(at[1], at[33]); MULADD(at[2], at[32]); MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[35]); MULADD(at[1], at[34]); MULADD(at[2], at[33]); MULADD(at[3], at[32]); MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); MULADD(at[15], at[20]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[36]); MULADD(at[1], at[35]); MULADD(at[2], at[34]); MULADD(at[3], at[33]); MULADD(at[4], at[32]); MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); MULADD(at[15], at[21]); MULADD(at[16], at[20]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[37]); MULADD(at[1], at[36]); MULADD(at[2], at[35]); MULADD(at[3], at[34]); MULADD(at[4], at[33]); MULADD(at[5], at[32]); MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); MULADD(at[15], at[22]); MULADD(at[16], at[21]); MULADD(at[17], at[20]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[38]); MULADD(at[1], at[37]); MULADD(at[2], at[36]); MULADD(at[3], at[35]); MULADD(at[4], at[34]); MULADD(at[5], at[33]); MULADD(at[6], at[32]); MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); MULADD(at[15], at[23]); MULADD(at[16], at[22]); MULADD(at[17], at[21]); MULADD(at[18], at[20]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[39]); MULADD(at[1], at[38]); MULADD(at[2], at[37]); MULADD(at[3], at[36]); MULADD(at[4], at[35]); MULADD(at[5], at[34]); MULADD(at[6], at[33]); MULADD(at[7], at[32]); MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]); MULADD(at[16], at[23]); MULADD(at[17], at[22]); MULADD(at[18], at[21]); MULADD(at[19], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[1], at[39]); MULADD(at[2], at[38]); MULADD(at[3], at[37]); MULADD(at[4], at[36]); MULADD(at[5], at[35]); MULADD(at[6], at[34]); MULADD(at[7], at[33]); MULADD(at[8], at[32]); MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]); MULADD(at[16], at[24]); MULADD(at[17], at[23]); MULADD(at[18], at[22]); MULADD(at[19], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[2], at[39]); MULADD(at[3], at[38]); MULADD(at[4], at[37]); MULADD(at[5], at[36]); MULADD(at[6], at[35]); MULADD(at[7], at[34]); MULADD(at[8], at[33]); MULADD(at[9], at[32]); MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]); MULADD(at[16], at[25]); MULADD(at[17], at[24]); MULADD(at[18], at[23]); MULADD(at[19], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[3], at[39]); MULADD(at[4], at[38]); MULADD(at[5], at[37]); MULADD(at[6], at[36]); MULADD(at[7], at[35]); MULADD(at[8], at[34]); MULADD(at[9], at[33]); MULADD(at[10], at[32]); MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]); MULADD(at[16], at[26]); MULADD(at[17], at[25]); MULADD(at[18], at[24]); MULADD(at[19], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[4], at[39]); MULADD(at[5], at[38]); MULADD(at[6], at[37]); MULADD(at[7], at[36]); MULADD(at[8], at[35]); MULADD(at[9], at[34]); MULADD(at[10], at[33]); MULADD(at[11], at[32]); MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); MULADD(at[16], at[27]); MULADD(at[17], at[26]); MULADD(at[18], at[25]); MULADD(at[19], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[5], at[39]); MULADD(at[6], at[38]); MULADD(at[7], at[37]); MULADD(at[8], at[36]); MULADD(at[9], at[35]); MULADD(at[10], at[34]); MULADD(at[11], at[33]); MULADD(at[12], at[32]); MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); MULADD(at[16], at[28]); MULADD(at[17], at[27]); MULADD(at[18], at[26]); MULADD(at[19], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[6], at[39]); MULADD(at[7], at[38]); MULADD(at[8], at[37]); MULADD(at[9], at[36]); MULADD(at[10], at[35]); MULADD(at[11], at[34]); MULADD(at[12], at[33]); MULADD(at[13], at[32]); MULADD(at[14], at[31]); MULADD(at[15], at[30]); MULADD(at[16], at[29]); MULADD(at[17], at[28]); MULADD(at[18], at[27]); MULADD(at[19], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[7], at[39]); MULADD(at[8], at[38]); MULADD(at[9], at[37]); MULADD(at[10], at[36]); MULADD(at[11], at[35]); MULADD(at[12], at[34]); MULADD(at[13], at[33]); MULADD(at[14], at[32]); MULADD(at[15], at[31]); MULADD(at[16], at[30]); MULADD(at[17], at[29]); MULADD(at[18], at[28]); MULADD(at[19], at[27]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[8], at[39]); MULADD(at[9], at[38]); MULADD(at[10], at[37]); MULADD(at[11], at[36]); MULADD(at[12], at[35]); MULADD(at[13], at[34]); MULADD(at[14], at[33]); MULADD(at[15], at[32]); MULADD(at[16], at[31]); MULADD(at[17], at[30]); MULADD(at[18], at[29]); MULADD(at[19], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[9], at[39]); MULADD(at[10], at[38]); MULADD(at[11], at[37]); MULADD(at[12], at[36]); MULADD(at[13], at[35]); MULADD(at[14], at[34]); MULADD(at[15], at[33]); MULADD(at[16], at[32]); MULADD(at[17], at[31]); MULADD(at[18], at[30]); MULADD(at[19], at[29]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[10], at[39]); MULADD(at[11], at[38]); MULADD(at[12], at[37]); MULADD(at[13], at[36]); MULADD(at[14], at[35]); MULADD(at[15], at[34]); MULADD(at[16], at[33]); MULADD(at[17], at[32]); MULADD(at[18], at[31]); MULADD(at[19], at[30]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[11], at[39]); MULADD(at[12], at[38]); MULADD(at[13], at[37]); MULADD(at[14], at[36]); MULADD(at[15], at[35]); MULADD(at[16], at[34]); MULADD(at[17], at[33]); MULADD(at[18], at[32]); MULADD(at[19], at[31]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[12], at[39]); MULADD(at[13], at[38]); MULADD(at[14], at[37]); MULADD(at[15], at[36]); MULADD(at[16], at[35]); MULADD(at[17], at[34]); MULADD(at[18], at[33]); MULADD(at[19], at[32]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[13], at[39]); MULADD(at[14], at[38]); MULADD(at[15], at[37]); MULADD(at[16], at[36]); MULADD(at[17], at[35]); MULADD(at[18], at[34]); MULADD(at[19], at[33]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[14], at[39]); MULADD(at[15], at[38]); MULADD(at[16], at[37]); MULADD(at[17], at[36]); MULADD(at[18], at[35]); MULADD(at[19], at[34]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[15], at[39]); MULADD(at[16], at[38]); MULADD(at[17], at[37]); MULADD(at[18], at[36]); MULADD(at[19], at[35]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[16], at[39]); MULADD(at[17], at[38]); MULADD(at[18], at[37]); MULADD(at[19], at[36]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[17], at[39]); MULADD(at[18], at[38]); MULADD(at[19], at[37]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[18], at[39]); MULADD(at[19], at[38]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[19], at[39]); - COMBA_STORE(C->dp[38]); - COMBA_STORE2(C->dp[39]); - C->used = 40; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_24.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_24.c deleted file mode 100644 index bf32644ad..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_24.c +++ /dev/null @@ -1,207 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL24 -void fp_mul_comba24(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[48]; - - memcpy(at, A->dp, 24 * sizeof(fp_digit)); - memcpy(at+24, B->dp, 24 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[24]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[32]); MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[33]); MULADD(at[1], at[32]); MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[34]); MULADD(at[1], at[33]); MULADD(at[2], at[32]); MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[35]); MULADD(at[1], at[34]); MULADD(at[2], at[33]); MULADD(at[3], at[32]); MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[36]); MULADD(at[1], at[35]); MULADD(at[2], at[34]); MULADD(at[3], at[33]); MULADD(at[4], at[32]); MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[37]); MULADD(at[1], at[36]); MULADD(at[2], at[35]); MULADD(at[3], at[34]); MULADD(at[4], at[33]); MULADD(at[5], at[32]); MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[38]); MULADD(at[1], at[37]); MULADD(at[2], at[36]); MULADD(at[3], at[35]); MULADD(at[4], at[34]); MULADD(at[5], at[33]); MULADD(at[6], at[32]); MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[39]); MULADD(at[1], at[38]); MULADD(at[2], at[37]); MULADD(at[3], at[36]); MULADD(at[4], at[35]); MULADD(at[5], at[34]); MULADD(at[6], at[33]); MULADD(at[7], at[32]); MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[40]); MULADD(at[1], at[39]); MULADD(at[2], at[38]); MULADD(at[3], at[37]); MULADD(at[4], at[36]); MULADD(at[5], at[35]); MULADD(at[6], at[34]); MULADD(at[7], at[33]); MULADD(at[8], at[32]); MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]); MULADD(at[16], at[24]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[41]); MULADD(at[1], at[40]); MULADD(at[2], at[39]); MULADD(at[3], at[38]); MULADD(at[4], at[37]); MULADD(at[5], at[36]); MULADD(at[6], at[35]); MULADD(at[7], at[34]); MULADD(at[8], at[33]); MULADD(at[9], at[32]); MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]); MULADD(at[16], at[25]); MULADD(at[17], at[24]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[42]); MULADD(at[1], at[41]); MULADD(at[2], at[40]); MULADD(at[3], at[39]); MULADD(at[4], at[38]); MULADD(at[5], at[37]); MULADD(at[6], at[36]); MULADD(at[7], at[35]); MULADD(at[8], at[34]); MULADD(at[9], at[33]); MULADD(at[10], at[32]); MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]); MULADD(at[16], at[26]); MULADD(at[17], at[25]); MULADD(at[18], at[24]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[43]); MULADD(at[1], at[42]); MULADD(at[2], at[41]); MULADD(at[3], at[40]); MULADD(at[4], at[39]); MULADD(at[5], at[38]); MULADD(at[6], at[37]); MULADD(at[7], at[36]); MULADD(at[8], at[35]); MULADD(at[9], at[34]); MULADD(at[10], at[33]); MULADD(at[11], at[32]); MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); MULADD(at[16], at[27]); MULADD(at[17], at[26]); MULADD(at[18], at[25]); MULADD(at[19], at[24]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[0], at[44]); MULADD(at[1], at[43]); MULADD(at[2], at[42]); MULADD(at[3], at[41]); MULADD(at[4], at[40]); MULADD(at[5], at[39]); MULADD(at[6], at[38]); MULADD(at[7], at[37]); MULADD(at[8], at[36]); MULADD(at[9], at[35]); MULADD(at[10], at[34]); MULADD(at[11], at[33]); MULADD(at[12], at[32]); MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); MULADD(at[16], at[28]); MULADD(at[17], at[27]); MULADD(at[18], at[26]); MULADD(at[19], at[25]); MULADD(at[20], at[24]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[0], at[45]); MULADD(at[1], at[44]); MULADD(at[2], at[43]); MULADD(at[3], at[42]); MULADD(at[4], at[41]); MULADD(at[5], at[40]); MULADD(at[6], at[39]); MULADD(at[7], at[38]); MULADD(at[8], at[37]); MULADD(at[9], at[36]); MULADD(at[10], at[35]); MULADD(at[11], at[34]); MULADD(at[12], at[33]); MULADD(at[13], at[32]); MULADD(at[14], at[31]); MULADD(at[15], at[30]); MULADD(at[16], at[29]); MULADD(at[17], at[28]); MULADD(at[18], at[27]); MULADD(at[19], at[26]); MULADD(at[20], at[25]); MULADD(at[21], at[24]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[0], at[46]); MULADD(at[1], at[45]); MULADD(at[2], at[44]); MULADD(at[3], at[43]); MULADD(at[4], at[42]); MULADD(at[5], at[41]); MULADD(at[6], at[40]); MULADD(at[7], at[39]); MULADD(at[8], at[38]); MULADD(at[9], at[37]); MULADD(at[10], at[36]); MULADD(at[11], at[35]); MULADD(at[12], at[34]); MULADD(at[13], at[33]); MULADD(at[14], at[32]); MULADD(at[15], at[31]); MULADD(at[16], at[30]); MULADD(at[17], at[29]); MULADD(at[18], at[28]); MULADD(at[19], at[27]); MULADD(at[20], at[26]); MULADD(at[21], at[25]); MULADD(at[22], at[24]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[0], at[47]); MULADD(at[1], at[46]); MULADD(at[2], at[45]); MULADD(at[3], at[44]); MULADD(at[4], at[43]); MULADD(at[5], at[42]); MULADD(at[6], at[41]); MULADD(at[7], at[40]); MULADD(at[8], at[39]); MULADD(at[9], at[38]); MULADD(at[10], at[37]); MULADD(at[11], at[36]); MULADD(at[12], at[35]); MULADD(at[13], at[34]); MULADD(at[14], at[33]); MULADD(at[15], at[32]); MULADD(at[16], at[31]); MULADD(at[17], at[30]); MULADD(at[18], at[29]); MULADD(at[19], at[28]); MULADD(at[20], at[27]); MULADD(at[21], at[26]); MULADD(at[22], at[25]); MULADD(at[23], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[1], at[47]); MULADD(at[2], at[46]); MULADD(at[3], at[45]); MULADD(at[4], at[44]); MULADD(at[5], at[43]); MULADD(at[6], at[42]); MULADD(at[7], at[41]); MULADD(at[8], at[40]); MULADD(at[9], at[39]); MULADD(at[10], at[38]); MULADD(at[11], at[37]); MULADD(at[12], at[36]); MULADD(at[13], at[35]); MULADD(at[14], at[34]); MULADD(at[15], at[33]); MULADD(at[16], at[32]); MULADD(at[17], at[31]); MULADD(at[18], at[30]); MULADD(at[19], at[29]); MULADD(at[20], at[28]); MULADD(at[21], at[27]); MULADD(at[22], at[26]); MULADD(at[23], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[2], at[47]); MULADD(at[3], at[46]); MULADD(at[4], at[45]); MULADD(at[5], at[44]); MULADD(at[6], at[43]); MULADD(at[7], at[42]); MULADD(at[8], at[41]); MULADD(at[9], at[40]); MULADD(at[10], at[39]); MULADD(at[11], at[38]); MULADD(at[12], at[37]); MULADD(at[13], at[36]); MULADD(at[14], at[35]); MULADD(at[15], at[34]); MULADD(at[16], at[33]); MULADD(at[17], at[32]); MULADD(at[18], at[31]); MULADD(at[19], at[30]); MULADD(at[20], at[29]); MULADD(at[21], at[28]); MULADD(at[22], at[27]); MULADD(at[23], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[3], at[47]); MULADD(at[4], at[46]); MULADD(at[5], at[45]); MULADD(at[6], at[44]); MULADD(at[7], at[43]); MULADD(at[8], at[42]); MULADD(at[9], at[41]); MULADD(at[10], at[40]); MULADD(at[11], at[39]); MULADD(at[12], at[38]); MULADD(at[13], at[37]); MULADD(at[14], at[36]); MULADD(at[15], at[35]); MULADD(at[16], at[34]); MULADD(at[17], at[33]); MULADD(at[18], at[32]); MULADD(at[19], at[31]); MULADD(at[20], at[30]); MULADD(at[21], at[29]); MULADD(at[22], at[28]); MULADD(at[23], at[27]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[4], at[47]); MULADD(at[5], at[46]); MULADD(at[6], at[45]); MULADD(at[7], at[44]); MULADD(at[8], at[43]); MULADD(at[9], at[42]); MULADD(at[10], at[41]); MULADD(at[11], at[40]); MULADD(at[12], at[39]); MULADD(at[13], at[38]); MULADD(at[14], at[37]); MULADD(at[15], at[36]); MULADD(at[16], at[35]); MULADD(at[17], at[34]); MULADD(at[18], at[33]); MULADD(at[19], at[32]); MULADD(at[20], at[31]); MULADD(at[21], at[30]); MULADD(at[22], at[29]); MULADD(at[23], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[5], at[47]); MULADD(at[6], at[46]); MULADD(at[7], at[45]); MULADD(at[8], at[44]); MULADD(at[9], at[43]); MULADD(at[10], at[42]); MULADD(at[11], at[41]); MULADD(at[12], at[40]); MULADD(at[13], at[39]); MULADD(at[14], at[38]); MULADD(at[15], at[37]); MULADD(at[16], at[36]); MULADD(at[17], at[35]); MULADD(at[18], at[34]); MULADD(at[19], at[33]); MULADD(at[20], at[32]); MULADD(at[21], at[31]); MULADD(at[22], at[30]); MULADD(at[23], at[29]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[6], at[47]); MULADD(at[7], at[46]); MULADD(at[8], at[45]); MULADD(at[9], at[44]); MULADD(at[10], at[43]); MULADD(at[11], at[42]); MULADD(at[12], at[41]); MULADD(at[13], at[40]); MULADD(at[14], at[39]); MULADD(at[15], at[38]); MULADD(at[16], at[37]); MULADD(at[17], at[36]); MULADD(at[18], at[35]); MULADD(at[19], at[34]); MULADD(at[20], at[33]); MULADD(at[21], at[32]); MULADD(at[22], at[31]); MULADD(at[23], at[30]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[7], at[47]); MULADD(at[8], at[46]); MULADD(at[9], at[45]); MULADD(at[10], at[44]); MULADD(at[11], at[43]); MULADD(at[12], at[42]); MULADD(at[13], at[41]); MULADD(at[14], at[40]); MULADD(at[15], at[39]); MULADD(at[16], at[38]); MULADD(at[17], at[37]); MULADD(at[18], at[36]); MULADD(at[19], at[35]); MULADD(at[20], at[34]); MULADD(at[21], at[33]); MULADD(at[22], at[32]); MULADD(at[23], at[31]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[8], at[47]); MULADD(at[9], at[46]); MULADD(at[10], at[45]); MULADD(at[11], at[44]); MULADD(at[12], at[43]); MULADD(at[13], at[42]); MULADD(at[14], at[41]); MULADD(at[15], at[40]); MULADD(at[16], at[39]); MULADD(at[17], at[38]); MULADD(at[18], at[37]); MULADD(at[19], at[36]); MULADD(at[20], at[35]); MULADD(at[21], at[34]); MULADD(at[22], at[33]); MULADD(at[23], at[32]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[9], at[47]); MULADD(at[10], at[46]); MULADD(at[11], at[45]); MULADD(at[12], at[44]); MULADD(at[13], at[43]); MULADD(at[14], at[42]); MULADD(at[15], at[41]); MULADD(at[16], at[40]); MULADD(at[17], at[39]); MULADD(at[18], at[38]); MULADD(at[19], at[37]); MULADD(at[20], at[36]); MULADD(at[21], at[35]); MULADD(at[22], at[34]); MULADD(at[23], at[33]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[10], at[47]); MULADD(at[11], at[46]); MULADD(at[12], at[45]); MULADD(at[13], at[44]); MULADD(at[14], at[43]); MULADD(at[15], at[42]); MULADD(at[16], at[41]); MULADD(at[17], at[40]); MULADD(at[18], at[39]); MULADD(at[19], at[38]); MULADD(at[20], at[37]); MULADD(at[21], at[36]); MULADD(at[22], at[35]); MULADD(at[23], at[34]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[11], at[47]); MULADD(at[12], at[46]); MULADD(at[13], at[45]); MULADD(at[14], at[44]); MULADD(at[15], at[43]); MULADD(at[16], at[42]); MULADD(at[17], at[41]); MULADD(at[18], at[40]); MULADD(at[19], at[39]); MULADD(at[20], at[38]); MULADD(at[21], at[37]); MULADD(at[22], at[36]); MULADD(at[23], at[35]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[12], at[47]); MULADD(at[13], at[46]); MULADD(at[14], at[45]); MULADD(at[15], at[44]); MULADD(at[16], at[43]); MULADD(at[17], at[42]); MULADD(at[18], at[41]); MULADD(at[19], at[40]); MULADD(at[20], at[39]); MULADD(at[21], at[38]); MULADD(at[22], at[37]); MULADD(at[23], at[36]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[13], at[47]); MULADD(at[14], at[46]); MULADD(at[15], at[45]); MULADD(at[16], at[44]); MULADD(at[17], at[43]); MULADD(at[18], at[42]); MULADD(at[19], at[41]); MULADD(at[20], at[40]); MULADD(at[21], at[39]); MULADD(at[22], at[38]); MULADD(at[23], at[37]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[14], at[47]); MULADD(at[15], at[46]); MULADD(at[16], at[45]); MULADD(at[17], at[44]); MULADD(at[18], at[43]); MULADD(at[19], at[42]); MULADD(at[20], at[41]); MULADD(at[21], at[40]); MULADD(at[22], at[39]); MULADD(at[23], at[38]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[15], at[47]); MULADD(at[16], at[46]); MULADD(at[17], at[45]); MULADD(at[18], at[44]); MULADD(at[19], at[43]); MULADD(at[20], at[42]); MULADD(at[21], at[41]); MULADD(at[22], at[40]); MULADD(at[23], at[39]); - COMBA_STORE(C->dp[38]); - /* 39 */ - COMBA_FORWARD; - MULADD(at[16], at[47]); MULADD(at[17], at[46]); MULADD(at[18], at[45]); MULADD(at[19], at[44]); MULADD(at[20], at[43]); MULADD(at[21], at[42]); MULADD(at[22], at[41]); MULADD(at[23], at[40]); - COMBA_STORE(C->dp[39]); - /* 40 */ - COMBA_FORWARD; - MULADD(at[17], at[47]); MULADD(at[18], at[46]); MULADD(at[19], at[45]); MULADD(at[20], at[44]); MULADD(at[21], at[43]); MULADD(at[22], at[42]); MULADD(at[23], at[41]); - COMBA_STORE(C->dp[40]); - /* 41 */ - COMBA_FORWARD; - MULADD(at[18], at[47]); MULADD(at[19], at[46]); MULADD(at[20], at[45]); MULADD(at[21], at[44]); MULADD(at[22], at[43]); MULADD(at[23], at[42]); - COMBA_STORE(C->dp[41]); - /* 42 */ - COMBA_FORWARD; - MULADD(at[19], at[47]); MULADD(at[20], at[46]); MULADD(at[21], at[45]); MULADD(at[22], at[44]); MULADD(at[23], at[43]); - COMBA_STORE(C->dp[42]); - /* 43 */ - COMBA_FORWARD; - MULADD(at[20], at[47]); MULADD(at[21], at[46]); MULADD(at[22], at[45]); MULADD(at[23], at[44]); - COMBA_STORE(C->dp[43]); - /* 44 */ - COMBA_FORWARD; - MULADD(at[21], at[47]); MULADD(at[22], at[46]); MULADD(at[23], at[45]); - COMBA_STORE(C->dp[44]); - /* 45 */ - COMBA_FORWARD; - MULADD(at[22], at[47]); MULADD(at[23], at[46]); - COMBA_STORE(C->dp[45]); - /* 46 */ - COMBA_FORWARD; - MULADD(at[23], at[47]); - COMBA_STORE(C->dp[46]); - COMBA_STORE2(C->dp[47]); - C->used = 48; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_28.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_28.c deleted file mode 100644 index 686dbd488..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_28.c +++ /dev/null @@ -1,239 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL28 -void fp_mul_comba28(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[56]; - - memcpy(at, A->dp, 28 * sizeof(fp_digit)); - memcpy(at+28, B->dp, 28 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[28]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[32]); MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[33]); MULADD(at[1], at[32]); MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[34]); MULADD(at[1], at[33]); MULADD(at[2], at[32]); MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[35]); MULADD(at[1], at[34]); MULADD(at[2], at[33]); MULADD(at[3], at[32]); MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[36]); MULADD(at[1], at[35]); MULADD(at[2], at[34]); MULADD(at[3], at[33]); MULADD(at[4], at[32]); MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[37]); MULADD(at[1], at[36]); MULADD(at[2], at[35]); MULADD(at[3], at[34]); MULADD(at[4], at[33]); MULADD(at[5], at[32]); MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[38]); MULADD(at[1], at[37]); MULADD(at[2], at[36]); MULADD(at[3], at[35]); MULADD(at[4], at[34]); MULADD(at[5], at[33]); MULADD(at[6], at[32]); MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[39]); MULADD(at[1], at[38]); MULADD(at[2], at[37]); MULADD(at[3], at[36]); MULADD(at[4], at[35]); MULADD(at[5], at[34]); MULADD(at[6], at[33]); MULADD(at[7], at[32]); MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[40]); MULADD(at[1], at[39]); MULADD(at[2], at[38]); MULADD(at[3], at[37]); MULADD(at[4], at[36]); MULADD(at[5], at[35]); MULADD(at[6], at[34]); MULADD(at[7], at[33]); MULADD(at[8], at[32]); MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[41]); MULADD(at[1], at[40]); MULADD(at[2], at[39]); MULADD(at[3], at[38]); MULADD(at[4], at[37]); MULADD(at[5], at[36]); MULADD(at[6], at[35]); MULADD(at[7], at[34]); MULADD(at[8], at[33]); MULADD(at[9], at[32]); MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[42]); MULADD(at[1], at[41]); MULADD(at[2], at[40]); MULADD(at[3], at[39]); MULADD(at[4], at[38]); MULADD(at[5], at[37]); MULADD(at[6], at[36]); MULADD(at[7], at[35]); MULADD(at[8], at[34]); MULADD(at[9], at[33]); MULADD(at[10], at[32]); MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[43]); MULADD(at[1], at[42]); MULADD(at[2], at[41]); MULADD(at[3], at[40]); MULADD(at[4], at[39]); MULADD(at[5], at[38]); MULADD(at[6], at[37]); MULADD(at[7], at[36]); MULADD(at[8], at[35]); MULADD(at[9], at[34]); MULADD(at[10], at[33]); MULADD(at[11], at[32]); MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[44]); MULADD(at[1], at[43]); MULADD(at[2], at[42]); MULADD(at[3], at[41]); MULADD(at[4], at[40]); MULADD(at[5], at[39]); MULADD(at[6], at[38]); MULADD(at[7], at[37]); MULADD(at[8], at[36]); MULADD(at[9], at[35]); MULADD(at[10], at[34]); MULADD(at[11], at[33]); MULADD(at[12], at[32]); MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); MULADD(at[16], at[28]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[45]); MULADD(at[1], at[44]); MULADD(at[2], at[43]); MULADD(at[3], at[42]); MULADD(at[4], at[41]); MULADD(at[5], at[40]); MULADD(at[6], at[39]); MULADD(at[7], at[38]); MULADD(at[8], at[37]); MULADD(at[9], at[36]); MULADD(at[10], at[35]); MULADD(at[11], at[34]); MULADD(at[12], at[33]); MULADD(at[13], at[32]); MULADD(at[14], at[31]); MULADD(at[15], at[30]); MULADD(at[16], at[29]); MULADD(at[17], at[28]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[46]); MULADD(at[1], at[45]); MULADD(at[2], at[44]); MULADD(at[3], at[43]); MULADD(at[4], at[42]); MULADD(at[5], at[41]); MULADD(at[6], at[40]); MULADD(at[7], at[39]); MULADD(at[8], at[38]); MULADD(at[9], at[37]); MULADD(at[10], at[36]); MULADD(at[11], at[35]); MULADD(at[12], at[34]); MULADD(at[13], at[33]); MULADD(at[14], at[32]); MULADD(at[15], at[31]); MULADD(at[16], at[30]); MULADD(at[17], at[29]); MULADD(at[18], at[28]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[47]); MULADD(at[1], at[46]); MULADD(at[2], at[45]); MULADD(at[3], at[44]); MULADD(at[4], at[43]); MULADD(at[5], at[42]); MULADD(at[6], at[41]); MULADD(at[7], at[40]); MULADD(at[8], at[39]); MULADD(at[9], at[38]); MULADD(at[10], at[37]); MULADD(at[11], at[36]); MULADD(at[12], at[35]); MULADD(at[13], at[34]); MULADD(at[14], at[33]); MULADD(at[15], at[32]); MULADD(at[16], at[31]); MULADD(at[17], at[30]); MULADD(at[18], at[29]); MULADD(at[19], at[28]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[0], at[48]); MULADD(at[1], at[47]); MULADD(at[2], at[46]); MULADD(at[3], at[45]); MULADD(at[4], at[44]); MULADD(at[5], at[43]); MULADD(at[6], at[42]); MULADD(at[7], at[41]); MULADD(at[8], at[40]); MULADD(at[9], at[39]); MULADD(at[10], at[38]); MULADD(at[11], at[37]); MULADD(at[12], at[36]); MULADD(at[13], at[35]); MULADD(at[14], at[34]); MULADD(at[15], at[33]); MULADD(at[16], at[32]); MULADD(at[17], at[31]); MULADD(at[18], at[30]); MULADD(at[19], at[29]); MULADD(at[20], at[28]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[0], at[49]); MULADD(at[1], at[48]); MULADD(at[2], at[47]); MULADD(at[3], at[46]); MULADD(at[4], at[45]); MULADD(at[5], at[44]); MULADD(at[6], at[43]); MULADD(at[7], at[42]); MULADD(at[8], at[41]); MULADD(at[9], at[40]); MULADD(at[10], at[39]); MULADD(at[11], at[38]); MULADD(at[12], at[37]); MULADD(at[13], at[36]); MULADD(at[14], at[35]); MULADD(at[15], at[34]); MULADD(at[16], at[33]); MULADD(at[17], at[32]); MULADD(at[18], at[31]); MULADD(at[19], at[30]); MULADD(at[20], at[29]); MULADD(at[21], at[28]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[0], at[50]); MULADD(at[1], at[49]); MULADD(at[2], at[48]); MULADD(at[3], at[47]); MULADD(at[4], at[46]); MULADD(at[5], at[45]); MULADD(at[6], at[44]); MULADD(at[7], at[43]); MULADD(at[8], at[42]); MULADD(at[9], at[41]); MULADD(at[10], at[40]); MULADD(at[11], at[39]); MULADD(at[12], at[38]); MULADD(at[13], at[37]); MULADD(at[14], at[36]); MULADD(at[15], at[35]); MULADD(at[16], at[34]); MULADD(at[17], at[33]); MULADD(at[18], at[32]); MULADD(at[19], at[31]); MULADD(at[20], at[30]); MULADD(at[21], at[29]); MULADD(at[22], at[28]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[0], at[51]); MULADD(at[1], at[50]); MULADD(at[2], at[49]); MULADD(at[3], at[48]); MULADD(at[4], at[47]); MULADD(at[5], at[46]); MULADD(at[6], at[45]); MULADD(at[7], at[44]); MULADD(at[8], at[43]); MULADD(at[9], at[42]); MULADD(at[10], at[41]); MULADD(at[11], at[40]); MULADD(at[12], at[39]); MULADD(at[13], at[38]); MULADD(at[14], at[37]); MULADD(at[15], at[36]); MULADD(at[16], at[35]); MULADD(at[17], at[34]); MULADD(at[18], at[33]); MULADD(at[19], at[32]); MULADD(at[20], at[31]); MULADD(at[21], at[30]); MULADD(at[22], at[29]); MULADD(at[23], at[28]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[0], at[52]); MULADD(at[1], at[51]); MULADD(at[2], at[50]); MULADD(at[3], at[49]); MULADD(at[4], at[48]); MULADD(at[5], at[47]); MULADD(at[6], at[46]); MULADD(at[7], at[45]); MULADD(at[8], at[44]); MULADD(at[9], at[43]); MULADD(at[10], at[42]); MULADD(at[11], at[41]); MULADD(at[12], at[40]); MULADD(at[13], at[39]); MULADD(at[14], at[38]); MULADD(at[15], at[37]); MULADD(at[16], at[36]); MULADD(at[17], at[35]); MULADD(at[18], at[34]); MULADD(at[19], at[33]); MULADD(at[20], at[32]); MULADD(at[21], at[31]); MULADD(at[22], at[30]); MULADD(at[23], at[29]); MULADD(at[24], at[28]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[0], at[53]); MULADD(at[1], at[52]); MULADD(at[2], at[51]); MULADD(at[3], at[50]); MULADD(at[4], at[49]); MULADD(at[5], at[48]); MULADD(at[6], at[47]); MULADD(at[7], at[46]); MULADD(at[8], at[45]); MULADD(at[9], at[44]); MULADD(at[10], at[43]); MULADD(at[11], at[42]); MULADD(at[12], at[41]); MULADD(at[13], at[40]); MULADD(at[14], at[39]); MULADD(at[15], at[38]); MULADD(at[16], at[37]); MULADD(at[17], at[36]); MULADD(at[18], at[35]); MULADD(at[19], at[34]); MULADD(at[20], at[33]); MULADD(at[21], at[32]); MULADD(at[22], at[31]); MULADD(at[23], at[30]); MULADD(at[24], at[29]); MULADD(at[25], at[28]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[0], at[54]); MULADD(at[1], at[53]); MULADD(at[2], at[52]); MULADD(at[3], at[51]); MULADD(at[4], at[50]); MULADD(at[5], at[49]); MULADD(at[6], at[48]); MULADD(at[7], at[47]); MULADD(at[8], at[46]); MULADD(at[9], at[45]); MULADD(at[10], at[44]); MULADD(at[11], at[43]); MULADD(at[12], at[42]); MULADD(at[13], at[41]); MULADD(at[14], at[40]); MULADD(at[15], at[39]); MULADD(at[16], at[38]); MULADD(at[17], at[37]); MULADD(at[18], at[36]); MULADD(at[19], at[35]); MULADD(at[20], at[34]); MULADD(at[21], at[33]); MULADD(at[22], at[32]); MULADD(at[23], at[31]); MULADD(at[24], at[30]); MULADD(at[25], at[29]); MULADD(at[26], at[28]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[0], at[55]); MULADD(at[1], at[54]); MULADD(at[2], at[53]); MULADD(at[3], at[52]); MULADD(at[4], at[51]); MULADD(at[5], at[50]); MULADD(at[6], at[49]); MULADD(at[7], at[48]); MULADD(at[8], at[47]); MULADD(at[9], at[46]); MULADD(at[10], at[45]); MULADD(at[11], at[44]); MULADD(at[12], at[43]); MULADD(at[13], at[42]); MULADD(at[14], at[41]); MULADD(at[15], at[40]); MULADD(at[16], at[39]); MULADD(at[17], at[38]); MULADD(at[18], at[37]); MULADD(at[19], at[36]); MULADD(at[20], at[35]); MULADD(at[21], at[34]); MULADD(at[22], at[33]); MULADD(at[23], at[32]); MULADD(at[24], at[31]); MULADD(at[25], at[30]); MULADD(at[26], at[29]); MULADD(at[27], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[1], at[55]); MULADD(at[2], at[54]); MULADD(at[3], at[53]); MULADD(at[4], at[52]); MULADD(at[5], at[51]); MULADD(at[6], at[50]); MULADD(at[7], at[49]); MULADD(at[8], at[48]); MULADD(at[9], at[47]); MULADD(at[10], at[46]); MULADD(at[11], at[45]); MULADD(at[12], at[44]); MULADD(at[13], at[43]); MULADD(at[14], at[42]); MULADD(at[15], at[41]); MULADD(at[16], at[40]); MULADD(at[17], at[39]); MULADD(at[18], at[38]); MULADD(at[19], at[37]); MULADD(at[20], at[36]); MULADD(at[21], at[35]); MULADD(at[22], at[34]); MULADD(at[23], at[33]); MULADD(at[24], at[32]); MULADD(at[25], at[31]); MULADD(at[26], at[30]); MULADD(at[27], at[29]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[2], at[55]); MULADD(at[3], at[54]); MULADD(at[4], at[53]); MULADD(at[5], at[52]); MULADD(at[6], at[51]); MULADD(at[7], at[50]); MULADD(at[8], at[49]); MULADD(at[9], at[48]); MULADD(at[10], at[47]); MULADD(at[11], at[46]); MULADD(at[12], at[45]); MULADD(at[13], at[44]); MULADD(at[14], at[43]); MULADD(at[15], at[42]); MULADD(at[16], at[41]); MULADD(at[17], at[40]); MULADD(at[18], at[39]); MULADD(at[19], at[38]); MULADD(at[20], at[37]); MULADD(at[21], at[36]); MULADD(at[22], at[35]); MULADD(at[23], at[34]); MULADD(at[24], at[33]); MULADD(at[25], at[32]); MULADD(at[26], at[31]); MULADD(at[27], at[30]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[3], at[55]); MULADD(at[4], at[54]); MULADD(at[5], at[53]); MULADD(at[6], at[52]); MULADD(at[7], at[51]); MULADD(at[8], at[50]); MULADD(at[9], at[49]); MULADD(at[10], at[48]); MULADD(at[11], at[47]); MULADD(at[12], at[46]); MULADD(at[13], at[45]); MULADD(at[14], at[44]); MULADD(at[15], at[43]); MULADD(at[16], at[42]); MULADD(at[17], at[41]); MULADD(at[18], at[40]); MULADD(at[19], at[39]); MULADD(at[20], at[38]); MULADD(at[21], at[37]); MULADD(at[22], at[36]); MULADD(at[23], at[35]); MULADD(at[24], at[34]); MULADD(at[25], at[33]); MULADD(at[26], at[32]); MULADD(at[27], at[31]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[4], at[55]); MULADD(at[5], at[54]); MULADD(at[6], at[53]); MULADD(at[7], at[52]); MULADD(at[8], at[51]); MULADD(at[9], at[50]); MULADD(at[10], at[49]); MULADD(at[11], at[48]); MULADD(at[12], at[47]); MULADD(at[13], at[46]); MULADD(at[14], at[45]); MULADD(at[15], at[44]); MULADD(at[16], at[43]); MULADD(at[17], at[42]); MULADD(at[18], at[41]); MULADD(at[19], at[40]); MULADD(at[20], at[39]); MULADD(at[21], at[38]); MULADD(at[22], at[37]); MULADD(at[23], at[36]); MULADD(at[24], at[35]); MULADD(at[25], at[34]); MULADD(at[26], at[33]); MULADD(at[27], at[32]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[5], at[55]); MULADD(at[6], at[54]); MULADD(at[7], at[53]); MULADD(at[8], at[52]); MULADD(at[9], at[51]); MULADD(at[10], at[50]); MULADD(at[11], at[49]); MULADD(at[12], at[48]); MULADD(at[13], at[47]); MULADD(at[14], at[46]); MULADD(at[15], at[45]); MULADD(at[16], at[44]); MULADD(at[17], at[43]); MULADD(at[18], at[42]); MULADD(at[19], at[41]); MULADD(at[20], at[40]); MULADD(at[21], at[39]); MULADD(at[22], at[38]); MULADD(at[23], at[37]); MULADD(at[24], at[36]); MULADD(at[25], at[35]); MULADD(at[26], at[34]); MULADD(at[27], at[33]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[6], at[55]); MULADD(at[7], at[54]); MULADD(at[8], at[53]); MULADD(at[9], at[52]); MULADD(at[10], at[51]); MULADD(at[11], at[50]); MULADD(at[12], at[49]); MULADD(at[13], at[48]); MULADD(at[14], at[47]); MULADD(at[15], at[46]); MULADD(at[16], at[45]); MULADD(at[17], at[44]); MULADD(at[18], at[43]); MULADD(at[19], at[42]); MULADD(at[20], at[41]); MULADD(at[21], at[40]); MULADD(at[22], at[39]); MULADD(at[23], at[38]); MULADD(at[24], at[37]); MULADD(at[25], at[36]); MULADD(at[26], at[35]); MULADD(at[27], at[34]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[7], at[55]); MULADD(at[8], at[54]); MULADD(at[9], at[53]); MULADD(at[10], at[52]); MULADD(at[11], at[51]); MULADD(at[12], at[50]); MULADD(at[13], at[49]); MULADD(at[14], at[48]); MULADD(at[15], at[47]); MULADD(at[16], at[46]); MULADD(at[17], at[45]); MULADD(at[18], at[44]); MULADD(at[19], at[43]); MULADD(at[20], at[42]); MULADD(at[21], at[41]); MULADD(at[22], at[40]); MULADD(at[23], at[39]); MULADD(at[24], at[38]); MULADD(at[25], at[37]); MULADD(at[26], at[36]); MULADD(at[27], at[35]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[8], at[55]); MULADD(at[9], at[54]); MULADD(at[10], at[53]); MULADD(at[11], at[52]); MULADD(at[12], at[51]); MULADD(at[13], at[50]); MULADD(at[14], at[49]); MULADD(at[15], at[48]); MULADD(at[16], at[47]); MULADD(at[17], at[46]); MULADD(at[18], at[45]); MULADD(at[19], at[44]); MULADD(at[20], at[43]); MULADD(at[21], at[42]); MULADD(at[22], at[41]); MULADD(at[23], at[40]); MULADD(at[24], at[39]); MULADD(at[25], at[38]); MULADD(at[26], at[37]); MULADD(at[27], at[36]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[9], at[55]); MULADD(at[10], at[54]); MULADD(at[11], at[53]); MULADD(at[12], at[52]); MULADD(at[13], at[51]); MULADD(at[14], at[50]); MULADD(at[15], at[49]); MULADD(at[16], at[48]); MULADD(at[17], at[47]); MULADD(at[18], at[46]); MULADD(at[19], at[45]); MULADD(at[20], at[44]); MULADD(at[21], at[43]); MULADD(at[22], at[42]); MULADD(at[23], at[41]); MULADD(at[24], at[40]); MULADD(at[25], at[39]); MULADD(at[26], at[38]); MULADD(at[27], at[37]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[10], at[55]); MULADD(at[11], at[54]); MULADD(at[12], at[53]); MULADD(at[13], at[52]); MULADD(at[14], at[51]); MULADD(at[15], at[50]); MULADD(at[16], at[49]); MULADD(at[17], at[48]); MULADD(at[18], at[47]); MULADD(at[19], at[46]); MULADD(at[20], at[45]); MULADD(at[21], at[44]); MULADD(at[22], at[43]); MULADD(at[23], at[42]); MULADD(at[24], at[41]); MULADD(at[25], at[40]); MULADD(at[26], at[39]); MULADD(at[27], at[38]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[11], at[55]); MULADD(at[12], at[54]); MULADD(at[13], at[53]); MULADD(at[14], at[52]); MULADD(at[15], at[51]); MULADD(at[16], at[50]); MULADD(at[17], at[49]); MULADD(at[18], at[48]); MULADD(at[19], at[47]); MULADD(at[20], at[46]); MULADD(at[21], at[45]); MULADD(at[22], at[44]); MULADD(at[23], at[43]); MULADD(at[24], at[42]); MULADD(at[25], at[41]); MULADD(at[26], at[40]); MULADD(at[27], at[39]); - COMBA_STORE(C->dp[38]); - /* 39 */ - COMBA_FORWARD; - MULADD(at[12], at[55]); MULADD(at[13], at[54]); MULADD(at[14], at[53]); MULADD(at[15], at[52]); MULADD(at[16], at[51]); MULADD(at[17], at[50]); MULADD(at[18], at[49]); MULADD(at[19], at[48]); MULADD(at[20], at[47]); MULADD(at[21], at[46]); MULADD(at[22], at[45]); MULADD(at[23], at[44]); MULADD(at[24], at[43]); MULADD(at[25], at[42]); MULADD(at[26], at[41]); MULADD(at[27], at[40]); - COMBA_STORE(C->dp[39]); - /* 40 */ - COMBA_FORWARD; - MULADD(at[13], at[55]); MULADD(at[14], at[54]); MULADD(at[15], at[53]); MULADD(at[16], at[52]); MULADD(at[17], at[51]); MULADD(at[18], at[50]); MULADD(at[19], at[49]); MULADD(at[20], at[48]); MULADD(at[21], at[47]); MULADD(at[22], at[46]); MULADD(at[23], at[45]); MULADD(at[24], at[44]); MULADD(at[25], at[43]); MULADD(at[26], at[42]); MULADD(at[27], at[41]); - COMBA_STORE(C->dp[40]); - /* 41 */ - COMBA_FORWARD; - MULADD(at[14], at[55]); MULADD(at[15], at[54]); MULADD(at[16], at[53]); MULADD(at[17], at[52]); MULADD(at[18], at[51]); MULADD(at[19], at[50]); MULADD(at[20], at[49]); MULADD(at[21], at[48]); MULADD(at[22], at[47]); MULADD(at[23], at[46]); MULADD(at[24], at[45]); MULADD(at[25], at[44]); MULADD(at[26], at[43]); MULADD(at[27], at[42]); - COMBA_STORE(C->dp[41]); - /* 42 */ - COMBA_FORWARD; - MULADD(at[15], at[55]); MULADD(at[16], at[54]); MULADD(at[17], at[53]); MULADD(at[18], at[52]); MULADD(at[19], at[51]); MULADD(at[20], at[50]); MULADD(at[21], at[49]); MULADD(at[22], at[48]); MULADD(at[23], at[47]); MULADD(at[24], at[46]); MULADD(at[25], at[45]); MULADD(at[26], at[44]); MULADD(at[27], at[43]); - COMBA_STORE(C->dp[42]); - /* 43 */ - COMBA_FORWARD; - MULADD(at[16], at[55]); MULADD(at[17], at[54]); MULADD(at[18], at[53]); MULADD(at[19], at[52]); MULADD(at[20], at[51]); MULADD(at[21], at[50]); MULADD(at[22], at[49]); MULADD(at[23], at[48]); MULADD(at[24], at[47]); MULADD(at[25], at[46]); MULADD(at[26], at[45]); MULADD(at[27], at[44]); - COMBA_STORE(C->dp[43]); - /* 44 */ - COMBA_FORWARD; - MULADD(at[17], at[55]); MULADD(at[18], at[54]); MULADD(at[19], at[53]); MULADD(at[20], at[52]); MULADD(at[21], at[51]); MULADD(at[22], at[50]); MULADD(at[23], at[49]); MULADD(at[24], at[48]); MULADD(at[25], at[47]); MULADD(at[26], at[46]); MULADD(at[27], at[45]); - COMBA_STORE(C->dp[44]); - /* 45 */ - COMBA_FORWARD; - MULADD(at[18], at[55]); MULADD(at[19], at[54]); MULADD(at[20], at[53]); MULADD(at[21], at[52]); MULADD(at[22], at[51]); MULADD(at[23], at[50]); MULADD(at[24], at[49]); MULADD(at[25], at[48]); MULADD(at[26], at[47]); MULADD(at[27], at[46]); - COMBA_STORE(C->dp[45]); - /* 46 */ - COMBA_FORWARD; - MULADD(at[19], at[55]); MULADD(at[20], at[54]); MULADD(at[21], at[53]); MULADD(at[22], at[52]); MULADD(at[23], at[51]); MULADD(at[24], at[50]); MULADD(at[25], at[49]); MULADD(at[26], at[48]); MULADD(at[27], at[47]); - COMBA_STORE(C->dp[46]); - /* 47 */ - COMBA_FORWARD; - MULADD(at[20], at[55]); MULADD(at[21], at[54]); MULADD(at[22], at[53]); MULADD(at[23], at[52]); MULADD(at[24], at[51]); MULADD(at[25], at[50]); MULADD(at[26], at[49]); MULADD(at[27], at[48]); - COMBA_STORE(C->dp[47]); - /* 48 */ - COMBA_FORWARD; - MULADD(at[21], at[55]); MULADD(at[22], at[54]); MULADD(at[23], at[53]); MULADD(at[24], at[52]); MULADD(at[25], at[51]); MULADD(at[26], at[50]); MULADD(at[27], at[49]); - COMBA_STORE(C->dp[48]); - /* 49 */ - COMBA_FORWARD; - MULADD(at[22], at[55]); MULADD(at[23], at[54]); MULADD(at[24], at[53]); MULADD(at[25], at[52]); MULADD(at[26], at[51]); MULADD(at[27], at[50]); - COMBA_STORE(C->dp[49]); - /* 50 */ - COMBA_FORWARD; - MULADD(at[23], at[55]); MULADD(at[24], at[54]); MULADD(at[25], at[53]); MULADD(at[26], at[52]); MULADD(at[27], at[51]); - COMBA_STORE(C->dp[50]); - /* 51 */ - COMBA_FORWARD; - MULADD(at[24], at[55]); MULADD(at[25], at[54]); MULADD(at[26], at[53]); MULADD(at[27], at[52]); - COMBA_STORE(C->dp[51]); - /* 52 */ - COMBA_FORWARD; - MULADD(at[25], at[55]); MULADD(at[26], at[54]); MULADD(at[27], at[53]); - COMBA_STORE(C->dp[52]); - /* 53 */ - COMBA_FORWARD; - MULADD(at[26], at[55]); MULADD(at[27], at[54]); - COMBA_STORE(C->dp[53]); - /* 54 */ - COMBA_FORWARD; - MULADD(at[27], at[55]); - COMBA_STORE(C->dp[54]); - COMBA_STORE2(C->dp[55]); - C->used = 56; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_3.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_3.c deleted file mode 100644 index c0a286f8c..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_3.c +++ /dev/null @@ -1,39 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL3 -void fp_mul_comba3(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[6]; - - memcpy(at, A->dp, 3 * sizeof(fp_digit)); - memcpy(at+3, B->dp, 3 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[3]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[4]); MULADD(at[1], at[3]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[5]); MULADD(at[1], at[4]); MULADD(at[2], at[3]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[1], at[5]); MULADD(at[2], at[4]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[2], at[5]); - COMBA_STORE(C->dp[4]); - COMBA_STORE2(C->dp[5]); - C->used = 6; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_32.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_32.c deleted file mode 100644 index 850b82850..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_32.c +++ /dev/null @@ -1,285 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL32 -void fp_mul_comba32(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[64]; - int out_size; - - out_size = A->used + B->used; - memcpy(at, A->dp, 32 * sizeof(fp_digit)); - memcpy(at+32, B->dp, 32 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[32]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[33]); MULADD(at[1], at[32]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[34]); MULADD(at[1], at[33]); MULADD(at[2], at[32]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[35]); MULADD(at[1], at[34]); MULADD(at[2], at[33]); MULADD(at[3], at[32]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[36]); MULADD(at[1], at[35]); MULADD(at[2], at[34]); MULADD(at[3], at[33]); MULADD(at[4], at[32]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[37]); MULADD(at[1], at[36]); MULADD(at[2], at[35]); MULADD(at[3], at[34]); MULADD(at[4], at[33]); MULADD(at[5], at[32]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[38]); MULADD(at[1], at[37]); MULADD(at[2], at[36]); MULADD(at[3], at[35]); MULADD(at[4], at[34]); MULADD(at[5], at[33]); MULADD(at[6], at[32]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[39]); MULADD(at[1], at[38]); MULADD(at[2], at[37]); MULADD(at[3], at[36]); MULADD(at[4], at[35]); MULADD(at[5], at[34]); MULADD(at[6], at[33]); MULADD(at[7], at[32]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[40]); MULADD(at[1], at[39]); MULADD(at[2], at[38]); MULADD(at[3], at[37]); MULADD(at[4], at[36]); MULADD(at[5], at[35]); MULADD(at[6], at[34]); MULADD(at[7], at[33]); MULADD(at[8], at[32]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[41]); MULADD(at[1], at[40]); MULADD(at[2], at[39]); MULADD(at[3], at[38]); MULADD(at[4], at[37]); MULADD(at[5], at[36]); MULADD(at[6], at[35]); MULADD(at[7], at[34]); MULADD(at[8], at[33]); MULADD(at[9], at[32]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[42]); MULADD(at[1], at[41]); MULADD(at[2], at[40]); MULADD(at[3], at[39]); MULADD(at[4], at[38]); MULADD(at[5], at[37]); MULADD(at[6], at[36]); MULADD(at[7], at[35]); MULADD(at[8], at[34]); MULADD(at[9], at[33]); MULADD(at[10], at[32]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[43]); MULADD(at[1], at[42]); MULADD(at[2], at[41]); MULADD(at[3], at[40]); MULADD(at[4], at[39]); MULADD(at[5], at[38]); MULADD(at[6], at[37]); MULADD(at[7], at[36]); MULADD(at[8], at[35]); MULADD(at[9], at[34]); MULADD(at[10], at[33]); MULADD(at[11], at[32]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[44]); MULADD(at[1], at[43]); MULADD(at[2], at[42]); MULADD(at[3], at[41]); MULADD(at[4], at[40]); MULADD(at[5], at[39]); MULADD(at[6], at[38]); MULADD(at[7], at[37]); MULADD(at[8], at[36]); MULADD(at[9], at[35]); MULADD(at[10], at[34]); MULADD(at[11], at[33]); MULADD(at[12], at[32]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[45]); MULADD(at[1], at[44]); MULADD(at[2], at[43]); MULADD(at[3], at[42]); MULADD(at[4], at[41]); MULADD(at[5], at[40]); MULADD(at[6], at[39]); MULADD(at[7], at[38]); MULADD(at[8], at[37]); MULADD(at[9], at[36]); MULADD(at[10], at[35]); MULADD(at[11], at[34]); MULADD(at[12], at[33]); MULADD(at[13], at[32]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[46]); MULADD(at[1], at[45]); MULADD(at[2], at[44]); MULADD(at[3], at[43]); MULADD(at[4], at[42]); MULADD(at[5], at[41]); MULADD(at[6], at[40]); MULADD(at[7], at[39]); MULADD(at[8], at[38]); MULADD(at[9], at[37]); MULADD(at[10], at[36]); MULADD(at[11], at[35]); MULADD(at[12], at[34]); MULADD(at[13], at[33]); MULADD(at[14], at[32]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[47]); MULADD(at[1], at[46]); MULADD(at[2], at[45]); MULADD(at[3], at[44]); MULADD(at[4], at[43]); MULADD(at[5], at[42]); MULADD(at[6], at[41]); MULADD(at[7], at[40]); MULADD(at[8], at[39]); MULADD(at[9], at[38]); MULADD(at[10], at[37]); MULADD(at[11], at[36]); MULADD(at[12], at[35]); MULADD(at[13], at[34]); MULADD(at[14], at[33]); MULADD(at[15], at[32]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[48]); MULADD(at[1], at[47]); MULADD(at[2], at[46]); MULADD(at[3], at[45]); MULADD(at[4], at[44]); MULADD(at[5], at[43]); MULADD(at[6], at[42]); MULADD(at[7], at[41]); MULADD(at[8], at[40]); MULADD(at[9], at[39]); MULADD(at[10], at[38]); MULADD(at[11], at[37]); MULADD(at[12], at[36]); MULADD(at[13], at[35]); MULADD(at[14], at[34]); MULADD(at[15], at[33]); MULADD(at[16], at[32]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[49]); MULADD(at[1], at[48]); MULADD(at[2], at[47]); MULADD(at[3], at[46]); MULADD(at[4], at[45]); MULADD(at[5], at[44]); MULADD(at[6], at[43]); MULADD(at[7], at[42]); MULADD(at[8], at[41]); MULADD(at[9], at[40]); MULADD(at[10], at[39]); MULADD(at[11], at[38]); MULADD(at[12], at[37]); MULADD(at[13], at[36]); MULADD(at[14], at[35]); MULADD(at[15], at[34]); MULADD(at[16], at[33]); MULADD(at[17], at[32]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[50]); MULADD(at[1], at[49]); MULADD(at[2], at[48]); MULADD(at[3], at[47]); MULADD(at[4], at[46]); MULADD(at[5], at[45]); MULADD(at[6], at[44]); MULADD(at[7], at[43]); MULADD(at[8], at[42]); MULADD(at[9], at[41]); MULADD(at[10], at[40]); MULADD(at[11], at[39]); MULADD(at[12], at[38]); MULADD(at[13], at[37]); MULADD(at[14], at[36]); MULADD(at[15], at[35]); MULADD(at[16], at[34]); MULADD(at[17], at[33]); MULADD(at[18], at[32]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[51]); MULADD(at[1], at[50]); MULADD(at[2], at[49]); MULADD(at[3], at[48]); MULADD(at[4], at[47]); MULADD(at[5], at[46]); MULADD(at[6], at[45]); MULADD(at[7], at[44]); MULADD(at[8], at[43]); MULADD(at[9], at[42]); MULADD(at[10], at[41]); MULADD(at[11], at[40]); MULADD(at[12], at[39]); MULADD(at[13], at[38]); MULADD(at[14], at[37]); MULADD(at[15], at[36]); MULADD(at[16], at[35]); MULADD(at[17], at[34]); MULADD(at[18], at[33]); MULADD(at[19], at[32]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[0], at[52]); MULADD(at[1], at[51]); MULADD(at[2], at[50]); MULADD(at[3], at[49]); MULADD(at[4], at[48]); MULADD(at[5], at[47]); MULADD(at[6], at[46]); MULADD(at[7], at[45]); MULADD(at[8], at[44]); MULADD(at[9], at[43]); MULADD(at[10], at[42]); MULADD(at[11], at[41]); MULADD(at[12], at[40]); MULADD(at[13], at[39]); MULADD(at[14], at[38]); MULADD(at[15], at[37]); MULADD(at[16], at[36]); MULADD(at[17], at[35]); MULADD(at[18], at[34]); MULADD(at[19], at[33]); MULADD(at[20], at[32]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[0], at[53]); MULADD(at[1], at[52]); MULADD(at[2], at[51]); MULADD(at[3], at[50]); MULADD(at[4], at[49]); MULADD(at[5], at[48]); MULADD(at[6], at[47]); MULADD(at[7], at[46]); MULADD(at[8], at[45]); MULADD(at[9], at[44]); MULADD(at[10], at[43]); MULADD(at[11], at[42]); MULADD(at[12], at[41]); MULADD(at[13], at[40]); MULADD(at[14], at[39]); MULADD(at[15], at[38]); MULADD(at[16], at[37]); MULADD(at[17], at[36]); MULADD(at[18], at[35]); MULADD(at[19], at[34]); MULADD(at[20], at[33]); MULADD(at[21], at[32]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[0], at[54]); MULADD(at[1], at[53]); MULADD(at[2], at[52]); MULADD(at[3], at[51]); MULADD(at[4], at[50]); MULADD(at[5], at[49]); MULADD(at[6], at[48]); MULADD(at[7], at[47]); MULADD(at[8], at[46]); MULADD(at[9], at[45]); MULADD(at[10], at[44]); MULADD(at[11], at[43]); MULADD(at[12], at[42]); MULADD(at[13], at[41]); MULADD(at[14], at[40]); MULADD(at[15], at[39]); MULADD(at[16], at[38]); MULADD(at[17], at[37]); MULADD(at[18], at[36]); MULADD(at[19], at[35]); MULADD(at[20], at[34]); MULADD(at[21], at[33]); MULADD(at[22], at[32]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[0], at[55]); MULADD(at[1], at[54]); MULADD(at[2], at[53]); MULADD(at[3], at[52]); MULADD(at[4], at[51]); MULADD(at[5], at[50]); MULADD(at[6], at[49]); MULADD(at[7], at[48]); MULADD(at[8], at[47]); MULADD(at[9], at[46]); MULADD(at[10], at[45]); MULADD(at[11], at[44]); MULADD(at[12], at[43]); MULADD(at[13], at[42]); MULADD(at[14], at[41]); MULADD(at[15], at[40]); MULADD(at[16], at[39]); MULADD(at[17], at[38]); MULADD(at[18], at[37]); MULADD(at[19], at[36]); MULADD(at[20], at[35]); MULADD(at[21], at[34]); MULADD(at[22], at[33]); MULADD(at[23], at[32]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[0], at[56]); MULADD(at[1], at[55]); MULADD(at[2], at[54]); MULADD(at[3], at[53]); MULADD(at[4], at[52]); MULADD(at[5], at[51]); MULADD(at[6], at[50]); MULADD(at[7], at[49]); MULADD(at[8], at[48]); MULADD(at[9], at[47]); MULADD(at[10], at[46]); MULADD(at[11], at[45]); MULADD(at[12], at[44]); MULADD(at[13], at[43]); MULADD(at[14], at[42]); MULADD(at[15], at[41]); MULADD(at[16], at[40]); MULADD(at[17], at[39]); MULADD(at[18], at[38]); MULADD(at[19], at[37]); MULADD(at[20], at[36]); MULADD(at[21], at[35]); MULADD(at[22], at[34]); MULADD(at[23], at[33]); MULADD(at[24], at[32]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[0], at[57]); MULADD(at[1], at[56]); MULADD(at[2], at[55]); MULADD(at[3], at[54]); MULADD(at[4], at[53]); MULADD(at[5], at[52]); MULADD(at[6], at[51]); MULADD(at[7], at[50]); MULADD(at[8], at[49]); MULADD(at[9], at[48]); MULADD(at[10], at[47]); MULADD(at[11], at[46]); MULADD(at[12], at[45]); MULADD(at[13], at[44]); MULADD(at[14], at[43]); MULADD(at[15], at[42]); MULADD(at[16], at[41]); MULADD(at[17], at[40]); MULADD(at[18], at[39]); MULADD(at[19], at[38]); MULADD(at[20], at[37]); MULADD(at[21], at[36]); MULADD(at[22], at[35]); MULADD(at[23], at[34]); MULADD(at[24], at[33]); MULADD(at[25], at[32]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[0], at[58]); MULADD(at[1], at[57]); MULADD(at[2], at[56]); MULADD(at[3], at[55]); MULADD(at[4], at[54]); MULADD(at[5], at[53]); MULADD(at[6], at[52]); MULADD(at[7], at[51]); MULADD(at[8], at[50]); MULADD(at[9], at[49]); MULADD(at[10], at[48]); MULADD(at[11], at[47]); MULADD(at[12], at[46]); MULADD(at[13], at[45]); MULADD(at[14], at[44]); MULADD(at[15], at[43]); MULADD(at[16], at[42]); MULADD(at[17], at[41]); MULADD(at[18], at[40]); MULADD(at[19], at[39]); MULADD(at[20], at[38]); MULADD(at[21], at[37]); MULADD(at[22], at[36]); MULADD(at[23], at[35]); MULADD(at[24], at[34]); MULADD(at[25], at[33]); MULADD(at[26], at[32]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[0], at[59]); MULADD(at[1], at[58]); MULADD(at[2], at[57]); MULADD(at[3], at[56]); MULADD(at[4], at[55]); MULADD(at[5], at[54]); MULADD(at[6], at[53]); MULADD(at[7], at[52]); MULADD(at[8], at[51]); MULADD(at[9], at[50]); MULADD(at[10], at[49]); MULADD(at[11], at[48]); MULADD(at[12], at[47]); MULADD(at[13], at[46]); MULADD(at[14], at[45]); MULADD(at[15], at[44]); MULADD(at[16], at[43]); MULADD(at[17], at[42]); MULADD(at[18], at[41]); MULADD(at[19], at[40]); MULADD(at[20], at[39]); MULADD(at[21], at[38]); MULADD(at[22], at[37]); MULADD(at[23], at[36]); MULADD(at[24], at[35]); MULADD(at[25], at[34]); MULADD(at[26], at[33]); MULADD(at[27], at[32]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[0], at[60]); MULADD(at[1], at[59]); MULADD(at[2], at[58]); MULADD(at[3], at[57]); MULADD(at[4], at[56]); MULADD(at[5], at[55]); MULADD(at[6], at[54]); MULADD(at[7], at[53]); MULADD(at[8], at[52]); MULADD(at[9], at[51]); MULADD(at[10], at[50]); MULADD(at[11], at[49]); MULADD(at[12], at[48]); MULADD(at[13], at[47]); MULADD(at[14], at[46]); MULADD(at[15], at[45]); MULADD(at[16], at[44]); MULADD(at[17], at[43]); MULADD(at[18], at[42]); MULADD(at[19], at[41]); MULADD(at[20], at[40]); MULADD(at[21], at[39]); MULADD(at[22], at[38]); MULADD(at[23], at[37]); MULADD(at[24], at[36]); MULADD(at[25], at[35]); MULADD(at[26], at[34]); MULADD(at[27], at[33]); MULADD(at[28], at[32]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[0], at[61]); MULADD(at[1], at[60]); MULADD(at[2], at[59]); MULADD(at[3], at[58]); MULADD(at[4], at[57]); MULADD(at[5], at[56]); MULADD(at[6], at[55]); MULADD(at[7], at[54]); MULADD(at[8], at[53]); MULADD(at[9], at[52]); MULADD(at[10], at[51]); MULADD(at[11], at[50]); MULADD(at[12], at[49]); MULADD(at[13], at[48]); MULADD(at[14], at[47]); MULADD(at[15], at[46]); MULADD(at[16], at[45]); MULADD(at[17], at[44]); MULADD(at[18], at[43]); MULADD(at[19], at[42]); MULADD(at[20], at[41]); MULADD(at[21], at[40]); MULADD(at[22], at[39]); MULADD(at[23], at[38]); MULADD(at[24], at[37]); MULADD(at[25], at[36]); MULADD(at[26], at[35]); MULADD(at[27], at[34]); MULADD(at[28], at[33]); MULADD(at[29], at[32]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[0], at[62]); MULADD(at[1], at[61]); MULADD(at[2], at[60]); MULADD(at[3], at[59]); MULADD(at[4], at[58]); MULADD(at[5], at[57]); MULADD(at[6], at[56]); MULADD(at[7], at[55]); MULADD(at[8], at[54]); MULADD(at[9], at[53]); MULADD(at[10], at[52]); MULADD(at[11], at[51]); MULADD(at[12], at[50]); MULADD(at[13], at[49]); MULADD(at[14], at[48]); MULADD(at[15], at[47]); MULADD(at[16], at[46]); MULADD(at[17], at[45]); MULADD(at[18], at[44]); MULADD(at[19], at[43]); MULADD(at[20], at[42]); MULADD(at[21], at[41]); MULADD(at[22], at[40]); MULADD(at[23], at[39]); MULADD(at[24], at[38]); MULADD(at[25], at[37]); MULADD(at[26], at[36]); MULADD(at[27], at[35]); MULADD(at[28], at[34]); MULADD(at[29], at[33]); MULADD(at[30], at[32]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[0], at[63]); MULADD(at[1], at[62]); MULADD(at[2], at[61]); MULADD(at[3], at[60]); MULADD(at[4], at[59]); MULADD(at[5], at[58]); MULADD(at[6], at[57]); MULADD(at[7], at[56]); MULADD(at[8], at[55]); MULADD(at[9], at[54]); MULADD(at[10], at[53]); MULADD(at[11], at[52]); MULADD(at[12], at[51]); MULADD(at[13], at[50]); MULADD(at[14], at[49]); MULADD(at[15], at[48]); MULADD(at[16], at[47]); MULADD(at[17], at[46]); MULADD(at[18], at[45]); MULADD(at[19], at[44]); MULADD(at[20], at[43]); MULADD(at[21], at[42]); MULADD(at[22], at[41]); MULADD(at[23], at[40]); MULADD(at[24], at[39]); MULADD(at[25], at[38]); MULADD(at[26], at[37]); MULADD(at[27], at[36]); MULADD(at[28], at[35]); MULADD(at[29], at[34]); MULADD(at[30], at[33]); MULADD(at[31], at[32]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[1], at[63]); MULADD(at[2], at[62]); MULADD(at[3], at[61]); MULADD(at[4], at[60]); MULADD(at[5], at[59]); MULADD(at[6], at[58]); MULADD(at[7], at[57]); MULADD(at[8], at[56]); MULADD(at[9], at[55]); MULADD(at[10], at[54]); MULADD(at[11], at[53]); MULADD(at[12], at[52]); MULADD(at[13], at[51]); MULADD(at[14], at[50]); MULADD(at[15], at[49]); MULADD(at[16], at[48]); MULADD(at[17], at[47]); MULADD(at[18], at[46]); MULADD(at[19], at[45]); MULADD(at[20], at[44]); MULADD(at[21], at[43]); MULADD(at[22], at[42]); MULADD(at[23], at[41]); MULADD(at[24], at[40]); MULADD(at[25], at[39]); MULADD(at[26], at[38]); MULADD(at[27], at[37]); MULADD(at[28], at[36]); MULADD(at[29], at[35]); MULADD(at[30], at[34]); MULADD(at[31], at[33]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[2], at[63]); MULADD(at[3], at[62]); MULADD(at[4], at[61]); MULADD(at[5], at[60]); MULADD(at[6], at[59]); MULADD(at[7], at[58]); MULADD(at[8], at[57]); MULADD(at[9], at[56]); MULADD(at[10], at[55]); MULADD(at[11], at[54]); MULADD(at[12], at[53]); MULADD(at[13], at[52]); MULADD(at[14], at[51]); MULADD(at[15], at[50]); MULADD(at[16], at[49]); MULADD(at[17], at[48]); MULADD(at[18], at[47]); MULADD(at[19], at[46]); MULADD(at[20], at[45]); MULADD(at[21], at[44]); MULADD(at[22], at[43]); MULADD(at[23], at[42]); MULADD(at[24], at[41]); MULADD(at[25], at[40]); MULADD(at[26], at[39]); MULADD(at[27], at[38]); MULADD(at[28], at[37]); MULADD(at[29], at[36]); MULADD(at[30], at[35]); MULADD(at[31], at[34]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[3], at[63]); MULADD(at[4], at[62]); MULADD(at[5], at[61]); MULADD(at[6], at[60]); MULADD(at[7], at[59]); MULADD(at[8], at[58]); MULADD(at[9], at[57]); MULADD(at[10], at[56]); MULADD(at[11], at[55]); MULADD(at[12], at[54]); MULADD(at[13], at[53]); MULADD(at[14], at[52]); MULADD(at[15], at[51]); MULADD(at[16], at[50]); MULADD(at[17], at[49]); MULADD(at[18], at[48]); MULADD(at[19], at[47]); MULADD(at[20], at[46]); MULADD(at[21], at[45]); MULADD(at[22], at[44]); MULADD(at[23], at[43]); MULADD(at[24], at[42]); MULADD(at[25], at[41]); MULADD(at[26], at[40]); MULADD(at[27], at[39]); MULADD(at[28], at[38]); MULADD(at[29], at[37]); MULADD(at[30], at[36]); MULADD(at[31], at[35]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[4], at[63]); MULADD(at[5], at[62]); MULADD(at[6], at[61]); MULADD(at[7], at[60]); MULADD(at[8], at[59]); MULADD(at[9], at[58]); MULADD(at[10], at[57]); MULADD(at[11], at[56]); MULADD(at[12], at[55]); MULADD(at[13], at[54]); MULADD(at[14], at[53]); MULADD(at[15], at[52]); MULADD(at[16], at[51]); MULADD(at[17], at[50]); MULADD(at[18], at[49]); MULADD(at[19], at[48]); MULADD(at[20], at[47]); MULADD(at[21], at[46]); MULADD(at[22], at[45]); MULADD(at[23], at[44]); MULADD(at[24], at[43]); MULADD(at[25], at[42]); MULADD(at[26], at[41]); MULADD(at[27], at[40]); MULADD(at[28], at[39]); MULADD(at[29], at[38]); MULADD(at[30], at[37]); MULADD(at[31], at[36]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[5], at[63]); MULADD(at[6], at[62]); MULADD(at[7], at[61]); MULADD(at[8], at[60]); MULADD(at[9], at[59]); MULADD(at[10], at[58]); MULADD(at[11], at[57]); MULADD(at[12], at[56]); MULADD(at[13], at[55]); MULADD(at[14], at[54]); MULADD(at[15], at[53]); MULADD(at[16], at[52]); MULADD(at[17], at[51]); MULADD(at[18], at[50]); MULADD(at[19], at[49]); MULADD(at[20], at[48]); MULADD(at[21], at[47]); MULADD(at[22], at[46]); MULADD(at[23], at[45]); MULADD(at[24], at[44]); MULADD(at[25], at[43]); MULADD(at[26], at[42]); MULADD(at[27], at[41]); MULADD(at[28], at[40]); MULADD(at[29], at[39]); MULADD(at[30], at[38]); MULADD(at[31], at[37]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[6], at[63]); MULADD(at[7], at[62]); MULADD(at[8], at[61]); MULADD(at[9], at[60]); MULADD(at[10], at[59]); MULADD(at[11], at[58]); MULADD(at[12], at[57]); MULADD(at[13], at[56]); MULADD(at[14], at[55]); MULADD(at[15], at[54]); MULADD(at[16], at[53]); MULADD(at[17], at[52]); MULADD(at[18], at[51]); MULADD(at[19], at[50]); MULADD(at[20], at[49]); MULADD(at[21], at[48]); MULADD(at[22], at[47]); MULADD(at[23], at[46]); MULADD(at[24], at[45]); MULADD(at[25], at[44]); MULADD(at[26], at[43]); MULADD(at[27], at[42]); MULADD(at[28], at[41]); MULADD(at[29], at[40]); MULADD(at[30], at[39]); MULADD(at[31], at[38]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[7], at[63]); MULADD(at[8], at[62]); MULADD(at[9], at[61]); MULADD(at[10], at[60]); MULADD(at[11], at[59]); MULADD(at[12], at[58]); MULADD(at[13], at[57]); MULADD(at[14], at[56]); MULADD(at[15], at[55]); MULADD(at[16], at[54]); MULADD(at[17], at[53]); MULADD(at[18], at[52]); MULADD(at[19], at[51]); MULADD(at[20], at[50]); MULADD(at[21], at[49]); MULADD(at[22], at[48]); MULADD(at[23], at[47]); MULADD(at[24], at[46]); MULADD(at[25], at[45]); MULADD(at[26], at[44]); MULADD(at[27], at[43]); MULADD(at[28], at[42]); MULADD(at[29], at[41]); MULADD(at[30], at[40]); MULADD(at[31], at[39]); - COMBA_STORE(C->dp[38]); - - /* early out at 40 digits, 40*32==1280, or two 640 bit operands */ - if (out_size <= 40) { COMBA_STORE2(C->dp[39]); C->used = 40; C->sign = A->sign ^ B->sign; fp_clamp(C); COMBA_FINI; return; } - - /* 39 */ - COMBA_FORWARD; - MULADD(at[8], at[63]); MULADD(at[9], at[62]); MULADD(at[10], at[61]); MULADD(at[11], at[60]); MULADD(at[12], at[59]); MULADD(at[13], at[58]); MULADD(at[14], at[57]); MULADD(at[15], at[56]); MULADD(at[16], at[55]); MULADD(at[17], at[54]); MULADD(at[18], at[53]); MULADD(at[19], at[52]); MULADD(at[20], at[51]); MULADD(at[21], at[50]); MULADD(at[22], at[49]); MULADD(at[23], at[48]); MULADD(at[24], at[47]); MULADD(at[25], at[46]); MULADD(at[26], at[45]); MULADD(at[27], at[44]); MULADD(at[28], at[43]); MULADD(at[29], at[42]); MULADD(at[30], at[41]); MULADD(at[31], at[40]); - COMBA_STORE(C->dp[39]); - /* 40 */ - COMBA_FORWARD; - MULADD(at[9], at[63]); MULADD(at[10], at[62]); MULADD(at[11], at[61]); MULADD(at[12], at[60]); MULADD(at[13], at[59]); MULADD(at[14], at[58]); MULADD(at[15], at[57]); MULADD(at[16], at[56]); MULADD(at[17], at[55]); MULADD(at[18], at[54]); MULADD(at[19], at[53]); MULADD(at[20], at[52]); MULADD(at[21], at[51]); MULADD(at[22], at[50]); MULADD(at[23], at[49]); MULADD(at[24], at[48]); MULADD(at[25], at[47]); MULADD(at[26], at[46]); MULADD(at[27], at[45]); MULADD(at[28], at[44]); MULADD(at[29], at[43]); MULADD(at[30], at[42]); MULADD(at[31], at[41]); - COMBA_STORE(C->dp[40]); - /* 41 */ - COMBA_FORWARD; - MULADD(at[10], at[63]); MULADD(at[11], at[62]); MULADD(at[12], at[61]); MULADD(at[13], at[60]); MULADD(at[14], at[59]); MULADD(at[15], at[58]); MULADD(at[16], at[57]); MULADD(at[17], at[56]); MULADD(at[18], at[55]); MULADD(at[19], at[54]); MULADD(at[20], at[53]); MULADD(at[21], at[52]); MULADD(at[22], at[51]); MULADD(at[23], at[50]); MULADD(at[24], at[49]); MULADD(at[25], at[48]); MULADD(at[26], at[47]); MULADD(at[27], at[46]); MULADD(at[28], at[45]); MULADD(at[29], at[44]); MULADD(at[30], at[43]); MULADD(at[31], at[42]); - COMBA_STORE(C->dp[41]); - /* 42 */ - COMBA_FORWARD; - MULADD(at[11], at[63]); MULADD(at[12], at[62]); MULADD(at[13], at[61]); MULADD(at[14], at[60]); MULADD(at[15], at[59]); MULADD(at[16], at[58]); MULADD(at[17], at[57]); MULADD(at[18], at[56]); MULADD(at[19], at[55]); MULADD(at[20], at[54]); MULADD(at[21], at[53]); MULADD(at[22], at[52]); MULADD(at[23], at[51]); MULADD(at[24], at[50]); MULADD(at[25], at[49]); MULADD(at[26], at[48]); MULADD(at[27], at[47]); MULADD(at[28], at[46]); MULADD(at[29], at[45]); MULADD(at[30], at[44]); MULADD(at[31], at[43]); - COMBA_STORE(C->dp[42]); - /* 43 */ - COMBA_FORWARD; - MULADD(at[12], at[63]); MULADD(at[13], at[62]); MULADD(at[14], at[61]); MULADD(at[15], at[60]); MULADD(at[16], at[59]); MULADD(at[17], at[58]); MULADD(at[18], at[57]); MULADD(at[19], at[56]); MULADD(at[20], at[55]); MULADD(at[21], at[54]); MULADD(at[22], at[53]); MULADD(at[23], at[52]); MULADD(at[24], at[51]); MULADD(at[25], at[50]); MULADD(at[26], at[49]); MULADD(at[27], at[48]); MULADD(at[28], at[47]); MULADD(at[29], at[46]); MULADD(at[30], at[45]); MULADD(at[31], at[44]); - COMBA_STORE(C->dp[43]); - /* 44 */ - COMBA_FORWARD; - MULADD(at[13], at[63]); MULADD(at[14], at[62]); MULADD(at[15], at[61]); MULADD(at[16], at[60]); MULADD(at[17], at[59]); MULADD(at[18], at[58]); MULADD(at[19], at[57]); MULADD(at[20], at[56]); MULADD(at[21], at[55]); MULADD(at[22], at[54]); MULADD(at[23], at[53]); MULADD(at[24], at[52]); MULADD(at[25], at[51]); MULADD(at[26], at[50]); MULADD(at[27], at[49]); MULADD(at[28], at[48]); MULADD(at[29], at[47]); MULADD(at[30], at[46]); MULADD(at[31], at[45]); - COMBA_STORE(C->dp[44]); - /* 45 */ - COMBA_FORWARD; - MULADD(at[14], at[63]); MULADD(at[15], at[62]); MULADD(at[16], at[61]); MULADD(at[17], at[60]); MULADD(at[18], at[59]); MULADD(at[19], at[58]); MULADD(at[20], at[57]); MULADD(at[21], at[56]); MULADD(at[22], at[55]); MULADD(at[23], at[54]); MULADD(at[24], at[53]); MULADD(at[25], at[52]); MULADD(at[26], at[51]); MULADD(at[27], at[50]); MULADD(at[28], at[49]); MULADD(at[29], at[48]); MULADD(at[30], at[47]); MULADD(at[31], at[46]); - COMBA_STORE(C->dp[45]); - /* 46 */ - COMBA_FORWARD; - MULADD(at[15], at[63]); MULADD(at[16], at[62]); MULADD(at[17], at[61]); MULADD(at[18], at[60]); MULADD(at[19], at[59]); MULADD(at[20], at[58]); MULADD(at[21], at[57]); MULADD(at[22], at[56]); MULADD(at[23], at[55]); MULADD(at[24], at[54]); MULADD(at[25], at[53]); MULADD(at[26], at[52]); MULADD(at[27], at[51]); MULADD(at[28], at[50]); MULADD(at[29], at[49]); MULADD(at[30], at[48]); MULADD(at[31], at[47]); - COMBA_STORE(C->dp[46]); - - /* early out at 48 digits, 48*32==1536, or two 768 bit operands */ - if (out_size <= 48) { COMBA_STORE2(C->dp[47]); C->used = 48; C->sign = A->sign ^ B->sign; fp_clamp(C); COMBA_FINI; return; } - - /* 47 */ - COMBA_FORWARD; - MULADD(at[16], at[63]); MULADD(at[17], at[62]); MULADD(at[18], at[61]); MULADD(at[19], at[60]); MULADD(at[20], at[59]); MULADD(at[21], at[58]); MULADD(at[22], at[57]); MULADD(at[23], at[56]); MULADD(at[24], at[55]); MULADD(at[25], at[54]); MULADD(at[26], at[53]); MULADD(at[27], at[52]); MULADD(at[28], at[51]); MULADD(at[29], at[50]); MULADD(at[30], at[49]); MULADD(at[31], at[48]); - COMBA_STORE(C->dp[47]); - /* 48 */ - COMBA_FORWARD; - MULADD(at[17], at[63]); MULADD(at[18], at[62]); MULADD(at[19], at[61]); MULADD(at[20], at[60]); MULADD(at[21], at[59]); MULADD(at[22], at[58]); MULADD(at[23], at[57]); MULADD(at[24], at[56]); MULADD(at[25], at[55]); MULADD(at[26], at[54]); MULADD(at[27], at[53]); MULADD(at[28], at[52]); MULADD(at[29], at[51]); MULADD(at[30], at[50]); MULADD(at[31], at[49]); - COMBA_STORE(C->dp[48]); - /* 49 */ - COMBA_FORWARD; - MULADD(at[18], at[63]); MULADD(at[19], at[62]); MULADD(at[20], at[61]); MULADD(at[21], at[60]); MULADD(at[22], at[59]); MULADD(at[23], at[58]); MULADD(at[24], at[57]); MULADD(at[25], at[56]); MULADD(at[26], at[55]); MULADD(at[27], at[54]); MULADD(at[28], at[53]); MULADD(at[29], at[52]); MULADD(at[30], at[51]); MULADD(at[31], at[50]); - COMBA_STORE(C->dp[49]); - /* 50 */ - COMBA_FORWARD; - MULADD(at[19], at[63]); MULADD(at[20], at[62]); MULADD(at[21], at[61]); MULADD(at[22], at[60]); MULADD(at[23], at[59]); MULADD(at[24], at[58]); MULADD(at[25], at[57]); MULADD(at[26], at[56]); MULADD(at[27], at[55]); MULADD(at[28], at[54]); MULADD(at[29], at[53]); MULADD(at[30], at[52]); MULADD(at[31], at[51]); - COMBA_STORE(C->dp[50]); - /* 51 */ - COMBA_FORWARD; - MULADD(at[20], at[63]); MULADD(at[21], at[62]); MULADD(at[22], at[61]); MULADD(at[23], at[60]); MULADD(at[24], at[59]); MULADD(at[25], at[58]); MULADD(at[26], at[57]); MULADD(at[27], at[56]); MULADD(at[28], at[55]); MULADD(at[29], at[54]); MULADD(at[30], at[53]); MULADD(at[31], at[52]); - COMBA_STORE(C->dp[51]); - /* 52 */ - COMBA_FORWARD; - MULADD(at[21], at[63]); MULADD(at[22], at[62]); MULADD(at[23], at[61]); MULADD(at[24], at[60]); MULADD(at[25], at[59]); MULADD(at[26], at[58]); MULADD(at[27], at[57]); MULADD(at[28], at[56]); MULADD(at[29], at[55]); MULADD(at[30], at[54]); MULADD(at[31], at[53]); - COMBA_STORE(C->dp[52]); - /* 53 */ - COMBA_FORWARD; - MULADD(at[22], at[63]); MULADD(at[23], at[62]); MULADD(at[24], at[61]); MULADD(at[25], at[60]); MULADD(at[26], at[59]); MULADD(at[27], at[58]); MULADD(at[28], at[57]); MULADD(at[29], at[56]); MULADD(at[30], at[55]); MULADD(at[31], at[54]); - COMBA_STORE(C->dp[53]); - /* 54 */ - COMBA_FORWARD; - MULADD(at[23], at[63]); MULADD(at[24], at[62]); MULADD(at[25], at[61]); MULADD(at[26], at[60]); MULADD(at[27], at[59]); MULADD(at[28], at[58]); MULADD(at[29], at[57]); MULADD(at[30], at[56]); MULADD(at[31], at[55]); - COMBA_STORE(C->dp[54]); - - /* early out at 56 digits, 56*32==1792, or two 896 bit operands */ - if (out_size <= 56) { COMBA_STORE2(C->dp[55]); C->used = 56; C->sign = A->sign ^ B->sign; fp_clamp(C); COMBA_FINI; return; } - - /* 55 */ - COMBA_FORWARD; - MULADD(at[24], at[63]); MULADD(at[25], at[62]); MULADD(at[26], at[61]); MULADD(at[27], at[60]); MULADD(at[28], at[59]); MULADD(at[29], at[58]); MULADD(at[30], at[57]); MULADD(at[31], at[56]); - COMBA_STORE(C->dp[55]); - /* 56 */ - COMBA_FORWARD; - MULADD(at[25], at[63]); MULADD(at[26], at[62]); MULADD(at[27], at[61]); MULADD(at[28], at[60]); MULADD(at[29], at[59]); MULADD(at[30], at[58]); MULADD(at[31], at[57]); - COMBA_STORE(C->dp[56]); - /* 57 */ - COMBA_FORWARD; - MULADD(at[26], at[63]); MULADD(at[27], at[62]); MULADD(at[28], at[61]); MULADD(at[29], at[60]); MULADD(at[30], at[59]); MULADD(at[31], at[58]); - COMBA_STORE(C->dp[57]); - /* 58 */ - COMBA_FORWARD; - MULADD(at[27], at[63]); MULADD(at[28], at[62]); MULADD(at[29], at[61]); MULADD(at[30], at[60]); MULADD(at[31], at[59]); - COMBA_STORE(C->dp[58]); - /* 59 */ - COMBA_FORWARD; - MULADD(at[28], at[63]); MULADD(at[29], at[62]); MULADD(at[30], at[61]); MULADD(at[31], at[60]); - COMBA_STORE(C->dp[59]); - /* 60 */ - COMBA_FORWARD; - MULADD(at[29], at[63]); MULADD(at[30], at[62]); MULADD(at[31], at[61]); - COMBA_STORE(C->dp[60]); - /* 61 */ - COMBA_FORWARD; - MULADD(at[30], at[63]); MULADD(at[31], at[62]); - COMBA_STORE(C->dp[61]); - /* 62 */ - COMBA_FORWARD; - MULADD(at[31], at[63]); - COMBA_STORE(C->dp[62]); - COMBA_STORE2(C->dp[63]); - C->used = 64; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_4.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_4.c deleted file mode 100644 index fb363eae9..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_4.c +++ /dev/null @@ -1,47 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL4 -void fp_mul_comba4(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[8]; - - memcpy(at, A->dp, 4 * sizeof(fp_digit)); - memcpy(at+4, B->dp, 4 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[4]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[5]); MULADD(at[1], at[4]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[6]); MULADD(at[1], at[5]); MULADD(at[2], at[4]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); MULADD(at[3], at[4]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[2], at[7]); MULADD(at[3], at[6]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[3], at[7]); - COMBA_STORE(C->dp[6]); - COMBA_STORE2(C->dp[7]); - C->used = 8; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_48.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_48.c deleted file mode 100644 index ea966ba1b..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_48.c +++ /dev/null @@ -1,399 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL48 -void fp_mul_comba48(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[96]; - - memcpy(at, A->dp, 48 * sizeof(fp_digit)); - memcpy(at+48, B->dp, 48 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[48]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[49]); MULADD(at[1], at[48]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[50]); MULADD(at[1], at[49]); MULADD(at[2], at[48]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[51]); MULADD(at[1], at[50]); MULADD(at[2], at[49]); MULADD(at[3], at[48]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[52]); MULADD(at[1], at[51]); MULADD(at[2], at[50]); MULADD(at[3], at[49]); MULADD(at[4], at[48]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[53]); MULADD(at[1], at[52]); MULADD(at[2], at[51]); MULADD(at[3], at[50]); MULADD(at[4], at[49]); MULADD(at[5], at[48]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[54]); MULADD(at[1], at[53]); MULADD(at[2], at[52]); MULADD(at[3], at[51]); MULADD(at[4], at[50]); MULADD(at[5], at[49]); MULADD(at[6], at[48]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[55]); MULADD(at[1], at[54]); MULADD(at[2], at[53]); MULADD(at[3], at[52]); MULADD(at[4], at[51]); MULADD(at[5], at[50]); MULADD(at[6], at[49]); MULADD(at[7], at[48]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[56]); MULADD(at[1], at[55]); MULADD(at[2], at[54]); MULADD(at[3], at[53]); MULADD(at[4], at[52]); MULADD(at[5], at[51]); MULADD(at[6], at[50]); MULADD(at[7], at[49]); MULADD(at[8], at[48]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[57]); MULADD(at[1], at[56]); MULADD(at[2], at[55]); MULADD(at[3], at[54]); MULADD(at[4], at[53]); MULADD(at[5], at[52]); MULADD(at[6], at[51]); MULADD(at[7], at[50]); MULADD(at[8], at[49]); MULADD(at[9], at[48]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[58]); MULADD(at[1], at[57]); MULADD(at[2], at[56]); MULADD(at[3], at[55]); MULADD(at[4], at[54]); MULADD(at[5], at[53]); MULADD(at[6], at[52]); MULADD(at[7], at[51]); MULADD(at[8], at[50]); MULADD(at[9], at[49]); MULADD(at[10], at[48]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[59]); MULADD(at[1], at[58]); MULADD(at[2], at[57]); MULADD(at[3], at[56]); MULADD(at[4], at[55]); MULADD(at[5], at[54]); MULADD(at[6], at[53]); MULADD(at[7], at[52]); MULADD(at[8], at[51]); MULADD(at[9], at[50]); MULADD(at[10], at[49]); MULADD(at[11], at[48]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[60]); MULADD(at[1], at[59]); MULADD(at[2], at[58]); MULADD(at[3], at[57]); MULADD(at[4], at[56]); MULADD(at[5], at[55]); MULADD(at[6], at[54]); MULADD(at[7], at[53]); MULADD(at[8], at[52]); MULADD(at[9], at[51]); MULADD(at[10], at[50]); MULADD(at[11], at[49]); MULADD(at[12], at[48]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[61]); MULADD(at[1], at[60]); MULADD(at[2], at[59]); MULADD(at[3], at[58]); MULADD(at[4], at[57]); MULADD(at[5], at[56]); MULADD(at[6], at[55]); MULADD(at[7], at[54]); MULADD(at[8], at[53]); MULADD(at[9], at[52]); MULADD(at[10], at[51]); MULADD(at[11], at[50]); MULADD(at[12], at[49]); MULADD(at[13], at[48]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[62]); MULADD(at[1], at[61]); MULADD(at[2], at[60]); MULADD(at[3], at[59]); MULADD(at[4], at[58]); MULADD(at[5], at[57]); MULADD(at[6], at[56]); MULADD(at[7], at[55]); MULADD(at[8], at[54]); MULADD(at[9], at[53]); MULADD(at[10], at[52]); MULADD(at[11], at[51]); MULADD(at[12], at[50]); MULADD(at[13], at[49]); MULADD(at[14], at[48]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[63]); MULADD(at[1], at[62]); MULADD(at[2], at[61]); MULADD(at[3], at[60]); MULADD(at[4], at[59]); MULADD(at[5], at[58]); MULADD(at[6], at[57]); MULADD(at[7], at[56]); MULADD(at[8], at[55]); MULADD(at[9], at[54]); MULADD(at[10], at[53]); MULADD(at[11], at[52]); MULADD(at[12], at[51]); MULADD(at[13], at[50]); MULADD(at[14], at[49]); MULADD(at[15], at[48]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[64]); MULADD(at[1], at[63]); MULADD(at[2], at[62]); MULADD(at[3], at[61]); MULADD(at[4], at[60]); MULADD(at[5], at[59]); MULADD(at[6], at[58]); MULADD(at[7], at[57]); MULADD(at[8], at[56]); MULADD(at[9], at[55]); MULADD(at[10], at[54]); MULADD(at[11], at[53]); MULADD(at[12], at[52]); MULADD(at[13], at[51]); MULADD(at[14], at[50]); MULADD(at[15], at[49]); MULADD(at[16], at[48]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[65]); MULADD(at[1], at[64]); MULADD(at[2], at[63]); MULADD(at[3], at[62]); MULADD(at[4], at[61]); MULADD(at[5], at[60]); MULADD(at[6], at[59]); MULADD(at[7], at[58]); MULADD(at[8], at[57]); MULADD(at[9], at[56]); MULADD(at[10], at[55]); MULADD(at[11], at[54]); MULADD(at[12], at[53]); MULADD(at[13], at[52]); MULADD(at[14], at[51]); MULADD(at[15], at[50]); MULADD(at[16], at[49]); MULADD(at[17], at[48]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[66]); MULADD(at[1], at[65]); MULADD(at[2], at[64]); MULADD(at[3], at[63]); MULADD(at[4], at[62]); MULADD(at[5], at[61]); MULADD(at[6], at[60]); MULADD(at[7], at[59]); MULADD(at[8], at[58]); MULADD(at[9], at[57]); MULADD(at[10], at[56]); MULADD(at[11], at[55]); MULADD(at[12], at[54]); MULADD(at[13], at[53]); MULADD(at[14], at[52]); MULADD(at[15], at[51]); MULADD(at[16], at[50]); MULADD(at[17], at[49]); MULADD(at[18], at[48]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[67]); MULADD(at[1], at[66]); MULADD(at[2], at[65]); MULADD(at[3], at[64]); MULADD(at[4], at[63]); MULADD(at[5], at[62]); MULADD(at[6], at[61]); MULADD(at[7], at[60]); MULADD(at[8], at[59]); MULADD(at[9], at[58]); MULADD(at[10], at[57]); MULADD(at[11], at[56]); MULADD(at[12], at[55]); MULADD(at[13], at[54]); MULADD(at[14], at[53]); MULADD(at[15], at[52]); MULADD(at[16], at[51]); MULADD(at[17], at[50]); MULADD(at[18], at[49]); MULADD(at[19], at[48]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[0], at[68]); MULADD(at[1], at[67]); MULADD(at[2], at[66]); MULADD(at[3], at[65]); MULADD(at[4], at[64]); MULADD(at[5], at[63]); MULADD(at[6], at[62]); MULADD(at[7], at[61]); MULADD(at[8], at[60]); MULADD(at[9], at[59]); MULADD(at[10], at[58]); MULADD(at[11], at[57]); MULADD(at[12], at[56]); MULADD(at[13], at[55]); MULADD(at[14], at[54]); MULADD(at[15], at[53]); MULADD(at[16], at[52]); MULADD(at[17], at[51]); MULADD(at[18], at[50]); MULADD(at[19], at[49]); MULADD(at[20], at[48]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[0], at[69]); MULADD(at[1], at[68]); MULADD(at[2], at[67]); MULADD(at[3], at[66]); MULADD(at[4], at[65]); MULADD(at[5], at[64]); MULADD(at[6], at[63]); MULADD(at[7], at[62]); MULADD(at[8], at[61]); MULADD(at[9], at[60]); MULADD(at[10], at[59]); MULADD(at[11], at[58]); MULADD(at[12], at[57]); MULADD(at[13], at[56]); MULADD(at[14], at[55]); MULADD(at[15], at[54]); MULADD(at[16], at[53]); MULADD(at[17], at[52]); MULADD(at[18], at[51]); MULADD(at[19], at[50]); MULADD(at[20], at[49]); MULADD(at[21], at[48]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[0], at[70]); MULADD(at[1], at[69]); MULADD(at[2], at[68]); MULADD(at[3], at[67]); MULADD(at[4], at[66]); MULADD(at[5], at[65]); MULADD(at[6], at[64]); MULADD(at[7], at[63]); MULADD(at[8], at[62]); MULADD(at[9], at[61]); MULADD(at[10], at[60]); MULADD(at[11], at[59]); MULADD(at[12], at[58]); MULADD(at[13], at[57]); MULADD(at[14], at[56]); MULADD(at[15], at[55]); MULADD(at[16], at[54]); MULADD(at[17], at[53]); MULADD(at[18], at[52]); MULADD(at[19], at[51]); MULADD(at[20], at[50]); MULADD(at[21], at[49]); MULADD(at[22], at[48]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[0], at[71]); MULADD(at[1], at[70]); MULADD(at[2], at[69]); MULADD(at[3], at[68]); MULADD(at[4], at[67]); MULADD(at[5], at[66]); MULADD(at[6], at[65]); MULADD(at[7], at[64]); MULADD(at[8], at[63]); MULADD(at[9], at[62]); MULADD(at[10], at[61]); MULADD(at[11], at[60]); MULADD(at[12], at[59]); MULADD(at[13], at[58]); MULADD(at[14], at[57]); MULADD(at[15], at[56]); MULADD(at[16], at[55]); MULADD(at[17], at[54]); MULADD(at[18], at[53]); MULADD(at[19], at[52]); MULADD(at[20], at[51]); MULADD(at[21], at[50]); MULADD(at[22], at[49]); MULADD(at[23], at[48]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[0], at[72]); MULADD(at[1], at[71]); MULADD(at[2], at[70]); MULADD(at[3], at[69]); MULADD(at[4], at[68]); MULADD(at[5], at[67]); MULADD(at[6], at[66]); MULADD(at[7], at[65]); MULADD(at[8], at[64]); MULADD(at[9], at[63]); MULADD(at[10], at[62]); MULADD(at[11], at[61]); MULADD(at[12], at[60]); MULADD(at[13], at[59]); MULADD(at[14], at[58]); MULADD(at[15], at[57]); MULADD(at[16], at[56]); MULADD(at[17], at[55]); MULADD(at[18], at[54]); MULADD(at[19], at[53]); MULADD(at[20], at[52]); MULADD(at[21], at[51]); MULADD(at[22], at[50]); MULADD(at[23], at[49]); MULADD(at[24], at[48]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[0], at[73]); MULADD(at[1], at[72]); MULADD(at[2], at[71]); MULADD(at[3], at[70]); MULADD(at[4], at[69]); MULADD(at[5], at[68]); MULADD(at[6], at[67]); MULADD(at[7], at[66]); MULADD(at[8], at[65]); MULADD(at[9], at[64]); MULADD(at[10], at[63]); MULADD(at[11], at[62]); MULADD(at[12], at[61]); MULADD(at[13], at[60]); MULADD(at[14], at[59]); MULADD(at[15], at[58]); MULADD(at[16], at[57]); MULADD(at[17], at[56]); MULADD(at[18], at[55]); MULADD(at[19], at[54]); MULADD(at[20], at[53]); MULADD(at[21], at[52]); MULADD(at[22], at[51]); MULADD(at[23], at[50]); MULADD(at[24], at[49]); MULADD(at[25], at[48]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[0], at[74]); MULADD(at[1], at[73]); MULADD(at[2], at[72]); MULADD(at[3], at[71]); MULADD(at[4], at[70]); MULADD(at[5], at[69]); MULADD(at[6], at[68]); MULADD(at[7], at[67]); MULADD(at[8], at[66]); MULADD(at[9], at[65]); MULADD(at[10], at[64]); MULADD(at[11], at[63]); MULADD(at[12], at[62]); MULADD(at[13], at[61]); MULADD(at[14], at[60]); MULADD(at[15], at[59]); MULADD(at[16], at[58]); MULADD(at[17], at[57]); MULADD(at[18], at[56]); MULADD(at[19], at[55]); MULADD(at[20], at[54]); MULADD(at[21], at[53]); MULADD(at[22], at[52]); MULADD(at[23], at[51]); MULADD(at[24], at[50]); MULADD(at[25], at[49]); MULADD(at[26], at[48]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[0], at[75]); MULADD(at[1], at[74]); MULADD(at[2], at[73]); MULADD(at[3], at[72]); MULADD(at[4], at[71]); MULADD(at[5], at[70]); MULADD(at[6], at[69]); MULADD(at[7], at[68]); MULADD(at[8], at[67]); MULADD(at[9], at[66]); MULADD(at[10], at[65]); MULADD(at[11], at[64]); MULADD(at[12], at[63]); MULADD(at[13], at[62]); MULADD(at[14], at[61]); MULADD(at[15], at[60]); MULADD(at[16], at[59]); MULADD(at[17], at[58]); MULADD(at[18], at[57]); MULADD(at[19], at[56]); MULADD(at[20], at[55]); MULADD(at[21], at[54]); MULADD(at[22], at[53]); MULADD(at[23], at[52]); MULADD(at[24], at[51]); MULADD(at[25], at[50]); MULADD(at[26], at[49]); MULADD(at[27], at[48]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[0], at[76]); MULADD(at[1], at[75]); MULADD(at[2], at[74]); MULADD(at[3], at[73]); MULADD(at[4], at[72]); MULADD(at[5], at[71]); MULADD(at[6], at[70]); MULADD(at[7], at[69]); MULADD(at[8], at[68]); MULADD(at[9], at[67]); MULADD(at[10], at[66]); MULADD(at[11], at[65]); MULADD(at[12], at[64]); MULADD(at[13], at[63]); MULADD(at[14], at[62]); MULADD(at[15], at[61]); MULADD(at[16], at[60]); MULADD(at[17], at[59]); MULADD(at[18], at[58]); MULADD(at[19], at[57]); MULADD(at[20], at[56]); MULADD(at[21], at[55]); MULADD(at[22], at[54]); MULADD(at[23], at[53]); MULADD(at[24], at[52]); MULADD(at[25], at[51]); MULADD(at[26], at[50]); MULADD(at[27], at[49]); MULADD(at[28], at[48]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[0], at[77]); MULADD(at[1], at[76]); MULADD(at[2], at[75]); MULADD(at[3], at[74]); MULADD(at[4], at[73]); MULADD(at[5], at[72]); MULADD(at[6], at[71]); MULADD(at[7], at[70]); MULADD(at[8], at[69]); MULADD(at[9], at[68]); MULADD(at[10], at[67]); MULADD(at[11], at[66]); MULADD(at[12], at[65]); MULADD(at[13], at[64]); MULADD(at[14], at[63]); MULADD(at[15], at[62]); MULADD(at[16], at[61]); MULADD(at[17], at[60]); MULADD(at[18], at[59]); MULADD(at[19], at[58]); MULADD(at[20], at[57]); MULADD(at[21], at[56]); MULADD(at[22], at[55]); MULADD(at[23], at[54]); MULADD(at[24], at[53]); MULADD(at[25], at[52]); MULADD(at[26], at[51]); MULADD(at[27], at[50]); MULADD(at[28], at[49]); MULADD(at[29], at[48]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[0], at[78]); MULADD(at[1], at[77]); MULADD(at[2], at[76]); MULADD(at[3], at[75]); MULADD(at[4], at[74]); MULADD(at[5], at[73]); MULADD(at[6], at[72]); MULADD(at[7], at[71]); MULADD(at[8], at[70]); MULADD(at[9], at[69]); MULADD(at[10], at[68]); MULADD(at[11], at[67]); MULADD(at[12], at[66]); MULADD(at[13], at[65]); MULADD(at[14], at[64]); MULADD(at[15], at[63]); MULADD(at[16], at[62]); MULADD(at[17], at[61]); MULADD(at[18], at[60]); MULADD(at[19], at[59]); MULADD(at[20], at[58]); MULADD(at[21], at[57]); MULADD(at[22], at[56]); MULADD(at[23], at[55]); MULADD(at[24], at[54]); MULADD(at[25], at[53]); MULADD(at[26], at[52]); MULADD(at[27], at[51]); MULADD(at[28], at[50]); MULADD(at[29], at[49]); MULADD(at[30], at[48]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[0], at[79]); MULADD(at[1], at[78]); MULADD(at[2], at[77]); MULADD(at[3], at[76]); MULADD(at[4], at[75]); MULADD(at[5], at[74]); MULADD(at[6], at[73]); MULADD(at[7], at[72]); MULADD(at[8], at[71]); MULADD(at[9], at[70]); MULADD(at[10], at[69]); MULADD(at[11], at[68]); MULADD(at[12], at[67]); MULADD(at[13], at[66]); MULADD(at[14], at[65]); MULADD(at[15], at[64]); MULADD(at[16], at[63]); MULADD(at[17], at[62]); MULADD(at[18], at[61]); MULADD(at[19], at[60]); MULADD(at[20], at[59]); MULADD(at[21], at[58]); MULADD(at[22], at[57]); MULADD(at[23], at[56]); MULADD(at[24], at[55]); MULADD(at[25], at[54]); MULADD(at[26], at[53]); MULADD(at[27], at[52]); MULADD(at[28], at[51]); MULADD(at[29], at[50]); MULADD(at[30], at[49]); MULADD(at[31], at[48]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[0], at[80]); MULADD(at[1], at[79]); MULADD(at[2], at[78]); MULADD(at[3], at[77]); MULADD(at[4], at[76]); MULADD(at[5], at[75]); MULADD(at[6], at[74]); MULADD(at[7], at[73]); MULADD(at[8], at[72]); MULADD(at[9], at[71]); MULADD(at[10], at[70]); MULADD(at[11], at[69]); MULADD(at[12], at[68]); MULADD(at[13], at[67]); MULADD(at[14], at[66]); MULADD(at[15], at[65]); MULADD(at[16], at[64]); MULADD(at[17], at[63]); MULADD(at[18], at[62]); MULADD(at[19], at[61]); MULADD(at[20], at[60]); MULADD(at[21], at[59]); MULADD(at[22], at[58]); MULADD(at[23], at[57]); MULADD(at[24], at[56]); MULADD(at[25], at[55]); MULADD(at[26], at[54]); MULADD(at[27], at[53]); MULADD(at[28], at[52]); MULADD(at[29], at[51]); MULADD(at[30], at[50]); MULADD(at[31], at[49]); MULADD(at[32], at[48]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[0], at[81]); MULADD(at[1], at[80]); MULADD(at[2], at[79]); MULADD(at[3], at[78]); MULADD(at[4], at[77]); MULADD(at[5], at[76]); MULADD(at[6], at[75]); MULADD(at[7], at[74]); MULADD(at[8], at[73]); MULADD(at[9], at[72]); MULADD(at[10], at[71]); MULADD(at[11], at[70]); MULADD(at[12], at[69]); MULADD(at[13], at[68]); MULADD(at[14], at[67]); MULADD(at[15], at[66]); MULADD(at[16], at[65]); MULADD(at[17], at[64]); MULADD(at[18], at[63]); MULADD(at[19], at[62]); MULADD(at[20], at[61]); MULADD(at[21], at[60]); MULADD(at[22], at[59]); MULADD(at[23], at[58]); MULADD(at[24], at[57]); MULADD(at[25], at[56]); MULADD(at[26], at[55]); MULADD(at[27], at[54]); MULADD(at[28], at[53]); MULADD(at[29], at[52]); MULADD(at[30], at[51]); MULADD(at[31], at[50]); MULADD(at[32], at[49]); MULADD(at[33], at[48]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[0], at[82]); MULADD(at[1], at[81]); MULADD(at[2], at[80]); MULADD(at[3], at[79]); MULADD(at[4], at[78]); MULADD(at[5], at[77]); MULADD(at[6], at[76]); MULADD(at[7], at[75]); MULADD(at[8], at[74]); MULADD(at[9], at[73]); MULADD(at[10], at[72]); MULADD(at[11], at[71]); MULADD(at[12], at[70]); MULADD(at[13], at[69]); MULADD(at[14], at[68]); MULADD(at[15], at[67]); MULADD(at[16], at[66]); MULADD(at[17], at[65]); MULADD(at[18], at[64]); MULADD(at[19], at[63]); MULADD(at[20], at[62]); MULADD(at[21], at[61]); MULADD(at[22], at[60]); MULADD(at[23], at[59]); MULADD(at[24], at[58]); MULADD(at[25], at[57]); MULADD(at[26], at[56]); MULADD(at[27], at[55]); MULADD(at[28], at[54]); MULADD(at[29], at[53]); MULADD(at[30], at[52]); MULADD(at[31], at[51]); MULADD(at[32], at[50]); MULADD(at[33], at[49]); MULADD(at[34], at[48]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[0], at[83]); MULADD(at[1], at[82]); MULADD(at[2], at[81]); MULADD(at[3], at[80]); MULADD(at[4], at[79]); MULADD(at[5], at[78]); MULADD(at[6], at[77]); MULADD(at[7], at[76]); MULADD(at[8], at[75]); MULADD(at[9], at[74]); MULADD(at[10], at[73]); MULADD(at[11], at[72]); MULADD(at[12], at[71]); MULADD(at[13], at[70]); MULADD(at[14], at[69]); MULADD(at[15], at[68]); MULADD(at[16], at[67]); MULADD(at[17], at[66]); MULADD(at[18], at[65]); MULADD(at[19], at[64]); MULADD(at[20], at[63]); MULADD(at[21], at[62]); MULADD(at[22], at[61]); MULADD(at[23], at[60]); MULADD(at[24], at[59]); MULADD(at[25], at[58]); MULADD(at[26], at[57]); MULADD(at[27], at[56]); MULADD(at[28], at[55]); MULADD(at[29], at[54]); MULADD(at[30], at[53]); MULADD(at[31], at[52]); MULADD(at[32], at[51]); MULADD(at[33], at[50]); MULADD(at[34], at[49]); MULADD(at[35], at[48]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[0], at[84]); MULADD(at[1], at[83]); MULADD(at[2], at[82]); MULADD(at[3], at[81]); MULADD(at[4], at[80]); MULADD(at[5], at[79]); MULADD(at[6], at[78]); MULADD(at[7], at[77]); MULADD(at[8], at[76]); MULADD(at[9], at[75]); MULADD(at[10], at[74]); MULADD(at[11], at[73]); MULADD(at[12], at[72]); MULADD(at[13], at[71]); MULADD(at[14], at[70]); MULADD(at[15], at[69]); MULADD(at[16], at[68]); MULADD(at[17], at[67]); MULADD(at[18], at[66]); MULADD(at[19], at[65]); MULADD(at[20], at[64]); MULADD(at[21], at[63]); MULADD(at[22], at[62]); MULADD(at[23], at[61]); MULADD(at[24], at[60]); MULADD(at[25], at[59]); MULADD(at[26], at[58]); MULADD(at[27], at[57]); MULADD(at[28], at[56]); MULADD(at[29], at[55]); MULADD(at[30], at[54]); MULADD(at[31], at[53]); MULADD(at[32], at[52]); MULADD(at[33], at[51]); MULADD(at[34], at[50]); MULADD(at[35], at[49]); MULADD(at[36], at[48]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[0], at[85]); MULADD(at[1], at[84]); MULADD(at[2], at[83]); MULADD(at[3], at[82]); MULADD(at[4], at[81]); MULADD(at[5], at[80]); MULADD(at[6], at[79]); MULADD(at[7], at[78]); MULADD(at[8], at[77]); MULADD(at[9], at[76]); MULADD(at[10], at[75]); MULADD(at[11], at[74]); MULADD(at[12], at[73]); MULADD(at[13], at[72]); MULADD(at[14], at[71]); MULADD(at[15], at[70]); MULADD(at[16], at[69]); MULADD(at[17], at[68]); MULADD(at[18], at[67]); MULADD(at[19], at[66]); MULADD(at[20], at[65]); MULADD(at[21], at[64]); MULADD(at[22], at[63]); MULADD(at[23], at[62]); MULADD(at[24], at[61]); MULADD(at[25], at[60]); MULADD(at[26], at[59]); MULADD(at[27], at[58]); MULADD(at[28], at[57]); MULADD(at[29], at[56]); MULADD(at[30], at[55]); MULADD(at[31], at[54]); MULADD(at[32], at[53]); MULADD(at[33], at[52]); MULADD(at[34], at[51]); MULADD(at[35], at[50]); MULADD(at[36], at[49]); MULADD(at[37], at[48]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[0], at[86]); MULADD(at[1], at[85]); MULADD(at[2], at[84]); MULADD(at[3], at[83]); MULADD(at[4], at[82]); MULADD(at[5], at[81]); MULADD(at[6], at[80]); MULADD(at[7], at[79]); MULADD(at[8], at[78]); MULADD(at[9], at[77]); MULADD(at[10], at[76]); MULADD(at[11], at[75]); MULADD(at[12], at[74]); MULADD(at[13], at[73]); MULADD(at[14], at[72]); MULADD(at[15], at[71]); MULADD(at[16], at[70]); MULADD(at[17], at[69]); MULADD(at[18], at[68]); MULADD(at[19], at[67]); MULADD(at[20], at[66]); MULADD(at[21], at[65]); MULADD(at[22], at[64]); MULADD(at[23], at[63]); MULADD(at[24], at[62]); MULADD(at[25], at[61]); MULADD(at[26], at[60]); MULADD(at[27], at[59]); MULADD(at[28], at[58]); MULADD(at[29], at[57]); MULADD(at[30], at[56]); MULADD(at[31], at[55]); MULADD(at[32], at[54]); MULADD(at[33], at[53]); MULADD(at[34], at[52]); MULADD(at[35], at[51]); MULADD(at[36], at[50]); MULADD(at[37], at[49]); MULADD(at[38], at[48]); - COMBA_STORE(C->dp[38]); - /* 39 */ - COMBA_FORWARD; - MULADD(at[0], at[87]); MULADD(at[1], at[86]); MULADD(at[2], at[85]); MULADD(at[3], at[84]); MULADD(at[4], at[83]); MULADD(at[5], at[82]); MULADD(at[6], at[81]); MULADD(at[7], at[80]); MULADD(at[8], at[79]); MULADD(at[9], at[78]); MULADD(at[10], at[77]); MULADD(at[11], at[76]); MULADD(at[12], at[75]); MULADD(at[13], at[74]); MULADD(at[14], at[73]); MULADD(at[15], at[72]); MULADD(at[16], at[71]); MULADD(at[17], at[70]); MULADD(at[18], at[69]); MULADD(at[19], at[68]); MULADD(at[20], at[67]); MULADD(at[21], at[66]); MULADD(at[22], at[65]); MULADD(at[23], at[64]); MULADD(at[24], at[63]); MULADD(at[25], at[62]); MULADD(at[26], at[61]); MULADD(at[27], at[60]); MULADD(at[28], at[59]); MULADD(at[29], at[58]); MULADD(at[30], at[57]); MULADD(at[31], at[56]); MULADD(at[32], at[55]); MULADD(at[33], at[54]); MULADD(at[34], at[53]); MULADD(at[35], at[52]); MULADD(at[36], at[51]); MULADD(at[37], at[50]); MULADD(at[38], at[49]); MULADD(at[39], at[48]); - COMBA_STORE(C->dp[39]); - /* 40 */ - COMBA_FORWARD; - MULADD(at[0], at[88]); MULADD(at[1], at[87]); MULADD(at[2], at[86]); MULADD(at[3], at[85]); MULADD(at[4], at[84]); MULADD(at[5], at[83]); MULADD(at[6], at[82]); MULADD(at[7], at[81]); MULADD(at[8], at[80]); MULADD(at[9], at[79]); MULADD(at[10], at[78]); MULADD(at[11], at[77]); MULADD(at[12], at[76]); MULADD(at[13], at[75]); MULADD(at[14], at[74]); MULADD(at[15], at[73]); MULADD(at[16], at[72]); MULADD(at[17], at[71]); MULADD(at[18], at[70]); MULADD(at[19], at[69]); MULADD(at[20], at[68]); MULADD(at[21], at[67]); MULADD(at[22], at[66]); MULADD(at[23], at[65]); MULADD(at[24], at[64]); MULADD(at[25], at[63]); MULADD(at[26], at[62]); MULADD(at[27], at[61]); MULADD(at[28], at[60]); MULADD(at[29], at[59]); MULADD(at[30], at[58]); MULADD(at[31], at[57]); MULADD(at[32], at[56]); MULADD(at[33], at[55]); MULADD(at[34], at[54]); MULADD(at[35], at[53]); MULADD(at[36], at[52]); MULADD(at[37], at[51]); MULADD(at[38], at[50]); MULADD(at[39], at[49]); MULADD(at[40], at[48]); - COMBA_STORE(C->dp[40]); - /* 41 */ - COMBA_FORWARD; - MULADD(at[0], at[89]); MULADD(at[1], at[88]); MULADD(at[2], at[87]); MULADD(at[3], at[86]); MULADD(at[4], at[85]); MULADD(at[5], at[84]); MULADD(at[6], at[83]); MULADD(at[7], at[82]); MULADD(at[8], at[81]); MULADD(at[9], at[80]); MULADD(at[10], at[79]); MULADD(at[11], at[78]); MULADD(at[12], at[77]); MULADD(at[13], at[76]); MULADD(at[14], at[75]); MULADD(at[15], at[74]); MULADD(at[16], at[73]); MULADD(at[17], at[72]); MULADD(at[18], at[71]); MULADD(at[19], at[70]); MULADD(at[20], at[69]); MULADD(at[21], at[68]); MULADD(at[22], at[67]); MULADD(at[23], at[66]); MULADD(at[24], at[65]); MULADD(at[25], at[64]); MULADD(at[26], at[63]); MULADD(at[27], at[62]); MULADD(at[28], at[61]); MULADD(at[29], at[60]); MULADD(at[30], at[59]); MULADD(at[31], at[58]); MULADD(at[32], at[57]); MULADD(at[33], at[56]); MULADD(at[34], at[55]); MULADD(at[35], at[54]); MULADD(at[36], at[53]); MULADD(at[37], at[52]); MULADD(at[38], at[51]); MULADD(at[39], at[50]); MULADD(at[40], at[49]); MULADD(at[41], at[48]); - COMBA_STORE(C->dp[41]); - /* 42 */ - COMBA_FORWARD; - MULADD(at[0], at[90]); MULADD(at[1], at[89]); MULADD(at[2], at[88]); MULADD(at[3], at[87]); MULADD(at[4], at[86]); MULADD(at[5], at[85]); MULADD(at[6], at[84]); MULADD(at[7], at[83]); MULADD(at[8], at[82]); MULADD(at[9], at[81]); MULADD(at[10], at[80]); MULADD(at[11], at[79]); MULADD(at[12], at[78]); MULADD(at[13], at[77]); MULADD(at[14], at[76]); MULADD(at[15], at[75]); MULADD(at[16], at[74]); MULADD(at[17], at[73]); MULADD(at[18], at[72]); MULADD(at[19], at[71]); MULADD(at[20], at[70]); MULADD(at[21], at[69]); MULADD(at[22], at[68]); MULADD(at[23], at[67]); MULADD(at[24], at[66]); MULADD(at[25], at[65]); MULADD(at[26], at[64]); MULADD(at[27], at[63]); MULADD(at[28], at[62]); MULADD(at[29], at[61]); MULADD(at[30], at[60]); MULADD(at[31], at[59]); MULADD(at[32], at[58]); MULADD(at[33], at[57]); MULADD(at[34], at[56]); MULADD(at[35], at[55]); MULADD(at[36], at[54]); MULADD(at[37], at[53]); MULADD(at[38], at[52]); MULADD(at[39], at[51]); MULADD(at[40], at[50]); MULADD(at[41], at[49]); MULADD(at[42], at[48]); - COMBA_STORE(C->dp[42]); - /* 43 */ - COMBA_FORWARD; - MULADD(at[0], at[91]); MULADD(at[1], at[90]); MULADD(at[2], at[89]); MULADD(at[3], at[88]); MULADD(at[4], at[87]); MULADD(at[5], at[86]); MULADD(at[6], at[85]); MULADD(at[7], at[84]); MULADD(at[8], at[83]); MULADD(at[9], at[82]); MULADD(at[10], at[81]); MULADD(at[11], at[80]); MULADD(at[12], at[79]); MULADD(at[13], at[78]); MULADD(at[14], at[77]); MULADD(at[15], at[76]); MULADD(at[16], at[75]); MULADD(at[17], at[74]); MULADD(at[18], at[73]); MULADD(at[19], at[72]); MULADD(at[20], at[71]); MULADD(at[21], at[70]); MULADD(at[22], at[69]); MULADD(at[23], at[68]); MULADD(at[24], at[67]); MULADD(at[25], at[66]); MULADD(at[26], at[65]); MULADD(at[27], at[64]); MULADD(at[28], at[63]); MULADD(at[29], at[62]); MULADD(at[30], at[61]); MULADD(at[31], at[60]); MULADD(at[32], at[59]); MULADD(at[33], at[58]); MULADD(at[34], at[57]); MULADD(at[35], at[56]); MULADD(at[36], at[55]); MULADD(at[37], at[54]); MULADD(at[38], at[53]); MULADD(at[39], at[52]); MULADD(at[40], at[51]); MULADD(at[41], at[50]); MULADD(at[42], at[49]); MULADD(at[43], at[48]); - COMBA_STORE(C->dp[43]); - /* 44 */ - COMBA_FORWARD; - MULADD(at[0], at[92]); MULADD(at[1], at[91]); MULADD(at[2], at[90]); MULADD(at[3], at[89]); MULADD(at[4], at[88]); MULADD(at[5], at[87]); MULADD(at[6], at[86]); MULADD(at[7], at[85]); MULADD(at[8], at[84]); MULADD(at[9], at[83]); MULADD(at[10], at[82]); MULADD(at[11], at[81]); MULADD(at[12], at[80]); MULADD(at[13], at[79]); MULADD(at[14], at[78]); MULADD(at[15], at[77]); MULADD(at[16], at[76]); MULADD(at[17], at[75]); MULADD(at[18], at[74]); MULADD(at[19], at[73]); MULADD(at[20], at[72]); MULADD(at[21], at[71]); MULADD(at[22], at[70]); MULADD(at[23], at[69]); MULADD(at[24], at[68]); MULADD(at[25], at[67]); MULADD(at[26], at[66]); MULADD(at[27], at[65]); MULADD(at[28], at[64]); MULADD(at[29], at[63]); MULADD(at[30], at[62]); MULADD(at[31], at[61]); MULADD(at[32], at[60]); MULADD(at[33], at[59]); MULADD(at[34], at[58]); MULADD(at[35], at[57]); MULADD(at[36], at[56]); MULADD(at[37], at[55]); MULADD(at[38], at[54]); MULADD(at[39], at[53]); MULADD(at[40], at[52]); MULADD(at[41], at[51]); MULADD(at[42], at[50]); MULADD(at[43], at[49]); MULADD(at[44], at[48]); - COMBA_STORE(C->dp[44]); - /* 45 */ - COMBA_FORWARD; - MULADD(at[0], at[93]); MULADD(at[1], at[92]); MULADD(at[2], at[91]); MULADD(at[3], at[90]); MULADD(at[4], at[89]); MULADD(at[5], at[88]); MULADD(at[6], at[87]); MULADD(at[7], at[86]); MULADD(at[8], at[85]); MULADD(at[9], at[84]); MULADD(at[10], at[83]); MULADD(at[11], at[82]); MULADD(at[12], at[81]); MULADD(at[13], at[80]); MULADD(at[14], at[79]); MULADD(at[15], at[78]); MULADD(at[16], at[77]); MULADD(at[17], at[76]); MULADD(at[18], at[75]); MULADD(at[19], at[74]); MULADD(at[20], at[73]); MULADD(at[21], at[72]); MULADD(at[22], at[71]); MULADD(at[23], at[70]); MULADD(at[24], at[69]); MULADD(at[25], at[68]); MULADD(at[26], at[67]); MULADD(at[27], at[66]); MULADD(at[28], at[65]); MULADD(at[29], at[64]); MULADD(at[30], at[63]); MULADD(at[31], at[62]); MULADD(at[32], at[61]); MULADD(at[33], at[60]); MULADD(at[34], at[59]); MULADD(at[35], at[58]); MULADD(at[36], at[57]); MULADD(at[37], at[56]); MULADD(at[38], at[55]); MULADD(at[39], at[54]); MULADD(at[40], at[53]); MULADD(at[41], at[52]); MULADD(at[42], at[51]); MULADD(at[43], at[50]); MULADD(at[44], at[49]); MULADD(at[45], at[48]); - COMBA_STORE(C->dp[45]); - /* 46 */ - COMBA_FORWARD; - MULADD(at[0], at[94]); MULADD(at[1], at[93]); MULADD(at[2], at[92]); MULADD(at[3], at[91]); MULADD(at[4], at[90]); MULADD(at[5], at[89]); MULADD(at[6], at[88]); MULADD(at[7], at[87]); MULADD(at[8], at[86]); MULADD(at[9], at[85]); MULADD(at[10], at[84]); MULADD(at[11], at[83]); MULADD(at[12], at[82]); MULADD(at[13], at[81]); MULADD(at[14], at[80]); MULADD(at[15], at[79]); MULADD(at[16], at[78]); MULADD(at[17], at[77]); MULADD(at[18], at[76]); MULADD(at[19], at[75]); MULADD(at[20], at[74]); MULADD(at[21], at[73]); MULADD(at[22], at[72]); MULADD(at[23], at[71]); MULADD(at[24], at[70]); MULADD(at[25], at[69]); MULADD(at[26], at[68]); MULADD(at[27], at[67]); MULADD(at[28], at[66]); MULADD(at[29], at[65]); MULADD(at[30], at[64]); MULADD(at[31], at[63]); MULADD(at[32], at[62]); MULADD(at[33], at[61]); MULADD(at[34], at[60]); MULADD(at[35], at[59]); MULADD(at[36], at[58]); MULADD(at[37], at[57]); MULADD(at[38], at[56]); MULADD(at[39], at[55]); MULADD(at[40], at[54]); MULADD(at[41], at[53]); MULADD(at[42], at[52]); MULADD(at[43], at[51]); MULADD(at[44], at[50]); MULADD(at[45], at[49]); MULADD(at[46], at[48]); - COMBA_STORE(C->dp[46]); - /* 47 */ - COMBA_FORWARD; - MULADD(at[0], at[95]); MULADD(at[1], at[94]); MULADD(at[2], at[93]); MULADD(at[3], at[92]); MULADD(at[4], at[91]); MULADD(at[5], at[90]); MULADD(at[6], at[89]); MULADD(at[7], at[88]); MULADD(at[8], at[87]); MULADD(at[9], at[86]); MULADD(at[10], at[85]); MULADD(at[11], at[84]); MULADD(at[12], at[83]); MULADD(at[13], at[82]); MULADD(at[14], at[81]); MULADD(at[15], at[80]); MULADD(at[16], at[79]); MULADD(at[17], at[78]); MULADD(at[18], at[77]); MULADD(at[19], at[76]); MULADD(at[20], at[75]); MULADD(at[21], at[74]); MULADD(at[22], at[73]); MULADD(at[23], at[72]); MULADD(at[24], at[71]); MULADD(at[25], at[70]); MULADD(at[26], at[69]); MULADD(at[27], at[68]); MULADD(at[28], at[67]); MULADD(at[29], at[66]); MULADD(at[30], at[65]); MULADD(at[31], at[64]); MULADD(at[32], at[63]); MULADD(at[33], at[62]); MULADD(at[34], at[61]); MULADD(at[35], at[60]); MULADD(at[36], at[59]); MULADD(at[37], at[58]); MULADD(at[38], at[57]); MULADD(at[39], at[56]); MULADD(at[40], at[55]); MULADD(at[41], at[54]); MULADD(at[42], at[53]); MULADD(at[43], at[52]); MULADD(at[44], at[51]); MULADD(at[45], at[50]); MULADD(at[46], at[49]); MULADD(at[47], at[48]); - COMBA_STORE(C->dp[47]); - /* 48 */ - COMBA_FORWARD; - MULADD(at[1], at[95]); MULADD(at[2], at[94]); MULADD(at[3], at[93]); MULADD(at[4], at[92]); MULADD(at[5], at[91]); MULADD(at[6], at[90]); MULADD(at[7], at[89]); MULADD(at[8], at[88]); MULADD(at[9], at[87]); MULADD(at[10], at[86]); MULADD(at[11], at[85]); MULADD(at[12], at[84]); MULADD(at[13], at[83]); MULADD(at[14], at[82]); MULADD(at[15], at[81]); MULADD(at[16], at[80]); MULADD(at[17], at[79]); MULADD(at[18], at[78]); MULADD(at[19], at[77]); MULADD(at[20], at[76]); MULADD(at[21], at[75]); MULADD(at[22], at[74]); MULADD(at[23], at[73]); MULADD(at[24], at[72]); MULADD(at[25], at[71]); MULADD(at[26], at[70]); MULADD(at[27], at[69]); MULADD(at[28], at[68]); MULADD(at[29], at[67]); MULADD(at[30], at[66]); MULADD(at[31], at[65]); MULADD(at[32], at[64]); MULADD(at[33], at[63]); MULADD(at[34], at[62]); MULADD(at[35], at[61]); MULADD(at[36], at[60]); MULADD(at[37], at[59]); MULADD(at[38], at[58]); MULADD(at[39], at[57]); MULADD(at[40], at[56]); MULADD(at[41], at[55]); MULADD(at[42], at[54]); MULADD(at[43], at[53]); MULADD(at[44], at[52]); MULADD(at[45], at[51]); MULADD(at[46], at[50]); MULADD(at[47], at[49]); - COMBA_STORE(C->dp[48]); - /* 49 */ - COMBA_FORWARD; - MULADD(at[2], at[95]); MULADD(at[3], at[94]); MULADD(at[4], at[93]); MULADD(at[5], at[92]); MULADD(at[6], at[91]); MULADD(at[7], at[90]); MULADD(at[8], at[89]); MULADD(at[9], at[88]); MULADD(at[10], at[87]); MULADD(at[11], at[86]); MULADD(at[12], at[85]); MULADD(at[13], at[84]); MULADD(at[14], at[83]); MULADD(at[15], at[82]); MULADD(at[16], at[81]); MULADD(at[17], at[80]); MULADD(at[18], at[79]); MULADD(at[19], at[78]); MULADD(at[20], at[77]); MULADD(at[21], at[76]); MULADD(at[22], at[75]); MULADD(at[23], at[74]); MULADD(at[24], at[73]); MULADD(at[25], at[72]); MULADD(at[26], at[71]); MULADD(at[27], at[70]); MULADD(at[28], at[69]); MULADD(at[29], at[68]); MULADD(at[30], at[67]); MULADD(at[31], at[66]); MULADD(at[32], at[65]); MULADD(at[33], at[64]); MULADD(at[34], at[63]); MULADD(at[35], at[62]); MULADD(at[36], at[61]); MULADD(at[37], at[60]); MULADD(at[38], at[59]); MULADD(at[39], at[58]); MULADD(at[40], at[57]); MULADD(at[41], at[56]); MULADD(at[42], at[55]); MULADD(at[43], at[54]); MULADD(at[44], at[53]); MULADD(at[45], at[52]); MULADD(at[46], at[51]); MULADD(at[47], at[50]); - COMBA_STORE(C->dp[49]); - /* 50 */ - COMBA_FORWARD; - MULADD(at[3], at[95]); MULADD(at[4], at[94]); MULADD(at[5], at[93]); MULADD(at[6], at[92]); MULADD(at[7], at[91]); MULADD(at[8], at[90]); MULADD(at[9], at[89]); MULADD(at[10], at[88]); MULADD(at[11], at[87]); MULADD(at[12], at[86]); MULADD(at[13], at[85]); MULADD(at[14], at[84]); MULADD(at[15], at[83]); MULADD(at[16], at[82]); MULADD(at[17], at[81]); MULADD(at[18], at[80]); MULADD(at[19], at[79]); MULADD(at[20], at[78]); MULADD(at[21], at[77]); MULADD(at[22], at[76]); MULADD(at[23], at[75]); MULADD(at[24], at[74]); MULADD(at[25], at[73]); MULADD(at[26], at[72]); MULADD(at[27], at[71]); MULADD(at[28], at[70]); MULADD(at[29], at[69]); MULADD(at[30], at[68]); MULADD(at[31], at[67]); MULADD(at[32], at[66]); MULADD(at[33], at[65]); MULADD(at[34], at[64]); MULADD(at[35], at[63]); MULADD(at[36], at[62]); MULADD(at[37], at[61]); MULADD(at[38], at[60]); MULADD(at[39], at[59]); MULADD(at[40], at[58]); MULADD(at[41], at[57]); MULADD(at[42], at[56]); MULADD(at[43], at[55]); MULADD(at[44], at[54]); MULADD(at[45], at[53]); MULADD(at[46], at[52]); MULADD(at[47], at[51]); - COMBA_STORE(C->dp[50]); - /* 51 */ - COMBA_FORWARD; - MULADD(at[4], at[95]); MULADD(at[5], at[94]); MULADD(at[6], at[93]); MULADD(at[7], at[92]); MULADD(at[8], at[91]); MULADD(at[9], at[90]); MULADD(at[10], at[89]); MULADD(at[11], at[88]); MULADD(at[12], at[87]); MULADD(at[13], at[86]); MULADD(at[14], at[85]); MULADD(at[15], at[84]); MULADD(at[16], at[83]); MULADD(at[17], at[82]); MULADD(at[18], at[81]); MULADD(at[19], at[80]); MULADD(at[20], at[79]); MULADD(at[21], at[78]); MULADD(at[22], at[77]); MULADD(at[23], at[76]); MULADD(at[24], at[75]); MULADD(at[25], at[74]); MULADD(at[26], at[73]); MULADD(at[27], at[72]); MULADD(at[28], at[71]); MULADD(at[29], at[70]); MULADD(at[30], at[69]); MULADD(at[31], at[68]); MULADD(at[32], at[67]); MULADD(at[33], at[66]); MULADD(at[34], at[65]); MULADD(at[35], at[64]); MULADD(at[36], at[63]); MULADD(at[37], at[62]); MULADD(at[38], at[61]); MULADD(at[39], at[60]); MULADD(at[40], at[59]); MULADD(at[41], at[58]); MULADD(at[42], at[57]); MULADD(at[43], at[56]); MULADD(at[44], at[55]); MULADD(at[45], at[54]); MULADD(at[46], at[53]); MULADD(at[47], at[52]); - COMBA_STORE(C->dp[51]); - /* 52 */ - COMBA_FORWARD; - MULADD(at[5], at[95]); MULADD(at[6], at[94]); MULADD(at[7], at[93]); MULADD(at[8], at[92]); MULADD(at[9], at[91]); MULADD(at[10], at[90]); MULADD(at[11], at[89]); MULADD(at[12], at[88]); MULADD(at[13], at[87]); MULADD(at[14], at[86]); MULADD(at[15], at[85]); MULADD(at[16], at[84]); MULADD(at[17], at[83]); MULADD(at[18], at[82]); MULADD(at[19], at[81]); MULADD(at[20], at[80]); MULADD(at[21], at[79]); MULADD(at[22], at[78]); MULADD(at[23], at[77]); MULADD(at[24], at[76]); MULADD(at[25], at[75]); MULADD(at[26], at[74]); MULADD(at[27], at[73]); MULADD(at[28], at[72]); MULADD(at[29], at[71]); MULADD(at[30], at[70]); MULADD(at[31], at[69]); MULADD(at[32], at[68]); MULADD(at[33], at[67]); MULADD(at[34], at[66]); MULADD(at[35], at[65]); MULADD(at[36], at[64]); MULADD(at[37], at[63]); MULADD(at[38], at[62]); MULADD(at[39], at[61]); MULADD(at[40], at[60]); MULADD(at[41], at[59]); MULADD(at[42], at[58]); MULADD(at[43], at[57]); MULADD(at[44], at[56]); MULADD(at[45], at[55]); MULADD(at[46], at[54]); MULADD(at[47], at[53]); - COMBA_STORE(C->dp[52]); - /* 53 */ - COMBA_FORWARD; - MULADD(at[6], at[95]); MULADD(at[7], at[94]); MULADD(at[8], at[93]); MULADD(at[9], at[92]); MULADD(at[10], at[91]); MULADD(at[11], at[90]); MULADD(at[12], at[89]); MULADD(at[13], at[88]); MULADD(at[14], at[87]); MULADD(at[15], at[86]); MULADD(at[16], at[85]); MULADD(at[17], at[84]); MULADD(at[18], at[83]); MULADD(at[19], at[82]); MULADD(at[20], at[81]); MULADD(at[21], at[80]); MULADD(at[22], at[79]); MULADD(at[23], at[78]); MULADD(at[24], at[77]); MULADD(at[25], at[76]); MULADD(at[26], at[75]); MULADD(at[27], at[74]); MULADD(at[28], at[73]); MULADD(at[29], at[72]); MULADD(at[30], at[71]); MULADD(at[31], at[70]); MULADD(at[32], at[69]); MULADD(at[33], at[68]); MULADD(at[34], at[67]); MULADD(at[35], at[66]); MULADD(at[36], at[65]); MULADD(at[37], at[64]); MULADD(at[38], at[63]); MULADD(at[39], at[62]); MULADD(at[40], at[61]); MULADD(at[41], at[60]); MULADD(at[42], at[59]); MULADD(at[43], at[58]); MULADD(at[44], at[57]); MULADD(at[45], at[56]); MULADD(at[46], at[55]); MULADD(at[47], at[54]); - COMBA_STORE(C->dp[53]); - /* 54 */ - COMBA_FORWARD; - MULADD(at[7], at[95]); MULADD(at[8], at[94]); MULADD(at[9], at[93]); MULADD(at[10], at[92]); MULADD(at[11], at[91]); MULADD(at[12], at[90]); MULADD(at[13], at[89]); MULADD(at[14], at[88]); MULADD(at[15], at[87]); MULADD(at[16], at[86]); MULADD(at[17], at[85]); MULADD(at[18], at[84]); MULADD(at[19], at[83]); MULADD(at[20], at[82]); MULADD(at[21], at[81]); MULADD(at[22], at[80]); MULADD(at[23], at[79]); MULADD(at[24], at[78]); MULADD(at[25], at[77]); MULADD(at[26], at[76]); MULADD(at[27], at[75]); MULADD(at[28], at[74]); MULADD(at[29], at[73]); MULADD(at[30], at[72]); MULADD(at[31], at[71]); MULADD(at[32], at[70]); MULADD(at[33], at[69]); MULADD(at[34], at[68]); MULADD(at[35], at[67]); MULADD(at[36], at[66]); MULADD(at[37], at[65]); MULADD(at[38], at[64]); MULADD(at[39], at[63]); MULADD(at[40], at[62]); MULADD(at[41], at[61]); MULADD(at[42], at[60]); MULADD(at[43], at[59]); MULADD(at[44], at[58]); MULADD(at[45], at[57]); MULADD(at[46], at[56]); MULADD(at[47], at[55]); - COMBA_STORE(C->dp[54]); - /* 55 */ - COMBA_FORWARD; - MULADD(at[8], at[95]); MULADD(at[9], at[94]); MULADD(at[10], at[93]); MULADD(at[11], at[92]); MULADD(at[12], at[91]); MULADD(at[13], at[90]); MULADD(at[14], at[89]); MULADD(at[15], at[88]); MULADD(at[16], at[87]); MULADD(at[17], at[86]); MULADD(at[18], at[85]); MULADD(at[19], at[84]); MULADD(at[20], at[83]); MULADD(at[21], at[82]); MULADD(at[22], at[81]); MULADD(at[23], at[80]); MULADD(at[24], at[79]); MULADD(at[25], at[78]); MULADD(at[26], at[77]); MULADD(at[27], at[76]); MULADD(at[28], at[75]); MULADD(at[29], at[74]); MULADD(at[30], at[73]); MULADD(at[31], at[72]); MULADD(at[32], at[71]); MULADD(at[33], at[70]); MULADD(at[34], at[69]); MULADD(at[35], at[68]); MULADD(at[36], at[67]); MULADD(at[37], at[66]); MULADD(at[38], at[65]); MULADD(at[39], at[64]); MULADD(at[40], at[63]); MULADD(at[41], at[62]); MULADD(at[42], at[61]); MULADD(at[43], at[60]); MULADD(at[44], at[59]); MULADD(at[45], at[58]); MULADD(at[46], at[57]); MULADD(at[47], at[56]); - COMBA_STORE(C->dp[55]); - /* 56 */ - COMBA_FORWARD; - MULADD(at[9], at[95]); MULADD(at[10], at[94]); MULADD(at[11], at[93]); MULADD(at[12], at[92]); MULADD(at[13], at[91]); MULADD(at[14], at[90]); MULADD(at[15], at[89]); MULADD(at[16], at[88]); MULADD(at[17], at[87]); MULADD(at[18], at[86]); MULADD(at[19], at[85]); MULADD(at[20], at[84]); MULADD(at[21], at[83]); MULADD(at[22], at[82]); MULADD(at[23], at[81]); MULADD(at[24], at[80]); MULADD(at[25], at[79]); MULADD(at[26], at[78]); MULADD(at[27], at[77]); MULADD(at[28], at[76]); MULADD(at[29], at[75]); MULADD(at[30], at[74]); MULADD(at[31], at[73]); MULADD(at[32], at[72]); MULADD(at[33], at[71]); MULADD(at[34], at[70]); MULADD(at[35], at[69]); MULADD(at[36], at[68]); MULADD(at[37], at[67]); MULADD(at[38], at[66]); MULADD(at[39], at[65]); MULADD(at[40], at[64]); MULADD(at[41], at[63]); MULADD(at[42], at[62]); MULADD(at[43], at[61]); MULADD(at[44], at[60]); MULADD(at[45], at[59]); MULADD(at[46], at[58]); MULADD(at[47], at[57]); - COMBA_STORE(C->dp[56]); - /* 57 */ - COMBA_FORWARD; - MULADD(at[10], at[95]); MULADD(at[11], at[94]); MULADD(at[12], at[93]); MULADD(at[13], at[92]); MULADD(at[14], at[91]); MULADD(at[15], at[90]); MULADD(at[16], at[89]); MULADD(at[17], at[88]); MULADD(at[18], at[87]); MULADD(at[19], at[86]); MULADD(at[20], at[85]); MULADD(at[21], at[84]); MULADD(at[22], at[83]); MULADD(at[23], at[82]); MULADD(at[24], at[81]); MULADD(at[25], at[80]); MULADD(at[26], at[79]); MULADD(at[27], at[78]); MULADD(at[28], at[77]); MULADD(at[29], at[76]); MULADD(at[30], at[75]); MULADD(at[31], at[74]); MULADD(at[32], at[73]); MULADD(at[33], at[72]); MULADD(at[34], at[71]); MULADD(at[35], at[70]); MULADD(at[36], at[69]); MULADD(at[37], at[68]); MULADD(at[38], at[67]); MULADD(at[39], at[66]); MULADD(at[40], at[65]); MULADD(at[41], at[64]); MULADD(at[42], at[63]); MULADD(at[43], at[62]); MULADD(at[44], at[61]); MULADD(at[45], at[60]); MULADD(at[46], at[59]); MULADD(at[47], at[58]); - COMBA_STORE(C->dp[57]); - /* 58 */ - COMBA_FORWARD; - MULADD(at[11], at[95]); MULADD(at[12], at[94]); MULADD(at[13], at[93]); MULADD(at[14], at[92]); MULADD(at[15], at[91]); MULADD(at[16], at[90]); MULADD(at[17], at[89]); MULADD(at[18], at[88]); MULADD(at[19], at[87]); MULADD(at[20], at[86]); MULADD(at[21], at[85]); MULADD(at[22], at[84]); MULADD(at[23], at[83]); MULADD(at[24], at[82]); MULADD(at[25], at[81]); MULADD(at[26], at[80]); MULADD(at[27], at[79]); MULADD(at[28], at[78]); MULADD(at[29], at[77]); MULADD(at[30], at[76]); MULADD(at[31], at[75]); MULADD(at[32], at[74]); MULADD(at[33], at[73]); MULADD(at[34], at[72]); MULADD(at[35], at[71]); MULADD(at[36], at[70]); MULADD(at[37], at[69]); MULADD(at[38], at[68]); MULADD(at[39], at[67]); MULADD(at[40], at[66]); MULADD(at[41], at[65]); MULADD(at[42], at[64]); MULADD(at[43], at[63]); MULADD(at[44], at[62]); MULADD(at[45], at[61]); MULADD(at[46], at[60]); MULADD(at[47], at[59]); - COMBA_STORE(C->dp[58]); - /* 59 */ - COMBA_FORWARD; - MULADD(at[12], at[95]); MULADD(at[13], at[94]); MULADD(at[14], at[93]); MULADD(at[15], at[92]); MULADD(at[16], at[91]); MULADD(at[17], at[90]); MULADD(at[18], at[89]); MULADD(at[19], at[88]); MULADD(at[20], at[87]); MULADD(at[21], at[86]); MULADD(at[22], at[85]); MULADD(at[23], at[84]); MULADD(at[24], at[83]); MULADD(at[25], at[82]); MULADD(at[26], at[81]); MULADD(at[27], at[80]); MULADD(at[28], at[79]); MULADD(at[29], at[78]); MULADD(at[30], at[77]); MULADD(at[31], at[76]); MULADD(at[32], at[75]); MULADD(at[33], at[74]); MULADD(at[34], at[73]); MULADD(at[35], at[72]); MULADD(at[36], at[71]); MULADD(at[37], at[70]); MULADD(at[38], at[69]); MULADD(at[39], at[68]); MULADD(at[40], at[67]); MULADD(at[41], at[66]); MULADD(at[42], at[65]); MULADD(at[43], at[64]); MULADD(at[44], at[63]); MULADD(at[45], at[62]); MULADD(at[46], at[61]); MULADD(at[47], at[60]); - COMBA_STORE(C->dp[59]); - /* 60 */ - COMBA_FORWARD; - MULADD(at[13], at[95]); MULADD(at[14], at[94]); MULADD(at[15], at[93]); MULADD(at[16], at[92]); MULADD(at[17], at[91]); MULADD(at[18], at[90]); MULADD(at[19], at[89]); MULADD(at[20], at[88]); MULADD(at[21], at[87]); MULADD(at[22], at[86]); MULADD(at[23], at[85]); MULADD(at[24], at[84]); MULADD(at[25], at[83]); MULADD(at[26], at[82]); MULADD(at[27], at[81]); MULADD(at[28], at[80]); MULADD(at[29], at[79]); MULADD(at[30], at[78]); MULADD(at[31], at[77]); MULADD(at[32], at[76]); MULADD(at[33], at[75]); MULADD(at[34], at[74]); MULADD(at[35], at[73]); MULADD(at[36], at[72]); MULADD(at[37], at[71]); MULADD(at[38], at[70]); MULADD(at[39], at[69]); MULADD(at[40], at[68]); MULADD(at[41], at[67]); MULADD(at[42], at[66]); MULADD(at[43], at[65]); MULADD(at[44], at[64]); MULADD(at[45], at[63]); MULADD(at[46], at[62]); MULADD(at[47], at[61]); - COMBA_STORE(C->dp[60]); - /* 61 */ - COMBA_FORWARD; - MULADD(at[14], at[95]); MULADD(at[15], at[94]); MULADD(at[16], at[93]); MULADD(at[17], at[92]); MULADD(at[18], at[91]); MULADD(at[19], at[90]); MULADD(at[20], at[89]); MULADD(at[21], at[88]); MULADD(at[22], at[87]); MULADD(at[23], at[86]); MULADD(at[24], at[85]); MULADD(at[25], at[84]); MULADD(at[26], at[83]); MULADD(at[27], at[82]); MULADD(at[28], at[81]); MULADD(at[29], at[80]); MULADD(at[30], at[79]); MULADD(at[31], at[78]); MULADD(at[32], at[77]); MULADD(at[33], at[76]); MULADD(at[34], at[75]); MULADD(at[35], at[74]); MULADD(at[36], at[73]); MULADD(at[37], at[72]); MULADD(at[38], at[71]); MULADD(at[39], at[70]); MULADD(at[40], at[69]); MULADD(at[41], at[68]); MULADD(at[42], at[67]); MULADD(at[43], at[66]); MULADD(at[44], at[65]); MULADD(at[45], at[64]); MULADD(at[46], at[63]); MULADD(at[47], at[62]); - COMBA_STORE(C->dp[61]); - /* 62 */ - COMBA_FORWARD; - MULADD(at[15], at[95]); MULADD(at[16], at[94]); MULADD(at[17], at[93]); MULADD(at[18], at[92]); MULADD(at[19], at[91]); MULADD(at[20], at[90]); MULADD(at[21], at[89]); MULADD(at[22], at[88]); MULADD(at[23], at[87]); MULADD(at[24], at[86]); MULADD(at[25], at[85]); MULADD(at[26], at[84]); MULADD(at[27], at[83]); MULADD(at[28], at[82]); MULADD(at[29], at[81]); MULADD(at[30], at[80]); MULADD(at[31], at[79]); MULADD(at[32], at[78]); MULADD(at[33], at[77]); MULADD(at[34], at[76]); MULADD(at[35], at[75]); MULADD(at[36], at[74]); MULADD(at[37], at[73]); MULADD(at[38], at[72]); MULADD(at[39], at[71]); MULADD(at[40], at[70]); MULADD(at[41], at[69]); MULADD(at[42], at[68]); MULADD(at[43], at[67]); MULADD(at[44], at[66]); MULADD(at[45], at[65]); MULADD(at[46], at[64]); MULADD(at[47], at[63]); - COMBA_STORE(C->dp[62]); - /* 63 */ - COMBA_FORWARD; - MULADD(at[16], at[95]); MULADD(at[17], at[94]); MULADD(at[18], at[93]); MULADD(at[19], at[92]); MULADD(at[20], at[91]); MULADD(at[21], at[90]); MULADD(at[22], at[89]); MULADD(at[23], at[88]); MULADD(at[24], at[87]); MULADD(at[25], at[86]); MULADD(at[26], at[85]); MULADD(at[27], at[84]); MULADD(at[28], at[83]); MULADD(at[29], at[82]); MULADD(at[30], at[81]); MULADD(at[31], at[80]); MULADD(at[32], at[79]); MULADD(at[33], at[78]); MULADD(at[34], at[77]); MULADD(at[35], at[76]); MULADD(at[36], at[75]); MULADD(at[37], at[74]); MULADD(at[38], at[73]); MULADD(at[39], at[72]); MULADD(at[40], at[71]); MULADD(at[41], at[70]); MULADD(at[42], at[69]); MULADD(at[43], at[68]); MULADD(at[44], at[67]); MULADD(at[45], at[66]); MULADD(at[46], at[65]); MULADD(at[47], at[64]); - COMBA_STORE(C->dp[63]); - /* 64 */ - COMBA_FORWARD; - MULADD(at[17], at[95]); MULADD(at[18], at[94]); MULADD(at[19], at[93]); MULADD(at[20], at[92]); MULADD(at[21], at[91]); MULADD(at[22], at[90]); MULADD(at[23], at[89]); MULADD(at[24], at[88]); MULADD(at[25], at[87]); MULADD(at[26], at[86]); MULADD(at[27], at[85]); MULADD(at[28], at[84]); MULADD(at[29], at[83]); MULADD(at[30], at[82]); MULADD(at[31], at[81]); MULADD(at[32], at[80]); MULADD(at[33], at[79]); MULADD(at[34], at[78]); MULADD(at[35], at[77]); MULADD(at[36], at[76]); MULADD(at[37], at[75]); MULADD(at[38], at[74]); MULADD(at[39], at[73]); MULADD(at[40], at[72]); MULADD(at[41], at[71]); MULADD(at[42], at[70]); MULADD(at[43], at[69]); MULADD(at[44], at[68]); MULADD(at[45], at[67]); MULADD(at[46], at[66]); MULADD(at[47], at[65]); - COMBA_STORE(C->dp[64]); - /* 65 */ - COMBA_FORWARD; - MULADD(at[18], at[95]); MULADD(at[19], at[94]); MULADD(at[20], at[93]); MULADD(at[21], at[92]); MULADD(at[22], at[91]); MULADD(at[23], at[90]); MULADD(at[24], at[89]); MULADD(at[25], at[88]); MULADD(at[26], at[87]); MULADD(at[27], at[86]); MULADD(at[28], at[85]); MULADD(at[29], at[84]); MULADD(at[30], at[83]); MULADD(at[31], at[82]); MULADD(at[32], at[81]); MULADD(at[33], at[80]); MULADD(at[34], at[79]); MULADD(at[35], at[78]); MULADD(at[36], at[77]); MULADD(at[37], at[76]); MULADD(at[38], at[75]); MULADD(at[39], at[74]); MULADD(at[40], at[73]); MULADD(at[41], at[72]); MULADD(at[42], at[71]); MULADD(at[43], at[70]); MULADD(at[44], at[69]); MULADD(at[45], at[68]); MULADD(at[46], at[67]); MULADD(at[47], at[66]); - COMBA_STORE(C->dp[65]); - /* 66 */ - COMBA_FORWARD; - MULADD(at[19], at[95]); MULADD(at[20], at[94]); MULADD(at[21], at[93]); MULADD(at[22], at[92]); MULADD(at[23], at[91]); MULADD(at[24], at[90]); MULADD(at[25], at[89]); MULADD(at[26], at[88]); MULADD(at[27], at[87]); MULADD(at[28], at[86]); MULADD(at[29], at[85]); MULADD(at[30], at[84]); MULADD(at[31], at[83]); MULADD(at[32], at[82]); MULADD(at[33], at[81]); MULADD(at[34], at[80]); MULADD(at[35], at[79]); MULADD(at[36], at[78]); MULADD(at[37], at[77]); MULADD(at[38], at[76]); MULADD(at[39], at[75]); MULADD(at[40], at[74]); MULADD(at[41], at[73]); MULADD(at[42], at[72]); MULADD(at[43], at[71]); MULADD(at[44], at[70]); MULADD(at[45], at[69]); MULADD(at[46], at[68]); MULADD(at[47], at[67]); - COMBA_STORE(C->dp[66]); - /* 67 */ - COMBA_FORWARD; - MULADD(at[20], at[95]); MULADD(at[21], at[94]); MULADD(at[22], at[93]); MULADD(at[23], at[92]); MULADD(at[24], at[91]); MULADD(at[25], at[90]); MULADD(at[26], at[89]); MULADD(at[27], at[88]); MULADD(at[28], at[87]); MULADD(at[29], at[86]); MULADD(at[30], at[85]); MULADD(at[31], at[84]); MULADD(at[32], at[83]); MULADD(at[33], at[82]); MULADD(at[34], at[81]); MULADD(at[35], at[80]); MULADD(at[36], at[79]); MULADD(at[37], at[78]); MULADD(at[38], at[77]); MULADD(at[39], at[76]); MULADD(at[40], at[75]); MULADD(at[41], at[74]); MULADD(at[42], at[73]); MULADD(at[43], at[72]); MULADD(at[44], at[71]); MULADD(at[45], at[70]); MULADD(at[46], at[69]); MULADD(at[47], at[68]); - COMBA_STORE(C->dp[67]); - /* 68 */ - COMBA_FORWARD; - MULADD(at[21], at[95]); MULADD(at[22], at[94]); MULADD(at[23], at[93]); MULADD(at[24], at[92]); MULADD(at[25], at[91]); MULADD(at[26], at[90]); MULADD(at[27], at[89]); MULADD(at[28], at[88]); MULADD(at[29], at[87]); MULADD(at[30], at[86]); MULADD(at[31], at[85]); MULADD(at[32], at[84]); MULADD(at[33], at[83]); MULADD(at[34], at[82]); MULADD(at[35], at[81]); MULADD(at[36], at[80]); MULADD(at[37], at[79]); MULADD(at[38], at[78]); MULADD(at[39], at[77]); MULADD(at[40], at[76]); MULADD(at[41], at[75]); MULADD(at[42], at[74]); MULADD(at[43], at[73]); MULADD(at[44], at[72]); MULADD(at[45], at[71]); MULADD(at[46], at[70]); MULADD(at[47], at[69]); - COMBA_STORE(C->dp[68]); - /* 69 */ - COMBA_FORWARD; - MULADD(at[22], at[95]); MULADD(at[23], at[94]); MULADD(at[24], at[93]); MULADD(at[25], at[92]); MULADD(at[26], at[91]); MULADD(at[27], at[90]); MULADD(at[28], at[89]); MULADD(at[29], at[88]); MULADD(at[30], at[87]); MULADD(at[31], at[86]); MULADD(at[32], at[85]); MULADD(at[33], at[84]); MULADD(at[34], at[83]); MULADD(at[35], at[82]); MULADD(at[36], at[81]); MULADD(at[37], at[80]); MULADD(at[38], at[79]); MULADD(at[39], at[78]); MULADD(at[40], at[77]); MULADD(at[41], at[76]); MULADD(at[42], at[75]); MULADD(at[43], at[74]); MULADD(at[44], at[73]); MULADD(at[45], at[72]); MULADD(at[46], at[71]); MULADD(at[47], at[70]); - COMBA_STORE(C->dp[69]); - /* 70 */ - COMBA_FORWARD; - MULADD(at[23], at[95]); MULADD(at[24], at[94]); MULADD(at[25], at[93]); MULADD(at[26], at[92]); MULADD(at[27], at[91]); MULADD(at[28], at[90]); MULADD(at[29], at[89]); MULADD(at[30], at[88]); MULADD(at[31], at[87]); MULADD(at[32], at[86]); MULADD(at[33], at[85]); MULADD(at[34], at[84]); MULADD(at[35], at[83]); MULADD(at[36], at[82]); MULADD(at[37], at[81]); MULADD(at[38], at[80]); MULADD(at[39], at[79]); MULADD(at[40], at[78]); MULADD(at[41], at[77]); MULADD(at[42], at[76]); MULADD(at[43], at[75]); MULADD(at[44], at[74]); MULADD(at[45], at[73]); MULADD(at[46], at[72]); MULADD(at[47], at[71]); - COMBA_STORE(C->dp[70]); - /* 71 */ - COMBA_FORWARD; - MULADD(at[24], at[95]); MULADD(at[25], at[94]); MULADD(at[26], at[93]); MULADD(at[27], at[92]); MULADD(at[28], at[91]); MULADD(at[29], at[90]); MULADD(at[30], at[89]); MULADD(at[31], at[88]); MULADD(at[32], at[87]); MULADD(at[33], at[86]); MULADD(at[34], at[85]); MULADD(at[35], at[84]); MULADD(at[36], at[83]); MULADD(at[37], at[82]); MULADD(at[38], at[81]); MULADD(at[39], at[80]); MULADD(at[40], at[79]); MULADD(at[41], at[78]); MULADD(at[42], at[77]); MULADD(at[43], at[76]); MULADD(at[44], at[75]); MULADD(at[45], at[74]); MULADD(at[46], at[73]); MULADD(at[47], at[72]); - COMBA_STORE(C->dp[71]); - /* 72 */ - COMBA_FORWARD; - MULADD(at[25], at[95]); MULADD(at[26], at[94]); MULADD(at[27], at[93]); MULADD(at[28], at[92]); MULADD(at[29], at[91]); MULADD(at[30], at[90]); MULADD(at[31], at[89]); MULADD(at[32], at[88]); MULADD(at[33], at[87]); MULADD(at[34], at[86]); MULADD(at[35], at[85]); MULADD(at[36], at[84]); MULADD(at[37], at[83]); MULADD(at[38], at[82]); MULADD(at[39], at[81]); MULADD(at[40], at[80]); MULADD(at[41], at[79]); MULADD(at[42], at[78]); MULADD(at[43], at[77]); MULADD(at[44], at[76]); MULADD(at[45], at[75]); MULADD(at[46], at[74]); MULADD(at[47], at[73]); - COMBA_STORE(C->dp[72]); - /* 73 */ - COMBA_FORWARD; - MULADD(at[26], at[95]); MULADD(at[27], at[94]); MULADD(at[28], at[93]); MULADD(at[29], at[92]); MULADD(at[30], at[91]); MULADD(at[31], at[90]); MULADD(at[32], at[89]); MULADD(at[33], at[88]); MULADD(at[34], at[87]); MULADD(at[35], at[86]); MULADD(at[36], at[85]); MULADD(at[37], at[84]); MULADD(at[38], at[83]); MULADD(at[39], at[82]); MULADD(at[40], at[81]); MULADD(at[41], at[80]); MULADD(at[42], at[79]); MULADD(at[43], at[78]); MULADD(at[44], at[77]); MULADD(at[45], at[76]); MULADD(at[46], at[75]); MULADD(at[47], at[74]); - COMBA_STORE(C->dp[73]); - /* 74 */ - COMBA_FORWARD; - MULADD(at[27], at[95]); MULADD(at[28], at[94]); MULADD(at[29], at[93]); MULADD(at[30], at[92]); MULADD(at[31], at[91]); MULADD(at[32], at[90]); MULADD(at[33], at[89]); MULADD(at[34], at[88]); MULADD(at[35], at[87]); MULADD(at[36], at[86]); MULADD(at[37], at[85]); MULADD(at[38], at[84]); MULADD(at[39], at[83]); MULADD(at[40], at[82]); MULADD(at[41], at[81]); MULADD(at[42], at[80]); MULADD(at[43], at[79]); MULADD(at[44], at[78]); MULADD(at[45], at[77]); MULADD(at[46], at[76]); MULADD(at[47], at[75]); - COMBA_STORE(C->dp[74]); - /* 75 */ - COMBA_FORWARD; - MULADD(at[28], at[95]); MULADD(at[29], at[94]); MULADD(at[30], at[93]); MULADD(at[31], at[92]); MULADD(at[32], at[91]); MULADD(at[33], at[90]); MULADD(at[34], at[89]); MULADD(at[35], at[88]); MULADD(at[36], at[87]); MULADD(at[37], at[86]); MULADD(at[38], at[85]); MULADD(at[39], at[84]); MULADD(at[40], at[83]); MULADD(at[41], at[82]); MULADD(at[42], at[81]); MULADD(at[43], at[80]); MULADD(at[44], at[79]); MULADD(at[45], at[78]); MULADD(at[46], at[77]); MULADD(at[47], at[76]); - COMBA_STORE(C->dp[75]); - /* 76 */ - COMBA_FORWARD; - MULADD(at[29], at[95]); MULADD(at[30], at[94]); MULADD(at[31], at[93]); MULADD(at[32], at[92]); MULADD(at[33], at[91]); MULADD(at[34], at[90]); MULADD(at[35], at[89]); MULADD(at[36], at[88]); MULADD(at[37], at[87]); MULADD(at[38], at[86]); MULADD(at[39], at[85]); MULADD(at[40], at[84]); MULADD(at[41], at[83]); MULADD(at[42], at[82]); MULADD(at[43], at[81]); MULADD(at[44], at[80]); MULADD(at[45], at[79]); MULADD(at[46], at[78]); MULADD(at[47], at[77]); - COMBA_STORE(C->dp[76]); - /* 77 */ - COMBA_FORWARD; - MULADD(at[30], at[95]); MULADD(at[31], at[94]); MULADD(at[32], at[93]); MULADD(at[33], at[92]); MULADD(at[34], at[91]); MULADD(at[35], at[90]); MULADD(at[36], at[89]); MULADD(at[37], at[88]); MULADD(at[38], at[87]); MULADD(at[39], at[86]); MULADD(at[40], at[85]); MULADD(at[41], at[84]); MULADD(at[42], at[83]); MULADD(at[43], at[82]); MULADD(at[44], at[81]); MULADD(at[45], at[80]); MULADD(at[46], at[79]); MULADD(at[47], at[78]); - COMBA_STORE(C->dp[77]); - /* 78 */ - COMBA_FORWARD; - MULADD(at[31], at[95]); MULADD(at[32], at[94]); MULADD(at[33], at[93]); MULADD(at[34], at[92]); MULADD(at[35], at[91]); MULADD(at[36], at[90]); MULADD(at[37], at[89]); MULADD(at[38], at[88]); MULADD(at[39], at[87]); MULADD(at[40], at[86]); MULADD(at[41], at[85]); MULADD(at[42], at[84]); MULADD(at[43], at[83]); MULADD(at[44], at[82]); MULADD(at[45], at[81]); MULADD(at[46], at[80]); MULADD(at[47], at[79]); - COMBA_STORE(C->dp[78]); - /* 79 */ - COMBA_FORWARD; - MULADD(at[32], at[95]); MULADD(at[33], at[94]); MULADD(at[34], at[93]); MULADD(at[35], at[92]); MULADD(at[36], at[91]); MULADD(at[37], at[90]); MULADD(at[38], at[89]); MULADD(at[39], at[88]); MULADD(at[40], at[87]); MULADD(at[41], at[86]); MULADD(at[42], at[85]); MULADD(at[43], at[84]); MULADD(at[44], at[83]); MULADD(at[45], at[82]); MULADD(at[46], at[81]); MULADD(at[47], at[80]); - COMBA_STORE(C->dp[79]); - /* 80 */ - COMBA_FORWARD; - MULADD(at[33], at[95]); MULADD(at[34], at[94]); MULADD(at[35], at[93]); MULADD(at[36], at[92]); MULADD(at[37], at[91]); MULADD(at[38], at[90]); MULADD(at[39], at[89]); MULADD(at[40], at[88]); MULADD(at[41], at[87]); MULADD(at[42], at[86]); MULADD(at[43], at[85]); MULADD(at[44], at[84]); MULADD(at[45], at[83]); MULADD(at[46], at[82]); MULADD(at[47], at[81]); - COMBA_STORE(C->dp[80]); - /* 81 */ - COMBA_FORWARD; - MULADD(at[34], at[95]); MULADD(at[35], at[94]); MULADD(at[36], at[93]); MULADD(at[37], at[92]); MULADD(at[38], at[91]); MULADD(at[39], at[90]); MULADD(at[40], at[89]); MULADD(at[41], at[88]); MULADD(at[42], at[87]); MULADD(at[43], at[86]); MULADD(at[44], at[85]); MULADD(at[45], at[84]); MULADD(at[46], at[83]); MULADD(at[47], at[82]); - COMBA_STORE(C->dp[81]); - /* 82 */ - COMBA_FORWARD; - MULADD(at[35], at[95]); MULADD(at[36], at[94]); MULADD(at[37], at[93]); MULADD(at[38], at[92]); MULADD(at[39], at[91]); MULADD(at[40], at[90]); MULADD(at[41], at[89]); MULADD(at[42], at[88]); MULADD(at[43], at[87]); MULADD(at[44], at[86]); MULADD(at[45], at[85]); MULADD(at[46], at[84]); MULADD(at[47], at[83]); - COMBA_STORE(C->dp[82]); - /* 83 */ - COMBA_FORWARD; - MULADD(at[36], at[95]); MULADD(at[37], at[94]); MULADD(at[38], at[93]); MULADD(at[39], at[92]); MULADD(at[40], at[91]); MULADD(at[41], at[90]); MULADD(at[42], at[89]); MULADD(at[43], at[88]); MULADD(at[44], at[87]); MULADD(at[45], at[86]); MULADD(at[46], at[85]); MULADD(at[47], at[84]); - COMBA_STORE(C->dp[83]); - /* 84 */ - COMBA_FORWARD; - MULADD(at[37], at[95]); MULADD(at[38], at[94]); MULADD(at[39], at[93]); MULADD(at[40], at[92]); MULADD(at[41], at[91]); MULADD(at[42], at[90]); MULADD(at[43], at[89]); MULADD(at[44], at[88]); MULADD(at[45], at[87]); MULADD(at[46], at[86]); MULADD(at[47], at[85]); - COMBA_STORE(C->dp[84]); - /* 85 */ - COMBA_FORWARD; - MULADD(at[38], at[95]); MULADD(at[39], at[94]); MULADD(at[40], at[93]); MULADD(at[41], at[92]); MULADD(at[42], at[91]); MULADD(at[43], at[90]); MULADD(at[44], at[89]); MULADD(at[45], at[88]); MULADD(at[46], at[87]); MULADD(at[47], at[86]); - COMBA_STORE(C->dp[85]); - /* 86 */ - COMBA_FORWARD; - MULADD(at[39], at[95]); MULADD(at[40], at[94]); MULADD(at[41], at[93]); MULADD(at[42], at[92]); MULADD(at[43], at[91]); MULADD(at[44], at[90]); MULADD(at[45], at[89]); MULADD(at[46], at[88]); MULADD(at[47], at[87]); - COMBA_STORE(C->dp[86]); - /* 87 */ - COMBA_FORWARD; - MULADD(at[40], at[95]); MULADD(at[41], at[94]); MULADD(at[42], at[93]); MULADD(at[43], at[92]); MULADD(at[44], at[91]); MULADD(at[45], at[90]); MULADD(at[46], at[89]); MULADD(at[47], at[88]); - COMBA_STORE(C->dp[87]); - /* 88 */ - COMBA_FORWARD; - MULADD(at[41], at[95]); MULADD(at[42], at[94]); MULADD(at[43], at[93]); MULADD(at[44], at[92]); MULADD(at[45], at[91]); MULADD(at[46], at[90]); MULADD(at[47], at[89]); - COMBA_STORE(C->dp[88]); - /* 89 */ - COMBA_FORWARD; - MULADD(at[42], at[95]); MULADD(at[43], at[94]); MULADD(at[44], at[93]); MULADD(at[45], at[92]); MULADD(at[46], at[91]); MULADD(at[47], at[90]); - COMBA_STORE(C->dp[89]); - /* 90 */ - COMBA_FORWARD; - MULADD(at[43], at[95]); MULADD(at[44], at[94]); MULADD(at[45], at[93]); MULADD(at[46], at[92]); MULADD(at[47], at[91]); - COMBA_STORE(C->dp[90]); - /* 91 */ - COMBA_FORWARD; - MULADD(at[44], at[95]); MULADD(at[45], at[94]); MULADD(at[46], at[93]); MULADD(at[47], at[92]); - COMBA_STORE(C->dp[91]); - /* 92 */ - COMBA_FORWARD; - MULADD(at[45], at[95]); MULADD(at[46], at[94]); MULADD(at[47], at[93]); - COMBA_STORE(C->dp[92]); - /* 93 */ - COMBA_FORWARD; - MULADD(at[46], at[95]); MULADD(at[47], at[94]); - COMBA_STORE(C->dp[93]); - /* 94 */ - COMBA_FORWARD; - MULADD(at[47], at[95]); - COMBA_STORE(C->dp[94]); - COMBA_STORE2(C->dp[95]); - C->used = 96; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_6.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_6.c deleted file mode 100644 index 8f09b0268..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_6.c +++ /dev/null @@ -1,63 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL6 -void fp_mul_comba6(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[12]; - - memcpy(at, A->dp, 6 * sizeof(fp_digit)); - memcpy(at+6, B->dp, 6 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[6]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[7]); MULADD(at[1], at[6]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); MULADD(at[5], at[6]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[4], at[11]); MULADD(at[5], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[5], at[11]); - COMBA_STORE(C->dp[10]); - COMBA_STORE2(C->dp[11]); - C->used = 12; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_64.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_64.c deleted file mode 100644 index 7f37a5eb0..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_64.c +++ /dev/null @@ -1,527 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL64 -void fp_mul_comba64(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[128]; - - memcpy(at, A->dp, 64 * sizeof(fp_digit)); - memcpy(at+64, B->dp, 64 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[64]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[65]); MULADD(at[1], at[64]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[66]); MULADD(at[1], at[65]); MULADD(at[2], at[64]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[67]); MULADD(at[1], at[66]); MULADD(at[2], at[65]); MULADD(at[3], at[64]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[68]); MULADD(at[1], at[67]); MULADD(at[2], at[66]); MULADD(at[3], at[65]); MULADD(at[4], at[64]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[69]); MULADD(at[1], at[68]); MULADD(at[2], at[67]); MULADD(at[3], at[66]); MULADD(at[4], at[65]); MULADD(at[5], at[64]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[70]); MULADD(at[1], at[69]); MULADD(at[2], at[68]); MULADD(at[3], at[67]); MULADD(at[4], at[66]); MULADD(at[5], at[65]); MULADD(at[6], at[64]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[71]); MULADD(at[1], at[70]); MULADD(at[2], at[69]); MULADD(at[3], at[68]); MULADD(at[4], at[67]); MULADD(at[5], at[66]); MULADD(at[6], at[65]); MULADD(at[7], at[64]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[72]); MULADD(at[1], at[71]); MULADD(at[2], at[70]); MULADD(at[3], at[69]); MULADD(at[4], at[68]); MULADD(at[5], at[67]); MULADD(at[6], at[66]); MULADD(at[7], at[65]); MULADD(at[8], at[64]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[73]); MULADD(at[1], at[72]); MULADD(at[2], at[71]); MULADD(at[3], at[70]); MULADD(at[4], at[69]); MULADD(at[5], at[68]); MULADD(at[6], at[67]); MULADD(at[7], at[66]); MULADD(at[8], at[65]); MULADD(at[9], at[64]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[74]); MULADD(at[1], at[73]); MULADD(at[2], at[72]); MULADD(at[3], at[71]); MULADD(at[4], at[70]); MULADD(at[5], at[69]); MULADD(at[6], at[68]); MULADD(at[7], at[67]); MULADD(at[8], at[66]); MULADD(at[9], at[65]); MULADD(at[10], at[64]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[75]); MULADD(at[1], at[74]); MULADD(at[2], at[73]); MULADD(at[3], at[72]); MULADD(at[4], at[71]); MULADD(at[5], at[70]); MULADD(at[6], at[69]); MULADD(at[7], at[68]); MULADD(at[8], at[67]); MULADD(at[9], at[66]); MULADD(at[10], at[65]); MULADD(at[11], at[64]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[76]); MULADD(at[1], at[75]); MULADD(at[2], at[74]); MULADD(at[3], at[73]); MULADD(at[4], at[72]); MULADD(at[5], at[71]); MULADD(at[6], at[70]); MULADD(at[7], at[69]); MULADD(at[8], at[68]); MULADD(at[9], at[67]); MULADD(at[10], at[66]); MULADD(at[11], at[65]); MULADD(at[12], at[64]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[77]); MULADD(at[1], at[76]); MULADD(at[2], at[75]); MULADD(at[3], at[74]); MULADD(at[4], at[73]); MULADD(at[5], at[72]); MULADD(at[6], at[71]); MULADD(at[7], at[70]); MULADD(at[8], at[69]); MULADD(at[9], at[68]); MULADD(at[10], at[67]); MULADD(at[11], at[66]); MULADD(at[12], at[65]); MULADD(at[13], at[64]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[78]); MULADD(at[1], at[77]); MULADD(at[2], at[76]); MULADD(at[3], at[75]); MULADD(at[4], at[74]); MULADD(at[5], at[73]); MULADD(at[6], at[72]); MULADD(at[7], at[71]); MULADD(at[8], at[70]); MULADD(at[9], at[69]); MULADD(at[10], at[68]); MULADD(at[11], at[67]); MULADD(at[12], at[66]); MULADD(at[13], at[65]); MULADD(at[14], at[64]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[79]); MULADD(at[1], at[78]); MULADD(at[2], at[77]); MULADD(at[3], at[76]); MULADD(at[4], at[75]); MULADD(at[5], at[74]); MULADD(at[6], at[73]); MULADD(at[7], at[72]); MULADD(at[8], at[71]); MULADD(at[9], at[70]); MULADD(at[10], at[69]); MULADD(at[11], at[68]); MULADD(at[12], at[67]); MULADD(at[13], at[66]); MULADD(at[14], at[65]); MULADD(at[15], at[64]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[0], at[80]); MULADD(at[1], at[79]); MULADD(at[2], at[78]); MULADD(at[3], at[77]); MULADD(at[4], at[76]); MULADD(at[5], at[75]); MULADD(at[6], at[74]); MULADD(at[7], at[73]); MULADD(at[8], at[72]); MULADD(at[9], at[71]); MULADD(at[10], at[70]); MULADD(at[11], at[69]); MULADD(at[12], at[68]); MULADD(at[13], at[67]); MULADD(at[14], at[66]); MULADD(at[15], at[65]); MULADD(at[16], at[64]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[0], at[81]); MULADD(at[1], at[80]); MULADD(at[2], at[79]); MULADD(at[3], at[78]); MULADD(at[4], at[77]); MULADD(at[5], at[76]); MULADD(at[6], at[75]); MULADD(at[7], at[74]); MULADD(at[8], at[73]); MULADD(at[9], at[72]); MULADD(at[10], at[71]); MULADD(at[11], at[70]); MULADD(at[12], at[69]); MULADD(at[13], at[68]); MULADD(at[14], at[67]); MULADD(at[15], at[66]); MULADD(at[16], at[65]); MULADD(at[17], at[64]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[0], at[82]); MULADD(at[1], at[81]); MULADD(at[2], at[80]); MULADD(at[3], at[79]); MULADD(at[4], at[78]); MULADD(at[5], at[77]); MULADD(at[6], at[76]); MULADD(at[7], at[75]); MULADD(at[8], at[74]); MULADD(at[9], at[73]); MULADD(at[10], at[72]); MULADD(at[11], at[71]); MULADD(at[12], at[70]); MULADD(at[13], at[69]); MULADD(at[14], at[68]); MULADD(at[15], at[67]); MULADD(at[16], at[66]); MULADD(at[17], at[65]); MULADD(at[18], at[64]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[0], at[83]); MULADD(at[1], at[82]); MULADD(at[2], at[81]); MULADD(at[3], at[80]); MULADD(at[4], at[79]); MULADD(at[5], at[78]); MULADD(at[6], at[77]); MULADD(at[7], at[76]); MULADD(at[8], at[75]); MULADD(at[9], at[74]); MULADD(at[10], at[73]); MULADD(at[11], at[72]); MULADD(at[12], at[71]); MULADD(at[13], at[70]); MULADD(at[14], at[69]); MULADD(at[15], at[68]); MULADD(at[16], at[67]); MULADD(at[17], at[66]); MULADD(at[18], at[65]); MULADD(at[19], at[64]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[0], at[84]); MULADD(at[1], at[83]); MULADD(at[2], at[82]); MULADD(at[3], at[81]); MULADD(at[4], at[80]); MULADD(at[5], at[79]); MULADD(at[6], at[78]); MULADD(at[7], at[77]); MULADD(at[8], at[76]); MULADD(at[9], at[75]); MULADD(at[10], at[74]); MULADD(at[11], at[73]); MULADD(at[12], at[72]); MULADD(at[13], at[71]); MULADD(at[14], at[70]); MULADD(at[15], at[69]); MULADD(at[16], at[68]); MULADD(at[17], at[67]); MULADD(at[18], at[66]); MULADD(at[19], at[65]); MULADD(at[20], at[64]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[0], at[85]); MULADD(at[1], at[84]); MULADD(at[2], at[83]); MULADD(at[3], at[82]); MULADD(at[4], at[81]); MULADD(at[5], at[80]); MULADD(at[6], at[79]); MULADD(at[7], at[78]); MULADD(at[8], at[77]); MULADD(at[9], at[76]); MULADD(at[10], at[75]); MULADD(at[11], at[74]); MULADD(at[12], at[73]); MULADD(at[13], at[72]); MULADD(at[14], at[71]); MULADD(at[15], at[70]); MULADD(at[16], at[69]); MULADD(at[17], at[68]); MULADD(at[18], at[67]); MULADD(at[19], at[66]); MULADD(at[20], at[65]); MULADD(at[21], at[64]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[0], at[86]); MULADD(at[1], at[85]); MULADD(at[2], at[84]); MULADD(at[3], at[83]); MULADD(at[4], at[82]); MULADD(at[5], at[81]); MULADD(at[6], at[80]); MULADD(at[7], at[79]); MULADD(at[8], at[78]); MULADD(at[9], at[77]); MULADD(at[10], at[76]); MULADD(at[11], at[75]); MULADD(at[12], at[74]); MULADD(at[13], at[73]); MULADD(at[14], at[72]); MULADD(at[15], at[71]); MULADD(at[16], at[70]); MULADD(at[17], at[69]); MULADD(at[18], at[68]); MULADD(at[19], at[67]); MULADD(at[20], at[66]); MULADD(at[21], at[65]); MULADD(at[22], at[64]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[0], at[87]); MULADD(at[1], at[86]); MULADD(at[2], at[85]); MULADD(at[3], at[84]); MULADD(at[4], at[83]); MULADD(at[5], at[82]); MULADD(at[6], at[81]); MULADD(at[7], at[80]); MULADD(at[8], at[79]); MULADD(at[9], at[78]); MULADD(at[10], at[77]); MULADD(at[11], at[76]); MULADD(at[12], at[75]); MULADD(at[13], at[74]); MULADD(at[14], at[73]); MULADD(at[15], at[72]); MULADD(at[16], at[71]); MULADD(at[17], at[70]); MULADD(at[18], at[69]); MULADD(at[19], at[68]); MULADD(at[20], at[67]); MULADD(at[21], at[66]); MULADD(at[22], at[65]); MULADD(at[23], at[64]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[0], at[88]); MULADD(at[1], at[87]); MULADD(at[2], at[86]); MULADD(at[3], at[85]); MULADD(at[4], at[84]); MULADD(at[5], at[83]); MULADD(at[6], at[82]); MULADD(at[7], at[81]); MULADD(at[8], at[80]); MULADD(at[9], at[79]); MULADD(at[10], at[78]); MULADD(at[11], at[77]); MULADD(at[12], at[76]); MULADD(at[13], at[75]); MULADD(at[14], at[74]); MULADD(at[15], at[73]); MULADD(at[16], at[72]); MULADD(at[17], at[71]); MULADD(at[18], at[70]); MULADD(at[19], at[69]); MULADD(at[20], at[68]); MULADD(at[21], at[67]); MULADD(at[22], at[66]); MULADD(at[23], at[65]); MULADD(at[24], at[64]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[0], at[89]); MULADD(at[1], at[88]); MULADD(at[2], at[87]); MULADD(at[3], at[86]); MULADD(at[4], at[85]); MULADD(at[5], at[84]); MULADD(at[6], at[83]); MULADD(at[7], at[82]); MULADD(at[8], at[81]); MULADD(at[9], at[80]); MULADD(at[10], at[79]); MULADD(at[11], at[78]); MULADD(at[12], at[77]); MULADD(at[13], at[76]); MULADD(at[14], at[75]); MULADD(at[15], at[74]); MULADD(at[16], at[73]); MULADD(at[17], at[72]); MULADD(at[18], at[71]); MULADD(at[19], at[70]); MULADD(at[20], at[69]); MULADD(at[21], at[68]); MULADD(at[22], at[67]); MULADD(at[23], at[66]); MULADD(at[24], at[65]); MULADD(at[25], at[64]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[0], at[90]); MULADD(at[1], at[89]); MULADD(at[2], at[88]); MULADD(at[3], at[87]); MULADD(at[4], at[86]); MULADD(at[5], at[85]); MULADD(at[6], at[84]); MULADD(at[7], at[83]); MULADD(at[8], at[82]); MULADD(at[9], at[81]); MULADD(at[10], at[80]); MULADD(at[11], at[79]); MULADD(at[12], at[78]); MULADD(at[13], at[77]); MULADD(at[14], at[76]); MULADD(at[15], at[75]); MULADD(at[16], at[74]); MULADD(at[17], at[73]); MULADD(at[18], at[72]); MULADD(at[19], at[71]); MULADD(at[20], at[70]); MULADD(at[21], at[69]); MULADD(at[22], at[68]); MULADD(at[23], at[67]); MULADD(at[24], at[66]); MULADD(at[25], at[65]); MULADD(at[26], at[64]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[0], at[91]); MULADD(at[1], at[90]); MULADD(at[2], at[89]); MULADD(at[3], at[88]); MULADD(at[4], at[87]); MULADD(at[5], at[86]); MULADD(at[6], at[85]); MULADD(at[7], at[84]); MULADD(at[8], at[83]); MULADD(at[9], at[82]); MULADD(at[10], at[81]); MULADD(at[11], at[80]); MULADD(at[12], at[79]); MULADD(at[13], at[78]); MULADD(at[14], at[77]); MULADD(at[15], at[76]); MULADD(at[16], at[75]); MULADD(at[17], at[74]); MULADD(at[18], at[73]); MULADD(at[19], at[72]); MULADD(at[20], at[71]); MULADD(at[21], at[70]); MULADD(at[22], at[69]); MULADD(at[23], at[68]); MULADD(at[24], at[67]); MULADD(at[25], at[66]); MULADD(at[26], at[65]); MULADD(at[27], at[64]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[0], at[92]); MULADD(at[1], at[91]); MULADD(at[2], at[90]); MULADD(at[3], at[89]); MULADD(at[4], at[88]); MULADD(at[5], at[87]); MULADD(at[6], at[86]); MULADD(at[7], at[85]); MULADD(at[8], at[84]); MULADD(at[9], at[83]); MULADD(at[10], at[82]); MULADD(at[11], at[81]); MULADD(at[12], at[80]); MULADD(at[13], at[79]); MULADD(at[14], at[78]); MULADD(at[15], at[77]); MULADD(at[16], at[76]); MULADD(at[17], at[75]); MULADD(at[18], at[74]); MULADD(at[19], at[73]); MULADD(at[20], at[72]); MULADD(at[21], at[71]); MULADD(at[22], at[70]); MULADD(at[23], at[69]); MULADD(at[24], at[68]); MULADD(at[25], at[67]); MULADD(at[26], at[66]); MULADD(at[27], at[65]); MULADD(at[28], at[64]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[0], at[93]); MULADD(at[1], at[92]); MULADD(at[2], at[91]); MULADD(at[3], at[90]); MULADD(at[4], at[89]); MULADD(at[5], at[88]); MULADD(at[6], at[87]); MULADD(at[7], at[86]); MULADD(at[8], at[85]); MULADD(at[9], at[84]); MULADD(at[10], at[83]); MULADD(at[11], at[82]); MULADD(at[12], at[81]); MULADD(at[13], at[80]); MULADD(at[14], at[79]); MULADD(at[15], at[78]); MULADD(at[16], at[77]); MULADD(at[17], at[76]); MULADD(at[18], at[75]); MULADD(at[19], at[74]); MULADD(at[20], at[73]); MULADD(at[21], at[72]); MULADD(at[22], at[71]); MULADD(at[23], at[70]); MULADD(at[24], at[69]); MULADD(at[25], at[68]); MULADD(at[26], at[67]); MULADD(at[27], at[66]); MULADD(at[28], at[65]); MULADD(at[29], at[64]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[0], at[94]); MULADD(at[1], at[93]); MULADD(at[2], at[92]); MULADD(at[3], at[91]); MULADD(at[4], at[90]); MULADD(at[5], at[89]); MULADD(at[6], at[88]); MULADD(at[7], at[87]); MULADD(at[8], at[86]); MULADD(at[9], at[85]); MULADD(at[10], at[84]); MULADD(at[11], at[83]); MULADD(at[12], at[82]); MULADD(at[13], at[81]); MULADD(at[14], at[80]); MULADD(at[15], at[79]); MULADD(at[16], at[78]); MULADD(at[17], at[77]); MULADD(at[18], at[76]); MULADD(at[19], at[75]); MULADD(at[20], at[74]); MULADD(at[21], at[73]); MULADD(at[22], at[72]); MULADD(at[23], at[71]); MULADD(at[24], at[70]); MULADD(at[25], at[69]); MULADD(at[26], at[68]); MULADD(at[27], at[67]); MULADD(at[28], at[66]); MULADD(at[29], at[65]); MULADD(at[30], at[64]); - COMBA_STORE(C->dp[30]); - /* 31 */ - COMBA_FORWARD; - MULADD(at[0], at[95]); MULADD(at[1], at[94]); MULADD(at[2], at[93]); MULADD(at[3], at[92]); MULADD(at[4], at[91]); MULADD(at[5], at[90]); MULADD(at[6], at[89]); MULADD(at[7], at[88]); MULADD(at[8], at[87]); MULADD(at[9], at[86]); MULADD(at[10], at[85]); MULADD(at[11], at[84]); MULADD(at[12], at[83]); MULADD(at[13], at[82]); MULADD(at[14], at[81]); MULADD(at[15], at[80]); MULADD(at[16], at[79]); MULADD(at[17], at[78]); MULADD(at[18], at[77]); MULADD(at[19], at[76]); MULADD(at[20], at[75]); MULADD(at[21], at[74]); MULADD(at[22], at[73]); MULADD(at[23], at[72]); MULADD(at[24], at[71]); MULADD(at[25], at[70]); MULADD(at[26], at[69]); MULADD(at[27], at[68]); MULADD(at[28], at[67]); MULADD(at[29], at[66]); MULADD(at[30], at[65]); MULADD(at[31], at[64]); - COMBA_STORE(C->dp[31]); - /* 32 */ - COMBA_FORWARD; - MULADD(at[0], at[96]); MULADD(at[1], at[95]); MULADD(at[2], at[94]); MULADD(at[3], at[93]); MULADD(at[4], at[92]); MULADD(at[5], at[91]); MULADD(at[6], at[90]); MULADD(at[7], at[89]); MULADD(at[8], at[88]); MULADD(at[9], at[87]); MULADD(at[10], at[86]); MULADD(at[11], at[85]); MULADD(at[12], at[84]); MULADD(at[13], at[83]); MULADD(at[14], at[82]); MULADD(at[15], at[81]); MULADD(at[16], at[80]); MULADD(at[17], at[79]); MULADD(at[18], at[78]); MULADD(at[19], at[77]); MULADD(at[20], at[76]); MULADD(at[21], at[75]); MULADD(at[22], at[74]); MULADD(at[23], at[73]); MULADD(at[24], at[72]); MULADD(at[25], at[71]); MULADD(at[26], at[70]); MULADD(at[27], at[69]); MULADD(at[28], at[68]); MULADD(at[29], at[67]); MULADD(at[30], at[66]); MULADD(at[31], at[65]); MULADD(at[32], at[64]); - COMBA_STORE(C->dp[32]); - /* 33 */ - COMBA_FORWARD; - MULADD(at[0], at[97]); MULADD(at[1], at[96]); MULADD(at[2], at[95]); MULADD(at[3], at[94]); MULADD(at[4], at[93]); MULADD(at[5], at[92]); MULADD(at[6], at[91]); MULADD(at[7], at[90]); MULADD(at[8], at[89]); MULADD(at[9], at[88]); MULADD(at[10], at[87]); MULADD(at[11], at[86]); MULADD(at[12], at[85]); MULADD(at[13], at[84]); MULADD(at[14], at[83]); MULADD(at[15], at[82]); MULADD(at[16], at[81]); MULADD(at[17], at[80]); MULADD(at[18], at[79]); MULADD(at[19], at[78]); MULADD(at[20], at[77]); MULADD(at[21], at[76]); MULADD(at[22], at[75]); MULADD(at[23], at[74]); MULADD(at[24], at[73]); MULADD(at[25], at[72]); MULADD(at[26], at[71]); MULADD(at[27], at[70]); MULADD(at[28], at[69]); MULADD(at[29], at[68]); MULADD(at[30], at[67]); MULADD(at[31], at[66]); MULADD(at[32], at[65]); MULADD(at[33], at[64]); - COMBA_STORE(C->dp[33]); - /* 34 */ - COMBA_FORWARD; - MULADD(at[0], at[98]); MULADD(at[1], at[97]); MULADD(at[2], at[96]); MULADD(at[3], at[95]); MULADD(at[4], at[94]); MULADD(at[5], at[93]); MULADD(at[6], at[92]); MULADD(at[7], at[91]); MULADD(at[8], at[90]); MULADD(at[9], at[89]); MULADD(at[10], at[88]); MULADD(at[11], at[87]); MULADD(at[12], at[86]); MULADD(at[13], at[85]); MULADD(at[14], at[84]); MULADD(at[15], at[83]); MULADD(at[16], at[82]); MULADD(at[17], at[81]); MULADD(at[18], at[80]); MULADD(at[19], at[79]); MULADD(at[20], at[78]); MULADD(at[21], at[77]); MULADD(at[22], at[76]); MULADD(at[23], at[75]); MULADD(at[24], at[74]); MULADD(at[25], at[73]); MULADD(at[26], at[72]); MULADD(at[27], at[71]); MULADD(at[28], at[70]); MULADD(at[29], at[69]); MULADD(at[30], at[68]); MULADD(at[31], at[67]); MULADD(at[32], at[66]); MULADD(at[33], at[65]); MULADD(at[34], at[64]); - COMBA_STORE(C->dp[34]); - /* 35 */ - COMBA_FORWARD; - MULADD(at[0], at[99]); MULADD(at[1], at[98]); MULADD(at[2], at[97]); MULADD(at[3], at[96]); MULADD(at[4], at[95]); MULADD(at[5], at[94]); MULADD(at[6], at[93]); MULADD(at[7], at[92]); MULADD(at[8], at[91]); MULADD(at[9], at[90]); MULADD(at[10], at[89]); MULADD(at[11], at[88]); MULADD(at[12], at[87]); MULADD(at[13], at[86]); MULADD(at[14], at[85]); MULADD(at[15], at[84]); MULADD(at[16], at[83]); MULADD(at[17], at[82]); MULADD(at[18], at[81]); MULADD(at[19], at[80]); MULADD(at[20], at[79]); MULADD(at[21], at[78]); MULADD(at[22], at[77]); MULADD(at[23], at[76]); MULADD(at[24], at[75]); MULADD(at[25], at[74]); MULADD(at[26], at[73]); MULADD(at[27], at[72]); MULADD(at[28], at[71]); MULADD(at[29], at[70]); MULADD(at[30], at[69]); MULADD(at[31], at[68]); MULADD(at[32], at[67]); MULADD(at[33], at[66]); MULADD(at[34], at[65]); MULADD(at[35], at[64]); - COMBA_STORE(C->dp[35]); - /* 36 */ - COMBA_FORWARD; - MULADD(at[0], at[100]); MULADD(at[1], at[99]); MULADD(at[2], at[98]); MULADD(at[3], at[97]); MULADD(at[4], at[96]); MULADD(at[5], at[95]); MULADD(at[6], at[94]); MULADD(at[7], at[93]); MULADD(at[8], at[92]); MULADD(at[9], at[91]); MULADD(at[10], at[90]); MULADD(at[11], at[89]); MULADD(at[12], at[88]); MULADD(at[13], at[87]); MULADD(at[14], at[86]); MULADD(at[15], at[85]); MULADD(at[16], at[84]); MULADD(at[17], at[83]); MULADD(at[18], at[82]); MULADD(at[19], at[81]); MULADD(at[20], at[80]); MULADD(at[21], at[79]); MULADD(at[22], at[78]); MULADD(at[23], at[77]); MULADD(at[24], at[76]); MULADD(at[25], at[75]); MULADD(at[26], at[74]); MULADD(at[27], at[73]); MULADD(at[28], at[72]); MULADD(at[29], at[71]); MULADD(at[30], at[70]); MULADD(at[31], at[69]); MULADD(at[32], at[68]); MULADD(at[33], at[67]); MULADD(at[34], at[66]); MULADD(at[35], at[65]); MULADD(at[36], at[64]); - COMBA_STORE(C->dp[36]); - /* 37 */ - COMBA_FORWARD; - MULADD(at[0], at[101]); MULADD(at[1], at[100]); MULADD(at[2], at[99]); MULADD(at[3], at[98]); MULADD(at[4], at[97]); MULADD(at[5], at[96]); MULADD(at[6], at[95]); MULADD(at[7], at[94]); MULADD(at[8], at[93]); MULADD(at[9], at[92]); MULADD(at[10], at[91]); MULADD(at[11], at[90]); MULADD(at[12], at[89]); MULADD(at[13], at[88]); MULADD(at[14], at[87]); MULADD(at[15], at[86]); MULADD(at[16], at[85]); MULADD(at[17], at[84]); MULADD(at[18], at[83]); MULADD(at[19], at[82]); MULADD(at[20], at[81]); MULADD(at[21], at[80]); MULADD(at[22], at[79]); MULADD(at[23], at[78]); MULADD(at[24], at[77]); MULADD(at[25], at[76]); MULADD(at[26], at[75]); MULADD(at[27], at[74]); MULADD(at[28], at[73]); MULADD(at[29], at[72]); MULADD(at[30], at[71]); MULADD(at[31], at[70]); MULADD(at[32], at[69]); MULADD(at[33], at[68]); MULADD(at[34], at[67]); MULADD(at[35], at[66]); MULADD(at[36], at[65]); MULADD(at[37], at[64]); - COMBA_STORE(C->dp[37]); - /* 38 */ - COMBA_FORWARD; - MULADD(at[0], at[102]); MULADD(at[1], at[101]); MULADD(at[2], at[100]); MULADD(at[3], at[99]); MULADD(at[4], at[98]); MULADD(at[5], at[97]); MULADD(at[6], at[96]); MULADD(at[7], at[95]); MULADD(at[8], at[94]); MULADD(at[9], at[93]); MULADD(at[10], at[92]); MULADD(at[11], at[91]); MULADD(at[12], at[90]); MULADD(at[13], at[89]); MULADD(at[14], at[88]); MULADD(at[15], at[87]); MULADD(at[16], at[86]); MULADD(at[17], at[85]); MULADD(at[18], at[84]); MULADD(at[19], at[83]); MULADD(at[20], at[82]); MULADD(at[21], at[81]); MULADD(at[22], at[80]); MULADD(at[23], at[79]); MULADD(at[24], at[78]); MULADD(at[25], at[77]); MULADD(at[26], at[76]); MULADD(at[27], at[75]); MULADD(at[28], at[74]); MULADD(at[29], at[73]); MULADD(at[30], at[72]); MULADD(at[31], at[71]); MULADD(at[32], at[70]); MULADD(at[33], at[69]); MULADD(at[34], at[68]); MULADD(at[35], at[67]); MULADD(at[36], at[66]); MULADD(at[37], at[65]); MULADD(at[38], at[64]); - COMBA_STORE(C->dp[38]); - /* 39 */ - COMBA_FORWARD; - MULADD(at[0], at[103]); MULADD(at[1], at[102]); MULADD(at[2], at[101]); MULADD(at[3], at[100]); MULADD(at[4], at[99]); MULADD(at[5], at[98]); MULADD(at[6], at[97]); MULADD(at[7], at[96]); MULADD(at[8], at[95]); MULADD(at[9], at[94]); MULADD(at[10], at[93]); MULADD(at[11], at[92]); MULADD(at[12], at[91]); MULADD(at[13], at[90]); MULADD(at[14], at[89]); MULADD(at[15], at[88]); MULADD(at[16], at[87]); MULADD(at[17], at[86]); MULADD(at[18], at[85]); MULADD(at[19], at[84]); MULADD(at[20], at[83]); MULADD(at[21], at[82]); MULADD(at[22], at[81]); MULADD(at[23], at[80]); MULADD(at[24], at[79]); MULADD(at[25], at[78]); MULADD(at[26], at[77]); MULADD(at[27], at[76]); MULADD(at[28], at[75]); MULADD(at[29], at[74]); MULADD(at[30], at[73]); MULADD(at[31], at[72]); MULADD(at[32], at[71]); MULADD(at[33], at[70]); MULADD(at[34], at[69]); MULADD(at[35], at[68]); MULADD(at[36], at[67]); MULADD(at[37], at[66]); MULADD(at[38], at[65]); MULADD(at[39], at[64]); - COMBA_STORE(C->dp[39]); - /* 40 */ - COMBA_FORWARD; - MULADD(at[0], at[104]); MULADD(at[1], at[103]); MULADD(at[2], at[102]); MULADD(at[3], at[101]); MULADD(at[4], at[100]); MULADD(at[5], at[99]); MULADD(at[6], at[98]); MULADD(at[7], at[97]); MULADD(at[8], at[96]); MULADD(at[9], at[95]); MULADD(at[10], at[94]); MULADD(at[11], at[93]); MULADD(at[12], at[92]); MULADD(at[13], at[91]); MULADD(at[14], at[90]); MULADD(at[15], at[89]); MULADD(at[16], at[88]); MULADD(at[17], at[87]); MULADD(at[18], at[86]); MULADD(at[19], at[85]); MULADD(at[20], at[84]); MULADD(at[21], at[83]); MULADD(at[22], at[82]); MULADD(at[23], at[81]); MULADD(at[24], at[80]); MULADD(at[25], at[79]); MULADD(at[26], at[78]); MULADD(at[27], at[77]); MULADD(at[28], at[76]); MULADD(at[29], at[75]); MULADD(at[30], at[74]); MULADD(at[31], at[73]); MULADD(at[32], at[72]); MULADD(at[33], at[71]); MULADD(at[34], at[70]); MULADD(at[35], at[69]); MULADD(at[36], at[68]); MULADD(at[37], at[67]); MULADD(at[38], at[66]); MULADD(at[39], at[65]); MULADD(at[40], at[64]); - COMBA_STORE(C->dp[40]); - /* 41 */ - COMBA_FORWARD; - MULADD(at[0], at[105]); MULADD(at[1], at[104]); MULADD(at[2], at[103]); MULADD(at[3], at[102]); MULADD(at[4], at[101]); MULADD(at[5], at[100]); MULADD(at[6], at[99]); MULADD(at[7], at[98]); MULADD(at[8], at[97]); MULADD(at[9], at[96]); MULADD(at[10], at[95]); MULADD(at[11], at[94]); MULADD(at[12], at[93]); MULADD(at[13], at[92]); MULADD(at[14], at[91]); MULADD(at[15], at[90]); MULADD(at[16], at[89]); MULADD(at[17], at[88]); MULADD(at[18], at[87]); MULADD(at[19], at[86]); MULADD(at[20], at[85]); MULADD(at[21], at[84]); MULADD(at[22], at[83]); MULADD(at[23], at[82]); MULADD(at[24], at[81]); MULADD(at[25], at[80]); MULADD(at[26], at[79]); MULADD(at[27], at[78]); MULADD(at[28], at[77]); MULADD(at[29], at[76]); MULADD(at[30], at[75]); MULADD(at[31], at[74]); MULADD(at[32], at[73]); MULADD(at[33], at[72]); MULADD(at[34], at[71]); MULADD(at[35], at[70]); MULADD(at[36], at[69]); MULADD(at[37], at[68]); MULADD(at[38], at[67]); MULADD(at[39], at[66]); MULADD(at[40], at[65]); MULADD(at[41], at[64]); - COMBA_STORE(C->dp[41]); - /* 42 */ - COMBA_FORWARD; - MULADD(at[0], at[106]); MULADD(at[1], at[105]); MULADD(at[2], at[104]); MULADD(at[3], at[103]); MULADD(at[4], at[102]); MULADD(at[5], at[101]); MULADD(at[6], at[100]); MULADD(at[7], at[99]); MULADD(at[8], at[98]); MULADD(at[9], at[97]); MULADD(at[10], at[96]); MULADD(at[11], at[95]); MULADD(at[12], at[94]); MULADD(at[13], at[93]); MULADD(at[14], at[92]); MULADD(at[15], at[91]); MULADD(at[16], at[90]); MULADD(at[17], at[89]); MULADD(at[18], at[88]); MULADD(at[19], at[87]); MULADD(at[20], at[86]); MULADD(at[21], at[85]); MULADD(at[22], at[84]); MULADD(at[23], at[83]); MULADD(at[24], at[82]); MULADD(at[25], at[81]); MULADD(at[26], at[80]); MULADD(at[27], at[79]); MULADD(at[28], at[78]); MULADD(at[29], at[77]); MULADD(at[30], at[76]); MULADD(at[31], at[75]); MULADD(at[32], at[74]); MULADD(at[33], at[73]); MULADD(at[34], at[72]); MULADD(at[35], at[71]); MULADD(at[36], at[70]); MULADD(at[37], at[69]); MULADD(at[38], at[68]); MULADD(at[39], at[67]); MULADD(at[40], at[66]); MULADD(at[41], at[65]); MULADD(at[42], at[64]); - COMBA_STORE(C->dp[42]); - /* 43 */ - COMBA_FORWARD; - MULADD(at[0], at[107]); MULADD(at[1], at[106]); MULADD(at[2], at[105]); MULADD(at[3], at[104]); MULADD(at[4], at[103]); MULADD(at[5], at[102]); MULADD(at[6], at[101]); MULADD(at[7], at[100]); MULADD(at[8], at[99]); MULADD(at[9], at[98]); MULADD(at[10], at[97]); MULADD(at[11], at[96]); MULADD(at[12], at[95]); MULADD(at[13], at[94]); MULADD(at[14], at[93]); MULADD(at[15], at[92]); MULADD(at[16], at[91]); MULADD(at[17], at[90]); MULADD(at[18], at[89]); MULADD(at[19], at[88]); MULADD(at[20], at[87]); MULADD(at[21], at[86]); MULADD(at[22], at[85]); MULADD(at[23], at[84]); MULADD(at[24], at[83]); MULADD(at[25], at[82]); MULADD(at[26], at[81]); MULADD(at[27], at[80]); MULADD(at[28], at[79]); MULADD(at[29], at[78]); MULADD(at[30], at[77]); MULADD(at[31], at[76]); MULADD(at[32], at[75]); MULADD(at[33], at[74]); MULADD(at[34], at[73]); MULADD(at[35], at[72]); MULADD(at[36], at[71]); MULADD(at[37], at[70]); MULADD(at[38], at[69]); MULADD(at[39], at[68]); MULADD(at[40], at[67]); MULADD(at[41], at[66]); MULADD(at[42], at[65]); MULADD(at[43], at[64]); - COMBA_STORE(C->dp[43]); - /* 44 */ - COMBA_FORWARD; - MULADD(at[0], at[108]); MULADD(at[1], at[107]); MULADD(at[2], at[106]); MULADD(at[3], at[105]); MULADD(at[4], at[104]); MULADD(at[5], at[103]); MULADD(at[6], at[102]); MULADD(at[7], at[101]); MULADD(at[8], at[100]); MULADD(at[9], at[99]); MULADD(at[10], at[98]); MULADD(at[11], at[97]); MULADD(at[12], at[96]); MULADD(at[13], at[95]); MULADD(at[14], at[94]); MULADD(at[15], at[93]); MULADD(at[16], at[92]); MULADD(at[17], at[91]); MULADD(at[18], at[90]); MULADD(at[19], at[89]); MULADD(at[20], at[88]); MULADD(at[21], at[87]); MULADD(at[22], at[86]); MULADD(at[23], at[85]); MULADD(at[24], at[84]); MULADD(at[25], at[83]); MULADD(at[26], at[82]); MULADD(at[27], at[81]); MULADD(at[28], at[80]); MULADD(at[29], at[79]); MULADD(at[30], at[78]); MULADD(at[31], at[77]); MULADD(at[32], at[76]); MULADD(at[33], at[75]); MULADD(at[34], at[74]); MULADD(at[35], at[73]); MULADD(at[36], at[72]); MULADD(at[37], at[71]); MULADD(at[38], at[70]); MULADD(at[39], at[69]); MULADD(at[40], at[68]); MULADD(at[41], at[67]); MULADD(at[42], at[66]); MULADD(at[43], at[65]); MULADD(at[44], at[64]); - COMBA_STORE(C->dp[44]); - /* 45 */ - COMBA_FORWARD; - MULADD(at[0], at[109]); MULADD(at[1], at[108]); MULADD(at[2], at[107]); MULADD(at[3], at[106]); MULADD(at[4], at[105]); MULADD(at[5], at[104]); MULADD(at[6], at[103]); MULADD(at[7], at[102]); MULADD(at[8], at[101]); MULADD(at[9], at[100]); MULADD(at[10], at[99]); MULADD(at[11], at[98]); MULADD(at[12], at[97]); MULADD(at[13], at[96]); MULADD(at[14], at[95]); MULADD(at[15], at[94]); MULADD(at[16], at[93]); MULADD(at[17], at[92]); MULADD(at[18], at[91]); MULADD(at[19], at[90]); MULADD(at[20], at[89]); MULADD(at[21], at[88]); MULADD(at[22], at[87]); MULADD(at[23], at[86]); MULADD(at[24], at[85]); MULADD(at[25], at[84]); MULADD(at[26], at[83]); MULADD(at[27], at[82]); MULADD(at[28], at[81]); MULADD(at[29], at[80]); MULADD(at[30], at[79]); MULADD(at[31], at[78]); MULADD(at[32], at[77]); MULADD(at[33], at[76]); MULADD(at[34], at[75]); MULADD(at[35], at[74]); MULADD(at[36], at[73]); MULADD(at[37], at[72]); MULADD(at[38], at[71]); MULADD(at[39], at[70]); MULADD(at[40], at[69]); MULADD(at[41], at[68]); MULADD(at[42], at[67]); MULADD(at[43], at[66]); MULADD(at[44], at[65]); MULADD(at[45], at[64]); - COMBA_STORE(C->dp[45]); - /* 46 */ - COMBA_FORWARD; - MULADD(at[0], at[110]); MULADD(at[1], at[109]); MULADD(at[2], at[108]); MULADD(at[3], at[107]); MULADD(at[4], at[106]); MULADD(at[5], at[105]); MULADD(at[6], at[104]); MULADD(at[7], at[103]); MULADD(at[8], at[102]); MULADD(at[9], at[101]); MULADD(at[10], at[100]); MULADD(at[11], at[99]); MULADD(at[12], at[98]); MULADD(at[13], at[97]); MULADD(at[14], at[96]); MULADD(at[15], at[95]); MULADD(at[16], at[94]); MULADD(at[17], at[93]); MULADD(at[18], at[92]); MULADD(at[19], at[91]); MULADD(at[20], at[90]); MULADD(at[21], at[89]); MULADD(at[22], at[88]); MULADD(at[23], at[87]); MULADD(at[24], at[86]); MULADD(at[25], at[85]); MULADD(at[26], at[84]); MULADD(at[27], at[83]); MULADD(at[28], at[82]); MULADD(at[29], at[81]); MULADD(at[30], at[80]); MULADD(at[31], at[79]); MULADD(at[32], at[78]); MULADD(at[33], at[77]); MULADD(at[34], at[76]); MULADD(at[35], at[75]); MULADD(at[36], at[74]); MULADD(at[37], at[73]); MULADD(at[38], at[72]); MULADD(at[39], at[71]); MULADD(at[40], at[70]); MULADD(at[41], at[69]); MULADD(at[42], at[68]); MULADD(at[43], at[67]); MULADD(at[44], at[66]); MULADD(at[45], at[65]); MULADD(at[46], at[64]); - COMBA_STORE(C->dp[46]); - /* 47 */ - COMBA_FORWARD; - MULADD(at[0], at[111]); MULADD(at[1], at[110]); MULADD(at[2], at[109]); MULADD(at[3], at[108]); MULADD(at[4], at[107]); MULADD(at[5], at[106]); MULADD(at[6], at[105]); MULADD(at[7], at[104]); MULADD(at[8], at[103]); MULADD(at[9], at[102]); MULADD(at[10], at[101]); MULADD(at[11], at[100]); MULADD(at[12], at[99]); MULADD(at[13], at[98]); MULADD(at[14], at[97]); MULADD(at[15], at[96]); MULADD(at[16], at[95]); MULADD(at[17], at[94]); MULADD(at[18], at[93]); MULADD(at[19], at[92]); MULADD(at[20], at[91]); MULADD(at[21], at[90]); MULADD(at[22], at[89]); MULADD(at[23], at[88]); MULADD(at[24], at[87]); MULADD(at[25], at[86]); MULADD(at[26], at[85]); MULADD(at[27], at[84]); MULADD(at[28], at[83]); MULADD(at[29], at[82]); MULADD(at[30], at[81]); MULADD(at[31], at[80]); MULADD(at[32], at[79]); MULADD(at[33], at[78]); MULADD(at[34], at[77]); MULADD(at[35], at[76]); MULADD(at[36], at[75]); MULADD(at[37], at[74]); MULADD(at[38], at[73]); MULADD(at[39], at[72]); MULADD(at[40], at[71]); MULADD(at[41], at[70]); MULADD(at[42], at[69]); MULADD(at[43], at[68]); MULADD(at[44], at[67]); MULADD(at[45], at[66]); MULADD(at[46], at[65]); MULADD(at[47], at[64]); - COMBA_STORE(C->dp[47]); - /* 48 */ - COMBA_FORWARD; - MULADD(at[0], at[112]); MULADD(at[1], at[111]); MULADD(at[2], at[110]); MULADD(at[3], at[109]); MULADD(at[4], at[108]); MULADD(at[5], at[107]); MULADD(at[6], at[106]); MULADD(at[7], at[105]); MULADD(at[8], at[104]); MULADD(at[9], at[103]); MULADD(at[10], at[102]); MULADD(at[11], at[101]); MULADD(at[12], at[100]); MULADD(at[13], at[99]); MULADD(at[14], at[98]); MULADD(at[15], at[97]); MULADD(at[16], at[96]); MULADD(at[17], at[95]); MULADD(at[18], at[94]); MULADD(at[19], at[93]); MULADD(at[20], at[92]); MULADD(at[21], at[91]); MULADD(at[22], at[90]); MULADD(at[23], at[89]); MULADD(at[24], at[88]); MULADD(at[25], at[87]); MULADD(at[26], at[86]); MULADD(at[27], at[85]); MULADD(at[28], at[84]); MULADD(at[29], at[83]); MULADD(at[30], at[82]); MULADD(at[31], at[81]); MULADD(at[32], at[80]); MULADD(at[33], at[79]); MULADD(at[34], at[78]); MULADD(at[35], at[77]); MULADD(at[36], at[76]); MULADD(at[37], at[75]); MULADD(at[38], at[74]); MULADD(at[39], at[73]); MULADD(at[40], at[72]); MULADD(at[41], at[71]); MULADD(at[42], at[70]); MULADD(at[43], at[69]); MULADD(at[44], at[68]); MULADD(at[45], at[67]); MULADD(at[46], at[66]); MULADD(at[47], at[65]); MULADD(at[48], at[64]); - COMBA_STORE(C->dp[48]); - /* 49 */ - COMBA_FORWARD; - MULADD(at[0], at[113]); MULADD(at[1], at[112]); MULADD(at[2], at[111]); MULADD(at[3], at[110]); MULADD(at[4], at[109]); MULADD(at[5], at[108]); MULADD(at[6], at[107]); MULADD(at[7], at[106]); MULADD(at[8], at[105]); MULADD(at[9], at[104]); MULADD(at[10], at[103]); MULADD(at[11], at[102]); MULADD(at[12], at[101]); MULADD(at[13], at[100]); MULADD(at[14], at[99]); MULADD(at[15], at[98]); MULADD(at[16], at[97]); MULADD(at[17], at[96]); MULADD(at[18], at[95]); MULADD(at[19], at[94]); MULADD(at[20], at[93]); MULADD(at[21], at[92]); MULADD(at[22], at[91]); MULADD(at[23], at[90]); MULADD(at[24], at[89]); MULADD(at[25], at[88]); MULADD(at[26], at[87]); MULADD(at[27], at[86]); MULADD(at[28], at[85]); MULADD(at[29], at[84]); MULADD(at[30], at[83]); MULADD(at[31], at[82]); MULADD(at[32], at[81]); MULADD(at[33], at[80]); MULADD(at[34], at[79]); MULADD(at[35], at[78]); MULADD(at[36], at[77]); MULADD(at[37], at[76]); MULADD(at[38], at[75]); MULADD(at[39], at[74]); MULADD(at[40], at[73]); MULADD(at[41], at[72]); MULADD(at[42], at[71]); MULADD(at[43], at[70]); MULADD(at[44], at[69]); MULADD(at[45], at[68]); MULADD(at[46], at[67]); MULADD(at[47], at[66]); MULADD(at[48], at[65]); MULADD(at[49], at[64]); - COMBA_STORE(C->dp[49]); - /* 50 */ - COMBA_FORWARD; - MULADD(at[0], at[114]); MULADD(at[1], at[113]); MULADD(at[2], at[112]); MULADD(at[3], at[111]); MULADD(at[4], at[110]); MULADD(at[5], at[109]); MULADD(at[6], at[108]); MULADD(at[7], at[107]); MULADD(at[8], at[106]); MULADD(at[9], at[105]); MULADD(at[10], at[104]); MULADD(at[11], at[103]); MULADD(at[12], at[102]); MULADD(at[13], at[101]); MULADD(at[14], at[100]); MULADD(at[15], at[99]); MULADD(at[16], at[98]); MULADD(at[17], at[97]); MULADD(at[18], at[96]); MULADD(at[19], at[95]); MULADD(at[20], at[94]); MULADD(at[21], at[93]); MULADD(at[22], at[92]); MULADD(at[23], at[91]); MULADD(at[24], at[90]); MULADD(at[25], at[89]); MULADD(at[26], at[88]); MULADD(at[27], at[87]); MULADD(at[28], at[86]); MULADD(at[29], at[85]); MULADD(at[30], at[84]); MULADD(at[31], at[83]); MULADD(at[32], at[82]); MULADD(at[33], at[81]); MULADD(at[34], at[80]); MULADD(at[35], at[79]); MULADD(at[36], at[78]); MULADD(at[37], at[77]); MULADD(at[38], at[76]); MULADD(at[39], at[75]); MULADD(at[40], at[74]); MULADD(at[41], at[73]); MULADD(at[42], at[72]); MULADD(at[43], at[71]); MULADD(at[44], at[70]); MULADD(at[45], at[69]); MULADD(at[46], at[68]); MULADD(at[47], at[67]); MULADD(at[48], at[66]); MULADD(at[49], at[65]); MULADD(at[50], at[64]); - COMBA_STORE(C->dp[50]); - /* 51 */ - COMBA_FORWARD; - MULADD(at[0], at[115]); MULADD(at[1], at[114]); MULADD(at[2], at[113]); MULADD(at[3], at[112]); MULADD(at[4], at[111]); MULADD(at[5], at[110]); MULADD(at[6], at[109]); MULADD(at[7], at[108]); MULADD(at[8], at[107]); MULADD(at[9], at[106]); MULADD(at[10], at[105]); MULADD(at[11], at[104]); MULADD(at[12], at[103]); MULADD(at[13], at[102]); MULADD(at[14], at[101]); MULADD(at[15], at[100]); MULADD(at[16], at[99]); MULADD(at[17], at[98]); MULADD(at[18], at[97]); MULADD(at[19], at[96]); MULADD(at[20], at[95]); MULADD(at[21], at[94]); MULADD(at[22], at[93]); MULADD(at[23], at[92]); MULADD(at[24], at[91]); MULADD(at[25], at[90]); MULADD(at[26], at[89]); MULADD(at[27], at[88]); MULADD(at[28], at[87]); MULADD(at[29], at[86]); MULADD(at[30], at[85]); MULADD(at[31], at[84]); MULADD(at[32], at[83]); MULADD(at[33], at[82]); MULADD(at[34], at[81]); MULADD(at[35], at[80]); MULADD(at[36], at[79]); MULADD(at[37], at[78]); MULADD(at[38], at[77]); MULADD(at[39], at[76]); MULADD(at[40], at[75]); MULADD(at[41], at[74]); MULADD(at[42], at[73]); MULADD(at[43], at[72]); MULADD(at[44], at[71]); MULADD(at[45], at[70]); MULADD(at[46], at[69]); MULADD(at[47], at[68]); MULADD(at[48], at[67]); MULADD(at[49], at[66]); MULADD(at[50], at[65]); MULADD(at[51], at[64]); - COMBA_STORE(C->dp[51]); - /* 52 */ - COMBA_FORWARD; - MULADD(at[0], at[116]); MULADD(at[1], at[115]); MULADD(at[2], at[114]); MULADD(at[3], at[113]); MULADD(at[4], at[112]); MULADD(at[5], at[111]); MULADD(at[6], at[110]); MULADD(at[7], at[109]); MULADD(at[8], at[108]); MULADD(at[9], at[107]); MULADD(at[10], at[106]); MULADD(at[11], at[105]); MULADD(at[12], at[104]); MULADD(at[13], at[103]); MULADD(at[14], at[102]); MULADD(at[15], at[101]); MULADD(at[16], at[100]); MULADD(at[17], at[99]); MULADD(at[18], at[98]); MULADD(at[19], at[97]); MULADD(at[20], at[96]); MULADD(at[21], at[95]); MULADD(at[22], at[94]); MULADD(at[23], at[93]); MULADD(at[24], at[92]); MULADD(at[25], at[91]); MULADD(at[26], at[90]); MULADD(at[27], at[89]); MULADD(at[28], at[88]); MULADD(at[29], at[87]); MULADD(at[30], at[86]); MULADD(at[31], at[85]); MULADD(at[32], at[84]); MULADD(at[33], at[83]); MULADD(at[34], at[82]); MULADD(at[35], at[81]); MULADD(at[36], at[80]); MULADD(at[37], at[79]); MULADD(at[38], at[78]); MULADD(at[39], at[77]); MULADD(at[40], at[76]); MULADD(at[41], at[75]); MULADD(at[42], at[74]); MULADD(at[43], at[73]); MULADD(at[44], at[72]); MULADD(at[45], at[71]); MULADD(at[46], at[70]); MULADD(at[47], at[69]); MULADD(at[48], at[68]); MULADD(at[49], at[67]); MULADD(at[50], at[66]); MULADD(at[51], at[65]); MULADD(at[52], at[64]); - COMBA_STORE(C->dp[52]); - /* 53 */ - COMBA_FORWARD; - MULADD(at[0], at[117]); MULADD(at[1], at[116]); MULADD(at[2], at[115]); MULADD(at[3], at[114]); MULADD(at[4], at[113]); MULADD(at[5], at[112]); MULADD(at[6], at[111]); MULADD(at[7], at[110]); MULADD(at[8], at[109]); MULADD(at[9], at[108]); MULADD(at[10], at[107]); MULADD(at[11], at[106]); MULADD(at[12], at[105]); MULADD(at[13], at[104]); MULADD(at[14], at[103]); MULADD(at[15], at[102]); MULADD(at[16], at[101]); MULADD(at[17], at[100]); MULADD(at[18], at[99]); MULADD(at[19], at[98]); MULADD(at[20], at[97]); MULADD(at[21], at[96]); MULADD(at[22], at[95]); MULADD(at[23], at[94]); MULADD(at[24], at[93]); MULADD(at[25], at[92]); MULADD(at[26], at[91]); MULADD(at[27], at[90]); MULADD(at[28], at[89]); MULADD(at[29], at[88]); MULADD(at[30], at[87]); MULADD(at[31], at[86]); MULADD(at[32], at[85]); MULADD(at[33], at[84]); MULADD(at[34], at[83]); MULADD(at[35], at[82]); MULADD(at[36], at[81]); MULADD(at[37], at[80]); MULADD(at[38], at[79]); MULADD(at[39], at[78]); MULADD(at[40], at[77]); MULADD(at[41], at[76]); MULADD(at[42], at[75]); MULADD(at[43], at[74]); MULADD(at[44], at[73]); MULADD(at[45], at[72]); MULADD(at[46], at[71]); MULADD(at[47], at[70]); MULADD(at[48], at[69]); MULADD(at[49], at[68]); MULADD(at[50], at[67]); MULADD(at[51], at[66]); MULADD(at[52], at[65]); MULADD(at[53], at[64]); - COMBA_STORE(C->dp[53]); - /* 54 */ - COMBA_FORWARD; - MULADD(at[0], at[118]); MULADD(at[1], at[117]); MULADD(at[2], at[116]); MULADD(at[3], at[115]); MULADD(at[4], at[114]); MULADD(at[5], at[113]); MULADD(at[6], at[112]); MULADD(at[7], at[111]); MULADD(at[8], at[110]); MULADD(at[9], at[109]); MULADD(at[10], at[108]); MULADD(at[11], at[107]); MULADD(at[12], at[106]); MULADD(at[13], at[105]); MULADD(at[14], at[104]); MULADD(at[15], at[103]); MULADD(at[16], at[102]); MULADD(at[17], at[101]); MULADD(at[18], at[100]); MULADD(at[19], at[99]); MULADD(at[20], at[98]); MULADD(at[21], at[97]); MULADD(at[22], at[96]); MULADD(at[23], at[95]); MULADD(at[24], at[94]); MULADD(at[25], at[93]); MULADD(at[26], at[92]); MULADD(at[27], at[91]); MULADD(at[28], at[90]); MULADD(at[29], at[89]); MULADD(at[30], at[88]); MULADD(at[31], at[87]); MULADD(at[32], at[86]); MULADD(at[33], at[85]); MULADD(at[34], at[84]); MULADD(at[35], at[83]); MULADD(at[36], at[82]); MULADD(at[37], at[81]); MULADD(at[38], at[80]); MULADD(at[39], at[79]); MULADD(at[40], at[78]); MULADD(at[41], at[77]); MULADD(at[42], at[76]); MULADD(at[43], at[75]); MULADD(at[44], at[74]); MULADD(at[45], at[73]); MULADD(at[46], at[72]); MULADD(at[47], at[71]); MULADD(at[48], at[70]); MULADD(at[49], at[69]); MULADD(at[50], at[68]); MULADD(at[51], at[67]); MULADD(at[52], at[66]); MULADD(at[53], at[65]); MULADD(at[54], at[64]); - COMBA_STORE(C->dp[54]); - /* 55 */ - COMBA_FORWARD; - MULADD(at[0], at[119]); MULADD(at[1], at[118]); MULADD(at[2], at[117]); MULADD(at[3], at[116]); MULADD(at[4], at[115]); MULADD(at[5], at[114]); MULADD(at[6], at[113]); MULADD(at[7], at[112]); MULADD(at[8], at[111]); MULADD(at[9], at[110]); MULADD(at[10], at[109]); MULADD(at[11], at[108]); MULADD(at[12], at[107]); MULADD(at[13], at[106]); MULADD(at[14], at[105]); MULADD(at[15], at[104]); MULADD(at[16], at[103]); MULADD(at[17], at[102]); MULADD(at[18], at[101]); MULADD(at[19], at[100]); MULADD(at[20], at[99]); MULADD(at[21], at[98]); MULADD(at[22], at[97]); MULADD(at[23], at[96]); MULADD(at[24], at[95]); MULADD(at[25], at[94]); MULADD(at[26], at[93]); MULADD(at[27], at[92]); MULADD(at[28], at[91]); MULADD(at[29], at[90]); MULADD(at[30], at[89]); MULADD(at[31], at[88]); MULADD(at[32], at[87]); MULADD(at[33], at[86]); MULADD(at[34], at[85]); MULADD(at[35], at[84]); MULADD(at[36], at[83]); MULADD(at[37], at[82]); MULADD(at[38], at[81]); MULADD(at[39], at[80]); MULADD(at[40], at[79]); MULADD(at[41], at[78]); MULADD(at[42], at[77]); MULADD(at[43], at[76]); MULADD(at[44], at[75]); MULADD(at[45], at[74]); MULADD(at[46], at[73]); MULADD(at[47], at[72]); MULADD(at[48], at[71]); MULADD(at[49], at[70]); MULADD(at[50], at[69]); MULADD(at[51], at[68]); MULADD(at[52], at[67]); MULADD(at[53], at[66]); MULADD(at[54], at[65]); MULADD(at[55], at[64]); - COMBA_STORE(C->dp[55]); - /* 56 */ - COMBA_FORWARD; - MULADD(at[0], at[120]); MULADD(at[1], at[119]); MULADD(at[2], at[118]); MULADD(at[3], at[117]); MULADD(at[4], at[116]); MULADD(at[5], at[115]); MULADD(at[6], at[114]); MULADD(at[7], at[113]); MULADD(at[8], at[112]); MULADD(at[9], at[111]); MULADD(at[10], at[110]); MULADD(at[11], at[109]); MULADD(at[12], at[108]); MULADD(at[13], at[107]); MULADD(at[14], at[106]); MULADD(at[15], at[105]); MULADD(at[16], at[104]); MULADD(at[17], at[103]); MULADD(at[18], at[102]); MULADD(at[19], at[101]); MULADD(at[20], at[100]); MULADD(at[21], at[99]); MULADD(at[22], at[98]); MULADD(at[23], at[97]); MULADD(at[24], at[96]); MULADD(at[25], at[95]); MULADD(at[26], at[94]); MULADD(at[27], at[93]); MULADD(at[28], at[92]); MULADD(at[29], at[91]); MULADD(at[30], at[90]); MULADD(at[31], at[89]); MULADD(at[32], at[88]); MULADD(at[33], at[87]); MULADD(at[34], at[86]); MULADD(at[35], at[85]); MULADD(at[36], at[84]); MULADD(at[37], at[83]); MULADD(at[38], at[82]); MULADD(at[39], at[81]); MULADD(at[40], at[80]); MULADD(at[41], at[79]); MULADD(at[42], at[78]); MULADD(at[43], at[77]); MULADD(at[44], at[76]); MULADD(at[45], at[75]); MULADD(at[46], at[74]); MULADD(at[47], at[73]); MULADD(at[48], at[72]); MULADD(at[49], at[71]); MULADD(at[50], at[70]); MULADD(at[51], at[69]); MULADD(at[52], at[68]); MULADD(at[53], at[67]); MULADD(at[54], at[66]); MULADD(at[55], at[65]); MULADD(at[56], at[64]); - COMBA_STORE(C->dp[56]); - /* 57 */ - COMBA_FORWARD; - MULADD(at[0], at[121]); MULADD(at[1], at[120]); MULADD(at[2], at[119]); MULADD(at[3], at[118]); MULADD(at[4], at[117]); MULADD(at[5], at[116]); MULADD(at[6], at[115]); MULADD(at[7], at[114]); MULADD(at[8], at[113]); MULADD(at[9], at[112]); MULADD(at[10], at[111]); MULADD(at[11], at[110]); MULADD(at[12], at[109]); MULADD(at[13], at[108]); MULADD(at[14], at[107]); MULADD(at[15], at[106]); MULADD(at[16], at[105]); MULADD(at[17], at[104]); MULADD(at[18], at[103]); MULADD(at[19], at[102]); MULADD(at[20], at[101]); MULADD(at[21], at[100]); MULADD(at[22], at[99]); MULADD(at[23], at[98]); MULADD(at[24], at[97]); MULADD(at[25], at[96]); MULADD(at[26], at[95]); MULADD(at[27], at[94]); MULADD(at[28], at[93]); MULADD(at[29], at[92]); MULADD(at[30], at[91]); MULADD(at[31], at[90]); MULADD(at[32], at[89]); MULADD(at[33], at[88]); MULADD(at[34], at[87]); MULADD(at[35], at[86]); MULADD(at[36], at[85]); MULADD(at[37], at[84]); MULADD(at[38], at[83]); MULADD(at[39], at[82]); MULADD(at[40], at[81]); MULADD(at[41], at[80]); MULADD(at[42], at[79]); MULADD(at[43], at[78]); MULADD(at[44], at[77]); MULADD(at[45], at[76]); MULADD(at[46], at[75]); MULADD(at[47], at[74]); MULADD(at[48], at[73]); MULADD(at[49], at[72]); MULADD(at[50], at[71]); MULADD(at[51], at[70]); MULADD(at[52], at[69]); MULADD(at[53], at[68]); MULADD(at[54], at[67]); MULADD(at[55], at[66]); MULADD(at[56], at[65]); MULADD(at[57], at[64]); - COMBA_STORE(C->dp[57]); - /* 58 */ - COMBA_FORWARD; - MULADD(at[0], at[122]); MULADD(at[1], at[121]); MULADD(at[2], at[120]); MULADD(at[3], at[119]); MULADD(at[4], at[118]); MULADD(at[5], at[117]); MULADD(at[6], at[116]); MULADD(at[7], at[115]); MULADD(at[8], at[114]); MULADD(at[9], at[113]); MULADD(at[10], at[112]); MULADD(at[11], at[111]); MULADD(at[12], at[110]); MULADD(at[13], at[109]); MULADD(at[14], at[108]); MULADD(at[15], at[107]); MULADD(at[16], at[106]); MULADD(at[17], at[105]); MULADD(at[18], at[104]); MULADD(at[19], at[103]); MULADD(at[20], at[102]); MULADD(at[21], at[101]); MULADD(at[22], at[100]); MULADD(at[23], at[99]); MULADD(at[24], at[98]); MULADD(at[25], at[97]); MULADD(at[26], at[96]); MULADD(at[27], at[95]); MULADD(at[28], at[94]); MULADD(at[29], at[93]); MULADD(at[30], at[92]); MULADD(at[31], at[91]); MULADD(at[32], at[90]); MULADD(at[33], at[89]); MULADD(at[34], at[88]); MULADD(at[35], at[87]); MULADD(at[36], at[86]); MULADD(at[37], at[85]); MULADD(at[38], at[84]); MULADD(at[39], at[83]); MULADD(at[40], at[82]); MULADD(at[41], at[81]); MULADD(at[42], at[80]); MULADD(at[43], at[79]); MULADD(at[44], at[78]); MULADD(at[45], at[77]); MULADD(at[46], at[76]); MULADD(at[47], at[75]); MULADD(at[48], at[74]); MULADD(at[49], at[73]); MULADD(at[50], at[72]); MULADD(at[51], at[71]); MULADD(at[52], at[70]); MULADD(at[53], at[69]); MULADD(at[54], at[68]); MULADD(at[55], at[67]); MULADD(at[56], at[66]); MULADD(at[57], at[65]); MULADD(at[58], at[64]); - COMBA_STORE(C->dp[58]); - /* 59 */ - COMBA_FORWARD; - MULADD(at[0], at[123]); MULADD(at[1], at[122]); MULADD(at[2], at[121]); MULADD(at[3], at[120]); MULADD(at[4], at[119]); MULADD(at[5], at[118]); MULADD(at[6], at[117]); MULADD(at[7], at[116]); MULADD(at[8], at[115]); MULADD(at[9], at[114]); MULADD(at[10], at[113]); MULADD(at[11], at[112]); MULADD(at[12], at[111]); MULADD(at[13], at[110]); MULADD(at[14], at[109]); MULADD(at[15], at[108]); MULADD(at[16], at[107]); MULADD(at[17], at[106]); MULADD(at[18], at[105]); MULADD(at[19], at[104]); MULADD(at[20], at[103]); MULADD(at[21], at[102]); MULADD(at[22], at[101]); MULADD(at[23], at[100]); MULADD(at[24], at[99]); MULADD(at[25], at[98]); MULADD(at[26], at[97]); MULADD(at[27], at[96]); MULADD(at[28], at[95]); MULADD(at[29], at[94]); MULADD(at[30], at[93]); MULADD(at[31], at[92]); MULADD(at[32], at[91]); MULADD(at[33], at[90]); MULADD(at[34], at[89]); MULADD(at[35], at[88]); MULADD(at[36], at[87]); MULADD(at[37], at[86]); MULADD(at[38], at[85]); MULADD(at[39], at[84]); MULADD(at[40], at[83]); MULADD(at[41], at[82]); MULADD(at[42], at[81]); MULADD(at[43], at[80]); MULADD(at[44], at[79]); MULADD(at[45], at[78]); MULADD(at[46], at[77]); MULADD(at[47], at[76]); MULADD(at[48], at[75]); MULADD(at[49], at[74]); MULADD(at[50], at[73]); MULADD(at[51], at[72]); MULADD(at[52], at[71]); MULADD(at[53], at[70]); MULADD(at[54], at[69]); MULADD(at[55], at[68]); MULADD(at[56], at[67]); MULADD(at[57], at[66]); MULADD(at[58], at[65]); MULADD(at[59], at[64]); - COMBA_STORE(C->dp[59]); - /* 60 */ - COMBA_FORWARD; - MULADD(at[0], at[124]); MULADD(at[1], at[123]); MULADD(at[2], at[122]); MULADD(at[3], at[121]); MULADD(at[4], at[120]); MULADD(at[5], at[119]); MULADD(at[6], at[118]); MULADD(at[7], at[117]); MULADD(at[8], at[116]); MULADD(at[9], at[115]); MULADD(at[10], at[114]); MULADD(at[11], at[113]); MULADD(at[12], at[112]); MULADD(at[13], at[111]); MULADD(at[14], at[110]); MULADD(at[15], at[109]); MULADD(at[16], at[108]); MULADD(at[17], at[107]); MULADD(at[18], at[106]); MULADD(at[19], at[105]); MULADD(at[20], at[104]); MULADD(at[21], at[103]); MULADD(at[22], at[102]); MULADD(at[23], at[101]); MULADD(at[24], at[100]); MULADD(at[25], at[99]); MULADD(at[26], at[98]); MULADD(at[27], at[97]); MULADD(at[28], at[96]); MULADD(at[29], at[95]); MULADD(at[30], at[94]); MULADD(at[31], at[93]); MULADD(at[32], at[92]); MULADD(at[33], at[91]); MULADD(at[34], at[90]); MULADD(at[35], at[89]); MULADD(at[36], at[88]); MULADD(at[37], at[87]); MULADD(at[38], at[86]); MULADD(at[39], at[85]); MULADD(at[40], at[84]); MULADD(at[41], at[83]); MULADD(at[42], at[82]); MULADD(at[43], at[81]); MULADD(at[44], at[80]); MULADD(at[45], at[79]); MULADD(at[46], at[78]); MULADD(at[47], at[77]); MULADD(at[48], at[76]); MULADD(at[49], at[75]); MULADD(at[50], at[74]); MULADD(at[51], at[73]); MULADD(at[52], at[72]); MULADD(at[53], at[71]); MULADD(at[54], at[70]); MULADD(at[55], at[69]); MULADD(at[56], at[68]); MULADD(at[57], at[67]); MULADD(at[58], at[66]); MULADD(at[59], at[65]); MULADD(at[60], at[64]); - COMBA_STORE(C->dp[60]); - /* 61 */ - COMBA_FORWARD; - MULADD(at[0], at[125]); MULADD(at[1], at[124]); MULADD(at[2], at[123]); MULADD(at[3], at[122]); MULADD(at[4], at[121]); MULADD(at[5], at[120]); MULADD(at[6], at[119]); MULADD(at[7], at[118]); MULADD(at[8], at[117]); MULADD(at[9], at[116]); MULADD(at[10], at[115]); MULADD(at[11], at[114]); MULADD(at[12], at[113]); MULADD(at[13], at[112]); MULADD(at[14], at[111]); MULADD(at[15], at[110]); MULADD(at[16], at[109]); MULADD(at[17], at[108]); MULADD(at[18], at[107]); MULADD(at[19], at[106]); MULADD(at[20], at[105]); MULADD(at[21], at[104]); MULADD(at[22], at[103]); MULADD(at[23], at[102]); MULADD(at[24], at[101]); MULADD(at[25], at[100]); MULADD(at[26], at[99]); MULADD(at[27], at[98]); MULADD(at[28], at[97]); MULADD(at[29], at[96]); MULADD(at[30], at[95]); MULADD(at[31], at[94]); MULADD(at[32], at[93]); MULADD(at[33], at[92]); MULADD(at[34], at[91]); MULADD(at[35], at[90]); MULADD(at[36], at[89]); MULADD(at[37], at[88]); MULADD(at[38], at[87]); MULADD(at[39], at[86]); MULADD(at[40], at[85]); MULADD(at[41], at[84]); MULADD(at[42], at[83]); MULADD(at[43], at[82]); MULADD(at[44], at[81]); MULADD(at[45], at[80]); MULADD(at[46], at[79]); MULADD(at[47], at[78]); MULADD(at[48], at[77]); MULADD(at[49], at[76]); MULADD(at[50], at[75]); MULADD(at[51], at[74]); MULADD(at[52], at[73]); MULADD(at[53], at[72]); MULADD(at[54], at[71]); MULADD(at[55], at[70]); MULADD(at[56], at[69]); MULADD(at[57], at[68]); MULADD(at[58], at[67]); MULADD(at[59], at[66]); MULADD(at[60], at[65]); MULADD(at[61], at[64]); - COMBA_STORE(C->dp[61]); - /* 62 */ - COMBA_FORWARD; - MULADD(at[0], at[126]); MULADD(at[1], at[125]); MULADD(at[2], at[124]); MULADD(at[3], at[123]); MULADD(at[4], at[122]); MULADD(at[5], at[121]); MULADD(at[6], at[120]); MULADD(at[7], at[119]); MULADD(at[8], at[118]); MULADD(at[9], at[117]); MULADD(at[10], at[116]); MULADD(at[11], at[115]); MULADD(at[12], at[114]); MULADD(at[13], at[113]); MULADD(at[14], at[112]); MULADD(at[15], at[111]); MULADD(at[16], at[110]); MULADD(at[17], at[109]); MULADD(at[18], at[108]); MULADD(at[19], at[107]); MULADD(at[20], at[106]); MULADD(at[21], at[105]); MULADD(at[22], at[104]); MULADD(at[23], at[103]); MULADD(at[24], at[102]); MULADD(at[25], at[101]); MULADD(at[26], at[100]); MULADD(at[27], at[99]); MULADD(at[28], at[98]); MULADD(at[29], at[97]); MULADD(at[30], at[96]); MULADD(at[31], at[95]); MULADD(at[32], at[94]); MULADD(at[33], at[93]); MULADD(at[34], at[92]); MULADD(at[35], at[91]); MULADD(at[36], at[90]); MULADD(at[37], at[89]); MULADD(at[38], at[88]); MULADD(at[39], at[87]); MULADD(at[40], at[86]); MULADD(at[41], at[85]); MULADD(at[42], at[84]); MULADD(at[43], at[83]); MULADD(at[44], at[82]); MULADD(at[45], at[81]); MULADD(at[46], at[80]); MULADD(at[47], at[79]); MULADD(at[48], at[78]); MULADD(at[49], at[77]); MULADD(at[50], at[76]); MULADD(at[51], at[75]); MULADD(at[52], at[74]); MULADD(at[53], at[73]); MULADD(at[54], at[72]); MULADD(at[55], at[71]); MULADD(at[56], at[70]); MULADD(at[57], at[69]); MULADD(at[58], at[68]); MULADD(at[59], at[67]); MULADD(at[60], at[66]); MULADD(at[61], at[65]); MULADD(at[62], at[64]); - COMBA_STORE(C->dp[62]); - /* 63 */ - COMBA_FORWARD; - MULADD(at[0], at[127]); MULADD(at[1], at[126]); MULADD(at[2], at[125]); MULADD(at[3], at[124]); MULADD(at[4], at[123]); MULADD(at[5], at[122]); MULADD(at[6], at[121]); MULADD(at[7], at[120]); MULADD(at[8], at[119]); MULADD(at[9], at[118]); MULADD(at[10], at[117]); MULADD(at[11], at[116]); MULADD(at[12], at[115]); MULADD(at[13], at[114]); MULADD(at[14], at[113]); MULADD(at[15], at[112]); MULADD(at[16], at[111]); MULADD(at[17], at[110]); MULADD(at[18], at[109]); MULADD(at[19], at[108]); MULADD(at[20], at[107]); MULADD(at[21], at[106]); MULADD(at[22], at[105]); MULADD(at[23], at[104]); MULADD(at[24], at[103]); MULADD(at[25], at[102]); MULADD(at[26], at[101]); MULADD(at[27], at[100]); MULADD(at[28], at[99]); MULADD(at[29], at[98]); MULADD(at[30], at[97]); MULADD(at[31], at[96]); MULADD(at[32], at[95]); MULADD(at[33], at[94]); MULADD(at[34], at[93]); MULADD(at[35], at[92]); MULADD(at[36], at[91]); MULADD(at[37], at[90]); MULADD(at[38], at[89]); MULADD(at[39], at[88]); MULADD(at[40], at[87]); MULADD(at[41], at[86]); MULADD(at[42], at[85]); MULADD(at[43], at[84]); MULADD(at[44], at[83]); MULADD(at[45], at[82]); MULADD(at[46], at[81]); MULADD(at[47], at[80]); MULADD(at[48], at[79]); MULADD(at[49], at[78]); MULADD(at[50], at[77]); MULADD(at[51], at[76]); MULADD(at[52], at[75]); MULADD(at[53], at[74]); MULADD(at[54], at[73]); MULADD(at[55], at[72]); MULADD(at[56], at[71]); MULADD(at[57], at[70]); MULADD(at[58], at[69]); MULADD(at[59], at[68]); MULADD(at[60], at[67]); MULADD(at[61], at[66]); MULADD(at[62], at[65]); MULADD(at[63], at[64]); - COMBA_STORE(C->dp[63]); - /* 64 */ - COMBA_FORWARD; - MULADD(at[1], at[127]); MULADD(at[2], at[126]); MULADD(at[3], at[125]); MULADD(at[4], at[124]); MULADD(at[5], at[123]); MULADD(at[6], at[122]); MULADD(at[7], at[121]); MULADD(at[8], at[120]); MULADD(at[9], at[119]); MULADD(at[10], at[118]); MULADD(at[11], at[117]); MULADD(at[12], at[116]); MULADD(at[13], at[115]); MULADD(at[14], at[114]); MULADD(at[15], at[113]); MULADD(at[16], at[112]); MULADD(at[17], at[111]); MULADD(at[18], at[110]); MULADD(at[19], at[109]); MULADD(at[20], at[108]); MULADD(at[21], at[107]); MULADD(at[22], at[106]); MULADD(at[23], at[105]); MULADD(at[24], at[104]); MULADD(at[25], at[103]); MULADD(at[26], at[102]); MULADD(at[27], at[101]); MULADD(at[28], at[100]); MULADD(at[29], at[99]); MULADD(at[30], at[98]); MULADD(at[31], at[97]); MULADD(at[32], at[96]); MULADD(at[33], at[95]); MULADD(at[34], at[94]); MULADD(at[35], at[93]); MULADD(at[36], at[92]); MULADD(at[37], at[91]); MULADD(at[38], at[90]); MULADD(at[39], at[89]); MULADD(at[40], at[88]); MULADD(at[41], at[87]); MULADD(at[42], at[86]); MULADD(at[43], at[85]); MULADD(at[44], at[84]); MULADD(at[45], at[83]); MULADD(at[46], at[82]); MULADD(at[47], at[81]); MULADD(at[48], at[80]); MULADD(at[49], at[79]); MULADD(at[50], at[78]); MULADD(at[51], at[77]); MULADD(at[52], at[76]); MULADD(at[53], at[75]); MULADD(at[54], at[74]); MULADD(at[55], at[73]); MULADD(at[56], at[72]); MULADD(at[57], at[71]); MULADD(at[58], at[70]); MULADD(at[59], at[69]); MULADD(at[60], at[68]); MULADD(at[61], at[67]); MULADD(at[62], at[66]); MULADD(at[63], at[65]); - COMBA_STORE(C->dp[64]); - /* 65 */ - COMBA_FORWARD; - MULADD(at[2], at[127]); MULADD(at[3], at[126]); MULADD(at[4], at[125]); MULADD(at[5], at[124]); MULADD(at[6], at[123]); MULADD(at[7], at[122]); MULADD(at[8], at[121]); MULADD(at[9], at[120]); MULADD(at[10], at[119]); MULADD(at[11], at[118]); MULADD(at[12], at[117]); MULADD(at[13], at[116]); MULADD(at[14], at[115]); MULADD(at[15], at[114]); MULADD(at[16], at[113]); MULADD(at[17], at[112]); MULADD(at[18], at[111]); MULADD(at[19], at[110]); MULADD(at[20], at[109]); MULADD(at[21], at[108]); MULADD(at[22], at[107]); MULADD(at[23], at[106]); MULADD(at[24], at[105]); MULADD(at[25], at[104]); MULADD(at[26], at[103]); MULADD(at[27], at[102]); MULADD(at[28], at[101]); MULADD(at[29], at[100]); MULADD(at[30], at[99]); MULADD(at[31], at[98]); MULADD(at[32], at[97]); MULADD(at[33], at[96]); MULADD(at[34], at[95]); MULADD(at[35], at[94]); MULADD(at[36], at[93]); MULADD(at[37], at[92]); MULADD(at[38], at[91]); MULADD(at[39], at[90]); MULADD(at[40], at[89]); MULADD(at[41], at[88]); MULADD(at[42], at[87]); MULADD(at[43], at[86]); MULADD(at[44], at[85]); MULADD(at[45], at[84]); MULADD(at[46], at[83]); MULADD(at[47], at[82]); MULADD(at[48], at[81]); MULADD(at[49], at[80]); MULADD(at[50], at[79]); MULADD(at[51], at[78]); MULADD(at[52], at[77]); MULADD(at[53], at[76]); MULADD(at[54], at[75]); MULADD(at[55], at[74]); MULADD(at[56], at[73]); MULADD(at[57], at[72]); MULADD(at[58], at[71]); MULADD(at[59], at[70]); MULADD(at[60], at[69]); MULADD(at[61], at[68]); MULADD(at[62], at[67]); MULADD(at[63], at[66]); - COMBA_STORE(C->dp[65]); - /* 66 */ - COMBA_FORWARD; - MULADD(at[3], at[127]); MULADD(at[4], at[126]); MULADD(at[5], at[125]); MULADD(at[6], at[124]); MULADD(at[7], at[123]); MULADD(at[8], at[122]); MULADD(at[9], at[121]); MULADD(at[10], at[120]); MULADD(at[11], at[119]); MULADD(at[12], at[118]); MULADD(at[13], at[117]); MULADD(at[14], at[116]); MULADD(at[15], at[115]); MULADD(at[16], at[114]); MULADD(at[17], at[113]); MULADD(at[18], at[112]); MULADD(at[19], at[111]); MULADD(at[20], at[110]); MULADD(at[21], at[109]); MULADD(at[22], at[108]); MULADD(at[23], at[107]); MULADD(at[24], at[106]); MULADD(at[25], at[105]); MULADD(at[26], at[104]); MULADD(at[27], at[103]); MULADD(at[28], at[102]); MULADD(at[29], at[101]); MULADD(at[30], at[100]); MULADD(at[31], at[99]); MULADD(at[32], at[98]); MULADD(at[33], at[97]); MULADD(at[34], at[96]); MULADD(at[35], at[95]); MULADD(at[36], at[94]); MULADD(at[37], at[93]); MULADD(at[38], at[92]); MULADD(at[39], at[91]); MULADD(at[40], at[90]); MULADD(at[41], at[89]); MULADD(at[42], at[88]); MULADD(at[43], at[87]); MULADD(at[44], at[86]); MULADD(at[45], at[85]); MULADD(at[46], at[84]); MULADD(at[47], at[83]); MULADD(at[48], at[82]); MULADD(at[49], at[81]); MULADD(at[50], at[80]); MULADD(at[51], at[79]); MULADD(at[52], at[78]); MULADD(at[53], at[77]); MULADD(at[54], at[76]); MULADD(at[55], at[75]); MULADD(at[56], at[74]); MULADD(at[57], at[73]); MULADD(at[58], at[72]); MULADD(at[59], at[71]); MULADD(at[60], at[70]); MULADD(at[61], at[69]); MULADD(at[62], at[68]); MULADD(at[63], at[67]); - COMBA_STORE(C->dp[66]); - /* 67 */ - COMBA_FORWARD; - MULADD(at[4], at[127]); MULADD(at[5], at[126]); MULADD(at[6], at[125]); MULADD(at[7], at[124]); MULADD(at[8], at[123]); MULADD(at[9], at[122]); MULADD(at[10], at[121]); MULADD(at[11], at[120]); MULADD(at[12], at[119]); MULADD(at[13], at[118]); MULADD(at[14], at[117]); MULADD(at[15], at[116]); MULADD(at[16], at[115]); MULADD(at[17], at[114]); MULADD(at[18], at[113]); MULADD(at[19], at[112]); MULADD(at[20], at[111]); MULADD(at[21], at[110]); MULADD(at[22], at[109]); MULADD(at[23], at[108]); MULADD(at[24], at[107]); MULADD(at[25], at[106]); MULADD(at[26], at[105]); MULADD(at[27], at[104]); MULADD(at[28], at[103]); MULADD(at[29], at[102]); MULADD(at[30], at[101]); MULADD(at[31], at[100]); MULADD(at[32], at[99]); MULADD(at[33], at[98]); MULADD(at[34], at[97]); MULADD(at[35], at[96]); MULADD(at[36], at[95]); MULADD(at[37], at[94]); MULADD(at[38], at[93]); MULADD(at[39], at[92]); MULADD(at[40], at[91]); MULADD(at[41], at[90]); MULADD(at[42], at[89]); MULADD(at[43], at[88]); MULADD(at[44], at[87]); MULADD(at[45], at[86]); MULADD(at[46], at[85]); MULADD(at[47], at[84]); MULADD(at[48], at[83]); MULADD(at[49], at[82]); MULADD(at[50], at[81]); MULADD(at[51], at[80]); MULADD(at[52], at[79]); MULADD(at[53], at[78]); MULADD(at[54], at[77]); MULADD(at[55], at[76]); MULADD(at[56], at[75]); MULADD(at[57], at[74]); MULADD(at[58], at[73]); MULADD(at[59], at[72]); MULADD(at[60], at[71]); MULADD(at[61], at[70]); MULADD(at[62], at[69]); MULADD(at[63], at[68]); - COMBA_STORE(C->dp[67]); - /* 68 */ - COMBA_FORWARD; - MULADD(at[5], at[127]); MULADD(at[6], at[126]); MULADD(at[7], at[125]); MULADD(at[8], at[124]); MULADD(at[9], at[123]); MULADD(at[10], at[122]); MULADD(at[11], at[121]); MULADD(at[12], at[120]); MULADD(at[13], at[119]); MULADD(at[14], at[118]); MULADD(at[15], at[117]); MULADD(at[16], at[116]); MULADD(at[17], at[115]); MULADD(at[18], at[114]); MULADD(at[19], at[113]); MULADD(at[20], at[112]); MULADD(at[21], at[111]); MULADD(at[22], at[110]); MULADD(at[23], at[109]); MULADD(at[24], at[108]); MULADD(at[25], at[107]); MULADD(at[26], at[106]); MULADD(at[27], at[105]); MULADD(at[28], at[104]); MULADD(at[29], at[103]); MULADD(at[30], at[102]); MULADD(at[31], at[101]); MULADD(at[32], at[100]); MULADD(at[33], at[99]); MULADD(at[34], at[98]); MULADD(at[35], at[97]); MULADD(at[36], at[96]); MULADD(at[37], at[95]); MULADD(at[38], at[94]); MULADD(at[39], at[93]); MULADD(at[40], at[92]); MULADD(at[41], at[91]); MULADD(at[42], at[90]); MULADD(at[43], at[89]); MULADD(at[44], at[88]); MULADD(at[45], at[87]); MULADD(at[46], at[86]); MULADD(at[47], at[85]); MULADD(at[48], at[84]); MULADD(at[49], at[83]); MULADD(at[50], at[82]); MULADD(at[51], at[81]); MULADD(at[52], at[80]); MULADD(at[53], at[79]); MULADD(at[54], at[78]); MULADD(at[55], at[77]); MULADD(at[56], at[76]); MULADD(at[57], at[75]); MULADD(at[58], at[74]); MULADD(at[59], at[73]); MULADD(at[60], at[72]); MULADD(at[61], at[71]); MULADD(at[62], at[70]); MULADD(at[63], at[69]); - COMBA_STORE(C->dp[68]); - /* 69 */ - COMBA_FORWARD; - MULADD(at[6], at[127]); MULADD(at[7], at[126]); MULADD(at[8], at[125]); MULADD(at[9], at[124]); MULADD(at[10], at[123]); MULADD(at[11], at[122]); MULADD(at[12], at[121]); MULADD(at[13], at[120]); MULADD(at[14], at[119]); MULADD(at[15], at[118]); MULADD(at[16], at[117]); MULADD(at[17], at[116]); MULADD(at[18], at[115]); MULADD(at[19], at[114]); MULADD(at[20], at[113]); MULADD(at[21], at[112]); MULADD(at[22], at[111]); MULADD(at[23], at[110]); MULADD(at[24], at[109]); MULADD(at[25], at[108]); MULADD(at[26], at[107]); MULADD(at[27], at[106]); MULADD(at[28], at[105]); MULADD(at[29], at[104]); MULADD(at[30], at[103]); MULADD(at[31], at[102]); MULADD(at[32], at[101]); MULADD(at[33], at[100]); MULADD(at[34], at[99]); MULADD(at[35], at[98]); MULADD(at[36], at[97]); MULADD(at[37], at[96]); MULADD(at[38], at[95]); MULADD(at[39], at[94]); MULADD(at[40], at[93]); MULADD(at[41], at[92]); MULADD(at[42], at[91]); MULADD(at[43], at[90]); MULADD(at[44], at[89]); MULADD(at[45], at[88]); MULADD(at[46], at[87]); MULADD(at[47], at[86]); MULADD(at[48], at[85]); MULADD(at[49], at[84]); MULADD(at[50], at[83]); MULADD(at[51], at[82]); MULADD(at[52], at[81]); MULADD(at[53], at[80]); MULADD(at[54], at[79]); MULADD(at[55], at[78]); MULADD(at[56], at[77]); MULADD(at[57], at[76]); MULADD(at[58], at[75]); MULADD(at[59], at[74]); MULADD(at[60], at[73]); MULADD(at[61], at[72]); MULADD(at[62], at[71]); MULADD(at[63], at[70]); - COMBA_STORE(C->dp[69]); - /* 70 */ - COMBA_FORWARD; - MULADD(at[7], at[127]); MULADD(at[8], at[126]); MULADD(at[9], at[125]); MULADD(at[10], at[124]); MULADD(at[11], at[123]); MULADD(at[12], at[122]); MULADD(at[13], at[121]); MULADD(at[14], at[120]); MULADD(at[15], at[119]); MULADD(at[16], at[118]); MULADD(at[17], at[117]); MULADD(at[18], at[116]); MULADD(at[19], at[115]); MULADD(at[20], at[114]); MULADD(at[21], at[113]); MULADD(at[22], at[112]); MULADD(at[23], at[111]); MULADD(at[24], at[110]); MULADD(at[25], at[109]); MULADD(at[26], at[108]); MULADD(at[27], at[107]); MULADD(at[28], at[106]); MULADD(at[29], at[105]); MULADD(at[30], at[104]); MULADD(at[31], at[103]); MULADD(at[32], at[102]); MULADD(at[33], at[101]); MULADD(at[34], at[100]); MULADD(at[35], at[99]); MULADD(at[36], at[98]); MULADD(at[37], at[97]); MULADD(at[38], at[96]); MULADD(at[39], at[95]); MULADD(at[40], at[94]); MULADD(at[41], at[93]); MULADD(at[42], at[92]); MULADD(at[43], at[91]); MULADD(at[44], at[90]); MULADD(at[45], at[89]); MULADD(at[46], at[88]); MULADD(at[47], at[87]); MULADD(at[48], at[86]); MULADD(at[49], at[85]); MULADD(at[50], at[84]); MULADD(at[51], at[83]); MULADD(at[52], at[82]); MULADD(at[53], at[81]); MULADD(at[54], at[80]); MULADD(at[55], at[79]); MULADD(at[56], at[78]); MULADD(at[57], at[77]); MULADD(at[58], at[76]); MULADD(at[59], at[75]); MULADD(at[60], at[74]); MULADD(at[61], at[73]); MULADD(at[62], at[72]); MULADD(at[63], at[71]); - COMBA_STORE(C->dp[70]); - /* 71 */ - COMBA_FORWARD; - MULADD(at[8], at[127]); MULADD(at[9], at[126]); MULADD(at[10], at[125]); MULADD(at[11], at[124]); MULADD(at[12], at[123]); MULADD(at[13], at[122]); MULADD(at[14], at[121]); MULADD(at[15], at[120]); MULADD(at[16], at[119]); MULADD(at[17], at[118]); MULADD(at[18], at[117]); MULADD(at[19], at[116]); MULADD(at[20], at[115]); MULADD(at[21], at[114]); MULADD(at[22], at[113]); MULADD(at[23], at[112]); MULADD(at[24], at[111]); MULADD(at[25], at[110]); MULADD(at[26], at[109]); MULADD(at[27], at[108]); MULADD(at[28], at[107]); MULADD(at[29], at[106]); MULADD(at[30], at[105]); MULADD(at[31], at[104]); MULADD(at[32], at[103]); MULADD(at[33], at[102]); MULADD(at[34], at[101]); MULADD(at[35], at[100]); MULADD(at[36], at[99]); MULADD(at[37], at[98]); MULADD(at[38], at[97]); MULADD(at[39], at[96]); MULADD(at[40], at[95]); MULADD(at[41], at[94]); MULADD(at[42], at[93]); MULADD(at[43], at[92]); MULADD(at[44], at[91]); MULADD(at[45], at[90]); MULADD(at[46], at[89]); MULADD(at[47], at[88]); MULADD(at[48], at[87]); MULADD(at[49], at[86]); MULADD(at[50], at[85]); MULADD(at[51], at[84]); MULADD(at[52], at[83]); MULADD(at[53], at[82]); MULADD(at[54], at[81]); MULADD(at[55], at[80]); MULADD(at[56], at[79]); MULADD(at[57], at[78]); MULADD(at[58], at[77]); MULADD(at[59], at[76]); MULADD(at[60], at[75]); MULADD(at[61], at[74]); MULADD(at[62], at[73]); MULADD(at[63], at[72]); - COMBA_STORE(C->dp[71]); - /* 72 */ - COMBA_FORWARD; - MULADD(at[9], at[127]); MULADD(at[10], at[126]); MULADD(at[11], at[125]); MULADD(at[12], at[124]); MULADD(at[13], at[123]); MULADD(at[14], at[122]); MULADD(at[15], at[121]); MULADD(at[16], at[120]); MULADD(at[17], at[119]); MULADD(at[18], at[118]); MULADD(at[19], at[117]); MULADD(at[20], at[116]); MULADD(at[21], at[115]); MULADD(at[22], at[114]); MULADD(at[23], at[113]); MULADD(at[24], at[112]); MULADD(at[25], at[111]); MULADD(at[26], at[110]); MULADD(at[27], at[109]); MULADD(at[28], at[108]); MULADD(at[29], at[107]); MULADD(at[30], at[106]); MULADD(at[31], at[105]); MULADD(at[32], at[104]); MULADD(at[33], at[103]); MULADD(at[34], at[102]); MULADD(at[35], at[101]); MULADD(at[36], at[100]); MULADD(at[37], at[99]); MULADD(at[38], at[98]); MULADD(at[39], at[97]); MULADD(at[40], at[96]); MULADD(at[41], at[95]); MULADD(at[42], at[94]); MULADD(at[43], at[93]); MULADD(at[44], at[92]); MULADD(at[45], at[91]); MULADD(at[46], at[90]); MULADD(at[47], at[89]); MULADD(at[48], at[88]); MULADD(at[49], at[87]); MULADD(at[50], at[86]); MULADD(at[51], at[85]); MULADD(at[52], at[84]); MULADD(at[53], at[83]); MULADD(at[54], at[82]); MULADD(at[55], at[81]); MULADD(at[56], at[80]); MULADD(at[57], at[79]); MULADD(at[58], at[78]); MULADD(at[59], at[77]); MULADD(at[60], at[76]); MULADD(at[61], at[75]); MULADD(at[62], at[74]); MULADD(at[63], at[73]); - COMBA_STORE(C->dp[72]); - /* 73 */ - COMBA_FORWARD; - MULADD(at[10], at[127]); MULADD(at[11], at[126]); MULADD(at[12], at[125]); MULADD(at[13], at[124]); MULADD(at[14], at[123]); MULADD(at[15], at[122]); MULADD(at[16], at[121]); MULADD(at[17], at[120]); MULADD(at[18], at[119]); MULADD(at[19], at[118]); MULADD(at[20], at[117]); MULADD(at[21], at[116]); MULADD(at[22], at[115]); MULADD(at[23], at[114]); MULADD(at[24], at[113]); MULADD(at[25], at[112]); MULADD(at[26], at[111]); MULADD(at[27], at[110]); MULADD(at[28], at[109]); MULADD(at[29], at[108]); MULADD(at[30], at[107]); MULADD(at[31], at[106]); MULADD(at[32], at[105]); MULADD(at[33], at[104]); MULADD(at[34], at[103]); MULADD(at[35], at[102]); MULADD(at[36], at[101]); MULADD(at[37], at[100]); MULADD(at[38], at[99]); MULADD(at[39], at[98]); MULADD(at[40], at[97]); MULADD(at[41], at[96]); MULADD(at[42], at[95]); MULADD(at[43], at[94]); MULADD(at[44], at[93]); MULADD(at[45], at[92]); MULADD(at[46], at[91]); MULADD(at[47], at[90]); MULADD(at[48], at[89]); MULADD(at[49], at[88]); MULADD(at[50], at[87]); MULADD(at[51], at[86]); MULADD(at[52], at[85]); MULADD(at[53], at[84]); MULADD(at[54], at[83]); MULADD(at[55], at[82]); MULADD(at[56], at[81]); MULADD(at[57], at[80]); MULADD(at[58], at[79]); MULADD(at[59], at[78]); MULADD(at[60], at[77]); MULADD(at[61], at[76]); MULADD(at[62], at[75]); MULADD(at[63], at[74]); - COMBA_STORE(C->dp[73]); - /* 74 */ - COMBA_FORWARD; - MULADD(at[11], at[127]); MULADD(at[12], at[126]); MULADD(at[13], at[125]); MULADD(at[14], at[124]); MULADD(at[15], at[123]); MULADD(at[16], at[122]); MULADD(at[17], at[121]); MULADD(at[18], at[120]); MULADD(at[19], at[119]); MULADD(at[20], at[118]); MULADD(at[21], at[117]); MULADD(at[22], at[116]); MULADD(at[23], at[115]); MULADD(at[24], at[114]); MULADD(at[25], at[113]); MULADD(at[26], at[112]); MULADD(at[27], at[111]); MULADD(at[28], at[110]); MULADD(at[29], at[109]); MULADD(at[30], at[108]); MULADD(at[31], at[107]); MULADD(at[32], at[106]); MULADD(at[33], at[105]); MULADD(at[34], at[104]); MULADD(at[35], at[103]); MULADD(at[36], at[102]); MULADD(at[37], at[101]); MULADD(at[38], at[100]); MULADD(at[39], at[99]); MULADD(at[40], at[98]); MULADD(at[41], at[97]); MULADD(at[42], at[96]); MULADD(at[43], at[95]); MULADD(at[44], at[94]); MULADD(at[45], at[93]); MULADD(at[46], at[92]); MULADD(at[47], at[91]); MULADD(at[48], at[90]); MULADD(at[49], at[89]); MULADD(at[50], at[88]); MULADD(at[51], at[87]); MULADD(at[52], at[86]); MULADD(at[53], at[85]); MULADD(at[54], at[84]); MULADD(at[55], at[83]); MULADD(at[56], at[82]); MULADD(at[57], at[81]); MULADD(at[58], at[80]); MULADD(at[59], at[79]); MULADD(at[60], at[78]); MULADD(at[61], at[77]); MULADD(at[62], at[76]); MULADD(at[63], at[75]); - COMBA_STORE(C->dp[74]); - /* 75 */ - COMBA_FORWARD; - MULADD(at[12], at[127]); MULADD(at[13], at[126]); MULADD(at[14], at[125]); MULADD(at[15], at[124]); MULADD(at[16], at[123]); MULADD(at[17], at[122]); MULADD(at[18], at[121]); MULADD(at[19], at[120]); MULADD(at[20], at[119]); MULADD(at[21], at[118]); MULADD(at[22], at[117]); MULADD(at[23], at[116]); MULADD(at[24], at[115]); MULADD(at[25], at[114]); MULADD(at[26], at[113]); MULADD(at[27], at[112]); MULADD(at[28], at[111]); MULADD(at[29], at[110]); MULADD(at[30], at[109]); MULADD(at[31], at[108]); MULADD(at[32], at[107]); MULADD(at[33], at[106]); MULADD(at[34], at[105]); MULADD(at[35], at[104]); MULADD(at[36], at[103]); MULADD(at[37], at[102]); MULADD(at[38], at[101]); MULADD(at[39], at[100]); MULADD(at[40], at[99]); MULADD(at[41], at[98]); MULADD(at[42], at[97]); MULADD(at[43], at[96]); MULADD(at[44], at[95]); MULADD(at[45], at[94]); MULADD(at[46], at[93]); MULADD(at[47], at[92]); MULADD(at[48], at[91]); MULADD(at[49], at[90]); MULADD(at[50], at[89]); MULADD(at[51], at[88]); MULADD(at[52], at[87]); MULADD(at[53], at[86]); MULADD(at[54], at[85]); MULADD(at[55], at[84]); MULADD(at[56], at[83]); MULADD(at[57], at[82]); MULADD(at[58], at[81]); MULADD(at[59], at[80]); MULADD(at[60], at[79]); MULADD(at[61], at[78]); MULADD(at[62], at[77]); MULADD(at[63], at[76]); - COMBA_STORE(C->dp[75]); - /* 76 */ - COMBA_FORWARD; - MULADD(at[13], at[127]); MULADD(at[14], at[126]); MULADD(at[15], at[125]); MULADD(at[16], at[124]); MULADD(at[17], at[123]); MULADD(at[18], at[122]); MULADD(at[19], at[121]); MULADD(at[20], at[120]); MULADD(at[21], at[119]); MULADD(at[22], at[118]); MULADD(at[23], at[117]); MULADD(at[24], at[116]); MULADD(at[25], at[115]); MULADD(at[26], at[114]); MULADD(at[27], at[113]); MULADD(at[28], at[112]); MULADD(at[29], at[111]); MULADD(at[30], at[110]); MULADD(at[31], at[109]); MULADD(at[32], at[108]); MULADD(at[33], at[107]); MULADD(at[34], at[106]); MULADD(at[35], at[105]); MULADD(at[36], at[104]); MULADD(at[37], at[103]); MULADD(at[38], at[102]); MULADD(at[39], at[101]); MULADD(at[40], at[100]); MULADD(at[41], at[99]); MULADD(at[42], at[98]); MULADD(at[43], at[97]); MULADD(at[44], at[96]); MULADD(at[45], at[95]); MULADD(at[46], at[94]); MULADD(at[47], at[93]); MULADD(at[48], at[92]); MULADD(at[49], at[91]); MULADD(at[50], at[90]); MULADD(at[51], at[89]); MULADD(at[52], at[88]); MULADD(at[53], at[87]); MULADD(at[54], at[86]); MULADD(at[55], at[85]); MULADD(at[56], at[84]); MULADD(at[57], at[83]); MULADD(at[58], at[82]); MULADD(at[59], at[81]); MULADD(at[60], at[80]); MULADD(at[61], at[79]); MULADD(at[62], at[78]); MULADD(at[63], at[77]); - COMBA_STORE(C->dp[76]); - /* 77 */ - COMBA_FORWARD; - MULADD(at[14], at[127]); MULADD(at[15], at[126]); MULADD(at[16], at[125]); MULADD(at[17], at[124]); MULADD(at[18], at[123]); MULADD(at[19], at[122]); MULADD(at[20], at[121]); MULADD(at[21], at[120]); MULADD(at[22], at[119]); MULADD(at[23], at[118]); MULADD(at[24], at[117]); MULADD(at[25], at[116]); MULADD(at[26], at[115]); MULADD(at[27], at[114]); MULADD(at[28], at[113]); MULADD(at[29], at[112]); MULADD(at[30], at[111]); MULADD(at[31], at[110]); MULADD(at[32], at[109]); MULADD(at[33], at[108]); MULADD(at[34], at[107]); MULADD(at[35], at[106]); MULADD(at[36], at[105]); MULADD(at[37], at[104]); MULADD(at[38], at[103]); MULADD(at[39], at[102]); MULADD(at[40], at[101]); MULADD(at[41], at[100]); MULADD(at[42], at[99]); MULADD(at[43], at[98]); MULADD(at[44], at[97]); MULADD(at[45], at[96]); MULADD(at[46], at[95]); MULADD(at[47], at[94]); MULADD(at[48], at[93]); MULADD(at[49], at[92]); MULADD(at[50], at[91]); MULADD(at[51], at[90]); MULADD(at[52], at[89]); MULADD(at[53], at[88]); MULADD(at[54], at[87]); MULADD(at[55], at[86]); MULADD(at[56], at[85]); MULADD(at[57], at[84]); MULADD(at[58], at[83]); MULADD(at[59], at[82]); MULADD(at[60], at[81]); MULADD(at[61], at[80]); MULADD(at[62], at[79]); MULADD(at[63], at[78]); - COMBA_STORE(C->dp[77]); - /* 78 */ - COMBA_FORWARD; - MULADD(at[15], at[127]); MULADD(at[16], at[126]); MULADD(at[17], at[125]); MULADD(at[18], at[124]); MULADD(at[19], at[123]); MULADD(at[20], at[122]); MULADD(at[21], at[121]); MULADD(at[22], at[120]); MULADD(at[23], at[119]); MULADD(at[24], at[118]); MULADD(at[25], at[117]); MULADD(at[26], at[116]); MULADD(at[27], at[115]); MULADD(at[28], at[114]); MULADD(at[29], at[113]); MULADD(at[30], at[112]); MULADD(at[31], at[111]); MULADD(at[32], at[110]); MULADD(at[33], at[109]); MULADD(at[34], at[108]); MULADD(at[35], at[107]); MULADD(at[36], at[106]); MULADD(at[37], at[105]); MULADD(at[38], at[104]); MULADD(at[39], at[103]); MULADD(at[40], at[102]); MULADD(at[41], at[101]); MULADD(at[42], at[100]); MULADD(at[43], at[99]); MULADD(at[44], at[98]); MULADD(at[45], at[97]); MULADD(at[46], at[96]); MULADD(at[47], at[95]); MULADD(at[48], at[94]); MULADD(at[49], at[93]); MULADD(at[50], at[92]); MULADD(at[51], at[91]); MULADD(at[52], at[90]); MULADD(at[53], at[89]); MULADD(at[54], at[88]); MULADD(at[55], at[87]); MULADD(at[56], at[86]); MULADD(at[57], at[85]); MULADD(at[58], at[84]); MULADD(at[59], at[83]); MULADD(at[60], at[82]); MULADD(at[61], at[81]); MULADD(at[62], at[80]); MULADD(at[63], at[79]); - COMBA_STORE(C->dp[78]); - /* 79 */ - COMBA_FORWARD; - MULADD(at[16], at[127]); MULADD(at[17], at[126]); MULADD(at[18], at[125]); MULADD(at[19], at[124]); MULADD(at[20], at[123]); MULADD(at[21], at[122]); MULADD(at[22], at[121]); MULADD(at[23], at[120]); MULADD(at[24], at[119]); MULADD(at[25], at[118]); MULADD(at[26], at[117]); MULADD(at[27], at[116]); MULADD(at[28], at[115]); MULADD(at[29], at[114]); MULADD(at[30], at[113]); MULADD(at[31], at[112]); MULADD(at[32], at[111]); MULADD(at[33], at[110]); MULADD(at[34], at[109]); MULADD(at[35], at[108]); MULADD(at[36], at[107]); MULADD(at[37], at[106]); MULADD(at[38], at[105]); MULADD(at[39], at[104]); MULADD(at[40], at[103]); MULADD(at[41], at[102]); MULADD(at[42], at[101]); MULADD(at[43], at[100]); MULADD(at[44], at[99]); MULADD(at[45], at[98]); MULADD(at[46], at[97]); MULADD(at[47], at[96]); MULADD(at[48], at[95]); MULADD(at[49], at[94]); MULADD(at[50], at[93]); MULADD(at[51], at[92]); MULADD(at[52], at[91]); MULADD(at[53], at[90]); MULADD(at[54], at[89]); MULADD(at[55], at[88]); MULADD(at[56], at[87]); MULADD(at[57], at[86]); MULADD(at[58], at[85]); MULADD(at[59], at[84]); MULADD(at[60], at[83]); MULADD(at[61], at[82]); MULADD(at[62], at[81]); MULADD(at[63], at[80]); - COMBA_STORE(C->dp[79]); - /* 80 */ - COMBA_FORWARD; - MULADD(at[17], at[127]); MULADD(at[18], at[126]); MULADD(at[19], at[125]); MULADD(at[20], at[124]); MULADD(at[21], at[123]); MULADD(at[22], at[122]); MULADD(at[23], at[121]); MULADD(at[24], at[120]); MULADD(at[25], at[119]); MULADD(at[26], at[118]); MULADD(at[27], at[117]); MULADD(at[28], at[116]); MULADD(at[29], at[115]); MULADD(at[30], at[114]); MULADD(at[31], at[113]); MULADD(at[32], at[112]); MULADD(at[33], at[111]); MULADD(at[34], at[110]); MULADD(at[35], at[109]); MULADD(at[36], at[108]); MULADD(at[37], at[107]); MULADD(at[38], at[106]); MULADD(at[39], at[105]); MULADD(at[40], at[104]); MULADD(at[41], at[103]); MULADD(at[42], at[102]); MULADD(at[43], at[101]); MULADD(at[44], at[100]); MULADD(at[45], at[99]); MULADD(at[46], at[98]); MULADD(at[47], at[97]); MULADD(at[48], at[96]); MULADD(at[49], at[95]); MULADD(at[50], at[94]); MULADD(at[51], at[93]); MULADD(at[52], at[92]); MULADD(at[53], at[91]); MULADD(at[54], at[90]); MULADD(at[55], at[89]); MULADD(at[56], at[88]); MULADD(at[57], at[87]); MULADD(at[58], at[86]); MULADD(at[59], at[85]); MULADD(at[60], at[84]); MULADD(at[61], at[83]); MULADD(at[62], at[82]); MULADD(at[63], at[81]); - COMBA_STORE(C->dp[80]); - /* 81 */ - COMBA_FORWARD; - MULADD(at[18], at[127]); MULADD(at[19], at[126]); MULADD(at[20], at[125]); MULADD(at[21], at[124]); MULADD(at[22], at[123]); MULADD(at[23], at[122]); MULADD(at[24], at[121]); MULADD(at[25], at[120]); MULADD(at[26], at[119]); MULADD(at[27], at[118]); MULADD(at[28], at[117]); MULADD(at[29], at[116]); MULADD(at[30], at[115]); MULADD(at[31], at[114]); MULADD(at[32], at[113]); MULADD(at[33], at[112]); MULADD(at[34], at[111]); MULADD(at[35], at[110]); MULADD(at[36], at[109]); MULADD(at[37], at[108]); MULADD(at[38], at[107]); MULADD(at[39], at[106]); MULADD(at[40], at[105]); MULADD(at[41], at[104]); MULADD(at[42], at[103]); MULADD(at[43], at[102]); MULADD(at[44], at[101]); MULADD(at[45], at[100]); MULADD(at[46], at[99]); MULADD(at[47], at[98]); MULADD(at[48], at[97]); MULADD(at[49], at[96]); MULADD(at[50], at[95]); MULADD(at[51], at[94]); MULADD(at[52], at[93]); MULADD(at[53], at[92]); MULADD(at[54], at[91]); MULADD(at[55], at[90]); MULADD(at[56], at[89]); MULADD(at[57], at[88]); MULADD(at[58], at[87]); MULADD(at[59], at[86]); MULADD(at[60], at[85]); MULADD(at[61], at[84]); MULADD(at[62], at[83]); MULADD(at[63], at[82]); - COMBA_STORE(C->dp[81]); - /* 82 */ - COMBA_FORWARD; - MULADD(at[19], at[127]); MULADD(at[20], at[126]); MULADD(at[21], at[125]); MULADD(at[22], at[124]); MULADD(at[23], at[123]); MULADD(at[24], at[122]); MULADD(at[25], at[121]); MULADD(at[26], at[120]); MULADD(at[27], at[119]); MULADD(at[28], at[118]); MULADD(at[29], at[117]); MULADD(at[30], at[116]); MULADD(at[31], at[115]); MULADD(at[32], at[114]); MULADD(at[33], at[113]); MULADD(at[34], at[112]); MULADD(at[35], at[111]); MULADD(at[36], at[110]); MULADD(at[37], at[109]); MULADD(at[38], at[108]); MULADD(at[39], at[107]); MULADD(at[40], at[106]); MULADD(at[41], at[105]); MULADD(at[42], at[104]); MULADD(at[43], at[103]); MULADD(at[44], at[102]); MULADD(at[45], at[101]); MULADD(at[46], at[100]); MULADD(at[47], at[99]); MULADD(at[48], at[98]); MULADD(at[49], at[97]); MULADD(at[50], at[96]); MULADD(at[51], at[95]); MULADD(at[52], at[94]); MULADD(at[53], at[93]); MULADD(at[54], at[92]); MULADD(at[55], at[91]); MULADD(at[56], at[90]); MULADD(at[57], at[89]); MULADD(at[58], at[88]); MULADD(at[59], at[87]); MULADD(at[60], at[86]); MULADD(at[61], at[85]); MULADD(at[62], at[84]); MULADD(at[63], at[83]); - COMBA_STORE(C->dp[82]); - /* 83 */ - COMBA_FORWARD; - MULADD(at[20], at[127]); MULADD(at[21], at[126]); MULADD(at[22], at[125]); MULADD(at[23], at[124]); MULADD(at[24], at[123]); MULADD(at[25], at[122]); MULADD(at[26], at[121]); MULADD(at[27], at[120]); MULADD(at[28], at[119]); MULADD(at[29], at[118]); MULADD(at[30], at[117]); MULADD(at[31], at[116]); MULADD(at[32], at[115]); MULADD(at[33], at[114]); MULADD(at[34], at[113]); MULADD(at[35], at[112]); MULADD(at[36], at[111]); MULADD(at[37], at[110]); MULADD(at[38], at[109]); MULADD(at[39], at[108]); MULADD(at[40], at[107]); MULADD(at[41], at[106]); MULADD(at[42], at[105]); MULADD(at[43], at[104]); MULADD(at[44], at[103]); MULADD(at[45], at[102]); MULADD(at[46], at[101]); MULADD(at[47], at[100]); MULADD(at[48], at[99]); MULADD(at[49], at[98]); MULADD(at[50], at[97]); MULADD(at[51], at[96]); MULADD(at[52], at[95]); MULADD(at[53], at[94]); MULADD(at[54], at[93]); MULADD(at[55], at[92]); MULADD(at[56], at[91]); MULADD(at[57], at[90]); MULADD(at[58], at[89]); MULADD(at[59], at[88]); MULADD(at[60], at[87]); MULADD(at[61], at[86]); MULADD(at[62], at[85]); MULADD(at[63], at[84]); - COMBA_STORE(C->dp[83]); - /* 84 */ - COMBA_FORWARD; - MULADD(at[21], at[127]); MULADD(at[22], at[126]); MULADD(at[23], at[125]); MULADD(at[24], at[124]); MULADD(at[25], at[123]); MULADD(at[26], at[122]); MULADD(at[27], at[121]); MULADD(at[28], at[120]); MULADD(at[29], at[119]); MULADD(at[30], at[118]); MULADD(at[31], at[117]); MULADD(at[32], at[116]); MULADD(at[33], at[115]); MULADD(at[34], at[114]); MULADD(at[35], at[113]); MULADD(at[36], at[112]); MULADD(at[37], at[111]); MULADD(at[38], at[110]); MULADD(at[39], at[109]); MULADD(at[40], at[108]); MULADD(at[41], at[107]); MULADD(at[42], at[106]); MULADD(at[43], at[105]); MULADD(at[44], at[104]); MULADD(at[45], at[103]); MULADD(at[46], at[102]); MULADD(at[47], at[101]); MULADD(at[48], at[100]); MULADD(at[49], at[99]); MULADD(at[50], at[98]); MULADD(at[51], at[97]); MULADD(at[52], at[96]); MULADD(at[53], at[95]); MULADD(at[54], at[94]); MULADD(at[55], at[93]); MULADD(at[56], at[92]); MULADD(at[57], at[91]); MULADD(at[58], at[90]); MULADD(at[59], at[89]); MULADD(at[60], at[88]); MULADD(at[61], at[87]); MULADD(at[62], at[86]); MULADD(at[63], at[85]); - COMBA_STORE(C->dp[84]); - /* 85 */ - COMBA_FORWARD; - MULADD(at[22], at[127]); MULADD(at[23], at[126]); MULADD(at[24], at[125]); MULADD(at[25], at[124]); MULADD(at[26], at[123]); MULADD(at[27], at[122]); MULADD(at[28], at[121]); MULADD(at[29], at[120]); MULADD(at[30], at[119]); MULADD(at[31], at[118]); MULADD(at[32], at[117]); MULADD(at[33], at[116]); MULADD(at[34], at[115]); MULADD(at[35], at[114]); MULADD(at[36], at[113]); MULADD(at[37], at[112]); MULADD(at[38], at[111]); MULADD(at[39], at[110]); MULADD(at[40], at[109]); MULADD(at[41], at[108]); MULADD(at[42], at[107]); MULADD(at[43], at[106]); MULADD(at[44], at[105]); MULADD(at[45], at[104]); MULADD(at[46], at[103]); MULADD(at[47], at[102]); MULADD(at[48], at[101]); MULADD(at[49], at[100]); MULADD(at[50], at[99]); MULADD(at[51], at[98]); MULADD(at[52], at[97]); MULADD(at[53], at[96]); MULADD(at[54], at[95]); MULADD(at[55], at[94]); MULADD(at[56], at[93]); MULADD(at[57], at[92]); MULADD(at[58], at[91]); MULADD(at[59], at[90]); MULADD(at[60], at[89]); MULADD(at[61], at[88]); MULADD(at[62], at[87]); MULADD(at[63], at[86]); - COMBA_STORE(C->dp[85]); - /* 86 */ - COMBA_FORWARD; - MULADD(at[23], at[127]); MULADD(at[24], at[126]); MULADD(at[25], at[125]); MULADD(at[26], at[124]); MULADD(at[27], at[123]); MULADD(at[28], at[122]); MULADD(at[29], at[121]); MULADD(at[30], at[120]); MULADD(at[31], at[119]); MULADD(at[32], at[118]); MULADD(at[33], at[117]); MULADD(at[34], at[116]); MULADD(at[35], at[115]); MULADD(at[36], at[114]); MULADD(at[37], at[113]); MULADD(at[38], at[112]); MULADD(at[39], at[111]); MULADD(at[40], at[110]); MULADD(at[41], at[109]); MULADD(at[42], at[108]); MULADD(at[43], at[107]); MULADD(at[44], at[106]); MULADD(at[45], at[105]); MULADD(at[46], at[104]); MULADD(at[47], at[103]); MULADD(at[48], at[102]); MULADD(at[49], at[101]); MULADD(at[50], at[100]); MULADD(at[51], at[99]); MULADD(at[52], at[98]); MULADD(at[53], at[97]); MULADD(at[54], at[96]); MULADD(at[55], at[95]); MULADD(at[56], at[94]); MULADD(at[57], at[93]); MULADD(at[58], at[92]); MULADD(at[59], at[91]); MULADD(at[60], at[90]); MULADD(at[61], at[89]); MULADD(at[62], at[88]); MULADD(at[63], at[87]); - COMBA_STORE(C->dp[86]); - /* 87 */ - COMBA_FORWARD; - MULADD(at[24], at[127]); MULADD(at[25], at[126]); MULADD(at[26], at[125]); MULADD(at[27], at[124]); MULADD(at[28], at[123]); MULADD(at[29], at[122]); MULADD(at[30], at[121]); MULADD(at[31], at[120]); MULADD(at[32], at[119]); MULADD(at[33], at[118]); MULADD(at[34], at[117]); MULADD(at[35], at[116]); MULADD(at[36], at[115]); MULADD(at[37], at[114]); MULADD(at[38], at[113]); MULADD(at[39], at[112]); MULADD(at[40], at[111]); MULADD(at[41], at[110]); MULADD(at[42], at[109]); MULADD(at[43], at[108]); MULADD(at[44], at[107]); MULADD(at[45], at[106]); MULADD(at[46], at[105]); MULADD(at[47], at[104]); MULADD(at[48], at[103]); MULADD(at[49], at[102]); MULADD(at[50], at[101]); MULADD(at[51], at[100]); MULADD(at[52], at[99]); MULADD(at[53], at[98]); MULADD(at[54], at[97]); MULADD(at[55], at[96]); MULADD(at[56], at[95]); MULADD(at[57], at[94]); MULADD(at[58], at[93]); MULADD(at[59], at[92]); MULADD(at[60], at[91]); MULADD(at[61], at[90]); MULADD(at[62], at[89]); MULADD(at[63], at[88]); - COMBA_STORE(C->dp[87]); - /* 88 */ - COMBA_FORWARD; - MULADD(at[25], at[127]); MULADD(at[26], at[126]); MULADD(at[27], at[125]); MULADD(at[28], at[124]); MULADD(at[29], at[123]); MULADD(at[30], at[122]); MULADD(at[31], at[121]); MULADD(at[32], at[120]); MULADD(at[33], at[119]); MULADD(at[34], at[118]); MULADD(at[35], at[117]); MULADD(at[36], at[116]); MULADD(at[37], at[115]); MULADD(at[38], at[114]); MULADD(at[39], at[113]); MULADD(at[40], at[112]); MULADD(at[41], at[111]); MULADD(at[42], at[110]); MULADD(at[43], at[109]); MULADD(at[44], at[108]); MULADD(at[45], at[107]); MULADD(at[46], at[106]); MULADD(at[47], at[105]); MULADD(at[48], at[104]); MULADD(at[49], at[103]); MULADD(at[50], at[102]); MULADD(at[51], at[101]); MULADD(at[52], at[100]); MULADD(at[53], at[99]); MULADD(at[54], at[98]); MULADD(at[55], at[97]); MULADD(at[56], at[96]); MULADD(at[57], at[95]); MULADD(at[58], at[94]); MULADD(at[59], at[93]); MULADD(at[60], at[92]); MULADD(at[61], at[91]); MULADD(at[62], at[90]); MULADD(at[63], at[89]); - COMBA_STORE(C->dp[88]); - /* 89 */ - COMBA_FORWARD; - MULADD(at[26], at[127]); MULADD(at[27], at[126]); MULADD(at[28], at[125]); MULADD(at[29], at[124]); MULADD(at[30], at[123]); MULADD(at[31], at[122]); MULADD(at[32], at[121]); MULADD(at[33], at[120]); MULADD(at[34], at[119]); MULADD(at[35], at[118]); MULADD(at[36], at[117]); MULADD(at[37], at[116]); MULADD(at[38], at[115]); MULADD(at[39], at[114]); MULADD(at[40], at[113]); MULADD(at[41], at[112]); MULADD(at[42], at[111]); MULADD(at[43], at[110]); MULADD(at[44], at[109]); MULADD(at[45], at[108]); MULADD(at[46], at[107]); MULADD(at[47], at[106]); MULADD(at[48], at[105]); MULADD(at[49], at[104]); MULADD(at[50], at[103]); MULADD(at[51], at[102]); MULADD(at[52], at[101]); MULADD(at[53], at[100]); MULADD(at[54], at[99]); MULADD(at[55], at[98]); MULADD(at[56], at[97]); MULADD(at[57], at[96]); MULADD(at[58], at[95]); MULADD(at[59], at[94]); MULADD(at[60], at[93]); MULADD(at[61], at[92]); MULADD(at[62], at[91]); MULADD(at[63], at[90]); - COMBA_STORE(C->dp[89]); - /* 90 */ - COMBA_FORWARD; - MULADD(at[27], at[127]); MULADD(at[28], at[126]); MULADD(at[29], at[125]); MULADD(at[30], at[124]); MULADD(at[31], at[123]); MULADD(at[32], at[122]); MULADD(at[33], at[121]); MULADD(at[34], at[120]); MULADD(at[35], at[119]); MULADD(at[36], at[118]); MULADD(at[37], at[117]); MULADD(at[38], at[116]); MULADD(at[39], at[115]); MULADD(at[40], at[114]); MULADD(at[41], at[113]); MULADD(at[42], at[112]); MULADD(at[43], at[111]); MULADD(at[44], at[110]); MULADD(at[45], at[109]); MULADD(at[46], at[108]); MULADD(at[47], at[107]); MULADD(at[48], at[106]); MULADD(at[49], at[105]); MULADD(at[50], at[104]); MULADD(at[51], at[103]); MULADD(at[52], at[102]); MULADD(at[53], at[101]); MULADD(at[54], at[100]); MULADD(at[55], at[99]); MULADD(at[56], at[98]); MULADD(at[57], at[97]); MULADD(at[58], at[96]); MULADD(at[59], at[95]); MULADD(at[60], at[94]); MULADD(at[61], at[93]); MULADD(at[62], at[92]); MULADD(at[63], at[91]); - COMBA_STORE(C->dp[90]); - /* 91 */ - COMBA_FORWARD; - MULADD(at[28], at[127]); MULADD(at[29], at[126]); MULADD(at[30], at[125]); MULADD(at[31], at[124]); MULADD(at[32], at[123]); MULADD(at[33], at[122]); MULADD(at[34], at[121]); MULADD(at[35], at[120]); MULADD(at[36], at[119]); MULADD(at[37], at[118]); MULADD(at[38], at[117]); MULADD(at[39], at[116]); MULADD(at[40], at[115]); MULADD(at[41], at[114]); MULADD(at[42], at[113]); MULADD(at[43], at[112]); MULADD(at[44], at[111]); MULADD(at[45], at[110]); MULADD(at[46], at[109]); MULADD(at[47], at[108]); MULADD(at[48], at[107]); MULADD(at[49], at[106]); MULADD(at[50], at[105]); MULADD(at[51], at[104]); MULADD(at[52], at[103]); MULADD(at[53], at[102]); MULADD(at[54], at[101]); MULADD(at[55], at[100]); MULADD(at[56], at[99]); MULADD(at[57], at[98]); MULADD(at[58], at[97]); MULADD(at[59], at[96]); MULADD(at[60], at[95]); MULADD(at[61], at[94]); MULADD(at[62], at[93]); MULADD(at[63], at[92]); - COMBA_STORE(C->dp[91]); - /* 92 */ - COMBA_FORWARD; - MULADD(at[29], at[127]); MULADD(at[30], at[126]); MULADD(at[31], at[125]); MULADD(at[32], at[124]); MULADD(at[33], at[123]); MULADD(at[34], at[122]); MULADD(at[35], at[121]); MULADD(at[36], at[120]); MULADD(at[37], at[119]); MULADD(at[38], at[118]); MULADD(at[39], at[117]); MULADD(at[40], at[116]); MULADD(at[41], at[115]); MULADD(at[42], at[114]); MULADD(at[43], at[113]); MULADD(at[44], at[112]); MULADD(at[45], at[111]); MULADD(at[46], at[110]); MULADD(at[47], at[109]); MULADD(at[48], at[108]); MULADD(at[49], at[107]); MULADD(at[50], at[106]); MULADD(at[51], at[105]); MULADD(at[52], at[104]); MULADD(at[53], at[103]); MULADD(at[54], at[102]); MULADD(at[55], at[101]); MULADD(at[56], at[100]); MULADD(at[57], at[99]); MULADD(at[58], at[98]); MULADD(at[59], at[97]); MULADD(at[60], at[96]); MULADD(at[61], at[95]); MULADD(at[62], at[94]); MULADD(at[63], at[93]); - COMBA_STORE(C->dp[92]); - /* 93 */ - COMBA_FORWARD; - MULADD(at[30], at[127]); MULADD(at[31], at[126]); MULADD(at[32], at[125]); MULADD(at[33], at[124]); MULADD(at[34], at[123]); MULADD(at[35], at[122]); MULADD(at[36], at[121]); MULADD(at[37], at[120]); MULADD(at[38], at[119]); MULADD(at[39], at[118]); MULADD(at[40], at[117]); MULADD(at[41], at[116]); MULADD(at[42], at[115]); MULADD(at[43], at[114]); MULADD(at[44], at[113]); MULADD(at[45], at[112]); MULADD(at[46], at[111]); MULADD(at[47], at[110]); MULADD(at[48], at[109]); MULADD(at[49], at[108]); MULADD(at[50], at[107]); MULADD(at[51], at[106]); MULADD(at[52], at[105]); MULADD(at[53], at[104]); MULADD(at[54], at[103]); MULADD(at[55], at[102]); MULADD(at[56], at[101]); MULADD(at[57], at[100]); MULADD(at[58], at[99]); MULADD(at[59], at[98]); MULADD(at[60], at[97]); MULADD(at[61], at[96]); MULADD(at[62], at[95]); MULADD(at[63], at[94]); - COMBA_STORE(C->dp[93]); - /* 94 */ - COMBA_FORWARD; - MULADD(at[31], at[127]); MULADD(at[32], at[126]); MULADD(at[33], at[125]); MULADD(at[34], at[124]); MULADD(at[35], at[123]); MULADD(at[36], at[122]); MULADD(at[37], at[121]); MULADD(at[38], at[120]); MULADD(at[39], at[119]); MULADD(at[40], at[118]); MULADD(at[41], at[117]); MULADD(at[42], at[116]); MULADD(at[43], at[115]); MULADD(at[44], at[114]); MULADD(at[45], at[113]); MULADD(at[46], at[112]); MULADD(at[47], at[111]); MULADD(at[48], at[110]); MULADD(at[49], at[109]); MULADD(at[50], at[108]); MULADD(at[51], at[107]); MULADD(at[52], at[106]); MULADD(at[53], at[105]); MULADD(at[54], at[104]); MULADD(at[55], at[103]); MULADD(at[56], at[102]); MULADD(at[57], at[101]); MULADD(at[58], at[100]); MULADD(at[59], at[99]); MULADD(at[60], at[98]); MULADD(at[61], at[97]); MULADD(at[62], at[96]); MULADD(at[63], at[95]); - COMBA_STORE(C->dp[94]); - /* 95 */ - COMBA_FORWARD; - MULADD(at[32], at[127]); MULADD(at[33], at[126]); MULADD(at[34], at[125]); MULADD(at[35], at[124]); MULADD(at[36], at[123]); MULADD(at[37], at[122]); MULADD(at[38], at[121]); MULADD(at[39], at[120]); MULADD(at[40], at[119]); MULADD(at[41], at[118]); MULADD(at[42], at[117]); MULADD(at[43], at[116]); MULADD(at[44], at[115]); MULADD(at[45], at[114]); MULADD(at[46], at[113]); MULADD(at[47], at[112]); MULADD(at[48], at[111]); MULADD(at[49], at[110]); MULADD(at[50], at[109]); MULADD(at[51], at[108]); MULADD(at[52], at[107]); MULADD(at[53], at[106]); MULADD(at[54], at[105]); MULADD(at[55], at[104]); MULADD(at[56], at[103]); MULADD(at[57], at[102]); MULADD(at[58], at[101]); MULADD(at[59], at[100]); MULADD(at[60], at[99]); MULADD(at[61], at[98]); MULADD(at[62], at[97]); MULADD(at[63], at[96]); - COMBA_STORE(C->dp[95]); - /* 96 */ - COMBA_FORWARD; - MULADD(at[33], at[127]); MULADD(at[34], at[126]); MULADD(at[35], at[125]); MULADD(at[36], at[124]); MULADD(at[37], at[123]); MULADD(at[38], at[122]); MULADD(at[39], at[121]); MULADD(at[40], at[120]); MULADD(at[41], at[119]); MULADD(at[42], at[118]); MULADD(at[43], at[117]); MULADD(at[44], at[116]); MULADD(at[45], at[115]); MULADD(at[46], at[114]); MULADD(at[47], at[113]); MULADD(at[48], at[112]); MULADD(at[49], at[111]); MULADD(at[50], at[110]); MULADD(at[51], at[109]); MULADD(at[52], at[108]); MULADD(at[53], at[107]); MULADD(at[54], at[106]); MULADD(at[55], at[105]); MULADD(at[56], at[104]); MULADD(at[57], at[103]); MULADD(at[58], at[102]); MULADD(at[59], at[101]); MULADD(at[60], at[100]); MULADD(at[61], at[99]); MULADD(at[62], at[98]); MULADD(at[63], at[97]); - COMBA_STORE(C->dp[96]); - /* 97 */ - COMBA_FORWARD; - MULADD(at[34], at[127]); MULADD(at[35], at[126]); MULADD(at[36], at[125]); MULADD(at[37], at[124]); MULADD(at[38], at[123]); MULADD(at[39], at[122]); MULADD(at[40], at[121]); MULADD(at[41], at[120]); MULADD(at[42], at[119]); MULADD(at[43], at[118]); MULADD(at[44], at[117]); MULADD(at[45], at[116]); MULADD(at[46], at[115]); MULADD(at[47], at[114]); MULADD(at[48], at[113]); MULADD(at[49], at[112]); MULADD(at[50], at[111]); MULADD(at[51], at[110]); MULADD(at[52], at[109]); MULADD(at[53], at[108]); MULADD(at[54], at[107]); MULADD(at[55], at[106]); MULADD(at[56], at[105]); MULADD(at[57], at[104]); MULADD(at[58], at[103]); MULADD(at[59], at[102]); MULADD(at[60], at[101]); MULADD(at[61], at[100]); MULADD(at[62], at[99]); MULADD(at[63], at[98]); - COMBA_STORE(C->dp[97]); - /* 98 */ - COMBA_FORWARD; - MULADD(at[35], at[127]); MULADD(at[36], at[126]); MULADD(at[37], at[125]); MULADD(at[38], at[124]); MULADD(at[39], at[123]); MULADD(at[40], at[122]); MULADD(at[41], at[121]); MULADD(at[42], at[120]); MULADD(at[43], at[119]); MULADD(at[44], at[118]); MULADD(at[45], at[117]); MULADD(at[46], at[116]); MULADD(at[47], at[115]); MULADD(at[48], at[114]); MULADD(at[49], at[113]); MULADD(at[50], at[112]); MULADD(at[51], at[111]); MULADD(at[52], at[110]); MULADD(at[53], at[109]); MULADD(at[54], at[108]); MULADD(at[55], at[107]); MULADD(at[56], at[106]); MULADD(at[57], at[105]); MULADD(at[58], at[104]); MULADD(at[59], at[103]); MULADD(at[60], at[102]); MULADD(at[61], at[101]); MULADD(at[62], at[100]); MULADD(at[63], at[99]); - COMBA_STORE(C->dp[98]); - /* 99 */ - COMBA_FORWARD; - MULADD(at[36], at[127]); MULADD(at[37], at[126]); MULADD(at[38], at[125]); MULADD(at[39], at[124]); MULADD(at[40], at[123]); MULADD(at[41], at[122]); MULADD(at[42], at[121]); MULADD(at[43], at[120]); MULADD(at[44], at[119]); MULADD(at[45], at[118]); MULADD(at[46], at[117]); MULADD(at[47], at[116]); MULADD(at[48], at[115]); MULADD(at[49], at[114]); MULADD(at[50], at[113]); MULADD(at[51], at[112]); MULADD(at[52], at[111]); MULADD(at[53], at[110]); MULADD(at[54], at[109]); MULADD(at[55], at[108]); MULADD(at[56], at[107]); MULADD(at[57], at[106]); MULADD(at[58], at[105]); MULADD(at[59], at[104]); MULADD(at[60], at[103]); MULADD(at[61], at[102]); MULADD(at[62], at[101]); MULADD(at[63], at[100]); - COMBA_STORE(C->dp[99]); - /* 100 */ - COMBA_FORWARD; - MULADD(at[37], at[127]); MULADD(at[38], at[126]); MULADD(at[39], at[125]); MULADD(at[40], at[124]); MULADD(at[41], at[123]); MULADD(at[42], at[122]); MULADD(at[43], at[121]); MULADD(at[44], at[120]); MULADD(at[45], at[119]); MULADD(at[46], at[118]); MULADD(at[47], at[117]); MULADD(at[48], at[116]); MULADD(at[49], at[115]); MULADD(at[50], at[114]); MULADD(at[51], at[113]); MULADD(at[52], at[112]); MULADD(at[53], at[111]); MULADD(at[54], at[110]); MULADD(at[55], at[109]); MULADD(at[56], at[108]); MULADD(at[57], at[107]); MULADD(at[58], at[106]); MULADD(at[59], at[105]); MULADD(at[60], at[104]); MULADD(at[61], at[103]); MULADD(at[62], at[102]); MULADD(at[63], at[101]); - COMBA_STORE(C->dp[100]); - /* 101 */ - COMBA_FORWARD; - MULADD(at[38], at[127]); MULADD(at[39], at[126]); MULADD(at[40], at[125]); MULADD(at[41], at[124]); MULADD(at[42], at[123]); MULADD(at[43], at[122]); MULADD(at[44], at[121]); MULADD(at[45], at[120]); MULADD(at[46], at[119]); MULADD(at[47], at[118]); MULADD(at[48], at[117]); MULADD(at[49], at[116]); MULADD(at[50], at[115]); MULADD(at[51], at[114]); MULADD(at[52], at[113]); MULADD(at[53], at[112]); MULADD(at[54], at[111]); MULADD(at[55], at[110]); MULADD(at[56], at[109]); MULADD(at[57], at[108]); MULADD(at[58], at[107]); MULADD(at[59], at[106]); MULADD(at[60], at[105]); MULADD(at[61], at[104]); MULADD(at[62], at[103]); MULADD(at[63], at[102]); - COMBA_STORE(C->dp[101]); - /* 102 */ - COMBA_FORWARD; - MULADD(at[39], at[127]); MULADD(at[40], at[126]); MULADD(at[41], at[125]); MULADD(at[42], at[124]); MULADD(at[43], at[123]); MULADD(at[44], at[122]); MULADD(at[45], at[121]); MULADD(at[46], at[120]); MULADD(at[47], at[119]); MULADD(at[48], at[118]); MULADD(at[49], at[117]); MULADD(at[50], at[116]); MULADD(at[51], at[115]); MULADD(at[52], at[114]); MULADD(at[53], at[113]); MULADD(at[54], at[112]); MULADD(at[55], at[111]); MULADD(at[56], at[110]); MULADD(at[57], at[109]); MULADD(at[58], at[108]); MULADD(at[59], at[107]); MULADD(at[60], at[106]); MULADD(at[61], at[105]); MULADD(at[62], at[104]); MULADD(at[63], at[103]); - COMBA_STORE(C->dp[102]); - /* 103 */ - COMBA_FORWARD; - MULADD(at[40], at[127]); MULADD(at[41], at[126]); MULADD(at[42], at[125]); MULADD(at[43], at[124]); MULADD(at[44], at[123]); MULADD(at[45], at[122]); MULADD(at[46], at[121]); MULADD(at[47], at[120]); MULADD(at[48], at[119]); MULADD(at[49], at[118]); MULADD(at[50], at[117]); MULADD(at[51], at[116]); MULADD(at[52], at[115]); MULADD(at[53], at[114]); MULADD(at[54], at[113]); MULADD(at[55], at[112]); MULADD(at[56], at[111]); MULADD(at[57], at[110]); MULADD(at[58], at[109]); MULADD(at[59], at[108]); MULADD(at[60], at[107]); MULADD(at[61], at[106]); MULADD(at[62], at[105]); MULADD(at[63], at[104]); - COMBA_STORE(C->dp[103]); - /* 104 */ - COMBA_FORWARD; - MULADD(at[41], at[127]); MULADD(at[42], at[126]); MULADD(at[43], at[125]); MULADD(at[44], at[124]); MULADD(at[45], at[123]); MULADD(at[46], at[122]); MULADD(at[47], at[121]); MULADD(at[48], at[120]); MULADD(at[49], at[119]); MULADD(at[50], at[118]); MULADD(at[51], at[117]); MULADD(at[52], at[116]); MULADD(at[53], at[115]); MULADD(at[54], at[114]); MULADD(at[55], at[113]); MULADD(at[56], at[112]); MULADD(at[57], at[111]); MULADD(at[58], at[110]); MULADD(at[59], at[109]); MULADD(at[60], at[108]); MULADD(at[61], at[107]); MULADD(at[62], at[106]); MULADD(at[63], at[105]); - COMBA_STORE(C->dp[104]); - /* 105 */ - COMBA_FORWARD; - MULADD(at[42], at[127]); MULADD(at[43], at[126]); MULADD(at[44], at[125]); MULADD(at[45], at[124]); MULADD(at[46], at[123]); MULADD(at[47], at[122]); MULADD(at[48], at[121]); MULADD(at[49], at[120]); MULADD(at[50], at[119]); MULADD(at[51], at[118]); MULADD(at[52], at[117]); MULADD(at[53], at[116]); MULADD(at[54], at[115]); MULADD(at[55], at[114]); MULADD(at[56], at[113]); MULADD(at[57], at[112]); MULADD(at[58], at[111]); MULADD(at[59], at[110]); MULADD(at[60], at[109]); MULADD(at[61], at[108]); MULADD(at[62], at[107]); MULADD(at[63], at[106]); - COMBA_STORE(C->dp[105]); - /* 106 */ - COMBA_FORWARD; - MULADD(at[43], at[127]); MULADD(at[44], at[126]); MULADD(at[45], at[125]); MULADD(at[46], at[124]); MULADD(at[47], at[123]); MULADD(at[48], at[122]); MULADD(at[49], at[121]); MULADD(at[50], at[120]); MULADD(at[51], at[119]); MULADD(at[52], at[118]); MULADD(at[53], at[117]); MULADD(at[54], at[116]); MULADD(at[55], at[115]); MULADD(at[56], at[114]); MULADD(at[57], at[113]); MULADD(at[58], at[112]); MULADD(at[59], at[111]); MULADD(at[60], at[110]); MULADD(at[61], at[109]); MULADD(at[62], at[108]); MULADD(at[63], at[107]); - COMBA_STORE(C->dp[106]); - /* 107 */ - COMBA_FORWARD; - MULADD(at[44], at[127]); MULADD(at[45], at[126]); MULADD(at[46], at[125]); MULADD(at[47], at[124]); MULADD(at[48], at[123]); MULADD(at[49], at[122]); MULADD(at[50], at[121]); MULADD(at[51], at[120]); MULADD(at[52], at[119]); MULADD(at[53], at[118]); MULADD(at[54], at[117]); MULADD(at[55], at[116]); MULADD(at[56], at[115]); MULADD(at[57], at[114]); MULADD(at[58], at[113]); MULADD(at[59], at[112]); MULADD(at[60], at[111]); MULADD(at[61], at[110]); MULADD(at[62], at[109]); MULADD(at[63], at[108]); - COMBA_STORE(C->dp[107]); - /* 108 */ - COMBA_FORWARD; - MULADD(at[45], at[127]); MULADD(at[46], at[126]); MULADD(at[47], at[125]); MULADD(at[48], at[124]); MULADD(at[49], at[123]); MULADD(at[50], at[122]); MULADD(at[51], at[121]); MULADD(at[52], at[120]); MULADD(at[53], at[119]); MULADD(at[54], at[118]); MULADD(at[55], at[117]); MULADD(at[56], at[116]); MULADD(at[57], at[115]); MULADD(at[58], at[114]); MULADD(at[59], at[113]); MULADD(at[60], at[112]); MULADD(at[61], at[111]); MULADD(at[62], at[110]); MULADD(at[63], at[109]); - COMBA_STORE(C->dp[108]); - /* 109 */ - COMBA_FORWARD; - MULADD(at[46], at[127]); MULADD(at[47], at[126]); MULADD(at[48], at[125]); MULADD(at[49], at[124]); MULADD(at[50], at[123]); MULADD(at[51], at[122]); MULADD(at[52], at[121]); MULADD(at[53], at[120]); MULADD(at[54], at[119]); MULADD(at[55], at[118]); MULADD(at[56], at[117]); MULADD(at[57], at[116]); MULADD(at[58], at[115]); MULADD(at[59], at[114]); MULADD(at[60], at[113]); MULADD(at[61], at[112]); MULADD(at[62], at[111]); MULADD(at[63], at[110]); - COMBA_STORE(C->dp[109]); - /* 110 */ - COMBA_FORWARD; - MULADD(at[47], at[127]); MULADD(at[48], at[126]); MULADD(at[49], at[125]); MULADD(at[50], at[124]); MULADD(at[51], at[123]); MULADD(at[52], at[122]); MULADD(at[53], at[121]); MULADD(at[54], at[120]); MULADD(at[55], at[119]); MULADD(at[56], at[118]); MULADD(at[57], at[117]); MULADD(at[58], at[116]); MULADD(at[59], at[115]); MULADD(at[60], at[114]); MULADD(at[61], at[113]); MULADD(at[62], at[112]); MULADD(at[63], at[111]); - COMBA_STORE(C->dp[110]); - /* 111 */ - COMBA_FORWARD; - MULADD(at[48], at[127]); MULADD(at[49], at[126]); MULADD(at[50], at[125]); MULADD(at[51], at[124]); MULADD(at[52], at[123]); MULADD(at[53], at[122]); MULADD(at[54], at[121]); MULADD(at[55], at[120]); MULADD(at[56], at[119]); MULADD(at[57], at[118]); MULADD(at[58], at[117]); MULADD(at[59], at[116]); MULADD(at[60], at[115]); MULADD(at[61], at[114]); MULADD(at[62], at[113]); MULADD(at[63], at[112]); - COMBA_STORE(C->dp[111]); - /* 112 */ - COMBA_FORWARD; - MULADD(at[49], at[127]); MULADD(at[50], at[126]); MULADD(at[51], at[125]); MULADD(at[52], at[124]); MULADD(at[53], at[123]); MULADD(at[54], at[122]); MULADD(at[55], at[121]); MULADD(at[56], at[120]); MULADD(at[57], at[119]); MULADD(at[58], at[118]); MULADD(at[59], at[117]); MULADD(at[60], at[116]); MULADD(at[61], at[115]); MULADD(at[62], at[114]); MULADD(at[63], at[113]); - COMBA_STORE(C->dp[112]); - /* 113 */ - COMBA_FORWARD; - MULADD(at[50], at[127]); MULADD(at[51], at[126]); MULADD(at[52], at[125]); MULADD(at[53], at[124]); MULADD(at[54], at[123]); MULADD(at[55], at[122]); MULADD(at[56], at[121]); MULADD(at[57], at[120]); MULADD(at[58], at[119]); MULADD(at[59], at[118]); MULADD(at[60], at[117]); MULADD(at[61], at[116]); MULADD(at[62], at[115]); MULADD(at[63], at[114]); - COMBA_STORE(C->dp[113]); - /* 114 */ - COMBA_FORWARD; - MULADD(at[51], at[127]); MULADD(at[52], at[126]); MULADD(at[53], at[125]); MULADD(at[54], at[124]); MULADD(at[55], at[123]); MULADD(at[56], at[122]); MULADD(at[57], at[121]); MULADD(at[58], at[120]); MULADD(at[59], at[119]); MULADD(at[60], at[118]); MULADD(at[61], at[117]); MULADD(at[62], at[116]); MULADD(at[63], at[115]); - COMBA_STORE(C->dp[114]); - /* 115 */ - COMBA_FORWARD; - MULADD(at[52], at[127]); MULADD(at[53], at[126]); MULADD(at[54], at[125]); MULADD(at[55], at[124]); MULADD(at[56], at[123]); MULADD(at[57], at[122]); MULADD(at[58], at[121]); MULADD(at[59], at[120]); MULADD(at[60], at[119]); MULADD(at[61], at[118]); MULADD(at[62], at[117]); MULADD(at[63], at[116]); - COMBA_STORE(C->dp[115]); - /* 116 */ - COMBA_FORWARD; - MULADD(at[53], at[127]); MULADD(at[54], at[126]); MULADD(at[55], at[125]); MULADD(at[56], at[124]); MULADD(at[57], at[123]); MULADD(at[58], at[122]); MULADD(at[59], at[121]); MULADD(at[60], at[120]); MULADD(at[61], at[119]); MULADD(at[62], at[118]); MULADD(at[63], at[117]); - COMBA_STORE(C->dp[116]); - /* 117 */ - COMBA_FORWARD; - MULADD(at[54], at[127]); MULADD(at[55], at[126]); MULADD(at[56], at[125]); MULADD(at[57], at[124]); MULADD(at[58], at[123]); MULADD(at[59], at[122]); MULADD(at[60], at[121]); MULADD(at[61], at[120]); MULADD(at[62], at[119]); MULADD(at[63], at[118]); - COMBA_STORE(C->dp[117]); - /* 118 */ - COMBA_FORWARD; - MULADD(at[55], at[127]); MULADD(at[56], at[126]); MULADD(at[57], at[125]); MULADD(at[58], at[124]); MULADD(at[59], at[123]); MULADD(at[60], at[122]); MULADD(at[61], at[121]); MULADD(at[62], at[120]); MULADD(at[63], at[119]); - COMBA_STORE(C->dp[118]); - /* 119 */ - COMBA_FORWARD; - MULADD(at[56], at[127]); MULADD(at[57], at[126]); MULADD(at[58], at[125]); MULADD(at[59], at[124]); MULADD(at[60], at[123]); MULADD(at[61], at[122]); MULADD(at[62], at[121]); MULADD(at[63], at[120]); - COMBA_STORE(C->dp[119]); - /* 120 */ - COMBA_FORWARD; - MULADD(at[57], at[127]); MULADD(at[58], at[126]); MULADD(at[59], at[125]); MULADD(at[60], at[124]); MULADD(at[61], at[123]); MULADD(at[62], at[122]); MULADD(at[63], at[121]); - COMBA_STORE(C->dp[120]); - /* 121 */ - COMBA_FORWARD; - MULADD(at[58], at[127]); MULADD(at[59], at[126]); MULADD(at[60], at[125]); MULADD(at[61], at[124]); MULADD(at[62], at[123]); MULADD(at[63], at[122]); - COMBA_STORE(C->dp[121]); - /* 122 */ - COMBA_FORWARD; - MULADD(at[59], at[127]); MULADD(at[60], at[126]); MULADD(at[61], at[125]); MULADD(at[62], at[124]); MULADD(at[63], at[123]); - COMBA_STORE(C->dp[122]); - /* 123 */ - COMBA_FORWARD; - MULADD(at[60], at[127]); MULADD(at[61], at[126]); MULADD(at[62], at[125]); MULADD(at[63], at[124]); - COMBA_STORE(C->dp[123]); - /* 124 */ - COMBA_FORWARD; - MULADD(at[61], at[127]); MULADD(at[62], at[126]); MULADD(at[63], at[125]); - COMBA_STORE(C->dp[124]); - /* 125 */ - COMBA_FORWARD; - MULADD(at[62], at[127]); MULADD(at[63], at[126]); - COMBA_STORE(C->dp[125]); - /* 126 */ - COMBA_FORWARD; - MULADD(at[63], at[127]); - COMBA_STORE(C->dp[126]); - COMBA_STORE2(C->dp[127]); - C->used = 128; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_7.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_7.c deleted file mode 100644 index 7a97e957d..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_7.c +++ /dev/null @@ -1,71 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL7 -void fp_mul_comba7(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[14]; - - memcpy(at, A->dp, 7 * sizeof(fp_digit)); - memcpy(at+7, B->dp, 7 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[7]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[8]); MULADD(at[1], at[7]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); MULADD(at[6], at[7]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[5], at[13]); MULADD(at[6], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[6], at[13]); - COMBA_STORE(C->dp[12]); - COMBA_STORE2(C->dp[13]); - C->used = 14; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_8.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_8.c deleted file mode 100644 index a630cbb61..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_8.c +++ /dev/null @@ -1,79 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL8 -void fp_mul_comba8(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[16]; - - memcpy(at, A->dp, 8 * sizeof(fp_digit)); - memcpy(at+8, B->dp, 8 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[8]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); MULADD(at[7], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[6], at[15]); MULADD(at[7], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[7], at[15]); - COMBA_STORE(C->dp[14]); - COMBA_STORE2(C->dp[15]); - C->used = 16; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_9.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_9.c deleted file mode 100644 index 63ca5cff6..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_9.c +++ /dev/null @@ -1,87 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#ifdef TFM_MUL9 -void fp_mul_comba9(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[18]; - - memcpy(at, A->dp, 9 * sizeof(fp_digit)); - memcpy(at+9, B->dp, 9 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[9]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); MULADD(at[8], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); MULADD(at[8], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[7], at[17]); MULADD(at[8], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[8], at[17]); - COMBA_STORE(C->dp[16]); - COMBA_STORE2(C->dp[17]); - C->used = 18; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; -} -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_small_set.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_small_set.c deleted file mode 100644 index 1a9cdd34c..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_comba_small_set.c +++ /dev/null @@ -1,1228 +0,0 @@ -#define TFM_DEFINES -#include "fp_mul_comba.c" - -#if defined(TFM_SMALL_SET) -void fp_mul_comba_small(fp_int *A, fp_int *B, fp_int *C) -{ - fp_digit c0, c1, c2, at[32]; - switch (MAX(A->used, B->used)) { - - case 1: - memcpy(at, A->dp, 1 * sizeof(fp_digit)); - memcpy(at+1, B->dp, 1 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[1]); - COMBA_STORE(C->dp[0]); - COMBA_STORE2(C->dp[1]); - C->used = 2; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 2: - memcpy(at, A->dp, 2 * sizeof(fp_digit)); - memcpy(at+2, B->dp, 2 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[2]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[3]); MULADD(at[1], at[2]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[1], at[3]); - COMBA_STORE(C->dp[2]); - COMBA_STORE2(C->dp[3]); - C->used = 4; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 3: - memcpy(at, A->dp, 3 * sizeof(fp_digit)); - memcpy(at+3, B->dp, 3 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[3]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[4]); MULADD(at[1], at[3]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[5]); MULADD(at[1], at[4]); MULADD(at[2], at[3]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[1], at[5]); MULADD(at[2], at[4]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[2], at[5]); - COMBA_STORE(C->dp[4]); - COMBA_STORE2(C->dp[5]); - C->used = 6; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 4: - memcpy(at, A->dp, 4 * sizeof(fp_digit)); - memcpy(at+4, B->dp, 4 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[4]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[5]); MULADD(at[1], at[4]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[6]); MULADD(at[1], at[5]); MULADD(at[2], at[4]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); MULADD(at[3], at[4]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[2], at[7]); MULADD(at[3], at[6]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[3], at[7]); - COMBA_STORE(C->dp[6]); - COMBA_STORE2(C->dp[7]); - C->used = 8; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 5: - memcpy(at, A->dp, 5 * sizeof(fp_digit)); - memcpy(at+5, B->dp, 5 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[5]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[6]); MULADD(at[1], at[5]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[7]); MULADD(at[1], at[6]); MULADD(at[2], at[5]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); MULADD(at[3], at[5]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]); MULADD(at[4], at[5]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[3], at[9]); MULADD(at[4], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[4], at[9]); - COMBA_STORE(C->dp[8]); - COMBA_STORE2(C->dp[9]); - C->used = 10; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 6: - memcpy(at, A->dp, 6 * sizeof(fp_digit)); - memcpy(at+6, B->dp, 6 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[6]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[7]); MULADD(at[1], at[6]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[8]); MULADD(at[1], at[7]); MULADD(at[2], at[6]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); MULADD(at[3], at[6]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); MULADD(at[4], at[6]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); MULADD(at[5], at[6]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[4], at[11]); MULADD(at[5], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[5], at[11]); - COMBA_STORE(C->dp[10]); - COMBA_STORE2(C->dp[11]); - C->used = 12; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 7: - memcpy(at, A->dp, 7 * sizeof(fp_digit)); - memcpy(at+7, B->dp, 7 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[7]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[8]); MULADD(at[1], at[7]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); MULADD(at[2], at[7]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); MULADD(at[3], at[7]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); MULADD(at[4], at[7]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); MULADD(at[5], at[7]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); MULADD(at[6], at[7]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[5], at[13]); MULADD(at[6], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[6], at[13]); - COMBA_STORE(C->dp[12]); - COMBA_STORE2(C->dp[13]); - C->used = 14; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 8: - memcpy(at, A->dp, 8 * sizeof(fp_digit)); - memcpy(at+8, B->dp, 8 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[8]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[9]); MULADD(at[1], at[8]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); MULADD(at[2], at[8]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); MULADD(at[3], at[8]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); MULADD(at[4], at[8]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); MULADD(at[5], at[8]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); MULADD(at[6], at[8]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); MULADD(at[7], at[8]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[6], at[15]); MULADD(at[7], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[7], at[15]); - COMBA_STORE(C->dp[14]); - COMBA_STORE2(C->dp[15]); - C->used = 16; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 9: - memcpy(at, A->dp, 9 * sizeof(fp_digit)); - memcpy(at+9, B->dp, 9 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[9]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[10]); MULADD(at[1], at[9]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); MULADD(at[2], at[9]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); MULADD(at[3], at[9]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); MULADD(at[4], at[9]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); MULADD(at[5], at[9]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); MULADD(at[6], at[9]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); MULADD(at[7], at[9]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); MULADD(at[8], at[9]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); MULADD(at[8], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[7], at[17]); MULADD(at[8], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[8], at[17]); - COMBA_STORE(C->dp[16]); - COMBA_STORE2(C->dp[17]); - C->used = 18; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 10: - memcpy(at, A->dp, 10 * sizeof(fp_digit)); - memcpy(at+10, B->dp, 10 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[10]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[11]); MULADD(at[1], at[10]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); MULADD(at[2], at[10]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); MULADD(at[3], at[10]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); MULADD(at[4], at[10]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); MULADD(at[5], at[10]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); MULADD(at[6], at[10]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); MULADD(at[7], at[10]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); MULADD(at[8], at[10]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]); MULADD(at[9], at[10]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); MULADD(at[9], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[8], at[19]); MULADD(at[9], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[9], at[19]); - COMBA_STORE(C->dp[18]); - COMBA_STORE2(C->dp[19]); - C->used = 20; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 11: - memcpy(at, A->dp, 11 * sizeof(fp_digit)); - memcpy(at+11, B->dp, 11 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[11]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[12]); MULADD(at[1], at[11]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); MULADD(at[2], at[11]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); MULADD(at[3], at[11]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); MULADD(at[4], at[11]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); MULADD(at[5], at[11]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); MULADD(at[6], at[11]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); MULADD(at[7], at[11]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); MULADD(at[8], at[11]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); MULADD(at[9], at[11]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]); MULADD(at[10], at[11]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); MULADD(at[10], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[9], at[21]); MULADD(at[10], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[10], at[21]); - COMBA_STORE(C->dp[20]); - COMBA_STORE2(C->dp[21]); - C->used = 22; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 12: - memcpy(at, A->dp, 12 * sizeof(fp_digit)); - memcpy(at+12, B->dp, 12 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[12]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[13]); MULADD(at[1], at[12]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); MULADD(at[2], at[12]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); MULADD(at[3], at[12]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); MULADD(at[4], at[12]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); MULADD(at[5], at[12]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); MULADD(at[6], at[12]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); MULADD(at[7], at[12]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); MULADD(at[8], at[12]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); MULADD(at[9], at[12]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); MULADD(at[10], at[12]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]); MULADD(at[11], at[12]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); MULADD(at[11], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[10], at[23]); MULADD(at[11], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[11], at[23]); - COMBA_STORE(C->dp[22]); - COMBA_STORE2(C->dp[23]); - C->used = 24; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 13: - memcpy(at, A->dp, 13 * sizeof(fp_digit)); - memcpy(at+13, B->dp, 13 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[13]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[14]); MULADD(at[1], at[13]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); MULADD(at[2], at[13]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); MULADD(at[3], at[13]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); MULADD(at[4], at[13]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); MULADD(at[5], at[13]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); MULADD(at[6], at[13]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); MULADD(at[7], at[13]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); MULADD(at[8], at[13]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); MULADD(at[9], at[13]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); MULADD(at[10], at[13]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); MULADD(at[11], at[13]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]); MULADD(at[12], at[13]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); MULADD(at[12], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[11], at[25]); MULADD(at[12], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[12], at[25]); - COMBA_STORE(C->dp[24]); - COMBA_STORE2(C->dp[25]); - C->used = 26; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 14: - memcpy(at, A->dp, 14 * sizeof(fp_digit)); - memcpy(at+14, B->dp, 14 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[14]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[15]); MULADD(at[1], at[14]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); MULADD(at[2], at[14]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); MULADD(at[3], at[14]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); MULADD(at[4], at[14]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); MULADD(at[5], at[14]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); MULADD(at[6], at[14]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); MULADD(at[7], at[14]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); MULADD(at[8], at[14]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); MULADD(at[9], at[14]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); MULADD(at[10], at[14]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); MULADD(at[11], at[14]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); MULADD(at[12], at[14]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]); MULADD(at[13], at[14]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); MULADD(at[13], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[12], at[27]); MULADD(at[13], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[13], at[27]); - COMBA_STORE(C->dp[26]); - COMBA_STORE2(C->dp[27]); - C->used = 28; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 15: - memcpy(at, A->dp, 15 * sizeof(fp_digit)); - memcpy(at+15, B->dp, 15 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[15]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[16]); MULADD(at[1], at[15]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); MULADD(at[2], at[15]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); MULADD(at[3], at[15]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); MULADD(at[4], at[15]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); MULADD(at[5], at[15]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); MULADD(at[6], at[15]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); MULADD(at[7], at[15]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); MULADD(at[8], at[15]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); MULADD(at[9], at[15]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); MULADD(at[10], at[15]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); MULADD(at[11], at[15]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); MULADD(at[12], at[15]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); MULADD(at[13], at[15]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]); MULADD(at[14], at[15]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); MULADD(at[14], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[13], at[29]); MULADD(at[14], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[14], at[29]); - COMBA_STORE(C->dp[28]); - COMBA_STORE2(C->dp[29]); - C->used = 30; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - - case 16: - memcpy(at, A->dp, 16 * sizeof(fp_digit)); - memcpy(at+16, B->dp, 16 * sizeof(fp_digit)); - COMBA_START; - - COMBA_CLEAR; - /* 0 */ - MULADD(at[0], at[16]); - COMBA_STORE(C->dp[0]); - /* 1 */ - COMBA_FORWARD; - MULADD(at[0], at[17]); MULADD(at[1], at[16]); - COMBA_STORE(C->dp[1]); - /* 2 */ - COMBA_FORWARD; - MULADD(at[0], at[18]); MULADD(at[1], at[17]); MULADD(at[2], at[16]); - COMBA_STORE(C->dp[2]); - /* 3 */ - COMBA_FORWARD; - MULADD(at[0], at[19]); MULADD(at[1], at[18]); MULADD(at[2], at[17]); MULADD(at[3], at[16]); - COMBA_STORE(C->dp[3]); - /* 4 */ - COMBA_FORWARD; - MULADD(at[0], at[20]); MULADD(at[1], at[19]); MULADD(at[2], at[18]); MULADD(at[3], at[17]); MULADD(at[4], at[16]); - COMBA_STORE(C->dp[4]); - /* 5 */ - COMBA_FORWARD; - MULADD(at[0], at[21]); MULADD(at[1], at[20]); MULADD(at[2], at[19]); MULADD(at[3], at[18]); MULADD(at[4], at[17]); MULADD(at[5], at[16]); - COMBA_STORE(C->dp[5]); - /* 6 */ - COMBA_FORWARD; - MULADD(at[0], at[22]); MULADD(at[1], at[21]); MULADD(at[2], at[20]); MULADD(at[3], at[19]); MULADD(at[4], at[18]); MULADD(at[5], at[17]); MULADD(at[6], at[16]); - COMBA_STORE(C->dp[6]); - /* 7 */ - COMBA_FORWARD; - MULADD(at[0], at[23]); MULADD(at[1], at[22]); MULADD(at[2], at[21]); MULADD(at[3], at[20]); MULADD(at[4], at[19]); MULADD(at[5], at[18]); MULADD(at[6], at[17]); MULADD(at[7], at[16]); - COMBA_STORE(C->dp[7]); - /* 8 */ - COMBA_FORWARD; - MULADD(at[0], at[24]); MULADD(at[1], at[23]); MULADD(at[2], at[22]); MULADD(at[3], at[21]); MULADD(at[4], at[20]); MULADD(at[5], at[19]); MULADD(at[6], at[18]); MULADD(at[7], at[17]); MULADD(at[8], at[16]); - COMBA_STORE(C->dp[8]); - /* 9 */ - COMBA_FORWARD; - MULADD(at[0], at[25]); MULADD(at[1], at[24]); MULADD(at[2], at[23]); MULADD(at[3], at[22]); MULADD(at[4], at[21]); MULADD(at[5], at[20]); MULADD(at[6], at[19]); MULADD(at[7], at[18]); MULADD(at[8], at[17]); MULADD(at[9], at[16]); - COMBA_STORE(C->dp[9]); - /* 10 */ - COMBA_FORWARD; - MULADD(at[0], at[26]); MULADD(at[1], at[25]); MULADD(at[2], at[24]); MULADD(at[3], at[23]); MULADD(at[4], at[22]); MULADD(at[5], at[21]); MULADD(at[6], at[20]); MULADD(at[7], at[19]); MULADD(at[8], at[18]); MULADD(at[9], at[17]); MULADD(at[10], at[16]); - COMBA_STORE(C->dp[10]); - /* 11 */ - COMBA_FORWARD; - MULADD(at[0], at[27]); MULADD(at[1], at[26]); MULADD(at[2], at[25]); MULADD(at[3], at[24]); MULADD(at[4], at[23]); MULADD(at[5], at[22]); MULADD(at[6], at[21]); MULADD(at[7], at[20]); MULADD(at[8], at[19]); MULADD(at[9], at[18]); MULADD(at[10], at[17]); MULADD(at[11], at[16]); - COMBA_STORE(C->dp[11]); - /* 12 */ - COMBA_FORWARD; - MULADD(at[0], at[28]); MULADD(at[1], at[27]); MULADD(at[2], at[26]); MULADD(at[3], at[25]); MULADD(at[4], at[24]); MULADD(at[5], at[23]); MULADD(at[6], at[22]); MULADD(at[7], at[21]); MULADD(at[8], at[20]); MULADD(at[9], at[19]); MULADD(at[10], at[18]); MULADD(at[11], at[17]); MULADD(at[12], at[16]); - COMBA_STORE(C->dp[12]); - /* 13 */ - COMBA_FORWARD; - MULADD(at[0], at[29]); MULADD(at[1], at[28]); MULADD(at[2], at[27]); MULADD(at[3], at[26]); MULADD(at[4], at[25]); MULADD(at[5], at[24]); MULADD(at[6], at[23]); MULADD(at[7], at[22]); MULADD(at[8], at[21]); MULADD(at[9], at[20]); MULADD(at[10], at[19]); MULADD(at[11], at[18]); MULADD(at[12], at[17]); MULADD(at[13], at[16]); - COMBA_STORE(C->dp[13]); - /* 14 */ - COMBA_FORWARD; - MULADD(at[0], at[30]); MULADD(at[1], at[29]); MULADD(at[2], at[28]); MULADD(at[3], at[27]); MULADD(at[4], at[26]); MULADD(at[5], at[25]); MULADD(at[6], at[24]); MULADD(at[7], at[23]); MULADD(at[8], at[22]); MULADD(at[9], at[21]); MULADD(at[10], at[20]); MULADD(at[11], at[19]); MULADD(at[12], at[18]); MULADD(at[13], at[17]); MULADD(at[14], at[16]); - COMBA_STORE(C->dp[14]); - /* 15 */ - COMBA_FORWARD; - MULADD(at[0], at[31]); MULADD(at[1], at[30]); MULADD(at[2], at[29]); MULADD(at[3], at[28]); MULADD(at[4], at[27]); MULADD(at[5], at[26]); MULADD(at[6], at[25]); MULADD(at[7], at[24]); MULADD(at[8], at[23]); MULADD(at[9], at[22]); MULADD(at[10], at[21]); MULADD(at[11], at[20]); MULADD(at[12], at[19]); MULADD(at[13], at[18]); MULADD(at[14], at[17]); MULADD(at[15], at[16]); - COMBA_STORE(C->dp[15]); - /* 16 */ - COMBA_FORWARD; - MULADD(at[1], at[31]); MULADD(at[2], at[30]); MULADD(at[3], at[29]); MULADD(at[4], at[28]); MULADD(at[5], at[27]); MULADD(at[6], at[26]); MULADD(at[7], at[25]); MULADD(at[8], at[24]); MULADD(at[9], at[23]); MULADD(at[10], at[22]); MULADD(at[11], at[21]); MULADD(at[12], at[20]); MULADD(at[13], at[19]); MULADD(at[14], at[18]); MULADD(at[15], at[17]); - COMBA_STORE(C->dp[16]); - /* 17 */ - COMBA_FORWARD; - MULADD(at[2], at[31]); MULADD(at[3], at[30]); MULADD(at[4], at[29]); MULADD(at[5], at[28]); MULADD(at[6], at[27]); MULADD(at[7], at[26]); MULADD(at[8], at[25]); MULADD(at[9], at[24]); MULADD(at[10], at[23]); MULADD(at[11], at[22]); MULADD(at[12], at[21]); MULADD(at[13], at[20]); MULADD(at[14], at[19]); MULADD(at[15], at[18]); - COMBA_STORE(C->dp[17]); - /* 18 */ - COMBA_FORWARD; - MULADD(at[3], at[31]); MULADD(at[4], at[30]); MULADD(at[5], at[29]); MULADD(at[6], at[28]); MULADD(at[7], at[27]); MULADD(at[8], at[26]); MULADD(at[9], at[25]); MULADD(at[10], at[24]); MULADD(at[11], at[23]); MULADD(at[12], at[22]); MULADD(at[13], at[21]); MULADD(at[14], at[20]); MULADD(at[15], at[19]); - COMBA_STORE(C->dp[18]); - /* 19 */ - COMBA_FORWARD; - MULADD(at[4], at[31]); MULADD(at[5], at[30]); MULADD(at[6], at[29]); MULADD(at[7], at[28]); MULADD(at[8], at[27]); MULADD(at[9], at[26]); MULADD(at[10], at[25]); MULADD(at[11], at[24]); MULADD(at[12], at[23]); MULADD(at[13], at[22]); MULADD(at[14], at[21]); MULADD(at[15], at[20]); - COMBA_STORE(C->dp[19]); - /* 20 */ - COMBA_FORWARD; - MULADD(at[5], at[31]); MULADD(at[6], at[30]); MULADD(at[7], at[29]); MULADD(at[8], at[28]); MULADD(at[9], at[27]); MULADD(at[10], at[26]); MULADD(at[11], at[25]); MULADD(at[12], at[24]); MULADD(at[13], at[23]); MULADD(at[14], at[22]); MULADD(at[15], at[21]); - COMBA_STORE(C->dp[20]); - /* 21 */ - COMBA_FORWARD; - MULADD(at[6], at[31]); MULADD(at[7], at[30]); MULADD(at[8], at[29]); MULADD(at[9], at[28]); MULADD(at[10], at[27]); MULADD(at[11], at[26]); MULADD(at[12], at[25]); MULADD(at[13], at[24]); MULADD(at[14], at[23]); MULADD(at[15], at[22]); - COMBA_STORE(C->dp[21]); - /* 22 */ - COMBA_FORWARD; - MULADD(at[7], at[31]); MULADD(at[8], at[30]); MULADD(at[9], at[29]); MULADD(at[10], at[28]); MULADD(at[11], at[27]); MULADD(at[12], at[26]); MULADD(at[13], at[25]); MULADD(at[14], at[24]); MULADD(at[15], at[23]); - COMBA_STORE(C->dp[22]); - /* 23 */ - COMBA_FORWARD; - MULADD(at[8], at[31]); MULADD(at[9], at[30]); MULADD(at[10], at[29]); MULADD(at[11], at[28]); MULADD(at[12], at[27]); MULADD(at[13], at[26]); MULADD(at[14], at[25]); MULADD(at[15], at[24]); - COMBA_STORE(C->dp[23]); - /* 24 */ - COMBA_FORWARD; - MULADD(at[9], at[31]); MULADD(at[10], at[30]); MULADD(at[11], at[29]); MULADD(at[12], at[28]); MULADD(at[13], at[27]); MULADD(at[14], at[26]); MULADD(at[15], at[25]); - COMBA_STORE(C->dp[24]); - /* 25 */ - COMBA_FORWARD; - MULADD(at[10], at[31]); MULADD(at[11], at[30]); MULADD(at[12], at[29]); MULADD(at[13], at[28]); MULADD(at[14], at[27]); MULADD(at[15], at[26]); - COMBA_STORE(C->dp[25]); - /* 26 */ - COMBA_FORWARD; - MULADD(at[11], at[31]); MULADD(at[12], at[30]); MULADD(at[13], at[29]); MULADD(at[14], at[28]); MULADD(at[15], at[27]); - COMBA_STORE(C->dp[26]); - /* 27 */ - COMBA_FORWARD; - MULADD(at[12], at[31]); MULADD(at[13], at[30]); MULADD(at[14], at[29]); MULADD(at[15], at[28]); - COMBA_STORE(C->dp[27]); - /* 28 */ - COMBA_FORWARD; - MULADD(at[13], at[31]); MULADD(at[14], at[30]); MULADD(at[15], at[29]); - COMBA_STORE(C->dp[28]); - /* 29 */ - COMBA_FORWARD; - MULADD(at[14], at[31]); MULADD(at[15], at[30]); - COMBA_STORE(C->dp[29]); - /* 30 */ - COMBA_FORWARD; - MULADD(at[15], at[31]); - COMBA_STORE(C->dp[30]); - COMBA_STORE2(C->dp[31]); - C->used = 32; - C->sign = A->sign ^ B->sign; - fp_clamp(C); - COMBA_FINI; - break; - } -} - -#endif diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_d.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mul_d.c deleted file mode 100644 index 8775518cd..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mul_d.c +++ /dev/null @@ -1,40 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a * b */ -void fp_mul_d(fp_int *a, fp_digit b, fp_int *c) -{ - fp_word w; - int x, oldused; - - oldused = c->used; - c->used = a->used; - c->sign = a->sign; - w = 0; - for (x = 0; x < a->used; x++) { - w = ((fp_word)a->dp[x]) * ((fp_word)b) + w; - c->dp[x] = (fp_digit)w; - w = w >> DIGIT_BIT; - } - if (w != 0 && (a->used != FP_SIZE)) { - c->dp[c->used++] = w; - ++x; - } - for (; x < oldused; x++) { - c->dp[x] = 0; - } - fp_clamp(c); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mul_d.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/mul/fp_mulmod.c b/lib/hcrypto/tomsfastmath/src/mul/fp_mulmod.c deleted file mode 100644 index a84d5011b..000000000 --- a/lib/hcrypto/tomsfastmath/src/mul/fp_mulmod.c +++ /dev/null @@ -1,22 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include -/* d = a * b (mod c) */ -int fp_mulmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d) -{ - fp_int tmp; - fp_zero(&tmp); - fp_mul(a, b, &tmp); - return fp_mod(&tmp, c, d); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/mul/fp_mulmod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_find_prime.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_find_prime.c deleted file mode 100644 index 2bf1bd9d5..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_find_prime.c +++ /dev/null @@ -1,40 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is public domain and free for all purposes. - * - * Love Hornquist Astrand - */ -#include - - -int fp_find_prime(fp_int *a) -{ - fp_int b; - int res; - - if (fp_iseven(a)) - fp_add_d(a, 1, a); - - do { - - if ((res = fp_isprime(a)) == FP_NO) { - fp_add_d(a, 2, a); - continue; - } -#if 0 /* we can't do this with linear search */ - /* see if (a-1)/2 is prime */ - fp_init(&b); - fp_sub_d(a, 1, &b); - fp_div_2(&b, &b); - - /* is it prime? */ - if ((res = fp_isprime(&b)) == FP_YES) - fp_add_d(a, 2, a); -#endif - - } while (res != FP_YES); - - fp_zero(&b); - - return res; -} diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_gcd.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_gcd.c deleted file mode 100644 index eb75b997b..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_gcd.c +++ /dev/null @@ -1,58 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - - - -/* c = (a, b) */ -void fp_gcd(fp_int *a, fp_int *b, fp_int *c) -{ - fp_int u, v, r; - - - /* either zero than gcd is the largest */ - if (fp_iszero (a) == 1 && fp_iszero (b) == 0) { - fp_abs (b, c); - return; - } - if (fp_iszero (a) == 0 && fp_iszero (b) == 1) { - fp_abs (a, c); - return; - } - - /* optimized. At this point if a == 0 then - * b must equal zero too - */ - if (fp_iszero (a) == 1) { - fp_zero(c); - return; - } - - /* sort inputs */ - if (fp_cmp_mag(a, b) != FP_LT) { - fp_init_copy(&u, a); - fp_init_copy(&v, b); - } else { - fp_init_copy(&u, b); - fp_init_copy(&v, a); - } - - fp_zero(&r); - while (fp_iszero(&v) == FP_NO) { - fp_mod(&u, &v, &r); - fp_copy(&v, &u); - fp_copy(&r, &v); - } - fp_copy(&u, c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_gcd.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_invmod.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_invmod.c deleted file mode 100644 index 952d2856d..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_invmod.c +++ /dev/null @@ -1,207 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -static int fp_invmod_slow (fp_int * a, fp_int * b, fp_int * c) -{ - fp_int x, y, u, v, A, B, C, D; - int res; - - /* b cannot be negative */ - if (b->sign == FP_NEG || fp_iszero(b) == 1) { - return FP_VAL; - } - - /* init temps */ - fp_init(&x); fp_init(&y); - fp_init(&u); fp_init(&v); - fp_init(&A); fp_init(&B); - fp_init(&C); fp_init(&D); - - /* x = a, y = b */ - if ((res = fp_mod(a, b, &x)) != FP_OKAY) { - return res; - } - fp_copy(b, &y); - - /* 2. [modified] if x,y are both even then return an error! */ - if (fp_iseven (&x) == 1 && fp_iseven (&y) == 1) { - return FP_VAL; - } - - /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ - fp_copy (&x, &u); - fp_copy (&y, &v); - fp_set (&A, 1); - fp_set (&D, 1); - -top: - /* 4. while u is even do */ - while (fp_iseven (&u) == 1) { - /* 4.1 u = u/2 */ - fp_div_2 (&u, &u); - - /* 4.2 if A or B is odd then */ - if (fp_isodd (&A) == 1 || fp_isodd (&B) == 1) { - /* A = (A+y)/2, B = (B-x)/2 */ - fp_add (&A, &y, &A); - fp_sub (&B, &x, &B); - } - /* A = A/2, B = B/2 */ - fp_div_2 (&A, &A); - fp_div_2 (&B, &B); - } - - /* 5. while v is even do */ - while (fp_iseven (&v) == 1) { - /* 5.1 v = v/2 */ - fp_div_2 (&v, &v); - - /* 5.2 if C or D is odd then */ - if (fp_isodd (&C) == 1 || fp_isodd (&D) == 1) { - /* C = (C+y)/2, D = (D-x)/2 */ - fp_add (&C, &y, &C); - fp_sub (&D, &x, &D); - } - /* C = C/2, D = D/2 */ - fp_div_2 (&C, &C); - fp_div_2 (&D, &D); - } - - /* 6. if u >= v then */ - if (fp_cmp (&u, &v) != FP_LT) { - /* u = u - v, A = A - C, B = B - D */ - fp_sub (&u, &v, &u); - fp_sub (&A, &C, &A); - fp_sub (&B, &D, &B); - } else { - /* v - v - u, C = C - A, D = D - B */ - fp_sub (&v, &u, &v); - fp_sub (&C, &A, &C); - fp_sub (&D, &B, &D); - } - - /* if not zero goto step 4 */ - if (fp_iszero (&u) == 0) - goto top; - - /* now a = C, b = D, gcd == g*v */ - - /* if v != 1 then there is no inverse */ - if (fp_cmp_d (&v, 1) != FP_EQ) { - return FP_VAL; - } - - /* if its too low */ - while (fp_cmp_d(&C, 0) == FP_LT) { - fp_add(&C, b, &C); - } - - /* too big */ - while (fp_cmp_mag(&C, b) != FP_LT) { - fp_sub(&C, b, &C); - } - - /* C is now the inverse */ - fp_copy(&C, c); - return FP_OKAY; -} - -/* c = 1/a (mod b) for odd b only */ -int fp_invmod(fp_int *a, fp_int *b, fp_int *c) -{ - fp_int x, y, u, v, B, D; - int neg; - - /* 2. [modified] b must be odd */ - if (fp_iseven (b) == FP_YES) { - return fp_invmod_slow(a,b,c); - } - - /* init all our temps */ - fp_init(&x); fp_init(&y); - fp_init(&u); fp_init(&v); - fp_init(&B); fp_init(&D); - - /* x == modulus, y == value to invert */ - fp_copy(b, &x); - - /* we need y = |a| */ - fp_abs(a, &y); - - /* 3. u=x, v=y, A=1, B=0, C=0,D=1 */ - fp_copy(&x, &u); - fp_copy(&y, &v); - fp_set (&D, 1); - -top: - /* 4. while u is even do */ - while (fp_iseven (&u) == FP_YES) { - /* 4.1 u = u/2 */ - fp_div_2 (&u, &u); - - /* 4.2 if B is odd then */ - if (fp_isodd (&B) == FP_YES) { - fp_sub (&B, &x, &B); - } - /* B = B/2 */ - fp_div_2 (&B, &B); - } - - /* 5. while v is even do */ - while (fp_iseven (&v) == FP_YES) { - /* 5.1 v = v/2 */ - fp_div_2 (&v, &v); - - /* 5.2 if D is odd then */ - if (fp_isodd (&D) == FP_YES) { - /* D = (D-x)/2 */ - fp_sub (&D, &x, &D); - } - /* D = D/2 */ - fp_div_2 (&D, &D); - } - - /* 6. if u >= v then */ - if (fp_cmp (&u, &v) != FP_LT) { - /* u = u - v, B = B - D */ - fp_sub (&u, &v, &u); - fp_sub (&B, &D, &B); - } else { - /* v - v - u, D = D - B */ - fp_sub (&v, &u, &v); - fp_sub (&D, &B, &D); - } - - /* if not zero goto step 4 */ - if (fp_iszero (&u) == FP_NO) { - goto top; - } - - /* now a = C, b = D, gcd == g*v */ - - /* if v != 1 then there is no inverse */ - if (fp_cmp_d (&v, 1) != FP_EQ) { - return FP_VAL; - } - - /* b is now the inverse */ - neg = a->sign; - while (D.sign == FP_NEG) { - fp_add (&D, b, &D); - } - fp_copy (&D, c); - c->sign = neg; - return FP_OKAY; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_invmod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_isprime.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_isprime.c deleted file mode 100644 index d9ae6ce4c..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_isprime.c +++ /dev/null @@ -1,79 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* a few primes */ -static const fp_digit primes[256] = { - 0x0002, 0x0003, 0x0005, 0x0007, 0x000B, 0x000D, 0x0011, 0x0013, - 0x0017, 0x001D, 0x001F, 0x0025, 0x0029, 0x002B, 0x002F, 0x0035, - 0x003B, 0x003D, 0x0043, 0x0047, 0x0049, 0x004F, 0x0053, 0x0059, - 0x0061, 0x0065, 0x0067, 0x006B, 0x006D, 0x0071, 0x007F, 0x0083, - 0x0089, 0x008B, 0x0095, 0x0097, 0x009D, 0x00A3, 0x00A7, 0x00AD, - 0x00B3, 0x00B5, 0x00BF, 0x00C1, 0x00C5, 0x00C7, 0x00D3, 0x00DF, - 0x00E3, 0x00E5, 0x00E9, 0x00EF, 0x00F1, 0x00FB, 0x0101, 0x0107, - 0x010D, 0x010F, 0x0115, 0x0119, 0x011B, 0x0125, 0x0133, 0x0137, - - 0x0139, 0x013D, 0x014B, 0x0151, 0x015B, 0x015D, 0x0161, 0x0167, - 0x016F, 0x0175, 0x017B, 0x017F, 0x0185, 0x018D, 0x0191, 0x0199, - 0x01A3, 0x01A5, 0x01AF, 0x01B1, 0x01B7, 0x01BB, 0x01C1, 0x01C9, - 0x01CD, 0x01CF, 0x01D3, 0x01DF, 0x01E7, 0x01EB, 0x01F3, 0x01F7, - 0x01FD, 0x0209, 0x020B, 0x021D, 0x0223, 0x022D, 0x0233, 0x0239, - 0x023B, 0x0241, 0x024B, 0x0251, 0x0257, 0x0259, 0x025F, 0x0265, - 0x0269, 0x026B, 0x0277, 0x0281, 0x0283, 0x0287, 0x028D, 0x0293, - 0x0295, 0x02A1, 0x02A5, 0x02AB, 0x02B3, 0x02BD, 0x02C5, 0x02CF, - - 0x02D7, 0x02DD, 0x02E3, 0x02E7, 0x02EF, 0x02F5, 0x02F9, 0x0301, - 0x0305, 0x0313, 0x031D, 0x0329, 0x032B, 0x0335, 0x0337, 0x033B, - 0x033D, 0x0347, 0x0355, 0x0359, 0x035B, 0x035F, 0x036D, 0x0371, - 0x0373, 0x0377, 0x038B, 0x038F, 0x0397, 0x03A1, 0x03A9, 0x03AD, - 0x03B3, 0x03B9, 0x03C7, 0x03CB, 0x03D1, 0x03D7, 0x03DF, 0x03E5, - 0x03F1, 0x03F5, 0x03FB, 0x03FD, 0x0407, 0x0409, 0x040F, 0x0419, - 0x041B, 0x0425, 0x0427, 0x042D, 0x043F, 0x0443, 0x0445, 0x0449, - 0x044F, 0x0455, 0x045D, 0x0463, 0x0469, 0x047F, 0x0481, 0x048B, - - 0x0493, 0x049D, 0x04A3, 0x04A9, 0x04B1, 0x04BD, 0x04C1, 0x04C7, - 0x04CD, 0x04CF, 0x04D5, 0x04E1, 0x04EB, 0x04FD, 0x04FF, 0x0503, - 0x0509, 0x050B, 0x0511, 0x0515, 0x0517, 0x051B, 0x0527, 0x0529, - 0x052F, 0x0551, 0x0557, 0x055D, 0x0565, 0x0577, 0x0581, 0x058F, - 0x0593, 0x0595, 0x0599, 0x059F, 0x05A7, 0x05AB, 0x05AD, 0x05B3, - 0x05BF, 0x05C9, 0x05CB, 0x05CF, 0x05D1, 0x05D5, 0x05DB, 0x05E7, - 0x05F3, 0x05FB, 0x0607, 0x060D, 0x0611, 0x0617, 0x061F, 0x0623, - 0x062B, 0x062F, 0x063D, 0x0641, 0x0647, 0x0649, 0x064D, 0x0653 -}; - -int fp_isprime(fp_int *a) -{ - fp_int b; - fp_digit d; - int r, res; - - /* do trial division */ - for (r = 0; r < 256; r++) { - fp_mod_d(a, primes[r], &d); - if (d == 0) { - return FP_NO; - } - } - - /* now do 8 miller rabins */ - fp_init(&b); - for (r = 0; r < 128; r++) { - fp_set(&b, primes[r]); - fp_prime_miller_rabin(a, &b, &res); - if (res == FP_NO) { - return FP_NO; - } - } - return FP_YES; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_isprime.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_lcm.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_lcm.c deleted file mode 100644 index 9730f14bc..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_lcm.c +++ /dev/null @@ -1,32 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = [a, b] */ -void fp_lcm(fp_int *a, fp_int *b, fp_int *c) -{ - fp_int t1, t2; - - - fp_init(&t1); - fp_init(&t2); - fp_gcd(a, b, &t1); - if (fp_cmp_mag(a, b) == FP_GT) { - fp_div(a, &t1, &t2, NULL); - fp_mul(b, &t2, c); - } else { - fp_div(b, &t1, &t2, NULL); - fp_mul(a, &t2, c); - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_lcm.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_miller_rabin.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_miller_rabin.c deleted file mode 100644 index eb1f944a0..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_miller_rabin.c +++ /dev/null @@ -1,77 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* Miller-Rabin test of "a" to the base of "b" as described in - * HAC pp. 139 Algorithm 4.24 - * - * Sets result to 0 if definitely composite or 1 if probably prime. - * Randomly the chance of error is no more than 1/4 and often - * very much lower. - */ -void fp_prime_miller_rabin (fp_int * a, fp_int * b, int *result) -{ - fp_int n1, y, r; - int s, j; - - /* default */ - *result = FP_NO; - - /* ensure b > 1 */ - if (fp_cmp_d(b, 1) != FP_GT) { - return; - } - - /* get n1 = a - 1 */ - fp_init_copy(&n1, a); - fp_sub_d(&n1, 1, &n1); - - /* set 2**s * r = n1 */ - fp_init_copy(&r, &n1); - - /* count the number of least significant bits - * which are zero - */ - s = fp_cnt_lsb(&r); - - /* now divide n - 1 by 2**s */ - fp_div_2d (&r, s, &r, NULL); - - /* compute y = b**r mod a */ - fp_init(&y); - fp_exptmod(b, &r, a, &y); - - /* if y != 1 and y != n1 do */ - if (fp_cmp_d (&y, 1) != FP_EQ && fp_cmp (&y, &n1) != FP_EQ) { - j = 1; - /* while j <= s-1 and y != n1 */ - while ((j <= (s - 1)) && fp_cmp (&y, &n1) != FP_EQ) { - fp_sqrmod (&y, a, &y); - - /* if y == 1 then composite */ - if (fp_cmp_d (&y, 1) == FP_EQ) { - return; - } - ++j; - } - - /* if y != n1 then composite */ - if (fp_cmp (&y, &n1) != FP_EQ) { - return; - } - } - - /* probably prime now */ - *result = FP_YES; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_prime_miller_rabin.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_random_ex.c b/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_random_ex.c deleted file mode 100644 index 6226e777c..000000000 --- a/lib/hcrypto/tomsfastmath/src/numtheory/fp_prime_random_ex.c +++ /dev/null @@ -1,101 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* This is possibly the mother of all prime generation functions, muahahahahaha! */ -int fp_prime_random_ex(fp_int *a, int t, int size, int flags, tfm_prime_callback cb, void *dat) -{ - unsigned char *tmp, maskAND, maskOR_msb, maskOR_lsb; - int res, err, bsize, maskOR_msb_offset; - - /* sanity check the input */ - if (size <= 1 || t <= 0) { - return FP_VAL; - } - - /* TFM_PRIME_SAFE implies TFM_PRIME_BBS */ - if (flags & TFM_PRIME_SAFE) { - flags |= TFM_PRIME_BBS; - } - - /* calc the byte size */ - bsize = (size>>3)+(size&7?1:0); - - /* we need a buffer of bsize bytes */ - tmp = malloc(bsize); - if (tmp == NULL) { - return FP_MEM; - } - - /* calc the maskAND value for the MSbyte*/ - maskAND = 0xFF >> (8 - (size & 7)); - - /* calc the maskOR_msb */ - maskOR_msb = 0; - maskOR_msb_offset = (size - 2) >> 3; - if (flags & TFM_PRIME_2MSB_ON) { - maskOR_msb |= 1 << ((size - 2) & 7); - } else if (flags & TFM_PRIME_2MSB_OFF) { - maskAND &= ~(1 << ((size - 2) & 7)); - } - - /* get the maskOR_lsb */ - maskOR_lsb = 1; - if (flags & TFM_PRIME_BBS) { - maskOR_lsb |= 3; - } - - do { - /* read the bytes */ - if (cb(tmp, bsize, dat) != bsize) { - err = FP_VAL; - goto error; - } - - /* work over the MSbyte */ - tmp[0] &= maskAND; - tmp[0] |= 1 << ((size - 1) & 7); - - /* mix in the maskORs */ - tmp[maskOR_msb_offset] |= maskOR_msb; - tmp[bsize-1] |= maskOR_lsb; - - /* read it in */ - fp_read_unsigned_bin(a, tmp, bsize); - - /* is it prime? */ - res = fp_isprime(a); - if (res == FP_NO) continue; - - if (flags & TFM_PRIME_SAFE) { - /* see if (a-1)/2 is prime */ - fp_sub_d(a, 1, a); - fp_div_2(a, a); - - /* is it prime? */ - res = fp_isprime(a); - } - } while (res == FP_NO); - - if (flags & TFM_PRIME_SAFE) { - /* restore a to the original value */ - fp_mul_2(a, a); - fp_add_d(a, 1, a); - } - - err = FP_OKAY; -error: - free(tmp); - return err; -} - -/* $Source: /cvs/libtom/tomsfastmath/src/numtheory/fp_prime_random_ex.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/01/24 21:25:19 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr.c deleted file mode 100644 index ae262c18a..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr.c +++ /dev/null @@ -1,120 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* b = a*a */ -void fp_sqr(fp_int *A, fp_int *B) -{ - int y; - - /* call generic if we're out of range */ - if (A->used + A->used > FP_SIZE) { - fp_sqr_comba(A, B); - return ; - } - - y = A->used; -#if defined(TFM_SQR3) - if (y <= 3) { - fp_sqr_comba3(A,B); - return; - } -#endif -#if defined(TFM_SQR4) - if (y == 4) { - fp_sqr_comba4(A,B); - return; - } -#endif -#if defined(TFM_SQR6) - if (y <= 6) { - fp_sqr_comba6(A,B); - return; - } -#endif -#if defined(TFM_SQR7) - if (y == 7) { - fp_sqr_comba7(A,B); - return; - } -#endif -#if defined(TFM_SQR8) - if (y == 8) { - fp_sqr_comba8(A,B); - return; - } -#endif -#if defined(TFM_SQR9) - if (y == 9) { - fp_sqr_comba9(A,B); - return; - } -#endif -#if defined(TFM_SQR12) - if (y <= 12) { - fp_sqr_comba12(A,B); - return; - } -#endif -#if defined(TFM_SQR17) - if (y <= 17) { - fp_sqr_comba17(A,B); - return; - } -#endif -#if defined(TFM_SMALL_SET) - if (y <= 16) { - fp_sqr_comba_small(A,B); - return; - } -#endif -#if defined(TFM_SQR20) - if (y <= 20) { - fp_sqr_comba20(A,B); - return; - } -#endif -#if defined(TFM_SQR24) - if (y <= 24) { - fp_sqr_comba24(A,B); - return; - } -#endif -#if defined(TFM_SQR28) - if (y <= 28) { - fp_sqr_comba28(A,B); - return; - } -#endif -#if defined(TFM_SQR32) - if (y <= 32) { - fp_sqr_comba32(A,B); - return; - } -#endif -#if defined(TFM_SQR48) - if (y <= 48) { - fp_sqr_comba48(A,B); - return; - } -#endif -#if defined(TFM_SQR64) - if (y <= 64) { - fp_sqr_comba64(A,B); - return; - } -#endif - fp_sqr_comba(A, B); -} - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba.c deleted file mode 100644 index 918338a9c..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba.c +++ /dev/null @@ -1,677 +0,0 @@ -/* - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -#if defined(TFM_PRESCOTT) && defined(TFM_SSE2) - #undef TFM_SSE2 - #define TFM_X86 -#endif - -#if defined(TFM_X86) - -/* x86-32 optimized */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -#define SQRADD(i, j) \ -asm( \ - "movl %6,%%eax \n\t" \ - "mull %%eax \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%edx","%cc"); - -#define SQRADD2(i, j) \ -asm( \ - "movl %6,%%eax \n\t" \ - "mull %7 \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc"); - -#define SQRADDSC(i, j) \ -asm( \ - "movl %6,%%eax \n\t" \ - "mull %7 \n\t" \ - "movl %%eax,%0 \n\t" \ - "movl %%edx,%1 \n\t" \ - "xorl %2,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%eax","%edx","%cc"); - -#define SQRADDAC(i, j) \ -asm( \ - "movl %6,%%eax \n\t" \ - "mull %7 \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%eax","%edx","%cc"); - -#define SQRADDDB \ -asm( \ - "addl %6,%0 \n\t" \ - "adcl %7,%1 \n\t" \ - "adcl %8,%2 \n\t" \ - "addl %6,%0 \n\t" \ - "adcl %7,%1 \n\t" \ - "adcl %8,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) : "%cc"); - -#elif defined(TFM_X86_64) -/* x86-64 optimized */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -#define SQRADD(i, j) \ -asm( \ - "movq %6,%%rax \n\t" \ - "mulq %%rax \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq %%rdx,%1 \n\t" \ - "adcq $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "g"(i) :"%rax","%rdx","%cc"); - -#define SQRADD2(i, j) \ -asm( \ - "movq %6,%%rax \n\t" \ - "mulq %7 \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq %%rdx,%1 \n\t" \ - "adcq $0,%2 \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq %%rdx,%1 \n\t" \ - "adcq $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "g"(i), "g"(j) :"%rax","%rdx","%cc"); - -#define SQRADDSC(i, j) \ -asm( \ - "movq %6,%%rax \n\t" \ - "mulq %7 \n\t" \ - "movq %%rax,%0 \n\t" \ - "movq %%rdx,%1 \n\t" \ - "xorq %2,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%rax","%rdx","%cc"); - -#define SQRADDAC(i, j) \ -asm( \ - "movq %6,%%rax \n\t" \ - "mulq %7 \n\t" \ - "addq %%rax,%0 \n\t" \ - "adcq %%rdx,%1 \n\t" \ - "adcq $0,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "g"(i), "g"(j) :"%rax","%rdx","%cc"); - -#define SQRADDDB \ -asm( \ - "addq %6,%0 \n\t" \ - "adcq %7,%1 \n\t" \ - "adcq %8,%2 \n\t" \ - "addq %6,%0 \n\t" \ - "adcq %7,%1 \n\t" \ - "adcq %8,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) : "%cc"); - -#elif defined(TFM_SSE2) - -/* SSE2 Optimized */ -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI \ - asm("emms"); - -#define SQRADD(i, j) \ -asm( \ - "movd %6,%%mm0 \n\t" \ - "pmuludq %%mm0,%%mm0\n\t" \ - "movd %%mm0,%%eax \n\t" \ - "psrlq $32,%%mm0 \n\t" \ - "addl %%eax,%0 \n\t" \ - "movd %%mm0,%%eax \n\t" \ - "adcl %%eax,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i) :"%eax","%cc"); - -#define SQRADD2(i, j) \ -asm( \ - "movd %6,%%mm0 \n\t" \ - "movd %7,%%mm1 \n\t" \ - "pmuludq %%mm1,%%mm0\n\t" \ - "movd %%mm0,%%eax \n\t" \ - "psrlq $32,%%mm0 \n\t" \ - "movd %%mm0,%%edx \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2): "0"(c0), "1"(c1), "2"(c2), "m"(i), "m"(j) :"%eax","%edx","%cc"); - -#define SQRADDSC(i, j) \ -asm( \ - "movd %6,%%mm0 \n\t" \ - "movd %7,%%mm1 \n\t" \ - "pmuludq %%mm1,%%mm0\n\t" \ - "movd %%mm0,%0 \n\t" \ - "psrlq $32,%%mm0 \n\t" \ - "movd %%mm0,%1 \n\t" \ - "xorl %2,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "m"(i), "m"(j)); - -#define SQRADDAC(i, j) \ -asm( \ - "movd %6,%%mm0 \n\t" \ - "movd %7,%%mm1 \n\t" \ - "pmuludq %%mm1,%%mm0\n\t" \ - "movd %%mm0,%%eax \n\t" \ - "psrlq $32,%%mm0 \n\t" \ - "movd %%mm0,%%edx \n\t" \ - "addl %%eax,%0 \n\t" \ - "adcl %%edx,%1 \n\t" \ - "adcl $0,%2 \n\t" \ - :"=r"(sc0), "=r"(sc1), "=r"(sc2): "0"(sc0), "1"(sc1), "2"(sc2), "m"(i), "m"(j) :"%eax","%edx","%cc"); - -#define SQRADDDB \ -asm( \ - "addl %6,%0 \n\t" \ - "adcl %7,%1 \n\t" \ - "adcl %8,%2 \n\t" \ - "addl %6,%0 \n\t" \ - "adcl %7,%1 \n\t" \ - "adcl %8,%2 \n\t" \ - :"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(sc0), "r"(sc1), "r"(sc2) : "%cc"); - -#elif defined(TFM_ARM) - -/* ARM code */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ -asm( \ -" UMULL r0,r1,%6,%6 \n\t" \ -" ADDS %0,%0,r0 \n\t" \ -" ADCS %1,%1,r1 \n\t" \ -" ADC %2,%2,#0 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(i) : "r0", "r1", "%cc"); - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ -asm( \ -" UMULL r0,r1,%6,%7 \n\t" \ -" ADDS %0,%0,r0 \n\t" \ -" ADCS %1,%1,r1 \n\t" \ -" ADC %2,%2,#0 \n\t" \ -" ADDS %0,%0,r0 \n\t" \ -" ADCS %1,%1,r1 \n\t" \ -" ADC %2,%2,#0 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j) : "r0", "r1", "%cc"); - -#define SQRADDSC(i, j) \ -asm( \ -" UMULL %0,%1,%6,%7 \n\t" \ -" SUB %2,%2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2) : "0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j) : "%cc"); - -#define SQRADDAC(i, j) \ -asm( \ -" UMULL r0,r1,%6,%7 \n\t" \ -" ADDS %0,%0,r0 \n\t" \ -" ADCS %1,%1,r1 \n\t" \ -" ADC %2,%2,#0 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2) : "0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j) : "r0", "r1", "%cc"); - -#define SQRADDDB \ -asm( \ -" ADDS %0,%0,%3 \n\t" \ -" ADCS %1,%1,%4 \n\t" \ -" ADC %2,%2,%5 \n\t" \ -" ADDS %0,%0,%3 \n\t" \ -" ADCS %1,%1,%4 \n\t" \ -" ADC %2,%2,%5 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "r"(sc0), "r"(sc1), "r"(sc2), "0"(c0), "1"(c1), "2"(c2) : "%cc"); - -#elif defined(TFM_PPC32) - -/* PPC32 */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ -asm( \ - " mullw 16,%6,%6 \n\t" \ - " addc %0,%0,16 \n\t" \ - " mulhwu 16,%6,%6 \n\t" \ - " adde %1,%1,16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i):"16","%cc"); - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ -asm( \ - " mullw 16,%6,%7 \n\t" \ - " mulhwu 17,%6,%7 \n\t" \ - " addc %0,%0,16 \n\t" \ - " adde %1,%1,17 \n\t" \ - " addze %2,%2 \n\t" \ - " addc %0,%0,16 \n\t" \ - " adde %1,%1,17 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"16", "17","%cc"); - -#define SQRADDSC(i, j) \ -asm( \ - " mullw %0,%6,%7 \n\t" \ - " mulhwu %1,%6,%7 \n\t" \ - " xor %2,%2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i),"r"(j) : "%cc"); - -#define SQRADDAC(i, j) \ -asm( \ - " mullw 16,%6,%7 \n\t" \ - " addc %0,%0,16 \n\t" \ - " mulhwu 16,%6,%7 \n\t" \ - " adde %1,%1,16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j):"16", "%cc"); - -#define SQRADDDB \ -asm( \ - " addc %0,%0,%3 \n\t" \ - " adde %1,%1,%4 \n\t" \ - " adde %2,%2,%5 \n\t" \ - " addc %0,%0,%3 \n\t" \ - " adde %1,%1,%4 \n\t" \ - " adde %2,%2,%5 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "r"(sc0), "r"(sc1), "r"(sc2), "0"(c0), "1"(c1), "2"(c2) : "%cc"); - -#elif defined(TFM_PPC64) -/* PPC64 */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ -asm( \ - " mulld r16,%6,%6 \n\t" \ - " addc %0,%0,r16 \n\t" \ - " mulhdu r16,%6,%6 \n\t" \ - " adde %1,%1,r16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i):"r16","%cc"); - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ -asm( \ - " mulld r16,%6,%7 \n\t" \ - " mulhdu r17,%6,%7 \n\t" \ - " addc %0,%0,r16 \n\t" \ - " adde %1,%1,r17 \n\t" \ - " addze %2,%2 \n\t" \ - " addc %0,%0,r16 \n\t" \ - " adde %1,%1,r17 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"r16", "r17","%cc"); - -#define SQRADDSC(i, j) \ -asm( \ - " mulld %0,%6,%7 \n\t" \ - " mulhdu %1,%6,%7 \n\t" \ - " xor %2,%2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i),"r"(j) : "%cc"); - -#define SQRADDAC(i, j) \ -asm( \ - " mulld r16,%6,%7 \n\t" \ - " addc %0,%0,r16 \n\t" \ - " mulhdu r16,%6,%7 \n\t" \ - " adde %1,%1,r16 \n\t" \ - " addze %2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j):"r16", "%cc"); - -#define SQRADDDB \ -asm( \ - " addc %0,%0,%3 \n\t" \ - " adde %1,%1,%4 \n\t" \ - " adde %2,%2,%5 \n\t" \ - " addc %0,%0,%3 \n\t" \ - " adde %1,%1,%4 \n\t" \ - " adde %2,%2,%5 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "r"(sc0), "r"(sc1), "r"(sc2), "0"(c0), "1"(c1), "2"(c2) : "%cc"); - - -#elif defined(TFM_AVR32) - -/* AVR32 */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ -asm( \ - " mulu.d r2,%6,%6 \n\t" \ - " add %0,%0,r2 \n\t" \ - " adc %1,%1,r3 \n\t" \ - " acr %2 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i):"r2","r3"); - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ -asm( \ - " mulu.d r2,%6,%7 \n\t" \ - " add %0,%0,r2 \n\t" \ - " adc %1,%1,r3 \n\t" \ - " acr %2, \n\t" \ - " add %0,%0,r2 \n\t" \ - " adc %1,%1,r3 \n\t" \ - " acr %2, \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"r2", "r3"); - -#define SQRADDSC(i, j) \ -asm( \ - " mulu.d r2,%6,%7 \n\t" \ - " mov %0,r2 \n\t" \ - " mov %1,r3 \n\t" \ - " eor %2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i),"r"(j) : "r2", "r3"); - -#define SQRADDAC(i, j) \ -asm( \ - " mulu.d r2,%6,%7 \n\t" \ - " add %0,%0,r2 \n\t" \ - " adc %1,%1,r3 \n\t" \ - " acr %2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j):"r2", "r3"); - -#define SQRADDDB \ -asm( \ - " add %0,%0,%3 \n\t" \ - " adc %1,%1,%4 \n\t" \ - " adc %2,%2,%5 \n\t" \ - " add %0,%0,%3 \n\t" \ - " adc %1,%1,%4 \n\t" \ - " adc %2,%2,%5 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "r"(sc0), "r"(sc1), "r"(sc2), "0"(c0), "1"(c1), "2"(c2) : "%cc"); - -#elif defined(TFM_MIPS) - -/* MIPS */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ -asm( \ - " multu %6,%6 \n\t" \ - " mflo $12 \n\t" \ - " mfhi $13 \n\t" \ - " addu %0,%0,$12 \n\t" \ - " sltu $12,%0,$12 \n\t" \ - " addu %1,%1,$13 \n\t" \ - " sltu $13,%1,$13 \n\t" \ - " addu %1,%1,$12 \n\t" \ - " sltu $12,%1,$12 \n\t" \ - " addu %2,%2,$13 \n\t" \ - " addu %2,%2,$12 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i):"$12","$13"); - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ -asm( \ - " multu %6,%7 \n\t" \ - " mflo $12 \n\t" \ - " mfhi $13 \n\t" \ - \ - " addu %0,%0,$12 \n\t" \ - " sltu $14,%0,$12 \n\t" \ - " addu %1,%1,$13 \n\t" \ - " sltu $15,%1,$13 \n\t" \ - " addu %1,%1,$14 \n\t" \ - " sltu $14,%1,$14 \n\t" \ - " addu %2,%2,$15 \n\t" \ - " addu %2,%2,$14 \n\t" \ - \ - " addu %0,%0,$12 \n\t" \ - " sltu $14,%0,$12 \n\t" \ - " addu %1,%1,$13 \n\t" \ - " sltu $15,%1,$13 \n\t" \ - " addu %1,%1,$14 \n\t" \ - " sltu $14,%1,$14 \n\t" \ - " addu %2,%2,$15 \n\t" \ - " addu %2,%2,$14 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2):"0"(c0), "1"(c1), "2"(c2), "r"(i), "r"(j):"$12", "$13", "$14", "$15"); - -#define SQRADDSC(i, j) \ -asm( \ - " multu %6,%7 \n\t" \ - " mflo %0 \n\t" \ - " mfhi %1 \n\t" \ - " xor %2,%2,%2 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i),"r"(j) : "%cc"); - -#define SQRADDAC(i, j) \ -asm( \ - " multu %6,%7 \n\t" \ - " mflo $12 \n\t" \ - " mfhi $13 \n\t" \ - " addu %0,%0,$12 \n\t" \ - " sltu $12,%0,$12 \n\t" \ - " addu %1,%1,$13 \n\t" \ - " sltu $13,%1,$13 \n\t" \ - " addu %1,%1,$12 \n\t" \ - " sltu $12,%1,$12 \n\t" \ - " addu %2,%2,$13 \n\t" \ - " addu %2,%2,$12 \n\t" \ -:"=r"(sc0), "=r"(sc1), "=r"(sc2):"0"(sc0), "1"(sc1), "2"(sc2), "r"(i), "r"(j):"$12", "$13", "$14"); - -#define SQRADDDB \ -asm( \ - " addu %0,%0,%3 \n\t" \ - " sltu $10,%0,%3 \n\t" \ - " addu %1,%1,$10 \n\t" \ - " sltu $10,%1,$10 \n\t" \ - " addu %1,%1,%4 \n\t" \ - " sltu $11,%1,%4 \n\t" \ - " addu %2,%2,$10 \n\t" \ - " addu %2,%2,$11 \n\t" \ - " addu %2,%2,%5 \n\t" \ - \ - " addu %0,%0,%3 \n\t" \ - " sltu $10,%0,%3 \n\t" \ - " addu %1,%1,$10 \n\t" \ - " sltu $10,%1,$10 \n\t" \ - " addu %1,%1,%4 \n\t" \ - " sltu $11,%1,%4 \n\t" \ - " addu %2,%2,$10 \n\t" \ - " addu %2,%2,$11 \n\t" \ - " addu %2,%2,%5 \n\t" \ -:"=r"(c0), "=r"(c1), "=r"(c2) : "r"(sc0), "r"(sc1), "r"(sc2), "0"(c0), "1"(c1), "2"(c2) : "$10", "$11"); - -#else - -#define TFM_ISO - -/* ISO C portable code */ - -#define COMBA_START - -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; - -#define COMBA_STORE(x) \ - x = c0; - -#define COMBA_STORE2(x) \ - x = c1; - -#define CARRY_FORWARD \ - do { c0 = c1; c1 = c2; c2 = 0; } while (0); - -#define COMBA_FINI - -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ - do { fp_word t; \ - t = c0 + ((fp_word)i) * ((fp_word)j); c0 = t; \ - t = c1 + (t >> DIGIT_BIT); c1 = t; c2 += t >> DIGIT_BIT; \ - } while (0); - - -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ - do { fp_word t; \ - t = ((fp_word)i) * ((fp_word)j); \ - tt = (fp_word)c0 + t; c0 = tt; \ - tt = (fp_word)c1 + (tt >> DIGIT_BIT); c1 = tt; c2 += tt >> DIGIT_BIT; \ - tt = (fp_word)c0 + t; c0 = tt; \ - tt = (fp_word)c1 + (tt >> DIGIT_BIT); c1 = tt; c2 += tt >> DIGIT_BIT; \ - } while (0); - -#define SQRADDSC(i, j) \ - do { fp_word t; \ - t = ((fp_word)i) * ((fp_word)j); \ - sc0 = (fp_digit)t; sc1 = (t >> DIGIT_BIT); sc2 = 0; \ - } while (0); - -#define SQRADDAC(i, j) \ - do { fp_word t; \ - t = sc0 + ((fp_word)i) * ((fp_word)j); sc0 = t; \ - t = sc1 + (t >> DIGIT_BIT); sc1 = t; sc2 += t >> DIGIT_BIT; \ - } while (0); - -#define SQRADDDB \ - do { fp_word t; \ - t = ((fp_word)sc0) + ((fp_word)sc0) + c0; c0 = t; \ - t = ((fp_word)sc1) + ((fp_word)sc1) + c1 + (t >> DIGIT_BIT); c1 = t; \ - c2 = c2 + ((fp_word)sc2) + ((fp_word)sc2) + (t >> DIGIT_BIT); \ - } while (0); - -#endif - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba.c,v $ */ -/* $Revision: 1.4 $ */ -/* $Date: 2007/03/14 23:47:42 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_12.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_12.c deleted file mode 100644 index 02408f1ed..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_12.c +++ /dev/null @@ -1,144 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR12 -void fp_sqr_comba12(fp_int *A, fp_int *B) -{ - fp_digit *a, b[24], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADD2(a[7], a[11]); SQRADD2(a[8], a[10]); SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADD2(a[8], a[11]); SQRADD2(a[9], a[10]); - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADD2(a[9], a[11]); SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADD2(a[10], a[11]); - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - COMBA_STORE2(b[23]); - COMBA_FINI; - - B->used = 24; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 24 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_12.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_17.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_17.c deleted file mode 100644 index 2106ea2e3..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_17.c +++ /dev/null @@ -1,194 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR17 -void fp_sqr_comba17(fp_int *A, fp_int *B) -{ - fp_digit *a, b[34], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADD2(a[12], a[16]); SQRADD2(a[13], a[15]); SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADD2(a[13], a[16]); SQRADD2(a[14], a[15]); - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADD2(a[14], a[16]); SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADD2(a[15], a[16]); - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - COMBA_STORE2(b[33]); - COMBA_FINI; - - B->used = 34; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 34 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_17.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_20.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_20.c deleted file mode 100644 index 607918b77..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_20.c +++ /dev/null @@ -1,224 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR20 -void fp_sqr_comba20(fp_int *A, fp_int *B) -{ - fp_digit *a, b[40], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADD2(a[15], a[19]); SQRADD2(a[16], a[18]); SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADD2(a[16], a[19]); SQRADD2(a[17], a[18]); - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADD2(a[17], a[19]); SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADD2(a[18], a[19]); - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - COMBA_STORE2(b[39]); - COMBA_FINI; - - B->used = 40; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 40 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_20.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_24.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_24.c deleted file mode 100644 index 561ab1992..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_24.c +++ /dev/null @@ -1,264 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR24 -void fp_sqr_comba24(fp_int *A, fp_int *B) -{ - fp_digit *a, b[48], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADDSC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - - /* output 39 */ - CARRY_FORWARD; - SQRADDSC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; - COMBA_STORE(b[39]); - - /* output 40 */ - CARRY_FORWARD; - SQRADDSC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); - COMBA_STORE(b[40]); - - /* output 41 */ - CARRY_FORWARD; - SQRADDSC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; - COMBA_STORE(b[41]); - - /* output 42 */ - CARRY_FORWARD; - SQRADD2(a[19], a[23]); SQRADD2(a[20], a[22]); SQRADD(a[21], a[21]); - COMBA_STORE(b[42]); - - /* output 43 */ - CARRY_FORWARD; - SQRADD2(a[20], a[23]); SQRADD2(a[21], a[22]); - COMBA_STORE(b[43]); - - /* output 44 */ - CARRY_FORWARD; - SQRADD2(a[21], a[23]); SQRADD(a[22], a[22]); - COMBA_STORE(b[44]); - - /* output 45 */ - CARRY_FORWARD; - SQRADD2(a[22], a[23]); - COMBA_STORE(b[45]); - - /* output 46 */ - CARRY_FORWARD; - SQRADD(a[23], a[23]); - COMBA_STORE(b[46]); - COMBA_STORE2(b[47]); - COMBA_FINI; - - B->used = 48; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 48 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_24.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_28.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_28.c deleted file mode 100644 index a21a0cad8..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_28.c +++ /dev/null @@ -1,304 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR28 -void fp_sqr_comba28(fp_int *A, fp_int *B) -{ - fp_digit *a, b[56], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[24]); SQRADDAC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[25]); SQRADDAC(a[1], a[24]); SQRADDAC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[26]); SQRADDAC(a[1], a[25]); SQRADDAC(a[2], a[24]); SQRADDAC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[27]); SQRADDAC(a[1], a[26]); SQRADDAC(a[2], a[25]); SQRADDAC(a[3], a[24]); SQRADDAC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[27]); SQRADDAC(a[2], a[26]); SQRADDAC(a[3], a[25]); SQRADDAC(a[4], a[24]); SQRADDAC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[27]); SQRADDAC(a[3], a[26]); SQRADDAC(a[4], a[25]); SQRADDAC(a[5], a[24]); SQRADDAC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[27]); SQRADDAC(a[4], a[26]); SQRADDAC(a[5], a[25]); SQRADDAC(a[6], a[24]); SQRADDAC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[27]); SQRADDAC(a[5], a[26]); SQRADDAC(a[6], a[25]); SQRADDAC(a[7], a[24]); SQRADDAC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[27]); SQRADDAC(a[6], a[26]); SQRADDAC(a[7], a[25]); SQRADDAC(a[8], a[24]); SQRADDAC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[27]); SQRADDAC(a[7], a[26]); SQRADDAC(a[8], a[25]); SQRADDAC(a[9], a[24]); SQRADDAC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[27]); SQRADDAC(a[8], a[26]); SQRADDAC(a[9], a[25]); SQRADDAC(a[10], a[24]); SQRADDAC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[27]); SQRADDAC(a[9], a[26]); SQRADDAC(a[10], a[25]); SQRADDAC(a[11], a[24]); SQRADDAC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[27]); SQRADDAC(a[10], a[26]); SQRADDAC(a[11], a[25]); SQRADDAC(a[12], a[24]); SQRADDAC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[27]); SQRADDAC(a[11], a[26]); SQRADDAC(a[12], a[25]); SQRADDAC(a[13], a[24]); SQRADDAC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[27]); SQRADDAC(a[12], a[26]); SQRADDAC(a[13], a[25]); SQRADDAC(a[14], a[24]); SQRADDAC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - - /* output 39 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[27]); SQRADDAC(a[13], a[26]); SQRADDAC(a[14], a[25]); SQRADDAC(a[15], a[24]); SQRADDAC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; - COMBA_STORE(b[39]); - - /* output 40 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[27]); SQRADDAC(a[14], a[26]); SQRADDAC(a[15], a[25]); SQRADDAC(a[16], a[24]); SQRADDAC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); - COMBA_STORE(b[40]); - - /* output 41 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[27]); SQRADDAC(a[15], a[26]); SQRADDAC(a[16], a[25]); SQRADDAC(a[17], a[24]); SQRADDAC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; - COMBA_STORE(b[41]); - - /* output 42 */ - CARRY_FORWARD; - SQRADDSC(a[15], a[27]); SQRADDAC(a[16], a[26]); SQRADDAC(a[17], a[25]); SQRADDAC(a[18], a[24]); SQRADDAC(a[19], a[23]); SQRADDAC(a[20], a[22]); SQRADDDB; SQRADD(a[21], a[21]); - COMBA_STORE(b[42]); - - /* output 43 */ - CARRY_FORWARD; - SQRADDSC(a[16], a[27]); SQRADDAC(a[17], a[26]); SQRADDAC(a[18], a[25]); SQRADDAC(a[19], a[24]); SQRADDAC(a[20], a[23]); SQRADDAC(a[21], a[22]); SQRADDDB; - COMBA_STORE(b[43]); - - /* output 44 */ - CARRY_FORWARD; - SQRADDSC(a[17], a[27]); SQRADDAC(a[18], a[26]); SQRADDAC(a[19], a[25]); SQRADDAC(a[20], a[24]); SQRADDAC(a[21], a[23]); SQRADDDB; SQRADD(a[22], a[22]); - COMBA_STORE(b[44]); - - /* output 45 */ - CARRY_FORWARD; - SQRADDSC(a[18], a[27]); SQRADDAC(a[19], a[26]); SQRADDAC(a[20], a[25]); SQRADDAC(a[21], a[24]); SQRADDAC(a[22], a[23]); SQRADDDB; - COMBA_STORE(b[45]); - - /* output 46 */ - CARRY_FORWARD; - SQRADDSC(a[19], a[27]); SQRADDAC(a[20], a[26]); SQRADDAC(a[21], a[25]); SQRADDAC(a[22], a[24]); SQRADDDB; SQRADD(a[23], a[23]); - COMBA_STORE(b[46]); - - /* output 47 */ - CARRY_FORWARD; - SQRADDSC(a[20], a[27]); SQRADDAC(a[21], a[26]); SQRADDAC(a[22], a[25]); SQRADDAC(a[23], a[24]); SQRADDDB; - COMBA_STORE(b[47]); - - /* output 48 */ - CARRY_FORWARD; - SQRADDSC(a[21], a[27]); SQRADDAC(a[22], a[26]); SQRADDAC(a[23], a[25]); SQRADDDB; SQRADD(a[24], a[24]); - COMBA_STORE(b[48]); - - /* output 49 */ - CARRY_FORWARD; - SQRADDSC(a[22], a[27]); SQRADDAC(a[23], a[26]); SQRADDAC(a[24], a[25]); SQRADDDB; - COMBA_STORE(b[49]); - - /* output 50 */ - CARRY_FORWARD; - SQRADD2(a[23], a[27]); SQRADD2(a[24], a[26]); SQRADD(a[25], a[25]); - COMBA_STORE(b[50]); - - /* output 51 */ - CARRY_FORWARD; - SQRADD2(a[24], a[27]); SQRADD2(a[25], a[26]); - COMBA_STORE(b[51]); - - /* output 52 */ - CARRY_FORWARD; - SQRADD2(a[25], a[27]); SQRADD(a[26], a[26]); - COMBA_STORE(b[52]); - - /* output 53 */ - CARRY_FORWARD; - SQRADD2(a[26], a[27]); - COMBA_STORE(b[53]); - - /* output 54 */ - CARRY_FORWARD; - SQRADD(a[27], a[27]); - COMBA_STORE(b[54]); - COMBA_STORE2(b[55]); - COMBA_FINI; - - B->used = 56; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 56 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_28.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_3.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_3.c deleted file mode 100644 index 54229b82b..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_3.c +++ /dev/null @@ -1,54 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR3 -void fp_sqr_comba3(fp_int *A, fp_int *B) -{ - fp_digit *a, b[6], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - COMBA_STORE2(b[5]); - COMBA_FINI; - - B->used = 6; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 6 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_3.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_32.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_32.c deleted file mode 100644 index 3dbfa5e5c..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_32.c +++ /dev/null @@ -1,344 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR32 -void fp_sqr_comba32(fp_int *A, fp_int *B) -{ - fp_digit *a, b[64], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[24]); SQRADDAC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[25]); SQRADDAC(a[1], a[24]); SQRADDAC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[26]); SQRADDAC(a[1], a[25]); SQRADDAC(a[2], a[24]); SQRADDAC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[27]); SQRADDAC(a[1], a[26]); SQRADDAC(a[2], a[25]); SQRADDAC(a[3], a[24]); SQRADDAC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[28]); SQRADDAC(a[1], a[27]); SQRADDAC(a[2], a[26]); SQRADDAC(a[3], a[25]); SQRADDAC(a[4], a[24]); SQRADDAC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[29]); SQRADDAC(a[1], a[28]); SQRADDAC(a[2], a[27]); SQRADDAC(a[3], a[26]); SQRADDAC(a[4], a[25]); SQRADDAC(a[5], a[24]); SQRADDAC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[30]); SQRADDAC(a[1], a[29]); SQRADDAC(a[2], a[28]); SQRADDAC(a[3], a[27]); SQRADDAC(a[4], a[26]); SQRADDAC(a[5], a[25]); SQRADDAC(a[6], a[24]); SQRADDAC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[31]); SQRADDAC(a[1], a[30]); SQRADDAC(a[2], a[29]); SQRADDAC(a[3], a[28]); SQRADDAC(a[4], a[27]); SQRADDAC(a[5], a[26]); SQRADDAC(a[6], a[25]); SQRADDAC(a[7], a[24]); SQRADDAC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[31]); SQRADDAC(a[2], a[30]); SQRADDAC(a[3], a[29]); SQRADDAC(a[4], a[28]); SQRADDAC(a[5], a[27]); SQRADDAC(a[6], a[26]); SQRADDAC(a[7], a[25]); SQRADDAC(a[8], a[24]); SQRADDAC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[31]); SQRADDAC(a[3], a[30]); SQRADDAC(a[4], a[29]); SQRADDAC(a[5], a[28]); SQRADDAC(a[6], a[27]); SQRADDAC(a[7], a[26]); SQRADDAC(a[8], a[25]); SQRADDAC(a[9], a[24]); SQRADDAC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[31]); SQRADDAC(a[4], a[30]); SQRADDAC(a[5], a[29]); SQRADDAC(a[6], a[28]); SQRADDAC(a[7], a[27]); SQRADDAC(a[8], a[26]); SQRADDAC(a[9], a[25]); SQRADDAC(a[10], a[24]); SQRADDAC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[31]); SQRADDAC(a[5], a[30]); SQRADDAC(a[6], a[29]); SQRADDAC(a[7], a[28]); SQRADDAC(a[8], a[27]); SQRADDAC(a[9], a[26]); SQRADDAC(a[10], a[25]); SQRADDAC(a[11], a[24]); SQRADDAC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[31]); SQRADDAC(a[6], a[30]); SQRADDAC(a[7], a[29]); SQRADDAC(a[8], a[28]); SQRADDAC(a[9], a[27]); SQRADDAC(a[10], a[26]); SQRADDAC(a[11], a[25]); SQRADDAC(a[12], a[24]); SQRADDAC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[31]); SQRADDAC(a[7], a[30]); SQRADDAC(a[8], a[29]); SQRADDAC(a[9], a[28]); SQRADDAC(a[10], a[27]); SQRADDAC(a[11], a[26]); SQRADDAC(a[12], a[25]); SQRADDAC(a[13], a[24]); SQRADDAC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[31]); SQRADDAC(a[8], a[30]); SQRADDAC(a[9], a[29]); SQRADDAC(a[10], a[28]); SQRADDAC(a[11], a[27]); SQRADDAC(a[12], a[26]); SQRADDAC(a[13], a[25]); SQRADDAC(a[14], a[24]); SQRADDAC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - - /* output 39 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[31]); SQRADDAC(a[9], a[30]); SQRADDAC(a[10], a[29]); SQRADDAC(a[11], a[28]); SQRADDAC(a[12], a[27]); SQRADDAC(a[13], a[26]); SQRADDAC(a[14], a[25]); SQRADDAC(a[15], a[24]); SQRADDAC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; - COMBA_STORE(b[39]); - - /* output 40 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[31]); SQRADDAC(a[10], a[30]); SQRADDAC(a[11], a[29]); SQRADDAC(a[12], a[28]); SQRADDAC(a[13], a[27]); SQRADDAC(a[14], a[26]); SQRADDAC(a[15], a[25]); SQRADDAC(a[16], a[24]); SQRADDAC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); - COMBA_STORE(b[40]); - - /* output 41 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[31]); SQRADDAC(a[11], a[30]); SQRADDAC(a[12], a[29]); SQRADDAC(a[13], a[28]); SQRADDAC(a[14], a[27]); SQRADDAC(a[15], a[26]); SQRADDAC(a[16], a[25]); SQRADDAC(a[17], a[24]); SQRADDAC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; - COMBA_STORE(b[41]); - - /* output 42 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[31]); SQRADDAC(a[12], a[30]); SQRADDAC(a[13], a[29]); SQRADDAC(a[14], a[28]); SQRADDAC(a[15], a[27]); SQRADDAC(a[16], a[26]); SQRADDAC(a[17], a[25]); SQRADDAC(a[18], a[24]); SQRADDAC(a[19], a[23]); SQRADDAC(a[20], a[22]); SQRADDDB; SQRADD(a[21], a[21]); - COMBA_STORE(b[42]); - - /* output 43 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[31]); SQRADDAC(a[13], a[30]); SQRADDAC(a[14], a[29]); SQRADDAC(a[15], a[28]); SQRADDAC(a[16], a[27]); SQRADDAC(a[17], a[26]); SQRADDAC(a[18], a[25]); SQRADDAC(a[19], a[24]); SQRADDAC(a[20], a[23]); SQRADDAC(a[21], a[22]); SQRADDDB; - COMBA_STORE(b[43]); - - /* output 44 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[31]); SQRADDAC(a[14], a[30]); SQRADDAC(a[15], a[29]); SQRADDAC(a[16], a[28]); SQRADDAC(a[17], a[27]); SQRADDAC(a[18], a[26]); SQRADDAC(a[19], a[25]); SQRADDAC(a[20], a[24]); SQRADDAC(a[21], a[23]); SQRADDDB; SQRADD(a[22], a[22]); - COMBA_STORE(b[44]); - - /* output 45 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[31]); SQRADDAC(a[15], a[30]); SQRADDAC(a[16], a[29]); SQRADDAC(a[17], a[28]); SQRADDAC(a[18], a[27]); SQRADDAC(a[19], a[26]); SQRADDAC(a[20], a[25]); SQRADDAC(a[21], a[24]); SQRADDAC(a[22], a[23]); SQRADDDB; - COMBA_STORE(b[45]); - - /* output 46 */ - CARRY_FORWARD; - SQRADDSC(a[15], a[31]); SQRADDAC(a[16], a[30]); SQRADDAC(a[17], a[29]); SQRADDAC(a[18], a[28]); SQRADDAC(a[19], a[27]); SQRADDAC(a[20], a[26]); SQRADDAC(a[21], a[25]); SQRADDAC(a[22], a[24]); SQRADDDB; SQRADD(a[23], a[23]); - COMBA_STORE(b[46]); - - /* output 47 */ - CARRY_FORWARD; - SQRADDSC(a[16], a[31]); SQRADDAC(a[17], a[30]); SQRADDAC(a[18], a[29]); SQRADDAC(a[19], a[28]); SQRADDAC(a[20], a[27]); SQRADDAC(a[21], a[26]); SQRADDAC(a[22], a[25]); SQRADDAC(a[23], a[24]); SQRADDDB; - COMBA_STORE(b[47]); - - /* output 48 */ - CARRY_FORWARD; - SQRADDSC(a[17], a[31]); SQRADDAC(a[18], a[30]); SQRADDAC(a[19], a[29]); SQRADDAC(a[20], a[28]); SQRADDAC(a[21], a[27]); SQRADDAC(a[22], a[26]); SQRADDAC(a[23], a[25]); SQRADDDB; SQRADD(a[24], a[24]); - COMBA_STORE(b[48]); - - /* output 49 */ - CARRY_FORWARD; - SQRADDSC(a[18], a[31]); SQRADDAC(a[19], a[30]); SQRADDAC(a[20], a[29]); SQRADDAC(a[21], a[28]); SQRADDAC(a[22], a[27]); SQRADDAC(a[23], a[26]); SQRADDAC(a[24], a[25]); SQRADDDB; - COMBA_STORE(b[49]); - - /* output 50 */ - CARRY_FORWARD; - SQRADDSC(a[19], a[31]); SQRADDAC(a[20], a[30]); SQRADDAC(a[21], a[29]); SQRADDAC(a[22], a[28]); SQRADDAC(a[23], a[27]); SQRADDAC(a[24], a[26]); SQRADDDB; SQRADD(a[25], a[25]); - COMBA_STORE(b[50]); - - /* output 51 */ - CARRY_FORWARD; - SQRADDSC(a[20], a[31]); SQRADDAC(a[21], a[30]); SQRADDAC(a[22], a[29]); SQRADDAC(a[23], a[28]); SQRADDAC(a[24], a[27]); SQRADDAC(a[25], a[26]); SQRADDDB; - COMBA_STORE(b[51]); - - /* output 52 */ - CARRY_FORWARD; - SQRADDSC(a[21], a[31]); SQRADDAC(a[22], a[30]); SQRADDAC(a[23], a[29]); SQRADDAC(a[24], a[28]); SQRADDAC(a[25], a[27]); SQRADDDB; SQRADD(a[26], a[26]); - COMBA_STORE(b[52]); - - /* output 53 */ - CARRY_FORWARD; - SQRADDSC(a[22], a[31]); SQRADDAC(a[23], a[30]); SQRADDAC(a[24], a[29]); SQRADDAC(a[25], a[28]); SQRADDAC(a[26], a[27]); SQRADDDB; - COMBA_STORE(b[53]); - - /* output 54 */ - CARRY_FORWARD; - SQRADDSC(a[23], a[31]); SQRADDAC(a[24], a[30]); SQRADDAC(a[25], a[29]); SQRADDAC(a[26], a[28]); SQRADDDB; SQRADD(a[27], a[27]); - COMBA_STORE(b[54]); - - /* output 55 */ - CARRY_FORWARD; - SQRADDSC(a[24], a[31]); SQRADDAC(a[25], a[30]); SQRADDAC(a[26], a[29]); SQRADDAC(a[27], a[28]); SQRADDDB; - COMBA_STORE(b[55]); - - /* output 56 */ - CARRY_FORWARD; - SQRADDSC(a[25], a[31]); SQRADDAC(a[26], a[30]); SQRADDAC(a[27], a[29]); SQRADDDB; SQRADD(a[28], a[28]); - COMBA_STORE(b[56]); - - /* output 57 */ - CARRY_FORWARD; - SQRADDSC(a[26], a[31]); SQRADDAC(a[27], a[30]); SQRADDAC(a[28], a[29]); SQRADDDB; - COMBA_STORE(b[57]); - - /* output 58 */ - CARRY_FORWARD; - SQRADD2(a[27], a[31]); SQRADD2(a[28], a[30]); SQRADD(a[29], a[29]); - COMBA_STORE(b[58]); - - /* output 59 */ - CARRY_FORWARD; - SQRADD2(a[28], a[31]); SQRADD2(a[29], a[30]); - COMBA_STORE(b[59]); - - /* output 60 */ - CARRY_FORWARD; - SQRADD2(a[29], a[31]); SQRADD(a[30], a[30]); - COMBA_STORE(b[60]); - - /* output 61 */ - CARRY_FORWARD; - SQRADD2(a[30], a[31]); - COMBA_STORE(b[61]); - - /* output 62 */ - CARRY_FORWARD; - SQRADD(a[31], a[31]); - COMBA_STORE(b[62]); - COMBA_STORE2(b[63]); - COMBA_FINI; - - B->used = 64; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 64 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_32.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_4.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_4.c deleted file mode 100644 index c8b7317e8..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_4.c +++ /dev/null @@ -1,64 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR4 -void fp_sqr_comba4(fp_int *A, fp_int *B) -{ - fp_digit *a, b[8], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADD2(a[2], a[3]); - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - COMBA_STORE2(b[7]); - COMBA_FINI; - - B->used = 8; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 8 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_4.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_48.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_48.c deleted file mode 100644 index 5b14503ba..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_48.c +++ /dev/null @@ -1,504 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR48 -void fp_sqr_comba48(fp_int *A, fp_int *B) -{ - fp_digit *a, b[96], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[24]); SQRADDAC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[25]); SQRADDAC(a[1], a[24]); SQRADDAC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[26]); SQRADDAC(a[1], a[25]); SQRADDAC(a[2], a[24]); SQRADDAC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[27]); SQRADDAC(a[1], a[26]); SQRADDAC(a[2], a[25]); SQRADDAC(a[3], a[24]); SQRADDAC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[28]); SQRADDAC(a[1], a[27]); SQRADDAC(a[2], a[26]); SQRADDAC(a[3], a[25]); SQRADDAC(a[4], a[24]); SQRADDAC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[29]); SQRADDAC(a[1], a[28]); SQRADDAC(a[2], a[27]); SQRADDAC(a[3], a[26]); SQRADDAC(a[4], a[25]); SQRADDAC(a[5], a[24]); SQRADDAC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[30]); SQRADDAC(a[1], a[29]); SQRADDAC(a[2], a[28]); SQRADDAC(a[3], a[27]); SQRADDAC(a[4], a[26]); SQRADDAC(a[5], a[25]); SQRADDAC(a[6], a[24]); SQRADDAC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[31]); SQRADDAC(a[1], a[30]); SQRADDAC(a[2], a[29]); SQRADDAC(a[3], a[28]); SQRADDAC(a[4], a[27]); SQRADDAC(a[5], a[26]); SQRADDAC(a[6], a[25]); SQRADDAC(a[7], a[24]); SQRADDAC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[32]); SQRADDAC(a[1], a[31]); SQRADDAC(a[2], a[30]); SQRADDAC(a[3], a[29]); SQRADDAC(a[4], a[28]); SQRADDAC(a[5], a[27]); SQRADDAC(a[6], a[26]); SQRADDAC(a[7], a[25]); SQRADDAC(a[8], a[24]); SQRADDAC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[33]); SQRADDAC(a[1], a[32]); SQRADDAC(a[2], a[31]); SQRADDAC(a[3], a[30]); SQRADDAC(a[4], a[29]); SQRADDAC(a[5], a[28]); SQRADDAC(a[6], a[27]); SQRADDAC(a[7], a[26]); SQRADDAC(a[8], a[25]); SQRADDAC(a[9], a[24]); SQRADDAC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[34]); SQRADDAC(a[1], a[33]); SQRADDAC(a[2], a[32]); SQRADDAC(a[3], a[31]); SQRADDAC(a[4], a[30]); SQRADDAC(a[5], a[29]); SQRADDAC(a[6], a[28]); SQRADDAC(a[7], a[27]); SQRADDAC(a[8], a[26]); SQRADDAC(a[9], a[25]); SQRADDAC(a[10], a[24]); SQRADDAC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[35]); SQRADDAC(a[1], a[34]); SQRADDAC(a[2], a[33]); SQRADDAC(a[3], a[32]); SQRADDAC(a[4], a[31]); SQRADDAC(a[5], a[30]); SQRADDAC(a[6], a[29]); SQRADDAC(a[7], a[28]); SQRADDAC(a[8], a[27]); SQRADDAC(a[9], a[26]); SQRADDAC(a[10], a[25]); SQRADDAC(a[11], a[24]); SQRADDAC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[36]); SQRADDAC(a[1], a[35]); SQRADDAC(a[2], a[34]); SQRADDAC(a[3], a[33]); SQRADDAC(a[4], a[32]); SQRADDAC(a[5], a[31]); SQRADDAC(a[6], a[30]); SQRADDAC(a[7], a[29]); SQRADDAC(a[8], a[28]); SQRADDAC(a[9], a[27]); SQRADDAC(a[10], a[26]); SQRADDAC(a[11], a[25]); SQRADDAC(a[12], a[24]); SQRADDAC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[37]); SQRADDAC(a[1], a[36]); SQRADDAC(a[2], a[35]); SQRADDAC(a[3], a[34]); SQRADDAC(a[4], a[33]); SQRADDAC(a[5], a[32]); SQRADDAC(a[6], a[31]); SQRADDAC(a[7], a[30]); SQRADDAC(a[8], a[29]); SQRADDAC(a[9], a[28]); SQRADDAC(a[10], a[27]); SQRADDAC(a[11], a[26]); SQRADDAC(a[12], a[25]); SQRADDAC(a[13], a[24]); SQRADDAC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[38]); SQRADDAC(a[1], a[37]); SQRADDAC(a[2], a[36]); SQRADDAC(a[3], a[35]); SQRADDAC(a[4], a[34]); SQRADDAC(a[5], a[33]); SQRADDAC(a[6], a[32]); SQRADDAC(a[7], a[31]); SQRADDAC(a[8], a[30]); SQRADDAC(a[9], a[29]); SQRADDAC(a[10], a[28]); SQRADDAC(a[11], a[27]); SQRADDAC(a[12], a[26]); SQRADDAC(a[13], a[25]); SQRADDAC(a[14], a[24]); SQRADDAC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - - /* output 39 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[39]); SQRADDAC(a[1], a[38]); SQRADDAC(a[2], a[37]); SQRADDAC(a[3], a[36]); SQRADDAC(a[4], a[35]); SQRADDAC(a[5], a[34]); SQRADDAC(a[6], a[33]); SQRADDAC(a[7], a[32]); SQRADDAC(a[8], a[31]); SQRADDAC(a[9], a[30]); SQRADDAC(a[10], a[29]); SQRADDAC(a[11], a[28]); SQRADDAC(a[12], a[27]); SQRADDAC(a[13], a[26]); SQRADDAC(a[14], a[25]); SQRADDAC(a[15], a[24]); SQRADDAC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; - COMBA_STORE(b[39]); - - /* output 40 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[40]); SQRADDAC(a[1], a[39]); SQRADDAC(a[2], a[38]); SQRADDAC(a[3], a[37]); SQRADDAC(a[4], a[36]); SQRADDAC(a[5], a[35]); SQRADDAC(a[6], a[34]); SQRADDAC(a[7], a[33]); SQRADDAC(a[8], a[32]); SQRADDAC(a[9], a[31]); SQRADDAC(a[10], a[30]); SQRADDAC(a[11], a[29]); SQRADDAC(a[12], a[28]); SQRADDAC(a[13], a[27]); SQRADDAC(a[14], a[26]); SQRADDAC(a[15], a[25]); SQRADDAC(a[16], a[24]); SQRADDAC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); - COMBA_STORE(b[40]); - - /* output 41 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[41]); SQRADDAC(a[1], a[40]); SQRADDAC(a[2], a[39]); SQRADDAC(a[3], a[38]); SQRADDAC(a[4], a[37]); SQRADDAC(a[5], a[36]); SQRADDAC(a[6], a[35]); SQRADDAC(a[7], a[34]); SQRADDAC(a[8], a[33]); SQRADDAC(a[9], a[32]); SQRADDAC(a[10], a[31]); SQRADDAC(a[11], a[30]); SQRADDAC(a[12], a[29]); SQRADDAC(a[13], a[28]); SQRADDAC(a[14], a[27]); SQRADDAC(a[15], a[26]); SQRADDAC(a[16], a[25]); SQRADDAC(a[17], a[24]); SQRADDAC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; - COMBA_STORE(b[41]); - - /* output 42 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[42]); SQRADDAC(a[1], a[41]); SQRADDAC(a[2], a[40]); SQRADDAC(a[3], a[39]); SQRADDAC(a[4], a[38]); SQRADDAC(a[5], a[37]); SQRADDAC(a[6], a[36]); SQRADDAC(a[7], a[35]); SQRADDAC(a[8], a[34]); SQRADDAC(a[9], a[33]); SQRADDAC(a[10], a[32]); SQRADDAC(a[11], a[31]); SQRADDAC(a[12], a[30]); SQRADDAC(a[13], a[29]); SQRADDAC(a[14], a[28]); SQRADDAC(a[15], a[27]); SQRADDAC(a[16], a[26]); SQRADDAC(a[17], a[25]); SQRADDAC(a[18], a[24]); SQRADDAC(a[19], a[23]); SQRADDAC(a[20], a[22]); SQRADDDB; SQRADD(a[21], a[21]); - COMBA_STORE(b[42]); - - /* output 43 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[43]); SQRADDAC(a[1], a[42]); SQRADDAC(a[2], a[41]); SQRADDAC(a[3], a[40]); SQRADDAC(a[4], a[39]); SQRADDAC(a[5], a[38]); SQRADDAC(a[6], a[37]); SQRADDAC(a[7], a[36]); SQRADDAC(a[8], a[35]); SQRADDAC(a[9], a[34]); SQRADDAC(a[10], a[33]); SQRADDAC(a[11], a[32]); SQRADDAC(a[12], a[31]); SQRADDAC(a[13], a[30]); SQRADDAC(a[14], a[29]); SQRADDAC(a[15], a[28]); SQRADDAC(a[16], a[27]); SQRADDAC(a[17], a[26]); SQRADDAC(a[18], a[25]); SQRADDAC(a[19], a[24]); SQRADDAC(a[20], a[23]); SQRADDAC(a[21], a[22]); SQRADDDB; - COMBA_STORE(b[43]); - - /* output 44 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[44]); SQRADDAC(a[1], a[43]); SQRADDAC(a[2], a[42]); SQRADDAC(a[3], a[41]); SQRADDAC(a[4], a[40]); SQRADDAC(a[5], a[39]); SQRADDAC(a[6], a[38]); SQRADDAC(a[7], a[37]); SQRADDAC(a[8], a[36]); SQRADDAC(a[9], a[35]); SQRADDAC(a[10], a[34]); SQRADDAC(a[11], a[33]); SQRADDAC(a[12], a[32]); SQRADDAC(a[13], a[31]); SQRADDAC(a[14], a[30]); SQRADDAC(a[15], a[29]); SQRADDAC(a[16], a[28]); SQRADDAC(a[17], a[27]); SQRADDAC(a[18], a[26]); SQRADDAC(a[19], a[25]); SQRADDAC(a[20], a[24]); SQRADDAC(a[21], a[23]); SQRADDDB; SQRADD(a[22], a[22]); - COMBA_STORE(b[44]); - - /* output 45 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[45]); SQRADDAC(a[1], a[44]); SQRADDAC(a[2], a[43]); SQRADDAC(a[3], a[42]); SQRADDAC(a[4], a[41]); SQRADDAC(a[5], a[40]); SQRADDAC(a[6], a[39]); SQRADDAC(a[7], a[38]); SQRADDAC(a[8], a[37]); SQRADDAC(a[9], a[36]); SQRADDAC(a[10], a[35]); SQRADDAC(a[11], a[34]); SQRADDAC(a[12], a[33]); SQRADDAC(a[13], a[32]); SQRADDAC(a[14], a[31]); SQRADDAC(a[15], a[30]); SQRADDAC(a[16], a[29]); SQRADDAC(a[17], a[28]); SQRADDAC(a[18], a[27]); SQRADDAC(a[19], a[26]); SQRADDAC(a[20], a[25]); SQRADDAC(a[21], a[24]); SQRADDAC(a[22], a[23]); SQRADDDB; - COMBA_STORE(b[45]); - - /* output 46 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[46]); SQRADDAC(a[1], a[45]); SQRADDAC(a[2], a[44]); SQRADDAC(a[3], a[43]); SQRADDAC(a[4], a[42]); SQRADDAC(a[5], a[41]); SQRADDAC(a[6], a[40]); SQRADDAC(a[7], a[39]); SQRADDAC(a[8], a[38]); SQRADDAC(a[9], a[37]); SQRADDAC(a[10], a[36]); SQRADDAC(a[11], a[35]); SQRADDAC(a[12], a[34]); SQRADDAC(a[13], a[33]); SQRADDAC(a[14], a[32]); SQRADDAC(a[15], a[31]); SQRADDAC(a[16], a[30]); SQRADDAC(a[17], a[29]); SQRADDAC(a[18], a[28]); SQRADDAC(a[19], a[27]); SQRADDAC(a[20], a[26]); SQRADDAC(a[21], a[25]); SQRADDAC(a[22], a[24]); SQRADDDB; SQRADD(a[23], a[23]); - COMBA_STORE(b[46]); - - /* output 47 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[47]); SQRADDAC(a[1], a[46]); SQRADDAC(a[2], a[45]); SQRADDAC(a[3], a[44]); SQRADDAC(a[4], a[43]); SQRADDAC(a[5], a[42]); SQRADDAC(a[6], a[41]); SQRADDAC(a[7], a[40]); SQRADDAC(a[8], a[39]); SQRADDAC(a[9], a[38]); SQRADDAC(a[10], a[37]); SQRADDAC(a[11], a[36]); SQRADDAC(a[12], a[35]); SQRADDAC(a[13], a[34]); SQRADDAC(a[14], a[33]); SQRADDAC(a[15], a[32]); SQRADDAC(a[16], a[31]); SQRADDAC(a[17], a[30]); SQRADDAC(a[18], a[29]); SQRADDAC(a[19], a[28]); SQRADDAC(a[20], a[27]); SQRADDAC(a[21], a[26]); SQRADDAC(a[22], a[25]); SQRADDAC(a[23], a[24]); SQRADDDB; - COMBA_STORE(b[47]); - - /* output 48 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[47]); SQRADDAC(a[2], a[46]); SQRADDAC(a[3], a[45]); SQRADDAC(a[4], a[44]); SQRADDAC(a[5], a[43]); SQRADDAC(a[6], a[42]); SQRADDAC(a[7], a[41]); SQRADDAC(a[8], a[40]); SQRADDAC(a[9], a[39]); SQRADDAC(a[10], a[38]); SQRADDAC(a[11], a[37]); SQRADDAC(a[12], a[36]); SQRADDAC(a[13], a[35]); SQRADDAC(a[14], a[34]); SQRADDAC(a[15], a[33]); SQRADDAC(a[16], a[32]); SQRADDAC(a[17], a[31]); SQRADDAC(a[18], a[30]); SQRADDAC(a[19], a[29]); SQRADDAC(a[20], a[28]); SQRADDAC(a[21], a[27]); SQRADDAC(a[22], a[26]); SQRADDAC(a[23], a[25]); SQRADDDB; SQRADD(a[24], a[24]); - COMBA_STORE(b[48]); - - /* output 49 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[47]); SQRADDAC(a[3], a[46]); SQRADDAC(a[4], a[45]); SQRADDAC(a[5], a[44]); SQRADDAC(a[6], a[43]); SQRADDAC(a[7], a[42]); SQRADDAC(a[8], a[41]); SQRADDAC(a[9], a[40]); SQRADDAC(a[10], a[39]); SQRADDAC(a[11], a[38]); SQRADDAC(a[12], a[37]); SQRADDAC(a[13], a[36]); SQRADDAC(a[14], a[35]); SQRADDAC(a[15], a[34]); SQRADDAC(a[16], a[33]); SQRADDAC(a[17], a[32]); SQRADDAC(a[18], a[31]); SQRADDAC(a[19], a[30]); SQRADDAC(a[20], a[29]); SQRADDAC(a[21], a[28]); SQRADDAC(a[22], a[27]); SQRADDAC(a[23], a[26]); SQRADDAC(a[24], a[25]); SQRADDDB; - COMBA_STORE(b[49]); - - /* output 50 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[47]); SQRADDAC(a[4], a[46]); SQRADDAC(a[5], a[45]); SQRADDAC(a[6], a[44]); SQRADDAC(a[7], a[43]); SQRADDAC(a[8], a[42]); SQRADDAC(a[9], a[41]); SQRADDAC(a[10], a[40]); SQRADDAC(a[11], a[39]); SQRADDAC(a[12], a[38]); SQRADDAC(a[13], a[37]); SQRADDAC(a[14], a[36]); SQRADDAC(a[15], a[35]); SQRADDAC(a[16], a[34]); SQRADDAC(a[17], a[33]); SQRADDAC(a[18], a[32]); SQRADDAC(a[19], a[31]); SQRADDAC(a[20], a[30]); SQRADDAC(a[21], a[29]); SQRADDAC(a[22], a[28]); SQRADDAC(a[23], a[27]); SQRADDAC(a[24], a[26]); SQRADDDB; SQRADD(a[25], a[25]); - COMBA_STORE(b[50]); - - /* output 51 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[47]); SQRADDAC(a[5], a[46]); SQRADDAC(a[6], a[45]); SQRADDAC(a[7], a[44]); SQRADDAC(a[8], a[43]); SQRADDAC(a[9], a[42]); SQRADDAC(a[10], a[41]); SQRADDAC(a[11], a[40]); SQRADDAC(a[12], a[39]); SQRADDAC(a[13], a[38]); SQRADDAC(a[14], a[37]); SQRADDAC(a[15], a[36]); SQRADDAC(a[16], a[35]); SQRADDAC(a[17], a[34]); SQRADDAC(a[18], a[33]); SQRADDAC(a[19], a[32]); SQRADDAC(a[20], a[31]); SQRADDAC(a[21], a[30]); SQRADDAC(a[22], a[29]); SQRADDAC(a[23], a[28]); SQRADDAC(a[24], a[27]); SQRADDAC(a[25], a[26]); SQRADDDB; - COMBA_STORE(b[51]); - - /* output 52 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[47]); SQRADDAC(a[6], a[46]); SQRADDAC(a[7], a[45]); SQRADDAC(a[8], a[44]); SQRADDAC(a[9], a[43]); SQRADDAC(a[10], a[42]); SQRADDAC(a[11], a[41]); SQRADDAC(a[12], a[40]); SQRADDAC(a[13], a[39]); SQRADDAC(a[14], a[38]); SQRADDAC(a[15], a[37]); SQRADDAC(a[16], a[36]); SQRADDAC(a[17], a[35]); SQRADDAC(a[18], a[34]); SQRADDAC(a[19], a[33]); SQRADDAC(a[20], a[32]); SQRADDAC(a[21], a[31]); SQRADDAC(a[22], a[30]); SQRADDAC(a[23], a[29]); SQRADDAC(a[24], a[28]); SQRADDAC(a[25], a[27]); SQRADDDB; SQRADD(a[26], a[26]); - COMBA_STORE(b[52]); - - /* output 53 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[47]); SQRADDAC(a[7], a[46]); SQRADDAC(a[8], a[45]); SQRADDAC(a[9], a[44]); SQRADDAC(a[10], a[43]); SQRADDAC(a[11], a[42]); SQRADDAC(a[12], a[41]); SQRADDAC(a[13], a[40]); SQRADDAC(a[14], a[39]); SQRADDAC(a[15], a[38]); SQRADDAC(a[16], a[37]); SQRADDAC(a[17], a[36]); SQRADDAC(a[18], a[35]); SQRADDAC(a[19], a[34]); SQRADDAC(a[20], a[33]); SQRADDAC(a[21], a[32]); SQRADDAC(a[22], a[31]); SQRADDAC(a[23], a[30]); SQRADDAC(a[24], a[29]); SQRADDAC(a[25], a[28]); SQRADDAC(a[26], a[27]); SQRADDDB; - COMBA_STORE(b[53]); - - /* output 54 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[47]); SQRADDAC(a[8], a[46]); SQRADDAC(a[9], a[45]); SQRADDAC(a[10], a[44]); SQRADDAC(a[11], a[43]); SQRADDAC(a[12], a[42]); SQRADDAC(a[13], a[41]); SQRADDAC(a[14], a[40]); SQRADDAC(a[15], a[39]); SQRADDAC(a[16], a[38]); SQRADDAC(a[17], a[37]); SQRADDAC(a[18], a[36]); SQRADDAC(a[19], a[35]); SQRADDAC(a[20], a[34]); SQRADDAC(a[21], a[33]); SQRADDAC(a[22], a[32]); SQRADDAC(a[23], a[31]); SQRADDAC(a[24], a[30]); SQRADDAC(a[25], a[29]); SQRADDAC(a[26], a[28]); SQRADDDB; SQRADD(a[27], a[27]); - COMBA_STORE(b[54]); - - /* output 55 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[47]); SQRADDAC(a[9], a[46]); SQRADDAC(a[10], a[45]); SQRADDAC(a[11], a[44]); SQRADDAC(a[12], a[43]); SQRADDAC(a[13], a[42]); SQRADDAC(a[14], a[41]); SQRADDAC(a[15], a[40]); SQRADDAC(a[16], a[39]); SQRADDAC(a[17], a[38]); SQRADDAC(a[18], a[37]); SQRADDAC(a[19], a[36]); SQRADDAC(a[20], a[35]); SQRADDAC(a[21], a[34]); SQRADDAC(a[22], a[33]); SQRADDAC(a[23], a[32]); SQRADDAC(a[24], a[31]); SQRADDAC(a[25], a[30]); SQRADDAC(a[26], a[29]); SQRADDAC(a[27], a[28]); SQRADDDB; - COMBA_STORE(b[55]); - - /* output 56 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[47]); SQRADDAC(a[10], a[46]); SQRADDAC(a[11], a[45]); SQRADDAC(a[12], a[44]); SQRADDAC(a[13], a[43]); SQRADDAC(a[14], a[42]); SQRADDAC(a[15], a[41]); SQRADDAC(a[16], a[40]); SQRADDAC(a[17], a[39]); SQRADDAC(a[18], a[38]); SQRADDAC(a[19], a[37]); SQRADDAC(a[20], a[36]); SQRADDAC(a[21], a[35]); SQRADDAC(a[22], a[34]); SQRADDAC(a[23], a[33]); SQRADDAC(a[24], a[32]); SQRADDAC(a[25], a[31]); SQRADDAC(a[26], a[30]); SQRADDAC(a[27], a[29]); SQRADDDB; SQRADD(a[28], a[28]); - COMBA_STORE(b[56]); - - /* output 57 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[47]); SQRADDAC(a[11], a[46]); SQRADDAC(a[12], a[45]); SQRADDAC(a[13], a[44]); SQRADDAC(a[14], a[43]); SQRADDAC(a[15], a[42]); SQRADDAC(a[16], a[41]); SQRADDAC(a[17], a[40]); SQRADDAC(a[18], a[39]); SQRADDAC(a[19], a[38]); SQRADDAC(a[20], a[37]); SQRADDAC(a[21], a[36]); SQRADDAC(a[22], a[35]); SQRADDAC(a[23], a[34]); SQRADDAC(a[24], a[33]); SQRADDAC(a[25], a[32]); SQRADDAC(a[26], a[31]); SQRADDAC(a[27], a[30]); SQRADDAC(a[28], a[29]); SQRADDDB; - COMBA_STORE(b[57]); - - /* output 58 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[47]); SQRADDAC(a[12], a[46]); SQRADDAC(a[13], a[45]); SQRADDAC(a[14], a[44]); SQRADDAC(a[15], a[43]); SQRADDAC(a[16], a[42]); SQRADDAC(a[17], a[41]); SQRADDAC(a[18], a[40]); SQRADDAC(a[19], a[39]); SQRADDAC(a[20], a[38]); SQRADDAC(a[21], a[37]); SQRADDAC(a[22], a[36]); SQRADDAC(a[23], a[35]); SQRADDAC(a[24], a[34]); SQRADDAC(a[25], a[33]); SQRADDAC(a[26], a[32]); SQRADDAC(a[27], a[31]); SQRADDAC(a[28], a[30]); SQRADDDB; SQRADD(a[29], a[29]); - COMBA_STORE(b[58]); - - /* output 59 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[47]); SQRADDAC(a[13], a[46]); SQRADDAC(a[14], a[45]); SQRADDAC(a[15], a[44]); SQRADDAC(a[16], a[43]); SQRADDAC(a[17], a[42]); SQRADDAC(a[18], a[41]); SQRADDAC(a[19], a[40]); SQRADDAC(a[20], a[39]); SQRADDAC(a[21], a[38]); SQRADDAC(a[22], a[37]); SQRADDAC(a[23], a[36]); SQRADDAC(a[24], a[35]); SQRADDAC(a[25], a[34]); SQRADDAC(a[26], a[33]); SQRADDAC(a[27], a[32]); SQRADDAC(a[28], a[31]); SQRADDAC(a[29], a[30]); SQRADDDB; - COMBA_STORE(b[59]); - - /* output 60 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[47]); SQRADDAC(a[14], a[46]); SQRADDAC(a[15], a[45]); SQRADDAC(a[16], a[44]); SQRADDAC(a[17], a[43]); SQRADDAC(a[18], a[42]); SQRADDAC(a[19], a[41]); SQRADDAC(a[20], a[40]); SQRADDAC(a[21], a[39]); SQRADDAC(a[22], a[38]); SQRADDAC(a[23], a[37]); SQRADDAC(a[24], a[36]); SQRADDAC(a[25], a[35]); SQRADDAC(a[26], a[34]); SQRADDAC(a[27], a[33]); SQRADDAC(a[28], a[32]); SQRADDAC(a[29], a[31]); SQRADDDB; SQRADD(a[30], a[30]); - COMBA_STORE(b[60]); - - /* output 61 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[47]); SQRADDAC(a[15], a[46]); SQRADDAC(a[16], a[45]); SQRADDAC(a[17], a[44]); SQRADDAC(a[18], a[43]); SQRADDAC(a[19], a[42]); SQRADDAC(a[20], a[41]); SQRADDAC(a[21], a[40]); SQRADDAC(a[22], a[39]); SQRADDAC(a[23], a[38]); SQRADDAC(a[24], a[37]); SQRADDAC(a[25], a[36]); SQRADDAC(a[26], a[35]); SQRADDAC(a[27], a[34]); SQRADDAC(a[28], a[33]); SQRADDAC(a[29], a[32]); SQRADDAC(a[30], a[31]); SQRADDDB; - COMBA_STORE(b[61]); - - /* output 62 */ - CARRY_FORWARD; - SQRADDSC(a[15], a[47]); SQRADDAC(a[16], a[46]); SQRADDAC(a[17], a[45]); SQRADDAC(a[18], a[44]); SQRADDAC(a[19], a[43]); SQRADDAC(a[20], a[42]); SQRADDAC(a[21], a[41]); SQRADDAC(a[22], a[40]); SQRADDAC(a[23], a[39]); SQRADDAC(a[24], a[38]); SQRADDAC(a[25], a[37]); SQRADDAC(a[26], a[36]); SQRADDAC(a[27], a[35]); SQRADDAC(a[28], a[34]); SQRADDAC(a[29], a[33]); SQRADDAC(a[30], a[32]); SQRADDDB; SQRADD(a[31], a[31]); - COMBA_STORE(b[62]); - - /* output 63 */ - CARRY_FORWARD; - SQRADDSC(a[16], a[47]); SQRADDAC(a[17], a[46]); SQRADDAC(a[18], a[45]); SQRADDAC(a[19], a[44]); SQRADDAC(a[20], a[43]); SQRADDAC(a[21], a[42]); SQRADDAC(a[22], a[41]); SQRADDAC(a[23], a[40]); SQRADDAC(a[24], a[39]); SQRADDAC(a[25], a[38]); SQRADDAC(a[26], a[37]); SQRADDAC(a[27], a[36]); SQRADDAC(a[28], a[35]); SQRADDAC(a[29], a[34]); SQRADDAC(a[30], a[33]); SQRADDAC(a[31], a[32]); SQRADDDB; - COMBA_STORE(b[63]); - - /* output 64 */ - CARRY_FORWARD; - SQRADDSC(a[17], a[47]); SQRADDAC(a[18], a[46]); SQRADDAC(a[19], a[45]); SQRADDAC(a[20], a[44]); SQRADDAC(a[21], a[43]); SQRADDAC(a[22], a[42]); SQRADDAC(a[23], a[41]); SQRADDAC(a[24], a[40]); SQRADDAC(a[25], a[39]); SQRADDAC(a[26], a[38]); SQRADDAC(a[27], a[37]); SQRADDAC(a[28], a[36]); SQRADDAC(a[29], a[35]); SQRADDAC(a[30], a[34]); SQRADDAC(a[31], a[33]); SQRADDDB; SQRADD(a[32], a[32]); - COMBA_STORE(b[64]); - - /* output 65 */ - CARRY_FORWARD; - SQRADDSC(a[18], a[47]); SQRADDAC(a[19], a[46]); SQRADDAC(a[20], a[45]); SQRADDAC(a[21], a[44]); SQRADDAC(a[22], a[43]); SQRADDAC(a[23], a[42]); SQRADDAC(a[24], a[41]); SQRADDAC(a[25], a[40]); SQRADDAC(a[26], a[39]); SQRADDAC(a[27], a[38]); SQRADDAC(a[28], a[37]); SQRADDAC(a[29], a[36]); SQRADDAC(a[30], a[35]); SQRADDAC(a[31], a[34]); SQRADDAC(a[32], a[33]); SQRADDDB; - COMBA_STORE(b[65]); - - /* output 66 */ - CARRY_FORWARD; - SQRADDSC(a[19], a[47]); SQRADDAC(a[20], a[46]); SQRADDAC(a[21], a[45]); SQRADDAC(a[22], a[44]); SQRADDAC(a[23], a[43]); SQRADDAC(a[24], a[42]); SQRADDAC(a[25], a[41]); SQRADDAC(a[26], a[40]); SQRADDAC(a[27], a[39]); SQRADDAC(a[28], a[38]); SQRADDAC(a[29], a[37]); SQRADDAC(a[30], a[36]); SQRADDAC(a[31], a[35]); SQRADDAC(a[32], a[34]); SQRADDDB; SQRADD(a[33], a[33]); - COMBA_STORE(b[66]); - - /* output 67 */ - CARRY_FORWARD; - SQRADDSC(a[20], a[47]); SQRADDAC(a[21], a[46]); SQRADDAC(a[22], a[45]); SQRADDAC(a[23], a[44]); SQRADDAC(a[24], a[43]); SQRADDAC(a[25], a[42]); SQRADDAC(a[26], a[41]); SQRADDAC(a[27], a[40]); SQRADDAC(a[28], a[39]); SQRADDAC(a[29], a[38]); SQRADDAC(a[30], a[37]); SQRADDAC(a[31], a[36]); SQRADDAC(a[32], a[35]); SQRADDAC(a[33], a[34]); SQRADDDB; - COMBA_STORE(b[67]); - - /* output 68 */ - CARRY_FORWARD; - SQRADDSC(a[21], a[47]); SQRADDAC(a[22], a[46]); SQRADDAC(a[23], a[45]); SQRADDAC(a[24], a[44]); SQRADDAC(a[25], a[43]); SQRADDAC(a[26], a[42]); SQRADDAC(a[27], a[41]); SQRADDAC(a[28], a[40]); SQRADDAC(a[29], a[39]); SQRADDAC(a[30], a[38]); SQRADDAC(a[31], a[37]); SQRADDAC(a[32], a[36]); SQRADDAC(a[33], a[35]); SQRADDDB; SQRADD(a[34], a[34]); - COMBA_STORE(b[68]); - - /* output 69 */ - CARRY_FORWARD; - SQRADDSC(a[22], a[47]); SQRADDAC(a[23], a[46]); SQRADDAC(a[24], a[45]); SQRADDAC(a[25], a[44]); SQRADDAC(a[26], a[43]); SQRADDAC(a[27], a[42]); SQRADDAC(a[28], a[41]); SQRADDAC(a[29], a[40]); SQRADDAC(a[30], a[39]); SQRADDAC(a[31], a[38]); SQRADDAC(a[32], a[37]); SQRADDAC(a[33], a[36]); SQRADDAC(a[34], a[35]); SQRADDDB; - COMBA_STORE(b[69]); - - /* output 70 */ - CARRY_FORWARD; - SQRADDSC(a[23], a[47]); SQRADDAC(a[24], a[46]); SQRADDAC(a[25], a[45]); SQRADDAC(a[26], a[44]); SQRADDAC(a[27], a[43]); SQRADDAC(a[28], a[42]); SQRADDAC(a[29], a[41]); SQRADDAC(a[30], a[40]); SQRADDAC(a[31], a[39]); SQRADDAC(a[32], a[38]); SQRADDAC(a[33], a[37]); SQRADDAC(a[34], a[36]); SQRADDDB; SQRADD(a[35], a[35]); - COMBA_STORE(b[70]); - - /* output 71 */ - CARRY_FORWARD; - SQRADDSC(a[24], a[47]); SQRADDAC(a[25], a[46]); SQRADDAC(a[26], a[45]); SQRADDAC(a[27], a[44]); SQRADDAC(a[28], a[43]); SQRADDAC(a[29], a[42]); SQRADDAC(a[30], a[41]); SQRADDAC(a[31], a[40]); SQRADDAC(a[32], a[39]); SQRADDAC(a[33], a[38]); SQRADDAC(a[34], a[37]); SQRADDAC(a[35], a[36]); SQRADDDB; - COMBA_STORE(b[71]); - - /* output 72 */ - CARRY_FORWARD; - SQRADDSC(a[25], a[47]); SQRADDAC(a[26], a[46]); SQRADDAC(a[27], a[45]); SQRADDAC(a[28], a[44]); SQRADDAC(a[29], a[43]); SQRADDAC(a[30], a[42]); SQRADDAC(a[31], a[41]); SQRADDAC(a[32], a[40]); SQRADDAC(a[33], a[39]); SQRADDAC(a[34], a[38]); SQRADDAC(a[35], a[37]); SQRADDDB; SQRADD(a[36], a[36]); - COMBA_STORE(b[72]); - - /* output 73 */ - CARRY_FORWARD; - SQRADDSC(a[26], a[47]); SQRADDAC(a[27], a[46]); SQRADDAC(a[28], a[45]); SQRADDAC(a[29], a[44]); SQRADDAC(a[30], a[43]); SQRADDAC(a[31], a[42]); SQRADDAC(a[32], a[41]); SQRADDAC(a[33], a[40]); SQRADDAC(a[34], a[39]); SQRADDAC(a[35], a[38]); SQRADDAC(a[36], a[37]); SQRADDDB; - COMBA_STORE(b[73]); - - /* output 74 */ - CARRY_FORWARD; - SQRADDSC(a[27], a[47]); SQRADDAC(a[28], a[46]); SQRADDAC(a[29], a[45]); SQRADDAC(a[30], a[44]); SQRADDAC(a[31], a[43]); SQRADDAC(a[32], a[42]); SQRADDAC(a[33], a[41]); SQRADDAC(a[34], a[40]); SQRADDAC(a[35], a[39]); SQRADDAC(a[36], a[38]); SQRADDDB; SQRADD(a[37], a[37]); - COMBA_STORE(b[74]); - - /* output 75 */ - CARRY_FORWARD; - SQRADDSC(a[28], a[47]); SQRADDAC(a[29], a[46]); SQRADDAC(a[30], a[45]); SQRADDAC(a[31], a[44]); SQRADDAC(a[32], a[43]); SQRADDAC(a[33], a[42]); SQRADDAC(a[34], a[41]); SQRADDAC(a[35], a[40]); SQRADDAC(a[36], a[39]); SQRADDAC(a[37], a[38]); SQRADDDB; - COMBA_STORE(b[75]); - - /* output 76 */ - CARRY_FORWARD; - SQRADDSC(a[29], a[47]); SQRADDAC(a[30], a[46]); SQRADDAC(a[31], a[45]); SQRADDAC(a[32], a[44]); SQRADDAC(a[33], a[43]); SQRADDAC(a[34], a[42]); SQRADDAC(a[35], a[41]); SQRADDAC(a[36], a[40]); SQRADDAC(a[37], a[39]); SQRADDDB; SQRADD(a[38], a[38]); - COMBA_STORE(b[76]); - - /* output 77 */ - CARRY_FORWARD; - SQRADDSC(a[30], a[47]); SQRADDAC(a[31], a[46]); SQRADDAC(a[32], a[45]); SQRADDAC(a[33], a[44]); SQRADDAC(a[34], a[43]); SQRADDAC(a[35], a[42]); SQRADDAC(a[36], a[41]); SQRADDAC(a[37], a[40]); SQRADDAC(a[38], a[39]); SQRADDDB; - COMBA_STORE(b[77]); - - /* output 78 */ - CARRY_FORWARD; - SQRADDSC(a[31], a[47]); SQRADDAC(a[32], a[46]); SQRADDAC(a[33], a[45]); SQRADDAC(a[34], a[44]); SQRADDAC(a[35], a[43]); SQRADDAC(a[36], a[42]); SQRADDAC(a[37], a[41]); SQRADDAC(a[38], a[40]); SQRADDDB; SQRADD(a[39], a[39]); - COMBA_STORE(b[78]); - - /* output 79 */ - CARRY_FORWARD; - SQRADDSC(a[32], a[47]); SQRADDAC(a[33], a[46]); SQRADDAC(a[34], a[45]); SQRADDAC(a[35], a[44]); SQRADDAC(a[36], a[43]); SQRADDAC(a[37], a[42]); SQRADDAC(a[38], a[41]); SQRADDAC(a[39], a[40]); SQRADDDB; - COMBA_STORE(b[79]); - - /* output 80 */ - CARRY_FORWARD; - SQRADDSC(a[33], a[47]); SQRADDAC(a[34], a[46]); SQRADDAC(a[35], a[45]); SQRADDAC(a[36], a[44]); SQRADDAC(a[37], a[43]); SQRADDAC(a[38], a[42]); SQRADDAC(a[39], a[41]); SQRADDDB; SQRADD(a[40], a[40]); - COMBA_STORE(b[80]); - - /* output 81 */ - CARRY_FORWARD; - SQRADDSC(a[34], a[47]); SQRADDAC(a[35], a[46]); SQRADDAC(a[36], a[45]); SQRADDAC(a[37], a[44]); SQRADDAC(a[38], a[43]); SQRADDAC(a[39], a[42]); SQRADDAC(a[40], a[41]); SQRADDDB; - COMBA_STORE(b[81]); - - /* output 82 */ - CARRY_FORWARD; - SQRADDSC(a[35], a[47]); SQRADDAC(a[36], a[46]); SQRADDAC(a[37], a[45]); SQRADDAC(a[38], a[44]); SQRADDAC(a[39], a[43]); SQRADDAC(a[40], a[42]); SQRADDDB; SQRADD(a[41], a[41]); - COMBA_STORE(b[82]); - - /* output 83 */ - CARRY_FORWARD; - SQRADDSC(a[36], a[47]); SQRADDAC(a[37], a[46]); SQRADDAC(a[38], a[45]); SQRADDAC(a[39], a[44]); SQRADDAC(a[40], a[43]); SQRADDAC(a[41], a[42]); SQRADDDB; - COMBA_STORE(b[83]); - - /* output 84 */ - CARRY_FORWARD; - SQRADDSC(a[37], a[47]); SQRADDAC(a[38], a[46]); SQRADDAC(a[39], a[45]); SQRADDAC(a[40], a[44]); SQRADDAC(a[41], a[43]); SQRADDDB; SQRADD(a[42], a[42]); - COMBA_STORE(b[84]); - - /* output 85 */ - CARRY_FORWARD; - SQRADDSC(a[38], a[47]); SQRADDAC(a[39], a[46]); SQRADDAC(a[40], a[45]); SQRADDAC(a[41], a[44]); SQRADDAC(a[42], a[43]); SQRADDDB; - COMBA_STORE(b[85]); - - /* output 86 */ - CARRY_FORWARD; - SQRADDSC(a[39], a[47]); SQRADDAC(a[40], a[46]); SQRADDAC(a[41], a[45]); SQRADDAC(a[42], a[44]); SQRADDDB; SQRADD(a[43], a[43]); - COMBA_STORE(b[86]); - - /* output 87 */ - CARRY_FORWARD; - SQRADDSC(a[40], a[47]); SQRADDAC(a[41], a[46]); SQRADDAC(a[42], a[45]); SQRADDAC(a[43], a[44]); SQRADDDB; - COMBA_STORE(b[87]); - - /* output 88 */ - CARRY_FORWARD; - SQRADDSC(a[41], a[47]); SQRADDAC(a[42], a[46]); SQRADDAC(a[43], a[45]); SQRADDDB; SQRADD(a[44], a[44]); - COMBA_STORE(b[88]); - - /* output 89 */ - CARRY_FORWARD; - SQRADDSC(a[42], a[47]); SQRADDAC(a[43], a[46]); SQRADDAC(a[44], a[45]); SQRADDDB; - COMBA_STORE(b[89]); - - /* output 90 */ - CARRY_FORWARD; - SQRADD2(a[43], a[47]); SQRADD2(a[44], a[46]); SQRADD(a[45], a[45]); - COMBA_STORE(b[90]); - - /* output 91 */ - CARRY_FORWARD; - SQRADD2(a[44], a[47]); SQRADD2(a[45], a[46]); - COMBA_STORE(b[91]); - - /* output 92 */ - CARRY_FORWARD; - SQRADD2(a[45], a[47]); SQRADD(a[46], a[46]); - COMBA_STORE(b[92]); - - /* output 93 */ - CARRY_FORWARD; - SQRADD2(a[46], a[47]); - COMBA_STORE(b[93]); - - /* output 94 */ - CARRY_FORWARD; - SQRADD(a[47], a[47]); - COMBA_STORE(b[94]); - COMBA_STORE2(b[95]); - COMBA_FINI; - - B->used = 96; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 96 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_48.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_6.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_6.c deleted file mode 100644 index c3befa6c4..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_6.c +++ /dev/null @@ -1,84 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR6 -void fp_sqr_comba6(fp_int *A, fp_int *B) -{ - fp_digit *a, b[12], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADD2(a[1], a[5]); SQRADD2(a[2], a[4]); SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADD2(a[2], a[5]); SQRADD2(a[3], a[4]); - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADD2(a[4], a[5]); - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - COMBA_STORE2(b[11]); - COMBA_FINI; - - B->used = 12; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 12 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_6.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_64.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_64.c deleted file mode 100644 index 11be7c793..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_64.c +++ /dev/null @@ -1,664 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR64 -void fp_sqr_comba64(fp_int *A, fp_int *B) -{ - fp_digit *a, b[128], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[16]); SQRADDAC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[17]); SQRADDAC(a[1], a[16]); SQRADDAC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[18]); SQRADDAC(a[1], a[17]); SQRADDAC(a[2], a[16]); SQRADDAC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[19]); SQRADDAC(a[1], a[18]); SQRADDAC(a[2], a[17]); SQRADDAC(a[3], a[16]); SQRADDAC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[20]); SQRADDAC(a[1], a[19]); SQRADDAC(a[2], a[18]); SQRADDAC(a[3], a[17]); SQRADDAC(a[4], a[16]); SQRADDAC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[21]); SQRADDAC(a[1], a[20]); SQRADDAC(a[2], a[19]); SQRADDAC(a[3], a[18]); SQRADDAC(a[4], a[17]); SQRADDAC(a[5], a[16]); SQRADDAC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[22]); SQRADDAC(a[1], a[21]); SQRADDAC(a[2], a[20]); SQRADDAC(a[3], a[19]); SQRADDAC(a[4], a[18]); SQRADDAC(a[5], a[17]); SQRADDAC(a[6], a[16]); SQRADDAC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[23]); SQRADDAC(a[1], a[22]); SQRADDAC(a[2], a[21]); SQRADDAC(a[3], a[20]); SQRADDAC(a[4], a[19]); SQRADDAC(a[5], a[18]); SQRADDAC(a[6], a[17]); SQRADDAC(a[7], a[16]); SQRADDAC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[24]); SQRADDAC(a[1], a[23]); SQRADDAC(a[2], a[22]); SQRADDAC(a[3], a[21]); SQRADDAC(a[4], a[20]); SQRADDAC(a[5], a[19]); SQRADDAC(a[6], a[18]); SQRADDAC(a[7], a[17]); SQRADDAC(a[8], a[16]); SQRADDAC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[25]); SQRADDAC(a[1], a[24]); SQRADDAC(a[2], a[23]); SQRADDAC(a[3], a[22]); SQRADDAC(a[4], a[21]); SQRADDAC(a[5], a[20]); SQRADDAC(a[6], a[19]); SQRADDAC(a[7], a[18]); SQRADDAC(a[8], a[17]); SQRADDAC(a[9], a[16]); SQRADDAC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[26]); SQRADDAC(a[1], a[25]); SQRADDAC(a[2], a[24]); SQRADDAC(a[3], a[23]); SQRADDAC(a[4], a[22]); SQRADDAC(a[5], a[21]); SQRADDAC(a[6], a[20]); SQRADDAC(a[7], a[19]); SQRADDAC(a[8], a[18]); SQRADDAC(a[9], a[17]); SQRADDAC(a[10], a[16]); SQRADDAC(a[11], a[15]); SQRADDAC(a[12], a[14]); SQRADDDB; SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[27]); SQRADDAC(a[1], a[26]); SQRADDAC(a[2], a[25]); SQRADDAC(a[3], a[24]); SQRADDAC(a[4], a[23]); SQRADDAC(a[5], a[22]); SQRADDAC(a[6], a[21]); SQRADDAC(a[7], a[20]); SQRADDAC(a[8], a[19]); SQRADDAC(a[9], a[18]); SQRADDAC(a[10], a[17]); SQRADDAC(a[11], a[16]); SQRADDAC(a[12], a[15]); SQRADDAC(a[13], a[14]); SQRADDDB; - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[28]); SQRADDAC(a[1], a[27]); SQRADDAC(a[2], a[26]); SQRADDAC(a[3], a[25]); SQRADDAC(a[4], a[24]); SQRADDAC(a[5], a[23]); SQRADDAC(a[6], a[22]); SQRADDAC(a[7], a[21]); SQRADDAC(a[8], a[20]); SQRADDAC(a[9], a[19]); SQRADDAC(a[10], a[18]); SQRADDAC(a[11], a[17]); SQRADDAC(a[12], a[16]); SQRADDAC(a[13], a[15]); SQRADDDB; SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[29]); SQRADDAC(a[1], a[28]); SQRADDAC(a[2], a[27]); SQRADDAC(a[3], a[26]); SQRADDAC(a[4], a[25]); SQRADDAC(a[5], a[24]); SQRADDAC(a[6], a[23]); SQRADDAC(a[7], a[22]); SQRADDAC(a[8], a[21]); SQRADDAC(a[9], a[20]); SQRADDAC(a[10], a[19]); SQRADDAC(a[11], a[18]); SQRADDAC(a[12], a[17]); SQRADDAC(a[13], a[16]); SQRADDAC(a[14], a[15]); SQRADDDB; - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[30]); SQRADDAC(a[1], a[29]); SQRADDAC(a[2], a[28]); SQRADDAC(a[3], a[27]); SQRADDAC(a[4], a[26]); SQRADDAC(a[5], a[25]); SQRADDAC(a[6], a[24]); SQRADDAC(a[7], a[23]); SQRADDAC(a[8], a[22]); SQRADDAC(a[9], a[21]); SQRADDAC(a[10], a[20]); SQRADDAC(a[11], a[19]); SQRADDAC(a[12], a[18]); SQRADDAC(a[13], a[17]); SQRADDAC(a[14], a[16]); SQRADDDB; SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - - /* output 31 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[31]); SQRADDAC(a[1], a[30]); SQRADDAC(a[2], a[29]); SQRADDAC(a[3], a[28]); SQRADDAC(a[4], a[27]); SQRADDAC(a[5], a[26]); SQRADDAC(a[6], a[25]); SQRADDAC(a[7], a[24]); SQRADDAC(a[8], a[23]); SQRADDAC(a[9], a[22]); SQRADDAC(a[10], a[21]); SQRADDAC(a[11], a[20]); SQRADDAC(a[12], a[19]); SQRADDAC(a[13], a[18]); SQRADDAC(a[14], a[17]); SQRADDAC(a[15], a[16]); SQRADDDB; - COMBA_STORE(b[31]); - - /* output 32 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[32]); SQRADDAC(a[1], a[31]); SQRADDAC(a[2], a[30]); SQRADDAC(a[3], a[29]); SQRADDAC(a[4], a[28]); SQRADDAC(a[5], a[27]); SQRADDAC(a[6], a[26]); SQRADDAC(a[7], a[25]); SQRADDAC(a[8], a[24]); SQRADDAC(a[9], a[23]); SQRADDAC(a[10], a[22]); SQRADDAC(a[11], a[21]); SQRADDAC(a[12], a[20]); SQRADDAC(a[13], a[19]); SQRADDAC(a[14], a[18]); SQRADDAC(a[15], a[17]); SQRADDDB; SQRADD(a[16], a[16]); - COMBA_STORE(b[32]); - - /* output 33 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[33]); SQRADDAC(a[1], a[32]); SQRADDAC(a[2], a[31]); SQRADDAC(a[3], a[30]); SQRADDAC(a[4], a[29]); SQRADDAC(a[5], a[28]); SQRADDAC(a[6], a[27]); SQRADDAC(a[7], a[26]); SQRADDAC(a[8], a[25]); SQRADDAC(a[9], a[24]); SQRADDAC(a[10], a[23]); SQRADDAC(a[11], a[22]); SQRADDAC(a[12], a[21]); SQRADDAC(a[13], a[20]); SQRADDAC(a[14], a[19]); SQRADDAC(a[15], a[18]); SQRADDAC(a[16], a[17]); SQRADDDB; - COMBA_STORE(b[33]); - - /* output 34 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[34]); SQRADDAC(a[1], a[33]); SQRADDAC(a[2], a[32]); SQRADDAC(a[3], a[31]); SQRADDAC(a[4], a[30]); SQRADDAC(a[5], a[29]); SQRADDAC(a[6], a[28]); SQRADDAC(a[7], a[27]); SQRADDAC(a[8], a[26]); SQRADDAC(a[9], a[25]); SQRADDAC(a[10], a[24]); SQRADDAC(a[11], a[23]); SQRADDAC(a[12], a[22]); SQRADDAC(a[13], a[21]); SQRADDAC(a[14], a[20]); SQRADDAC(a[15], a[19]); SQRADDAC(a[16], a[18]); SQRADDDB; SQRADD(a[17], a[17]); - COMBA_STORE(b[34]); - - /* output 35 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[35]); SQRADDAC(a[1], a[34]); SQRADDAC(a[2], a[33]); SQRADDAC(a[3], a[32]); SQRADDAC(a[4], a[31]); SQRADDAC(a[5], a[30]); SQRADDAC(a[6], a[29]); SQRADDAC(a[7], a[28]); SQRADDAC(a[8], a[27]); SQRADDAC(a[9], a[26]); SQRADDAC(a[10], a[25]); SQRADDAC(a[11], a[24]); SQRADDAC(a[12], a[23]); SQRADDAC(a[13], a[22]); SQRADDAC(a[14], a[21]); SQRADDAC(a[15], a[20]); SQRADDAC(a[16], a[19]); SQRADDAC(a[17], a[18]); SQRADDDB; - COMBA_STORE(b[35]); - - /* output 36 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[36]); SQRADDAC(a[1], a[35]); SQRADDAC(a[2], a[34]); SQRADDAC(a[3], a[33]); SQRADDAC(a[4], a[32]); SQRADDAC(a[5], a[31]); SQRADDAC(a[6], a[30]); SQRADDAC(a[7], a[29]); SQRADDAC(a[8], a[28]); SQRADDAC(a[9], a[27]); SQRADDAC(a[10], a[26]); SQRADDAC(a[11], a[25]); SQRADDAC(a[12], a[24]); SQRADDAC(a[13], a[23]); SQRADDAC(a[14], a[22]); SQRADDAC(a[15], a[21]); SQRADDAC(a[16], a[20]); SQRADDAC(a[17], a[19]); SQRADDDB; SQRADD(a[18], a[18]); - COMBA_STORE(b[36]); - - /* output 37 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[37]); SQRADDAC(a[1], a[36]); SQRADDAC(a[2], a[35]); SQRADDAC(a[3], a[34]); SQRADDAC(a[4], a[33]); SQRADDAC(a[5], a[32]); SQRADDAC(a[6], a[31]); SQRADDAC(a[7], a[30]); SQRADDAC(a[8], a[29]); SQRADDAC(a[9], a[28]); SQRADDAC(a[10], a[27]); SQRADDAC(a[11], a[26]); SQRADDAC(a[12], a[25]); SQRADDAC(a[13], a[24]); SQRADDAC(a[14], a[23]); SQRADDAC(a[15], a[22]); SQRADDAC(a[16], a[21]); SQRADDAC(a[17], a[20]); SQRADDAC(a[18], a[19]); SQRADDDB; - COMBA_STORE(b[37]); - - /* output 38 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[38]); SQRADDAC(a[1], a[37]); SQRADDAC(a[2], a[36]); SQRADDAC(a[3], a[35]); SQRADDAC(a[4], a[34]); SQRADDAC(a[5], a[33]); SQRADDAC(a[6], a[32]); SQRADDAC(a[7], a[31]); SQRADDAC(a[8], a[30]); SQRADDAC(a[9], a[29]); SQRADDAC(a[10], a[28]); SQRADDAC(a[11], a[27]); SQRADDAC(a[12], a[26]); SQRADDAC(a[13], a[25]); SQRADDAC(a[14], a[24]); SQRADDAC(a[15], a[23]); SQRADDAC(a[16], a[22]); SQRADDAC(a[17], a[21]); SQRADDAC(a[18], a[20]); SQRADDDB; SQRADD(a[19], a[19]); - COMBA_STORE(b[38]); - - /* output 39 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[39]); SQRADDAC(a[1], a[38]); SQRADDAC(a[2], a[37]); SQRADDAC(a[3], a[36]); SQRADDAC(a[4], a[35]); SQRADDAC(a[5], a[34]); SQRADDAC(a[6], a[33]); SQRADDAC(a[7], a[32]); SQRADDAC(a[8], a[31]); SQRADDAC(a[9], a[30]); SQRADDAC(a[10], a[29]); SQRADDAC(a[11], a[28]); SQRADDAC(a[12], a[27]); SQRADDAC(a[13], a[26]); SQRADDAC(a[14], a[25]); SQRADDAC(a[15], a[24]); SQRADDAC(a[16], a[23]); SQRADDAC(a[17], a[22]); SQRADDAC(a[18], a[21]); SQRADDAC(a[19], a[20]); SQRADDDB; - COMBA_STORE(b[39]); - - /* output 40 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[40]); SQRADDAC(a[1], a[39]); SQRADDAC(a[2], a[38]); SQRADDAC(a[3], a[37]); SQRADDAC(a[4], a[36]); SQRADDAC(a[5], a[35]); SQRADDAC(a[6], a[34]); SQRADDAC(a[7], a[33]); SQRADDAC(a[8], a[32]); SQRADDAC(a[9], a[31]); SQRADDAC(a[10], a[30]); SQRADDAC(a[11], a[29]); SQRADDAC(a[12], a[28]); SQRADDAC(a[13], a[27]); SQRADDAC(a[14], a[26]); SQRADDAC(a[15], a[25]); SQRADDAC(a[16], a[24]); SQRADDAC(a[17], a[23]); SQRADDAC(a[18], a[22]); SQRADDAC(a[19], a[21]); SQRADDDB; SQRADD(a[20], a[20]); - COMBA_STORE(b[40]); - - /* output 41 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[41]); SQRADDAC(a[1], a[40]); SQRADDAC(a[2], a[39]); SQRADDAC(a[3], a[38]); SQRADDAC(a[4], a[37]); SQRADDAC(a[5], a[36]); SQRADDAC(a[6], a[35]); SQRADDAC(a[7], a[34]); SQRADDAC(a[8], a[33]); SQRADDAC(a[9], a[32]); SQRADDAC(a[10], a[31]); SQRADDAC(a[11], a[30]); SQRADDAC(a[12], a[29]); SQRADDAC(a[13], a[28]); SQRADDAC(a[14], a[27]); SQRADDAC(a[15], a[26]); SQRADDAC(a[16], a[25]); SQRADDAC(a[17], a[24]); SQRADDAC(a[18], a[23]); SQRADDAC(a[19], a[22]); SQRADDAC(a[20], a[21]); SQRADDDB; - COMBA_STORE(b[41]); - - /* output 42 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[42]); SQRADDAC(a[1], a[41]); SQRADDAC(a[2], a[40]); SQRADDAC(a[3], a[39]); SQRADDAC(a[4], a[38]); SQRADDAC(a[5], a[37]); SQRADDAC(a[6], a[36]); SQRADDAC(a[7], a[35]); SQRADDAC(a[8], a[34]); SQRADDAC(a[9], a[33]); SQRADDAC(a[10], a[32]); SQRADDAC(a[11], a[31]); SQRADDAC(a[12], a[30]); SQRADDAC(a[13], a[29]); SQRADDAC(a[14], a[28]); SQRADDAC(a[15], a[27]); SQRADDAC(a[16], a[26]); SQRADDAC(a[17], a[25]); SQRADDAC(a[18], a[24]); SQRADDAC(a[19], a[23]); SQRADDAC(a[20], a[22]); SQRADDDB; SQRADD(a[21], a[21]); - COMBA_STORE(b[42]); - - /* output 43 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[43]); SQRADDAC(a[1], a[42]); SQRADDAC(a[2], a[41]); SQRADDAC(a[3], a[40]); SQRADDAC(a[4], a[39]); SQRADDAC(a[5], a[38]); SQRADDAC(a[6], a[37]); SQRADDAC(a[7], a[36]); SQRADDAC(a[8], a[35]); SQRADDAC(a[9], a[34]); SQRADDAC(a[10], a[33]); SQRADDAC(a[11], a[32]); SQRADDAC(a[12], a[31]); SQRADDAC(a[13], a[30]); SQRADDAC(a[14], a[29]); SQRADDAC(a[15], a[28]); SQRADDAC(a[16], a[27]); SQRADDAC(a[17], a[26]); SQRADDAC(a[18], a[25]); SQRADDAC(a[19], a[24]); SQRADDAC(a[20], a[23]); SQRADDAC(a[21], a[22]); SQRADDDB; - COMBA_STORE(b[43]); - - /* output 44 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[44]); SQRADDAC(a[1], a[43]); SQRADDAC(a[2], a[42]); SQRADDAC(a[3], a[41]); SQRADDAC(a[4], a[40]); SQRADDAC(a[5], a[39]); SQRADDAC(a[6], a[38]); SQRADDAC(a[7], a[37]); SQRADDAC(a[8], a[36]); SQRADDAC(a[9], a[35]); SQRADDAC(a[10], a[34]); SQRADDAC(a[11], a[33]); SQRADDAC(a[12], a[32]); SQRADDAC(a[13], a[31]); SQRADDAC(a[14], a[30]); SQRADDAC(a[15], a[29]); SQRADDAC(a[16], a[28]); SQRADDAC(a[17], a[27]); SQRADDAC(a[18], a[26]); SQRADDAC(a[19], a[25]); SQRADDAC(a[20], a[24]); SQRADDAC(a[21], a[23]); SQRADDDB; SQRADD(a[22], a[22]); - COMBA_STORE(b[44]); - - /* output 45 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[45]); SQRADDAC(a[1], a[44]); SQRADDAC(a[2], a[43]); SQRADDAC(a[3], a[42]); SQRADDAC(a[4], a[41]); SQRADDAC(a[5], a[40]); SQRADDAC(a[6], a[39]); SQRADDAC(a[7], a[38]); SQRADDAC(a[8], a[37]); SQRADDAC(a[9], a[36]); SQRADDAC(a[10], a[35]); SQRADDAC(a[11], a[34]); SQRADDAC(a[12], a[33]); SQRADDAC(a[13], a[32]); SQRADDAC(a[14], a[31]); SQRADDAC(a[15], a[30]); SQRADDAC(a[16], a[29]); SQRADDAC(a[17], a[28]); SQRADDAC(a[18], a[27]); SQRADDAC(a[19], a[26]); SQRADDAC(a[20], a[25]); SQRADDAC(a[21], a[24]); SQRADDAC(a[22], a[23]); SQRADDDB; - COMBA_STORE(b[45]); - - /* output 46 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[46]); SQRADDAC(a[1], a[45]); SQRADDAC(a[2], a[44]); SQRADDAC(a[3], a[43]); SQRADDAC(a[4], a[42]); SQRADDAC(a[5], a[41]); SQRADDAC(a[6], a[40]); SQRADDAC(a[7], a[39]); SQRADDAC(a[8], a[38]); SQRADDAC(a[9], a[37]); SQRADDAC(a[10], a[36]); SQRADDAC(a[11], a[35]); SQRADDAC(a[12], a[34]); SQRADDAC(a[13], a[33]); SQRADDAC(a[14], a[32]); SQRADDAC(a[15], a[31]); SQRADDAC(a[16], a[30]); SQRADDAC(a[17], a[29]); SQRADDAC(a[18], a[28]); SQRADDAC(a[19], a[27]); SQRADDAC(a[20], a[26]); SQRADDAC(a[21], a[25]); SQRADDAC(a[22], a[24]); SQRADDDB; SQRADD(a[23], a[23]); - COMBA_STORE(b[46]); - - /* output 47 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[47]); SQRADDAC(a[1], a[46]); SQRADDAC(a[2], a[45]); SQRADDAC(a[3], a[44]); SQRADDAC(a[4], a[43]); SQRADDAC(a[5], a[42]); SQRADDAC(a[6], a[41]); SQRADDAC(a[7], a[40]); SQRADDAC(a[8], a[39]); SQRADDAC(a[9], a[38]); SQRADDAC(a[10], a[37]); SQRADDAC(a[11], a[36]); SQRADDAC(a[12], a[35]); SQRADDAC(a[13], a[34]); SQRADDAC(a[14], a[33]); SQRADDAC(a[15], a[32]); SQRADDAC(a[16], a[31]); SQRADDAC(a[17], a[30]); SQRADDAC(a[18], a[29]); SQRADDAC(a[19], a[28]); SQRADDAC(a[20], a[27]); SQRADDAC(a[21], a[26]); SQRADDAC(a[22], a[25]); SQRADDAC(a[23], a[24]); SQRADDDB; - COMBA_STORE(b[47]); - - /* output 48 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[48]); SQRADDAC(a[1], a[47]); SQRADDAC(a[2], a[46]); SQRADDAC(a[3], a[45]); SQRADDAC(a[4], a[44]); SQRADDAC(a[5], a[43]); SQRADDAC(a[6], a[42]); SQRADDAC(a[7], a[41]); SQRADDAC(a[8], a[40]); SQRADDAC(a[9], a[39]); SQRADDAC(a[10], a[38]); SQRADDAC(a[11], a[37]); SQRADDAC(a[12], a[36]); SQRADDAC(a[13], a[35]); SQRADDAC(a[14], a[34]); SQRADDAC(a[15], a[33]); SQRADDAC(a[16], a[32]); SQRADDAC(a[17], a[31]); SQRADDAC(a[18], a[30]); SQRADDAC(a[19], a[29]); SQRADDAC(a[20], a[28]); SQRADDAC(a[21], a[27]); SQRADDAC(a[22], a[26]); SQRADDAC(a[23], a[25]); SQRADDDB; SQRADD(a[24], a[24]); - COMBA_STORE(b[48]); - - /* output 49 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[49]); SQRADDAC(a[1], a[48]); SQRADDAC(a[2], a[47]); SQRADDAC(a[3], a[46]); SQRADDAC(a[4], a[45]); SQRADDAC(a[5], a[44]); SQRADDAC(a[6], a[43]); SQRADDAC(a[7], a[42]); SQRADDAC(a[8], a[41]); SQRADDAC(a[9], a[40]); SQRADDAC(a[10], a[39]); SQRADDAC(a[11], a[38]); SQRADDAC(a[12], a[37]); SQRADDAC(a[13], a[36]); SQRADDAC(a[14], a[35]); SQRADDAC(a[15], a[34]); SQRADDAC(a[16], a[33]); SQRADDAC(a[17], a[32]); SQRADDAC(a[18], a[31]); SQRADDAC(a[19], a[30]); SQRADDAC(a[20], a[29]); SQRADDAC(a[21], a[28]); SQRADDAC(a[22], a[27]); SQRADDAC(a[23], a[26]); SQRADDAC(a[24], a[25]); SQRADDDB; - COMBA_STORE(b[49]); - - /* output 50 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[50]); SQRADDAC(a[1], a[49]); SQRADDAC(a[2], a[48]); SQRADDAC(a[3], a[47]); SQRADDAC(a[4], a[46]); SQRADDAC(a[5], a[45]); SQRADDAC(a[6], a[44]); SQRADDAC(a[7], a[43]); SQRADDAC(a[8], a[42]); SQRADDAC(a[9], a[41]); SQRADDAC(a[10], a[40]); SQRADDAC(a[11], a[39]); SQRADDAC(a[12], a[38]); SQRADDAC(a[13], a[37]); SQRADDAC(a[14], a[36]); SQRADDAC(a[15], a[35]); SQRADDAC(a[16], a[34]); SQRADDAC(a[17], a[33]); SQRADDAC(a[18], a[32]); SQRADDAC(a[19], a[31]); SQRADDAC(a[20], a[30]); SQRADDAC(a[21], a[29]); SQRADDAC(a[22], a[28]); SQRADDAC(a[23], a[27]); SQRADDAC(a[24], a[26]); SQRADDDB; SQRADD(a[25], a[25]); - COMBA_STORE(b[50]); - - /* output 51 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[51]); SQRADDAC(a[1], a[50]); SQRADDAC(a[2], a[49]); SQRADDAC(a[3], a[48]); SQRADDAC(a[4], a[47]); SQRADDAC(a[5], a[46]); SQRADDAC(a[6], a[45]); SQRADDAC(a[7], a[44]); SQRADDAC(a[8], a[43]); SQRADDAC(a[9], a[42]); SQRADDAC(a[10], a[41]); SQRADDAC(a[11], a[40]); SQRADDAC(a[12], a[39]); SQRADDAC(a[13], a[38]); SQRADDAC(a[14], a[37]); SQRADDAC(a[15], a[36]); SQRADDAC(a[16], a[35]); SQRADDAC(a[17], a[34]); SQRADDAC(a[18], a[33]); SQRADDAC(a[19], a[32]); SQRADDAC(a[20], a[31]); SQRADDAC(a[21], a[30]); SQRADDAC(a[22], a[29]); SQRADDAC(a[23], a[28]); SQRADDAC(a[24], a[27]); SQRADDAC(a[25], a[26]); SQRADDDB; - COMBA_STORE(b[51]); - - /* output 52 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[52]); SQRADDAC(a[1], a[51]); SQRADDAC(a[2], a[50]); SQRADDAC(a[3], a[49]); SQRADDAC(a[4], a[48]); SQRADDAC(a[5], a[47]); SQRADDAC(a[6], a[46]); SQRADDAC(a[7], a[45]); SQRADDAC(a[8], a[44]); SQRADDAC(a[9], a[43]); SQRADDAC(a[10], a[42]); SQRADDAC(a[11], a[41]); SQRADDAC(a[12], a[40]); SQRADDAC(a[13], a[39]); SQRADDAC(a[14], a[38]); SQRADDAC(a[15], a[37]); SQRADDAC(a[16], a[36]); SQRADDAC(a[17], a[35]); SQRADDAC(a[18], a[34]); SQRADDAC(a[19], a[33]); SQRADDAC(a[20], a[32]); SQRADDAC(a[21], a[31]); SQRADDAC(a[22], a[30]); SQRADDAC(a[23], a[29]); SQRADDAC(a[24], a[28]); SQRADDAC(a[25], a[27]); SQRADDDB; SQRADD(a[26], a[26]); - COMBA_STORE(b[52]); - - /* output 53 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[53]); SQRADDAC(a[1], a[52]); SQRADDAC(a[2], a[51]); SQRADDAC(a[3], a[50]); SQRADDAC(a[4], a[49]); SQRADDAC(a[5], a[48]); SQRADDAC(a[6], a[47]); SQRADDAC(a[7], a[46]); SQRADDAC(a[8], a[45]); SQRADDAC(a[9], a[44]); SQRADDAC(a[10], a[43]); SQRADDAC(a[11], a[42]); SQRADDAC(a[12], a[41]); SQRADDAC(a[13], a[40]); SQRADDAC(a[14], a[39]); SQRADDAC(a[15], a[38]); SQRADDAC(a[16], a[37]); SQRADDAC(a[17], a[36]); SQRADDAC(a[18], a[35]); SQRADDAC(a[19], a[34]); SQRADDAC(a[20], a[33]); SQRADDAC(a[21], a[32]); SQRADDAC(a[22], a[31]); SQRADDAC(a[23], a[30]); SQRADDAC(a[24], a[29]); SQRADDAC(a[25], a[28]); SQRADDAC(a[26], a[27]); SQRADDDB; - COMBA_STORE(b[53]); - - /* output 54 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[54]); SQRADDAC(a[1], a[53]); SQRADDAC(a[2], a[52]); SQRADDAC(a[3], a[51]); SQRADDAC(a[4], a[50]); SQRADDAC(a[5], a[49]); SQRADDAC(a[6], a[48]); SQRADDAC(a[7], a[47]); SQRADDAC(a[8], a[46]); SQRADDAC(a[9], a[45]); SQRADDAC(a[10], a[44]); SQRADDAC(a[11], a[43]); SQRADDAC(a[12], a[42]); SQRADDAC(a[13], a[41]); SQRADDAC(a[14], a[40]); SQRADDAC(a[15], a[39]); SQRADDAC(a[16], a[38]); SQRADDAC(a[17], a[37]); SQRADDAC(a[18], a[36]); SQRADDAC(a[19], a[35]); SQRADDAC(a[20], a[34]); SQRADDAC(a[21], a[33]); SQRADDAC(a[22], a[32]); SQRADDAC(a[23], a[31]); SQRADDAC(a[24], a[30]); SQRADDAC(a[25], a[29]); SQRADDAC(a[26], a[28]); SQRADDDB; SQRADD(a[27], a[27]); - COMBA_STORE(b[54]); - - /* output 55 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[55]); SQRADDAC(a[1], a[54]); SQRADDAC(a[2], a[53]); SQRADDAC(a[3], a[52]); SQRADDAC(a[4], a[51]); SQRADDAC(a[5], a[50]); SQRADDAC(a[6], a[49]); SQRADDAC(a[7], a[48]); SQRADDAC(a[8], a[47]); SQRADDAC(a[9], a[46]); SQRADDAC(a[10], a[45]); SQRADDAC(a[11], a[44]); SQRADDAC(a[12], a[43]); SQRADDAC(a[13], a[42]); SQRADDAC(a[14], a[41]); SQRADDAC(a[15], a[40]); SQRADDAC(a[16], a[39]); SQRADDAC(a[17], a[38]); SQRADDAC(a[18], a[37]); SQRADDAC(a[19], a[36]); SQRADDAC(a[20], a[35]); SQRADDAC(a[21], a[34]); SQRADDAC(a[22], a[33]); SQRADDAC(a[23], a[32]); SQRADDAC(a[24], a[31]); SQRADDAC(a[25], a[30]); SQRADDAC(a[26], a[29]); SQRADDAC(a[27], a[28]); SQRADDDB; - COMBA_STORE(b[55]); - - /* output 56 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[56]); SQRADDAC(a[1], a[55]); SQRADDAC(a[2], a[54]); SQRADDAC(a[3], a[53]); SQRADDAC(a[4], a[52]); SQRADDAC(a[5], a[51]); SQRADDAC(a[6], a[50]); SQRADDAC(a[7], a[49]); SQRADDAC(a[8], a[48]); SQRADDAC(a[9], a[47]); SQRADDAC(a[10], a[46]); SQRADDAC(a[11], a[45]); SQRADDAC(a[12], a[44]); SQRADDAC(a[13], a[43]); SQRADDAC(a[14], a[42]); SQRADDAC(a[15], a[41]); SQRADDAC(a[16], a[40]); SQRADDAC(a[17], a[39]); SQRADDAC(a[18], a[38]); SQRADDAC(a[19], a[37]); SQRADDAC(a[20], a[36]); SQRADDAC(a[21], a[35]); SQRADDAC(a[22], a[34]); SQRADDAC(a[23], a[33]); SQRADDAC(a[24], a[32]); SQRADDAC(a[25], a[31]); SQRADDAC(a[26], a[30]); SQRADDAC(a[27], a[29]); SQRADDDB; SQRADD(a[28], a[28]); - COMBA_STORE(b[56]); - - /* output 57 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[57]); SQRADDAC(a[1], a[56]); SQRADDAC(a[2], a[55]); SQRADDAC(a[3], a[54]); SQRADDAC(a[4], a[53]); SQRADDAC(a[5], a[52]); SQRADDAC(a[6], a[51]); SQRADDAC(a[7], a[50]); SQRADDAC(a[8], a[49]); SQRADDAC(a[9], a[48]); SQRADDAC(a[10], a[47]); SQRADDAC(a[11], a[46]); SQRADDAC(a[12], a[45]); SQRADDAC(a[13], a[44]); SQRADDAC(a[14], a[43]); SQRADDAC(a[15], a[42]); SQRADDAC(a[16], a[41]); SQRADDAC(a[17], a[40]); SQRADDAC(a[18], a[39]); SQRADDAC(a[19], a[38]); SQRADDAC(a[20], a[37]); SQRADDAC(a[21], a[36]); SQRADDAC(a[22], a[35]); SQRADDAC(a[23], a[34]); SQRADDAC(a[24], a[33]); SQRADDAC(a[25], a[32]); SQRADDAC(a[26], a[31]); SQRADDAC(a[27], a[30]); SQRADDAC(a[28], a[29]); SQRADDDB; - COMBA_STORE(b[57]); - - /* output 58 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[58]); SQRADDAC(a[1], a[57]); SQRADDAC(a[2], a[56]); SQRADDAC(a[3], a[55]); SQRADDAC(a[4], a[54]); SQRADDAC(a[5], a[53]); SQRADDAC(a[6], a[52]); SQRADDAC(a[7], a[51]); SQRADDAC(a[8], a[50]); SQRADDAC(a[9], a[49]); SQRADDAC(a[10], a[48]); SQRADDAC(a[11], a[47]); SQRADDAC(a[12], a[46]); SQRADDAC(a[13], a[45]); SQRADDAC(a[14], a[44]); SQRADDAC(a[15], a[43]); SQRADDAC(a[16], a[42]); SQRADDAC(a[17], a[41]); SQRADDAC(a[18], a[40]); SQRADDAC(a[19], a[39]); SQRADDAC(a[20], a[38]); SQRADDAC(a[21], a[37]); SQRADDAC(a[22], a[36]); SQRADDAC(a[23], a[35]); SQRADDAC(a[24], a[34]); SQRADDAC(a[25], a[33]); SQRADDAC(a[26], a[32]); SQRADDAC(a[27], a[31]); SQRADDAC(a[28], a[30]); SQRADDDB; SQRADD(a[29], a[29]); - COMBA_STORE(b[58]); - - /* output 59 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[59]); SQRADDAC(a[1], a[58]); SQRADDAC(a[2], a[57]); SQRADDAC(a[3], a[56]); SQRADDAC(a[4], a[55]); SQRADDAC(a[5], a[54]); SQRADDAC(a[6], a[53]); SQRADDAC(a[7], a[52]); SQRADDAC(a[8], a[51]); SQRADDAC(a[9], a[50]); SQRADDAC(a[10], a[49]); SQRADDAC(a[11], a[48]); SQRADDAC(a[12], a[47]); SQRADDAC(a[13], a[46]); SQRADDAC(a[14], a[45]); SQRADDAC(a[15], a[44]); SQRADDAC(a[16], a[43]); SQRADDAC(a[17], a[42]); SQRADDAC(a[18], a[41]); SQRADDAC(a[19], a[40]); SQRADDAC(a[20], a[39]); SQRADDAC(a[21], a[38]); SQRADDAC(a[22], a[37]); SQRADDAC(a[23], a[36]); SQRADDAC(a[24], a[35]); SQRADDAC(a[25], a[34]); SQRADDAC(a[26], a[33]); SQRADDAC(a[27], a[32]); SQRADDAC(a[28], a[31]); SQRADDAC(a[29], a[30]); SQRADDDB; - COMBA_STORE(b[59]); - - /* output 60 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[60]); SQRADDAC(a[1], a[59]); SQRADDAC(a[2], a[58]); SQRADDAC(a[3], a[57]); SQRADDAC(a[4], a[56]); SQRADDAC(a[5], a[55]); SQRADDAC(a[6], a[54]); SQRADDAC(a[7], a[53]); SQRADDAC(a[8], a[52]); SQRADDAC(a[9], a[51]); SQRADDAC(a[10], a[50]); SQRADDAC(a[11], a[49]); SQRADDAC(a[12], a[48]); SQRADDAC(a[13], a[47]); SQRADDAC(a[14], a[46]); SQRADDAC(a[15], a[45]); SQRADDAC(a[16], a[44]); SQRADDAC(a[17], a[43]); SQRADDAC(a[18], a[42]); SQRADDAC(a[19], a[41]); SQRADDAC(a[20], a[40]); SQRADDAC(a[21], a[39]); SQRADDAC(a[22], a[38]); SQRADDAC(a[23], a[37]); SQRADDAC(a[24], a[36]); SQRADDAC(a[25], a[35]); SQRADDAC(a[26], a[34]); SQRADDAC(a[27], a[33]); SQRADDAC(a[28], a[32]); SQRADDAC(a[29], a[31]); SQRADDDB; SQRADD(a[30], a[30]); - COMBA_STORE(b[60]); - - /* output 61 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[61]); SQRADDAC(a[1], a[60]); SQRADDAC(a[2], a[59]); SQRADDAC(a[3], a[58]); SQRADDAC(a[4], a[57]); SQRADDAC(a[5], a[56]); SQRADDAC(a[6], a[55]); SQRADDAC(a[7], a[54]); SQRADDAC(a[8], a[53]); SQRADDAC(a[9], a[52]); SQRADDAC(a[10], a[51]); SQRADDAC(a[11], a[50]); SQRADDAC(a[12], a[49]); SQRADDAC(a[13], a[48]); SQRADDAC(a[14], a[47]); SQRADDAC(a[15], a[46]); SQRADDAC(a[16], a[45]); SQRADDAC(a[17], a[44]); SQRADDAC(a[18], a[43]); SQRADDAC(a[19], a[42]); SQRADDAC(a[20], a[41]); SQRADDAC(a[21], a[40]); SQRADDAC(a[22], a[39]); SQRADDAC(a[23], a[38]); SQRADDAC(a[24], a[37]); SQRADDAC(a[25], a[36]); SQRADDAC(a[26], a[35]); SQRADDAC(a[27], a[34]); SQRADDAC(a[28], a[33]); SQRADDAC(a[29], a[32]); SQRADDAC(a[30], a[31]); SQRADDDB; - COMBA_STORE(b[61]); - - /* output 62 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[62]); SQRADDAC(a[1], a[61]); SQRADDAC(a[2], a[60]); SQRADDAC(a[3], a[59]); SQRADDAC(a[4], a[58]); SQRADDAC(a[5], a[57]); SQRADDAC(a[6], a[56]); SQRADDAC(a[7], a[55]); SQRADDAC(a[8], a[54]); SQRADDAC(a[9], a[53]); SQRADDAC(a[10], a[52]); SQRADDAC(a[11], a[51]); SQRADDAC(a[12], a[50]); SQRADDAC(a[13], a[49]); SQRADDAC(a[14], a[48]); SQRADDAC(a[15], a[47]); SQRADDAC(a[16], a[46]); SQRADDAC(a[17], a[45]); SQRADDAC(a[18], a[44]); SQRADDAC(a[19], a[43]); SQRADDAC(a[20], a[42]); SQRADDAC(a[21], a[41]); SQRADDAC(a[22], a[40]); SQRADDAC(a[23], a[39]); SQRADDAC(a[24], a[38]); SQRADDAC(a[25], a[37]); SQRADDAC(a[26], a[36]); SQRADDAC(a[27], a[35]); SQRADDAC(a[28], a[34]); SQRADDAC(a[29], a[33]); SQRADDAC(a[30], a[32]); SQRADDDB; SQRADD(a[31], a[31]); - COMBA_STORE(b[62]); - - /* output 63 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[63]); SQRADDAC(a[1], a[62]); SQRADDAC(a[2], a[61]); SQRADDAC(a[3], a[60]); SQRADDAC(a[4], a[59]); SQRADDAC(a[5], a[58]); SQRADDAC(a[6], a[57]); SQRADDAC(a[7], a[56]); SQRADDAC(a[8], a[55]); SQRADDAC(a[9], a[54]); SQRADDAC(a[10], a[53]); SQRADDAC(a[11], a[52]); SQRADDAC(a[12], a[51]); SQRADDAC(a[13], a[50]); SQRADDAC(a[14], a[49]); SQRADDAC(a[15], a[48]); SQRADDAC(a[16], a[47]); SQRADDAC(a[17], a[46]); SQRADDAC(a[18], a[45]); SQRADDAC(a[19], a[44]); SQRADDAC(a[20], a[43]); SQRADDAC(a[21], a[42]); SQRADDAC(a[22], a[41]); SQRADDAC(a[23], a[40]); SQRADDAC(a[24], a[39]); SQRADDAC(a[25], a[38]); SQRADDAC(a[26], a[37]); SQRADDAC(a[27], a[36]); SQRADDAC(a[28], a[35]); SQRADDAC(a[29], a[34]); SQRADDAC(a[30], a[33]); SQRADDAC(a[31], a[32]); SQRADDDB; - COMBA_STORE(b[63]); - - /* output 64 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[63]); SQRADDAC(a[2], a[62]); SQRADDAC(a[3], a[61]); SQRADDAC(a[4], a[60]); SQRADDAC(a[5], a[59]); SQRADDAC(a[6], a[58]); SQRADDAC(a[7], a[57]); SQRADDAC(a[8], a[56]); SQRADDAC(a[9], a[55]); SQRADDAC(a[10], a[54]); SQRADDAC(a[11], a[53]); SQRADDAC(a[12], a[52]); SQRADDAC(a[13], a[51]); SQRADDAC(a[14], a[50]); SQRADDAC(a[15], a[49]); SQRADDAC(a[16], a[48]); SQRADDAC(a[17], a[47]); SQRADDAC(a[18], a[46]); SQRADDAC(a[19], a[45]); SQRADDAC(a[20], a[44]); SQRADDAC(a[21], a[43]); SQRADDAC(a[22], a[42]); SQRADDAC(a[23], a[41]); SQRADDAC(a[24], a[40]); SQRADDAC(a[25], a[39]); SQRADDAC(a[26], a[38]); SQRADDAC(a[27], a[37]); SQRADDAC(a[28], a[36]); SQRADDAC(a[29], a[35]); SQRADDAC(a[30], a[34]); SQRADDAC(a[31], a[33]); SQRADDDB; SQRADD(a[32], a[32]); - COMBA_STORE(b[64]); - - /* output 65 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[63]); SQRADDAC(a[3], a[62]); SQRADDAC(a[4], a[61]); SQRADDAC(a[5], a[60]); SQRADDAC(a[6], a[59]); SQRADDAC(a[7], a[58]); SQRADDAC(a[8], a[57]); SQRADDAC(a[9], a[56]); SQRADDAC(a[10], a[55]); SQRADDAC(a[11], a[54]); SQRADDAC(a[12], a[53]); SQRADDAC(a[13], a[52]); SQRADDAC(a[14], a[51]); SQRADDAC(a[15], a[50]); SQRADDAC(a[16], a[49]); SQRADDAC(a[17], a[48]); SQRADDAC(a[18], a[47]); SQRADDAC(a[19], a[46]); SQRADDAC(a[20], a[45]); SQRADDAC(a[21], a[44]); SQRADDAC(a[22], a[43]); SQRADDAC(a[23], a[42]); SQRADDAC(a[24], a[41]); SQRADDAC(a[25], a[40]); SQRADDAC(a[26], a[39]); SQRADDAC(a[27], a[38]); SQRADDAC(a[28], a[37]); SQRADDAC(a[29], a[36]); SQRADDAC(a[30], a[35]); SQRADDAC(a[31], a[34]); SQRADDAC(a[32], a[33]); SQRADDDB; - COMBA_STORE(b[65]); - - /* output 66 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[63]); SQRADDAC(a[4], a[62]); SQRADDAC(a[5], a[61]); SQRADDAC(a[6], a[60]); SQRADDAC(a[7], a[59]); SQRADDAC(a[8], a[58]); SQRADDAC(a[9], a[57]); SQRADDAC(a[10], a[56]); SQRADDAC(a[11], a[55]); SQRADDAC(a[12], a[54]); SQRADDAC(a[13], a[53]); SQRADDAC(a[14], a[52]); SQRADDAC(a[15], a[51]); SQRADDAC(a[16], a[50]); SQRADDAC(a[17], a[49]); SQRADDAC(a[18], a[48]); SQRADDAC(a[19], a[47]); SQRADDAC(a[20], a[46]); SQRADDAC(a[21], a[45]); SQRADDAC(a[22], a[44]); SQRADDAC(a[23], a[43]); SQRADDAC(a[24], a[42]); SQRADDAC(a[25], a[41]); SQRADDAC(a[26], a[40]); SQRADDAC(a[27], a[39]); SQRADDAC(a[28], a[38]); SQRADDAC(a[29], a[37]); SQRADDAC(a[30], a[36]); SQRADDAC(a[31], a[35]); SQRADDAC(a[32], a[34]); SQRADDDB; SQRADD(a[33], a[33]); - COMBA_STORE(b[66]); - - /* output 67 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[63]); SQRADDAC(a[5], a[62]); SQRADDAC(a[6], a[61]); SQRADDAC(a[7], a[60]); SQRADDAC(a[8], a[59]); SQRADDAC(a[9], a[58]); SQRADDAC(a[10], a[57]); SQRADDAC(a[11], a[56]); SQRADDAC(a[12], a[55]); SQRADDAC(a[13], a[54]); SQRADDAC(a[14], a[53]); SQRADDAC(a[15], a[52]); SQRADDAC(a[16], a[51]); SQRADDAC(a[17], a[50]); SQRADDAC(a[18], a[49]); SQRADDAC(a[19], a[48]); SQRADDAC(a[20], a[47]); SQRADDAC(a[21], a[46]); SQRADDAC(a[22], a[45]); SQRADDAC(a[23], a[44]); SQRADDAC(a[24], a[43]); SQRADDAC(a[25], a[42]); SQRADDAC(a[26], a[41]); SQRADDAC(a[27], a[40]); SQRADDAC(a[28], a[39]); SQRADDAC(a[29], a[38]); SQRADDAC(a[30], a[37]); SQRADDAC(a[31], a[36]); SQRADDAC(a[32], a[35]); SQRADDAC(a[33], a[34]); SQRADDDB; - COMBA_STORE(b[67]); - - /* output 68 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[63]); SQRADDAC(a[6], a[62]); SQRADDAC(a[7], a[61]); SQRADDAC(a[8], a[60]); SQRADDAC(a[9], a[59]); SQRADDAC(a[10], a[58]); SQRADDAC(a[11], a[57]); SQRADDAC(a[12], a[56]); SQRADDAC(a[13], a[55]); SQRADDAC(a[14], a[54]); SQRADDAC(a[15], a[53]); SQRADDAC(a[16], a[52]); SQRADDAC(a[17], a[51]); SQRADDAC(a[18], a[50]); SQRADDAC(a[19], a[49]); SQRADDAC(a[20], a[48]); SQRADDAC(a[21], a[47]); SQRADDAC(a[22], a[46]); SQRADDAC(a[23], a[45]); SQRADDAC(a[24], a[44]); SQRADDAC(a[25], a[43]); SQRADDAC(a[26], a[42]); SQRADDAC(a[27], a[41]); SQRADDAC(a[28], a[40]); SQRADDAC(a[29], a[39]); SQRADDAC(a[30], a[38]); SQRADDAC(a[31], a[37]); SQRADDAC(a[32], a[36]); SQRADDAC(a[33], a[35]); SQRADDDB; SQRADD(a[34], a[34]); - COMBA_STORE(b[68]); - - /* output 69 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[63]); SQRADDAC(a[7], a[62]); SQRADDAC(a[8], a[61]); SQRADDAC(a[9], a[60]); SQRADDAC(a[10], a[59]); SQRADDAC(a[11], a[58]); SQRADDAC(a[12], a[57]); SQRADDAC(a[13], a[56]); SQRADDAC(a[14], a[55]); SQRADDAC(a[15], a[54]); SQRADDAC(a[16], a[53]); SQRADDAC(a[17], a[52]); SQRADDAC(a[18], a[51]); SQRADDAC(a[19], a[50]); SQRADDAC(a[20], a[49]); SQRADDAC(a[21], a[48]); SQRADDAC(a[22], a[47]); SQRADDAC(a[23], a[46]); SQRADDAC(a[24], a[45]); SQRADDAC(a[25], a[44]); SQRADDAC(a[26], a[43]); SQRADDAC(a[27], a[42]); SQRADDAC(a[28], a[41]); SQRADDAC(a[29], a[40]); SQRADDAC(a[30], a[39]); SQRADDAC(a[31], a[38]); SQRADDAC(a[32], a[37]); SQRADDAC(a[33], a[36]); SQRADDAC(a[34], a[35]); SQRADDDB; - COMBA_STORE(b[69]); - - /* output 70 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[63]); SQRADDAC(a[8], a[62]); SQRADDAC(a[9], a[61]); SQRADDAC(a[10], a[60]); SQRADDAC(a[11], a[59]); SQRADDAC(a[12], a[58]); SQRADDAC(a[13], a[57]); SQRADDAC(a[14], a[56]); SQRADDAC(a[15], a[55]); SQRADDAC(a[16], a[54]); SQRADDAC(a[17], a[53]); SQRADDAC(a[18], a[52]); SQRADDAC(a[19], a[51]); SQRADDAC(a[20], a[50]); SQRADDAC(a[21], a[49]); SQRADDAC(a[22], a[48]); SQRADDAC(a[23], a[47]); SQRADDAC(a[24], a[46]); SQRADDAC(a[25], a[45]); SQRADDAC(a[26], a[44]); SQRADDAC(a[27], a[43]); SQRADDAC(a[28], a[42]); SQRADDAC(a[29], a[41]); SQRADDAC(a[30], a[40]); SQRADDAC(a[31], a[39]); SQRADDAC(a[32], a[38]); SQRADDAC(a[33], a[37]); SQRADDAC(a[34], a[36]); SQRADDDB; SQRADD(a[35], a[35]); - COMBA_STORE(b[70]); - - /* output 71 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[63]); SQRADDAC(a[9], a[62]); SQRADDAC(a[10], a[61]); SQRADDAC(a[11], a[60]); SQRADDAC(a[12], a[59]); SQRADDAC(a[13], a[58]); SQRADDAC(a[14], a[57]); SQRADDAC(a[15], a[56]); SQRADDAC(a[16], a[55]); SQRADDAC(a[17], a[54]); SQRADDAC(a[18], a[53]); SQRADDAC(a[19], a[52]); SQRADDAC(a[20], a[51]); SQRADDAC(a[21], a[50]); SQRADDAC(a[22], a[49]); SQRADDAC(a[23], a[48]); SQRADDAC(a[24], a[47]); SQRADDAC(a[25], a[46]); SQRADDAC(a[26], a[45]); SQRADDAC(a[27], a[44]); SQRADDAC(a[28], a[43]); SQRADDAC(a[29], a[42]); SQRADDAC(a[30], a[41]); SQRADDAC(a[31], a[40]); SQRADDAC(a[32], a[39]); SQRADDAC(a[33], a[38]); SQRADDAC(a[34], a[37]); SQRADDAC(a[35], a[36]); SQRADDDB; - COMBA_STORE(b[71]); - - /* output 72 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[63]); SQRADDAC(a[10], a[62]); SQRADDAC(a[11], a[61]); SQRADDAC(a[12], a[60]); SQRADDAC(a[13], a[59]); SQRADDAC(a[14], a[58]); SQRADDAC(a[15], a[57]); SQRADDAC(a[16], a[56]); SQRADDAC(a[17], a[55]); SQRADDAC(a[18], a[54]); SQRADDAC(a[19], a[53]); SQRADDAC(a[20], a[52]); SQRADDAC(a[21], a[51]); SQRADDAC(a[22], a[50]); SQRADDAC(a[23], a[49]); SQRADDAC(a[24], a[48]); SQRADDAC(a[25], a[47]); SQRADDAC(a[26], a[46]); SQRADDAC(a[27], a[45]); SQRADDAC(a[28], a[44]); SQRADDAC(a[29], a[43]); SQRADDAC(a[30], a[42]); SQRADDAC(a[31], a[41]); SQRADDAC(a[32], a[40]); SQRADDAC(a[33], a[39]); SQRADDAC(a[34], a[38]); SQRADDAC(a[35], a[37]); SQRADDDB; SQRADD(a[36], a[36]); - COMBA_STORE(b[72]); - - /* output 73 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[63]); SQRADDAC(a[11], a[62]); SQRADDAC(a[12], a[61]); SQRADDAC(a[13], a[60]); SQRADDAC(a[14], a[59]); SQRADDAC(a[15], a[58]); SQRADDAC(a[16], a[57]); SQRADDAC(a[17], a[56]); SQRADDAC(a[18], a[55]); SQRADDAC(a[19], a[54]); SQRADDAC(a[20], a[53]); SQRADDAC(a[21], a[52]); SQRADDAC(a[22], a[51]); SQRADDAC(a[23], a[50]); SQRADDAC(a[24], a[49]); SQRADDAC(a[25], a[48]); SQRADDAC(a[26], a[47]); SQRADDAC(a[27], a[46]); SQRADDAC(a[28], a[45]); SQRADDAC(a[29], a[44]); SQRADDAC(a[30], a[43]); SQRADDAC(a[31], a[42]); SQRADDAC(a[32], a[41]); SQRADDAC(a[33], a[40]); SQRADDAC(a[34], a[39]); SQRADDAC(a[35], a[38]); SQRADDAC(a[36], a[37]); SQRADDDB; - COMBA_STORE(b[73]); - - /* output 74 */ - CARRY_FORWARD; - SQRADDSC(a[11], a[63]); SQRADDAC(a[12], a[62]); SQRADDAC(a[13], a[61]); SQRADDAC(a[14], a[60]); SQRADDAC(a[15], a[59]); SQRADDAC(a[16], a[58]); SQRADDAC(a[17], a[57]); SQRADDAC(a[18], a[56]); SQRADDAC(a[19], a[55]); SQRADDAC(a[20], a[54]); SQRADDAC(a[21], a[53]); SQRADDAC(a[22], a[52]); SQRADDAC(a[23], a[51]); SQRADDAC(a[24], a[50]); SQRADDAC(a[25], a[49]); SQRADDAC(a[26], a[48]); SQRADDAC(a[27], a[47]); SQRADDAC(a[28], a[46]); SQRADDAC(a[29], a[45]); SQRADDAC(a[30], a[44]); SQRADDAC(a[31], a[43]); SQRADDAC(a[32], a[42]); SQRADDAC(a[33], a[41]); SQRADDAC(a[34], a[40]); SQRADDAC(a[35], a[39]); SQRADDAC(a[36], a[38]); SQRADDDB; SQRADD(a[37], a[37]); - COMBA_STORE(b[74]); - - /* output 75 */ - CARRY_FORWARD; - SQRADDSC(a[12], a[63]); SQRADDAC(a[13], a[62]); SQRADDAC(a[14], a[61]); SQRADDAC(a[15], a[60]); SQRADDAC(a[16], a[59]); SQRADDAC(a[17], a[58]); SQRADDAC(a[18], a[57]); SQRADDAC(a[19], a[56]); SQRADDAC(a[20], a[55]); SQRADDAC(a[21], a[54]); SQRADDAC(a[22], a[53]); SQRADDAC(a[23], a[52]); SQRADDAC(a[24], a[51]); SQRADDAC(a[25], a[50]); SQRADDAC(a[26], a[49]); SQRADDAC(a[27], a[48]); SQRADDAC(a[28], a[47]); SQRADDAC(a[29], a[46]); SQRADDAC(a[30], a[45]); SQRADDAC(a[31], a[44]); SQRADDAC(a[32], a[43]); SQRADDAC(a[33], a[42]); SQRADDAC(a[34], a[41]); SQRADDAC(a[35], a[40]); SQRADDAC(a[36], a[39]); SQRADDAC(a[37], a[38]); SQRADDDB; - COMBA_STORE(b[75]); - - /* output 76 */ - CARRY_FORWARD; - SQRADDSC(a[13], a[63]); SQRADDAC(a[14], a[62]); SQRADDAC(a[15], a[61]); SQRADDAC(a[16], a[60]); SQRADDAC(a[17], a[59]); SQRADDAC(a[18], a[58]); SQRADDAC(a[19], a[57]); SQRADDAC(a[20], a[56]); SQRADDAC(a[21], a[55]); SQRADDAC(a[22], a[54]); SQRADDAC(a[23], a[53]); SQRADDAC(a[24], a[52]); SQRADDAC(a[25], a[51]); SQRADDAC(a[26], a[50]); SQRADDAC(a[27], a[49]); SQRADDAC(a[28], a[48]); SQRADDAC(a[29], a[47]); SQRADDAC(a[30], a[46]); SQRADDAC(a[31], a[45]); SQRADDAC(a[32], a[44]); SQRADDAC(a[33], a[43]); SQRADDAC(a[34], a[42]); SQRADDAC(a[35], a[41]); SQRADDAC(a[36], a[40]); SQRADDAC(a[37], a[39]); SQRADDDB; SQRADD(a[38], a[38]); - COMBA_STORE(b[76]); - - /* output 77 */ - CARRY_FORWARD; - SQRADDSC(a[14], a[63]); SQRADDAC(a[15], a[62]); SQRADDAC(a[16], a[61]); SQRADDAC(a[17], a[60]); SQRADDAC(a[18], a[59]); SQRADDAC(a[19], a[58]); SQRADDAC(a[20], a[57]); SQRADDAC(a[21], a[56]); SQRADDAC(a[22], a[55]); SQRADDAC(a[23], a[54]); SQRADDAC(a[24], a[53]); SQRADDAC(a[25], a[52]); SQRADDAC(a[26], a[51]); SQRADDAC(a[27], a[50]); SQRADDAC(a[28], a[49]); SQRADDAC(a[29], a[48]); SQRADDAC(a[30], a[47]); SQRADDAC(a[31], a[46]); SQRADDAC(a[32], a[45]); SQRADDAC(a[33], a[44]); SQRADDAC(a[34], a[43]); SQRADDAC(a[35], a[42]); SQRADDAC(a[36], a[41]); SQRADDAC(a[37], a[40]); SQRADDAC(a[38], a[39]); SQRADDDB; - COMBA_STORE(b[77]); - - /* output 78 */ - CARRY_FORWARD; - SQRADDSC(a[15], a[63]); SQRADDAC(a[16], a[62]); SQRADDAC(a[17], a[61]); SQRADDAC(a[18], a[60]); SQRADDAC(a[19], a[59]); SQRADDAC(a[20], a[58]); SQRADDAC(a[21], a[57]); SQRADDAC(a[22], a[56]); SQRADDAC(a[23], a[55]); SQRADDAC(a[24], a[54]); SQRADDAC(a[25], a[53]); SQRADDAC(a[26], a[52]); SQRADDAC(a[27], a[51]); SQRADDAC(a[28], a[50]); SQRADDAC(a[29], a[49]); SQRADDAC(a[30], a[48]); SQRADDAC(a[31], a[47]); SQRADDAC(a[32], a[46]); SQRADDAC(a[33], a[45]); SQRADDAC(a[34], a[44]); SQRADDAC(a[35], a[43]); SQRADDAC(a[36], a[42]); SQRADDAC(a[37], a[41]); SQRADDAC(a[38], a[40]); SQRADDDB; SQRADD(a[39], a[39]); - COMBA_STORE(b[78]); - - /* output 79 */ - CARRY_FORWARD; - SQRADDSC(a[16], a[63]); SQRADDAC(a[17], a[62]); SQRADDAC(a[18], a[61]); SQRADDAC(a[19], a[60]); SQRADDAC(a[20], a[59]); SQRADDAC(a[21], a[58]); SQRADDAC(a[22], a[57]); SQRADDAC(a[23], a[56]); SQRADDAC(a[24], a[55]); SQRADDAC(a[25], a[54]); SQRADDAC(a[26], a[53]); SQRADDAC(a[27], a[52]); SQRADDAC(a[28], a[51]); SQRADDAC(a[29], a[50]); SQRADDAC(a[30], a[49]); SQRADDAC(a[31], a[48]); SQRADDAC(a[32], a[47]); SQRADDAC(a[33], a[46]); SQRADDAC(a[34], a[45]); SQRADDAC(a[35], a[44]); SQRADDAC(a[36], a[43]); SQRADDAC(a[37], a[42]); SQRADDAC(a[38], a[41]); SQRADDAC(a[39], a[40]); SQRADDDB; - COMBA_STORE(b[79]); - - /* output 80 */ - CARRY_FORWARD; - SQRADDSC(a[17], a[63]); SQRADDAC(a[18], a[62]); SQRADDAC(a[19], a[61]); SQRADDAC(a[20], a[60]); SQRADDAC(a[21], a[59]); SQRADDAC(a[22], a[58]); SQRADDAC(a[23], a[57]); SQRADDAC(a[24], a[56]); SQRADDAC(a[25], a[55]); SQRADDAC(a[26], a[54]); SQRADDAC(a[27], a[53]); SQRADDAC(a[28], a[52]); SQRADDAC(a[29], a[51]); SQRADDAC(a[30], a[50]); SQRADDAC(a[31], a[49]); SQRADDAC(a[32], a[48]); SQRADDAC(a[33], a[47]); SQRADDAC(a[34], a[46]); SQRADDAC(a[35], a[45]); SQRADDAC(a[36], a[44]); SQRADDAC(a[37], a[43]); SQRADDAC(a[38], a[42]); SQRADDAC(a[39], a[41]); SQRADDDB; SQRADD(a[40], a[40]); - COMBA_STORE(b[80]); - - /* output 81 */ - CARRY_FORWARD; - SQRADDSC(a[18], a[63]); SQRADDAC(a[19], a[62]); SQRADDAC(a[20], a[61]); SQRADDAC(a[21], a[60]); SQRADDAC(a[22], a[59]); SQRADDAC(a[23], a[58]); SQRADDAC(a[24], a[57]); SQRADDAC(a[25], a[56]); SQRADDAC(a[26], a[55]); SQRADDAC(a[27], a[54]); SQRADDAC(a[28], a[53]); SQRADDAC(a[29], a[52]); SQRADDAC(a[30], a[51]); SQRADDAC(a[31], a[50]); SQRADDAC(a[32], a[49]); SQRADDAC(a[33], a[48]); SQRADDAC(a[34], a[47]); SQRADDAC(a[35], a[46]); SQRADDAC(a[36], a[45]); SQRADDAC(a[37], a[44]); SQRADDAC(a[38], a[43]); SQRADDAC(a[39], a[42]); SQRADDAC(a[40], a[41]); SQRADDDB; - COMBA_STORE(b[81]); - - /* output 82 */ - CARRY_FORWARD; - SQRADDSC(a[19], a[63]); SQRADDAC(a[20], a[62]); SQRADDAC(a[21], a[61]); SQRADDAC(a[22], a[60]); SQRADDAC(a[23], a[59]); SQRADDAC(a[24], a[58]); SQRADDAC(a[25], a[57]); SQRADDAC(a[26], a[56]); SQRADDAC(a[27], a[55]); SQRADDAC(a[28], a[54]); SQRADDAC(a[29], a[53]); SQRADDAC(a[30], a[52]); SQRADDAC(a[31], a[51]); SQRADDAC(a[32], a[50]); SQRADDAC(a[33], a[49]); SQRADDAC(a[34], a[48]); SQRADDAC(a[35], a[47]); SQRADDAC(a[36], a[46]); SQRADDAC(a[37], a[45]); SQRADDAC(a[38], a[44]); SQRADDAC(a[39], a[43]); SQRADDAC(a[40], a[42]); SQRADDDB; SQRADD(a[41], a[41]); - COMBA_STORE(b[82]); - - /* output 83 */ - CARRY_FORWARD; - SQRADDSC(a[20], a[63]); SQRADDAC(a[21], a[62]); SQRADDAC(a[22], a[61]); SQRADDAC(a[23], a[60]); SQRADDAC(a[24], a[59]); SQRADDAC(a[25], a[58]); SQRADDAC(a[26], a[57]); SQRADDAC(a[27], a[56]); SQRADDAC(a[28], a[55]); SQRADDAC(a[29], a[54]); SQRADDAC(a[30], a[53]); SQRADDAC(a[31], a[52]); SQRADDAC(a[32], a[51]); SQRADDAC(a[33], a[50]); SQRADDAC(a[34], a[49]); SQRADDAC(a[35], a[48]); SQRADDAC(a[36], a[47]); SQRADDAC(a[37], a[46]); SQRADDAC(a[38], a[45]); SQRADDAC(a[39], a[44]); SQRADDAC(a[40], a[43]); SQRADDAC(a[41], a[42]); SQRADDDB; - COMBA_STORE(b[83]); - - /* output 84 */ - CARRY_FORWARD; - SQRADDSC(a[21], a[63]); SQRADDAC(a[22], a[62]); SQRADDAC(a[23], a[61]); SQRADDAC(a[24], a[60]); SQRADDAC(a[25], a[59]); SQRADDAC(a[26], a[58]); SQRADDAC(a[27], a[57]); SQRADDAC(a[28], a[56]); SQRADDAC(a[29], a[55]); SQRADDAC(a[30], a[54]); SQRADDAC(a[31], a[53]); SQRADDAC(a[32], a[52]); SQRADDAC(a[33], a[51]); SQRADDAC(a[34], a[50]); SQRADDAC(a[35], a[49]); SQRADDAC(a[36], a[48]); SQRADDAC(a[37], a[47]); SQRADDAC(a[38], a[46]); SQRADDAC(a[39], a[45]); SQRADDAC(a[40], a[44]); SQRADDAC(a[41], a[43]); SQRADDDB; SQRADD(a[42], a[42]); - COMBA_STORE(b[84]); - - /* output 85 */ - CARRY_FORWARD; - SQRADDSC(a[22], a[63]); SQRADDAC(a[23], a[62]); SQRADDAC(a[24], a[61]); SQRADDAC(a[25], a[60]); SQRADDAC(a[26], a[59]); SQRADDAC(a[27], a[58]); SQRADDAC(a[28], a[57]); SQRADDAC(a[29], a[56]); SQRADDAC(a[30], a[55]); SQRADDAC(a[31], a[54]); SQRADDAC(a[32], a[53]); SQRADDAC(a[33], a[52]); SQRADDAC(a[34], a[51]); SQRADDAC(a[35], a[50]); SQRADDAC(a[36], a[49]); SQRADDAC(a[37], a[48]); SQRADDAC(a[38], a[47]); SQRADDAC(a[39], a[46]); SQRADDAC(a[40], a[45]); SQRADDAC(a[41], a[44]); SQRADDAC(a[42], a[43]); SQRADDDB; - COMBA_STORE(b[85]); - - /* output 86 */ - CARRY_FORWARD; - SQRADDSC(a[23], a[63]); SQRADDAC(a[24], a[62]); SQRADDAC(a[25], a[61]); SQRADDAC(a[26], a[60]); SQRADDAC(a[27], a[59]); SQRADDAC(a[28], a[58]); SQRADDAC(a[29], a[57]); SQRADDAC(a[30], a[56]); SQRADDAC(a[31], a[55]); SQRADDAC(a[32], a[54]); SQRADDAC(a[33], a[53]); SQRADDAC(a[34], a[52]); SQRADDAC(a[35], a[51]); SQRADDAC(a[36], a[50]); SQRADDAC(a[37], a[49]); SQRADDAC(a[38], a[48]); SQRADDAC(a[39], a[47]); SQRADDAC(a[40], a[46]); SQRADDAC(a[41], a[45]); SQRADDAC(a[42], a[44]); SQRADDDB; SQRADD(a[43], a[43]); - COMBA_STORE(b[86]); - - /* output 87 */ - CARRY_FORWARD; - SQRADDSC(a[24], a[63]); SQRADDAC(a[25], a[62]); SQRADDAC(a[26], a[61]); SQRADDAC(a[27], a[60]); SQRADDAC(a[28], a[59]); SQRADDAC(a[29], a[58]); SQRADDAC(a[30], a[57]); SQRADDAC(a[31], a[56]); SQRADDAC(a[32], a[55]); SQRADDAC(a[33], a[54]); SQRADDAC(a[34], a[53]); SQRADDAC(a[35], a[52]); SQRADDAC(a[36], a[51]); SQRADDAC(a[37], a[50]); SQRADDAC(a[38], a[49]); SQRADDAC(a[39], a[48]); SQRADDAC(a[40], a[47]); SQRADDAC(a[41], a[46]); SQRADDAC(a[42], a[45]); SQRADDAC(a[43], a[44]); SQRADDDB; - COMBA_STORE(b[87]); - - /* output 88 */ - CARRY_FORWARD; - SQRADDSC(a[25], a[63]); SQRADDAC(a[26], a[62]); SQRADDAC(a[27], a[61]); SQRADDAC(a[28], a[60]); SQRADDAC(a[29], a[59]); SQRADDAC(a[30], a[58]); SQRADDAC(a[31], a[57]); SQRADDAC(a[32], a[56]); SQRADDAC(a[33], a[55]); SQRADDAC(a[34], a[54]); SQRADDAC(a[35], a[53]); SQRADDAC(a[36], a[52]); SQRADDAC(a[37], a[51]); SQRADDAC(a[38], a[50]); SQRADDAC(a[39], a[49]); SQRADDAC(a[40], a[48]); SQRADDAC(a[41], a[47]); SQRADDAC(a[42], a[46]); SQRADDAC(a[43], a[45]); SQRADDDB; SQRADD(a[44], a[44]); - COMBA_STORE(b[88]); - - /* output 89 */ - CARRY_FORWARD; - SQRADDSC(a[26], a[63]); SQRADDAC(a[27], a[62]); SQRADDAC(a[28], a[61]); SQRADDAC(a[29], a[60]); SQRADDAC(a[30], a[59]); SQRADDAC(a[31], a[58]); SQRADDAC(a[32], a[57]); SQRADDAC(a[33], a[56]); SQRADDAC(a[34], a[55]); SQRADDAC(a[35], a[54]); SQRADDAC(a[36], a[53]); SQRADDAC(a[37], a[52]); SQRADDAC(a[38], a[51]); SQRADDAC(a[39], a[50]); SQRADDAC(a[40], a[49]); SQRADDAC(a[41], a[48]); SQRADDAC(a[42], a[47]); SQRADDAC(a[43], a[46]); SQRADDAC(a[44], a[45]); SQRADDDB; - COMBA_STORE(b[89]); - - /* output 90 */ - CARRY_FORWARD; - SQRADDSC(a[27], a[63]); SQRADDAC(a[28], a[62]); SQRADDAC(a[29], a[61]); SQRADDAC(a[30], a[60]); SQRADDAC(a[31], a[59]); SQRADDAC(a[32], a[58]); SQRADDAC(a[33], a[57]); SQRADDAC(a[34], a[56]); SQRADDAC(a[35], a[55]); SQRADDAC(a[36], a[54]); SQRADDAC(a[37], a[53]); SQRADDAC(a[38], a[52]); SQRADDAC(a[39], a[51]); SQRADDAC(a[40], a[50]); SQRADDAC(a[41], a[49]); SQRADDAC(a[42], a[48]); SQRADDAC(a[43], a[47]); SQRADDAC(a[44], a[46]); SQRADDDB; SQRADD(a[45], a[45]); - COMBA_STORE(b[90]); - - /* output 91 */ - CARRY_FORWARD; - SQRADDSC(a[28], a[63]); SQRADDAC(a[29], a[62]); SQRADDAC(a[30], a[61]); SQRADDAC(a[31], a[60]); SQRADDAC(a[32], a[59]); SQRADDAC(a[33], a[58]); SQRADDAC(a[34], a[57]); SQRADDAC(a[35], a[56]); SQRADDAC(a[36], a[55]); SQRADDAC(a[37], a[54]); SQRADDAC(a[38], a[53]); SQRADDAC(a[39], a[52]); SQRADDAC(a[40], a[51]); SQRADDAC(a[41], a[50]); SQRADDAC(a[42], a[49]); SQRADDAC(a[43], a[48]); SQRADDAC(a[44], a[47]); SQRADDAC(a[45], a[46]); SQRADDDB; - COMBA_STORE(b[91]); - - /* output 92 */ - CARRY_FORWARD; - SQRADDSC(a[29], a[63]); SQRADDAC(a[30], a[62]); SQRADDAC(a[31], a[61]); SQRADDAC(a[32], a[60]); SQRADDAC(a[33], a[59]); SQRADDAC(a[34], a[58]); SQRADDAC(a[35], a[57]); SQRADDAC(a[36], a[56]); SQRADDAC(a[37], a[55]); SQRADDAC(a[38], a[54]); SQRADDAC(a[39], a[53]); SQRADDAC(a[40], a[52]); SQRADDAC(a[41], a[51]); SQRADDAC(a[42], a[50]); SQRADDAC(a[43], a[49]); SQRADDAC(a[44], a[48]); SQRADDAC(a[45], a[47]); SQRADDDB; SQRADD(a[46], a[46]); - COMBA_STORE(b[92]); - - /* output 93 */ - CARRY_FORWARD; - SQRADDSC(a[30], a[63]); SQRADDAC(a[31], a[62]); SQRADDAC(a[32], a[61]); SQRADDAC(a[33], a[60]); SQRADDAC(a[34], a[59]); SQRADDAC(a[35], a[58]); SQRADDAC(a[36], a[57]); SQRADDAC(a[37], a[56]); SQRADDAC(a[38], a[55]); SQRADDAC(a[39], a[54]); SQRADDAC(a[40], a[53]); SQRADDAC(a[41], a[52]); SQRADDAC(a[42], a[51]); SQRADDAC(a[43], a[50]); SQRADDAC(a[44], a[49]); SQRADDAC(a[45], a[48]); SQRADDAC(a[46], a[47]); SQRADDDB; - COMBA_STORE(b[93]); - - /* output 94 */ - CARRY_FORWARD; - SQRADDSC(a[31], a[63]); SQRADDAC(a[32], a[62]); SQRADDAC(a[33], a[61]); SQRADDAC(a[34], a[60]); SQRADDAC(a[35], a[59]); SQRADDAC(a[36], a[58]); SQRADDAC(a[37], a[57]); SQRADDAC(a[38], a[56]); SQRADDAC(a[39], a[55]); SQRADDAC(a[40], a[54]); SQRADDAC(a[41], a[53]); SQRADDAC(a[42], a[52]); SQRADDAC(a[43], a[51]); SQRADDAC(a[44], a[50]); SQRADDAC(a[45], a[49]); SQRADDAC(a[46], a[48]); SQRADDDB; SQRADD(a[47], a[47]); - COMBA_STORE(b[94]); - - /* output 95 */ - CARRY_FORWARD; - SQRADDSC(a[32], a[63]); SQRADDAC(a[33], a[62]); SQRADDAC(a[34], a[61]); SQRADDAC(a[35], a[60]); SQRADDAC(a[36], a[59]); SQRADDAC(a[37], a[58]); SQRADDAC(a[38], a[57]); SQRADDAC(a[39], a[56]); SQRADDAC(a[40], a[55]); SQRADDAC(a[41], a[54]); SQRADDAC(a[42], a[53]); SQRADDAC(a[43], a[52]); SQRADDAC(a[44], a[51]); SQRADDAC(a[45], a[50]); SQRADDAC(a[46], a[49]); SQRADDAC(a[47], a[48]); SQRADDDB; - COMBA_STORE(b[95]); - - /* output 96 */ - CARRY_FORWARD; - SQRADDSC(a[33], a[63]); SQRADDAC(a[34], a[62]); SQRADDAC(a[35], a[61]); SQRADDAC(a[36], a[60]); SQRADDAC(a[37], a[59]); SQRADDAC(a[38], a[58]); SQRADDAC(a[39], a[57]); SQRADDAC(a[40], a[56]); SQRADDAC(a[41], a[55]); SQRADDAC(a[42], a[54]); SQRADDAC(a[43], a[53]); SQRADDAC(a[44], a[52]); SQRADDAC(a[45], a[51]); SQRADDAC(a[46], a[50]); SQRADDAC(a[47], a[49]); SQRADDDB; SQRADD(a[48], a[48]); - COMBA_STORE(b[96]); - - /* output 97 */ - CARRY_FORWARD; - SQRADDSC(a[34], a[63]); SQRADDAC(a[35], a[62]); SQRADDAC(a[36], a[61]); SQRADDAC(a[37], a[60]); SQRADDAC(a[38], a[59]); SQRADDAC(a[39], a[58]); SQRADDAC(a[40], a[57]); SQRADDAC(a[41], a[56]); SQRADDAC(a[42], a[55]); SQRADDAC(a[43], a[54]); SQRADDAC(a[44], a[53]); SQRADDAC(a[45], a[52]); SQRADDAC(a[46], a[51]); SQRADDAC(a[47], a[50]); SQRADDAC(a[48], a[49]); SQRADDDB; - COMBA_STORE(b[97]); - - /* output 98 */ - CARRY_FORWARD; - SQRADDSC(a[35], a[63]); SQRADDAC(a[36], a[62]); SQRADDAC(a[37], a[61]); SQRADDAC(a[38], a[60]); SQRADDAC(a[39], a[59]); SQRADDAC(a[40], a[58]); SQRADDAC(a[41], a[57]); SQRADDAC(a[42], a[56]); SQRADDAC(a[43], a[55]); SQRADDAC(a[44], a[54]); SQRADDAC(a[45], a[53]); SQRADDAC(a[46], a[52]); SQRADDAC(a[47], a[51]); SQRADDAC(a[48], a[50]); SQRADDDB; SQRADD(a[49], a[49]); - COMBA_STORE(b[98]); - - /* output 99 */ - CARRY_FORWARD; - SQRADDSC(a[36], a[63]); SQRADDAC(a[37], a[62]); SQRADDAC(a[38], a[61]); SQRADDAC(a[39], a[60]); SQRADDAC(a[40], a[59]); SQRADDAC(a[41], a[58]); SQRADDAC(a[42], a[57]); SQRADDAC(a[43], a[56]); SQRADDAC(a[44], a[55]); SQRADDAC(a[45], a[54]); SQRADDAC(a[46], a[53]); SQRADDAC(a[47], a[52]); SQRADDAC(a[48], a[51]); SQRADDAC(a[49], a[50]); SQRADDDB; - COMBA_STORE(b[99]); - - /* output 100 */ - CARRY_FORWARD; - SQRADDSC(a[37], a[63]); SQRADDAC(a[38], a[62]); SQRADDAC(a[39], a[61]); SQRADDAC(a[40], a[60]); SQRADDAC(a[41], a[59]); SQRADDAC(a[42], a[58]); SQRADDAC(a[43], a[57]); SQRADDAC(a[44], a[56]); SQRADDAC(a[45], a[55]); SQRADDAC(a[46], a[54]); SQRADDAC(a[47], a[53]); SQRADDAC(a[48], a[52]); SQRADDAC(a[49], a[51]); SQRADDDB; SQRADD(a[50], a[50]); - COMBA_STORE(b[100]); - - /* output 101 */ - CARRY_FORWARD; - SQRADDSC(a[38], a[63]); SQRADDAC(a[39], a[62]); SQRADDAC(a[40], a[61]); SQRADDAC(a[41], a[60]); SQRADDAC(a[42], a[59]); SQRADDAC(a[43], a[58]); SQRADDAC(a[44], a[57]); SQRADDAC(a[45], a[56]); SQRADDAC(a[46], a[55]); SQRADDAC(a[47], a[54]); SQRADDAC(a[48], a[53]); SQRADDAC(a[49], a[52]); SQRADDAC(a[50], a[51]); SQRADDDB; - COMBA_STORE(b[101]); - - /* output 102 */ - CARRY_FORWARD; - SQRADDSC(a[39], a[63]); SQRADDAC(a[40], a[62]); SQRADDAC(a[41], a[61]); SQRADDAC(a[42], a[60]); SQRADDAC(a[43], a[59]); SQRADDAC(a[44], a[58]); SQRADDAC(a[45], a[57]); SQRADDAC(a[46], a[56]); SQRADDAC(a[47], a[55]); SQRADDAC(a[48], a[54]); SQRADDAC(a[49], a[53]); SQRADDAC(a[50], a[52]); SQRADDDB; SQRADD(a[51], a[51]); - COMBA_STORE(b[102]); - - /* output 103 */ - CARRY_FORWARD; - SQRADDSC(a[40], a[63]); SQRADDAC(a[41], a[62]); SQRADDAC(a[42], a[61]); SQRADDAC(a[43], a[60]); SQRADDAC(a[44], a[59]); SQRADDAC(a[45], a[58]); SQRADDAC(a[46], a[57]); SQRADDAC(a[47], a[56]); SQRADDAC(a[48], a[55]); SQRADDAC(a[49], a[54]); SQRADDAC(a[50], a[53]); SQRADDAC(a[51], a[52]); SQRADDDB; - COMBA_STORE(b[103]); - - /* output 104 */ - CARRY_FORWARD; - SQRADDSC(a[41], a[63]); SQRADDAC(a[42], a[62]); SQRADDAC(a[43], a[61]); SQRADDAC(a[44], a[60]); SQRADDAC(a[45], a[59]); SQRADDAC(a[46], a[58]); SQRADDAC(a[47], a[57]); SQRADDAC(a[48], a[56]); SQRADDAC(a[49], a[55]); SQRADDAC(a[50], a[54]); SQRADDAC(a[51], a[53]); SQRADDDB; SQRADD(a[52], a[52]); - COMBA_STORE(b[104]); - - /* output 105 */ - CARRY_FORWARD; - SQRADDSC(a[42], a[63]); SQRADDAC(a[43], a[62]); SQRADDAC(a[44], a[61]); SQRADDAC(a[45], a[60]); SQRADDAC(a[46], a[59]); SQRADDAC(a[47], a[58]); SQRADDAC(a[48], a[57]); SQRADDAC(a[49], a[56]); SQRADDAC(a[50], a[55]); SQRADDAC(a[51], a[54]); SQRADDAC(a[52], a[53]); SQRADDDB; - COMBA_STORE(b[105]); - - /* output 106 */ - CARRY_FORWARD; - SQRADDSC(a[43], a[63]); SQRADDAC(a[44], a[62]); SQRADDAC(a[45], a[61]); SQRADDAC(a[46], a[60]); SQRADDAC(a[47], a[59]); SQRADDAC(a[48], a[58]); SQRADDAC(a[49], a[57]); SQRADDAC(a[50], a[56]); SQRADDAC(a[51], a[55]); SQRADDAC(a[52], a[54]); SQRADDDB; SQRADD(a[53], a[53]); - COMBA_STORE(b[106]); - - /* output 107 */ - CARRY_FORWARD; - SQRADDSC(a[44], a[63]); SQRADDAC(a[45], a[62]); SQRADDAC(a[46], a[61]); SQRADDAC(a[47], a[60]); SQRADDAC(a[48], a[59]); SQRADDAC(a[49], a[58]); SQRADDAC(a[50], a[57]); SQRADDAC(a[51], a[56]); SQRADDAC(a[52], a[55]); SQRADDAC(a[53], a[54]); SQRADDDB; - COMBA_STORE(b[107]); - - /* output 108 */ - CARRY_FORWARD; - SQRADDSC(a[45], a[63]); SQRADDAC(a[46], a[62]); SQRADDAC(a[47], a[61]); SQRADDAC(a[48], a[60]); SQRADDAC(a[49], a[59]); SQRADDAC(a[50], a[58]); SQRADDAC(a[51], a[57]); SQRADDAC(a[52], a[56]); SQRADDAC(a[53], a[55]); SQRADDDB; SQRADD(a[54], a[54]); - COMBA_STORE(b[108]); - - /* output 109 */ - CARRY_FORWARD; - SQRADDSC(a[46], a[63]); SQRADDAC(a[47], a[62]); SQRADDAC(a[48], a[61]); SQRADDAC(a[49], a[60]); SQRADDAC(a[50], a[59]); SQRADDAC(a[51], a[58]); SQRADDAC(a[52], a[57]); SQRADDAC(a[53], a[56]); SQRADDAC(a[54], a[55]); SQRADDDB; - COMBA_STORE(b[109]); - - /* output 110 */ - CARRY_FORWARD; - SQRADDSC(a[47], a[63]); SQRADDAC(a[48], a[62]); SQRADDAC(a[49], a[61]); SQRADDAC(a[50], a[60]); SQRADDAC(a[51], a[59]); SQRADDAC(a[52], a[58]); SQRADDAC(a[53], a[57]); SQRADDAC(a[54], a[56]); SQRADDDB; SQRADD(a[55], a[55]); - COMBA_STORE(b[110]); - - /* output 111 */ - CARRY_FORWARD; - SQRADDSC(a[48], a[63]); SQRADDAC(a[49], a[62]); SQRADDAC(a[50], a[61]); SQRADDAC(a[51], a[60]); SQRADDAC(a[52], a[59]); SQRADDAC(a[53], a[58]); SQRADDAC(a[54], a[57]); SQRADDAC(a[55], a[56]); SQRADDDB; - COMBA_STORE(b[111]); - - /* output 112 */ - CARRY_FORWARD; - SQRADDSC(a[49], a[63]); SQRADDAC(a[50], a[62]); SQRADDAC(a[51], a[61]); SQRADDAC(a[52], a[60]); SQRADDAC(a[53], a[59]); SQRADDAC(a[54], a[58]); SQRADDAC(a[55], a[57]); SQRADDDB; SQRADD(a[56], a[56]); - COMBA_STORE(b[112]); - - /* output 113 */ - CARRY_FORWARD; - SQRADDSC(a[50], a[63]); SQRADDAC(a[51], a[62]); SQRADDAC(a[52], a[61]); SQRADDAC(a[53], a[60]); SQRADDAC(a[54], a[59]); SQRADDAC(a[55], a[58]); SQRADDAC(a[56], a[57]); SQRADDDB; - COMBA_STORE(b[113]); - - /* output 114 */ - CARRY_FORWARD; - SQRADDSC(a[51], a[63]); SQRADDAC(a[52], a[62]); SQRADDAC(a[53], a[61]); SQRADDAC(a[54], a[60]); SQRADDAC(a[55], a[59]); SQRADDAC(a[56], a[58]); SQRADDDB; SQRADD(a[57], a[57]); - COMBA_STORE(b[114]); - - /* output 115 */ - CARRY_FORWARD; - SQRADDSC(a[52], a[63]); SQRADDAC(a[53], a[62]); SQRADDAC(a[54], a[61]); SQRADDAC(a[55], a[60]); SQRADDAC(a[56], a[59]); SQRADDAC(a[57], a[58]); SQRADDDB; - COMBA_STORE(b[115]); - - /* output 116 */ - CARRY_FORWARD; - SQRADDSC(a[53], a[63]); SQRADDAC(a[54], a[62]); SQRADDAC(a[55], a[61]); SQRADDAC(a[56], a[60]); SQRADDAC(a[57], a[59]); SQRADDDB; SQRADD(a[58], a[58]); - COMBA_STORE(b[116]); - - /* output 117 */ - CARRY_FORWARD; - SQRADDSC(a[54], a[63]); SQRADDAC(a[55], a[62]); SQRADDAC(a[56], a[61]); SQRADDAC(a[57], a[60]); SQRADDAC(a[58], a[59]); SQRADDDB; - COMBA_STORE(b[117]); - - /* output 118 */ - CARRY_FORWARD; - SQRADDSC(a[55], a[63]); SQRADDAC(a[56], a[62]); SQRADDAC(a[57], a[61]); SQRADDAC(a[58], a[60]); SQRADDDB; SQRADD(a[59], a[59]); - COMBA_STORE(b[118]); - - /* output 119 */ - CARRY_FORWARD; - SQRADDSC(a[56], a[63]); SQRADDAC(a[57], a[62]); SQRADDAC(a[58], a[61]); SQRADDAC(a[59], a[60]); SQRADDDB; - COMBA_STORE(b[119]); - - /* output 120 */ - CARRY_FORWARD; - SQRADDSC(a[57], a[63]); SQRADDAC(a[58], a[62]); SQRADDAC(a[59], a[61]); SQRADDDB; SQRADD(a[60], a[60]); - COMBA_STORE(b[120]); - - /* output 121 */ - CARRY_FORWARD; - SQRADDSC(a[58], a[63]); SQRADDAC(a[59], a[62]); SQRADDAC(a[60], a[61]); SQRADDDB; - COMBA_STORE(b[121]); - - /* output 122 */ - CARRY_FORWARD; - SQRADD2(a[59], a[63]); SQRADD2(a[60], a[62]); SQRADD(a[61], a[61]); - COMBA_STORE(b[122]); - - /* output 123 */ - CARRY_FORWARD; - SQRADD2(a[60], a[63]); SQRADD2(a[61], a[62]); - COMBA_STORE(b[123]); - - /* output 124 */ - CARRY_FORWARD; - SQRADD2(a[61], a[63]); SQRADD(a[62], a[62]); - COMBA_STORE(b[124]); - - /* output 125 */ - CARRY_FORWARD; - SQRADD2(a[62], a[63]); - COMBA_STORE(b[125]); - - /* output 126 */ - CARRY_FORWARD; - SQRADD(a[63], a[63]); - COMBA_STORE(b[126]); - COMBA_STORE2(b[127]); - COMBA_FINI; - - B->used = 128; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 128 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_64.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_7.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_7.c deleted file mode 100644 index d75ea71d1..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_7.c +++ /dev/null @@ -1,94 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR7 -void fp_sqr_comba7(fp_int *A, fp_int *B) -{ - fp_digit *a, b[14], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADD2(a[2], a[6]); SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADD2(a[3], a[6]); SQRADD2(a[4], a[5]); - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADD2(a[5], a[6]); - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - COMBA_STORE2(b[13]); - COMBA_FINI; - - B->used = 14; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 14 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_7.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_8.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_8.c deleted file mode 100644 index f008b65b6..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_8.c +++ /dev/null @@ -1,104 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR8 -void fp_sqr_comba8(fp_int *A, fp_int *B) -{ - fp_digit *a, b[16], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD2(a[3], a[7]); SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADD2(a[4], a[7]); SQRADD2(a[5], a[6]); - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADD2(a[6], a[7]); - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - COMBA_STORE2(b[15]); - COMBA_FINI; - - B->used = 16; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 16 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_8.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_9.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_9.c deleted file mode 100644 index 5139992c1..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_9.c +++ /dev/null @@ -1,114 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#ifdef TFM_SQR9 -void fp_sqr_comba9(fp_int *A, fp_int *B) -{ - fp_digit *a, b[18], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD2(a[4], a[8]); SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADD2(a[5], a[8]); SQRADD2(a[6], a[7]); - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADD2(a[6], a[8]); SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADD2(a[7], a[8]); - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - COMBA_STORE2(b[17]); - COMBA_FINI; - - B->used = 18; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 18 * sizeof(fp_digit)); - fp_clamp(B); -} -#endif - - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_9.c,v $ */ -/* $Revision: 1.2 $ */ -/* $Date: 2007/02/17 03:39:01 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_generic.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_generic.c deleted file mode 100644 index 844f0d488..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_generic.c +++ /dev/null @@ -1,95 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ - -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -/* generic comba squarer */ -void fp_sqr_comba(fp_int *A, fp_int *B) -{ - int pa, ix, iz; - fp_digit c0, c1, c2; - fp_int tmp, *dst; -#ifdef TFM_ISO - fp_word tt; -#endif - - /* get size of output and trim */ - pa = A->used + A->used; - if (pa >= FP_SIZE) { - pa = FP_SIZE-1; - } - - /* number of output digits to produce */ - COMBA_START; - CLEAR_CARRY; - - if (A == B) { - fp_zero(&tmp); - dst = &tmp; - } else { - fp_zero(B); - dst = B; - } - - for (ix = 0; ix < pa; ix++) { - int tx, ty, iy; - fp_digit *tmpy, *tmpx; - - /* get offsets into the two bignums */ - ty = MIN(A->used-1, ix); - tx = ix - ty; - - /* setup temp aliases */ - tmpx = A->dp + tx; - tmpy = A->dp + ty; - - /* this is the number of times the loop will iterrate, - while (tx++ < a->used && ty-- >= 0) { ... } - */ - iy = MIN(A->used-tx, ty+1); - - /* now for squaring tx can never equal ty - * we halve the distance since they approach - * at a rate of 2x and we have to round because - * odd cases need to be executed - */ - iy = MIN(iy, (ty-tx+1)>>1); - - /* forward carries */ - CARRY_FORWARD; - - /* execute loop */ - for (iz = 0; iz < iy; iz++) { - SQRADD2(*tmpx++, *tmpy--); - } - - /* even columns have the square term in them */ - if ((ix&1) == 0) { - SQRADD(A->dp[ix>>1], A->dp[ix>>1]); - } - - /* store it */ - COMBA_STORE(dst->dp[ix]); - } - - COMBA_FINI; - - /* setup dest */ - dst->used = pa; - fp_clamp (dst); - if (dst != B) { - fp_copy(dst, B); - } -} - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/Attic/fp_sqr_comba_generic.c,v $ */ -/* $Revision: 1.3 $ */ -/* $Date: 2007/02/15 00:31:32 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_small_set.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_small_set.c deleted file mode 100644 index f4739d3e7..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqr_comba_small_set.c +++ /dev/null @@ -1,1522 +0,0 @@ -#define TFM_DEFINES -#include "fp_sqr_comba.c" - -#if defined(TFM_SMALL_SET) -void fp_sqr_comba_small(fp_int *A, fp_int *B) -{ - fp_digit *a, b[32], c0, c1, c2, sc0, sc1, sc2; -#ifdef TFM_ISO - fp_word tt; -#endif - switch (A->used) { - case 1: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - COMBA_STORE2(b[1]); - COMBA_FINI; - - B->used = 2; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 2 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 2: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - COMBA_STORE2(b[3]); - COMBA_FINI; - - B->used = 4; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 4 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 3: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - COMBA_STORE2(b[5]); - COMBA_FINI; - - B->used = 6; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 6 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 4: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADD2(a[2], a[3]); - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - COMBA_STORE2(b[7]); - COMBA_FINI; - - B->used = 8; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 8 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 5: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADD2(a[1], a[4]); SQRADD2(a[2], a[3]); - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADD2(a[2], a[4]); SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADD2(a[3], a[4]); - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - COMBA_STORE2(b[9]); - COMBA_FINI; - - B->used = 10; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 10 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 6: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADD2(a[1], a[5]); SQRADD2(a[2], a[4]); SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADD2(a[2], a[5]); SQRADD2(a[3], a[4]); - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADD2(a[4], a[5]); - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - COMBA_STORE2(b[11]); - COMBA_FINI; - - B->used = 12; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 12 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 7: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADD2(a[2], a[6]); SQRADD2(a[3], a[5]); SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADD2(a[3], a[6]); SQRADD2(a[4], a[5]); - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADD2(a[5], a[6]); - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - COMBA_STORE2(b[13]); - COMBA_FINI; - - B->used = 14; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 14 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 8: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADD2(a[3], a[7]); SQRADD2(a[4], a[6]); SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADD2(a[4], a[7]); SQRADD2(a[5], a[6]); - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADD2(a[6], a[7]); - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - COMBA_STORE2(b[15]); - COMBA_FINI; - - B->used = 16; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 16 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 9: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADD2(a[4], a[8]); SQRADD2(a[5], a[7]); SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADD2(a[5], a[8]); SQRADD2(a[6], a[7]); - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADD2(a[6], a[8]); SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADD2(a[7], a[8]); - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - COMBA_STORE2(b[17]); - COMBA_FINI; - - B->used = 18; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 18 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 10: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADD2(a[5], a[9]); SQRADD2(a[6], a[8]); SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADD2(a[6], a[9]); SQRADD2(a[7], a[8]); - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADD2(a[7], a[9]); SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADD2(a[8], a[9]); - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - COMBA_STORE2(b[19]); - COMBA_FINI; - - B->used = 20; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 20 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 11: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADD2(a[6], a[10]); SQRADD2(a[7], a[9]); SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADD2(a[7], a[10]); SQRADD2(a[8], a[9]); - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADD2(a[8], a[10]); SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADD2(a[9], a[10]); - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - COMBA_STORE2(b[21]); - COMBA_FINI; - - B->used = 22; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 22 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 12: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADD2(a[7], a[11]); SQRADD2(a[8], a[10]); SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADD2(a[8], a[11]); SQRADD2(a[9], a[10]); - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADD2(a[9], a[11]); SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADD2(a[10], a[11]); - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - COMBA_STORE2(b[23]); - COMBA_FINI; - - B->used = 24; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 24 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 13: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADD2(a[8], a[12]); SQRADD2(a[9], a[11]); SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADD2(a[9], a[12]); SQRADD2(a[10], a[11]); - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADD2(a[10], a[12]); SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADD2(a[11], a[12]); - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - COMBA_STORE2(b[25]); - COMBA_FINI; - - B->used = 26; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 26 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 14: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADD2(a[9], a[13]); SQRADD2(a[10], a[12]); SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADD2(a[10], a[13]); SQRADD2(a[11], a[12]); - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADD2(a[11], a[13]); SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADD2(a[12], a[13]); - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - COMBA_STORE2(b[27]); - COMBA_FINI; - - B->used = 28; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 28 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 15: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADD2(a[10], a[14]); SQRADD2(a[11], a[13]); SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADD2(a[11], a[14]); SQRADD2(a[12], a[13]); - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADD2(a[12], a[14]); SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADD2(a[13], a[14]); - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - COMBA_STORE2(b[29]); - COMBA_FINI; - - B->used = 30; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 30 * sizeof(fp_digit)); - fp_clamp(B); - break; - - case 16: - a = A->dp; - COMBA_START; - - /* clear carries */ - CLEAR_CARRY; - - /* output 0 */ - SQRADD(a[0],a[0]); - COMBA_STORE(b[0]); - - /* output 1 */ - CARRY_FORWARD; - SQRADD2(a[0], a[1]); - COMBA_STORE(b[1]); - - /* output 2 */ - CARRY_FORWARD; - SQRADD2(a[0], a[2]); SQRADD(a[1], a[1]); - COMBA_STORE(b[2]); - - /* output 3 */ - CARRY_FORWARD; - SQRADD2(a[0], a[3]); SQRADD2(a[1], a[2]); - COMBA_STORE(b[3]); - - /* output 4 */ - CARRY_FORWARD; - SQRADD2(a[0], a[4]); SQRADD2(a[1], a[3]); SQRADD(a[2], a[2]); - COMBA_STORE(b[4]); - - /* output 5 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[5]); SQRADDAC(a[1], a[4]); SQRADDAC(a[2], a[3]); SQRADDDB; - COMBA_STORE(b[5]); - - /* output 6 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[6]); SQRADDAC(a[1], a[5]); SQRADDAC(a[2], a[4]); SQRADDDB; SQRADD(a[3], a[3]); - COMBA_STORE(b[6]); - - /* output 7 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[7]); SQRADDAC(a[1], a[6]); SQRADDAC(a[2], a[5]); SQRADDAC(a[3], a[4]); SQRADDDB; - COMBA_STORE(b[7]); - - /* output 8 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[8]); SQRADDAC(a[1], a[7]); SQRADDAC(a[2], a[6]); SQRADDAC(a[3], a[5]); SQRADDDB; SQRADD(a[4], a[4]); - COMBA_STORE(b[8]); - - /* output 9 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[9]); SQRADDAC(a[1], a[8]); SQRADDAC(a[2], a[7]); SQRADDAC(a[3], a[6]); SQRADDAC(a[4], a[5]); SQRADDDB; - COMBA_STORE(b[9]); - - /* output 10 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[10]); SQRADDAC(a[1], a[9]); SQRADDAC(a[2], a[8]); SQRADDAC(a[3], a[7]); SQRADDAC(a[4], a[6]); SQRADDDB; SQRADD(a[5], a[5]); - COMBA_STORE(b[10]); - - /* output 11 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[11]); SQRADDAC(a[1], a[10]); SQRADDAC(a[2], a[9]); SQRADDAC(a[3], a[8]); SQRADDAC(a[4], a[7]); SQRADDAC(a[5], a[6]); SQRADDDB; - COMBA_STORE(b[11]); - - /* output 12 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[12]); SQRADDAC(a[1], a[11]); SQRADDAC(a[2], a[10]); SQRADDAC(a[3], a[9]); SQRADDAC(a[4], a[8]); SQRADDAC(a[5], a[7]); SQRADDDB; SQRADD(a[6], a[6]); - COMBA_STORE(b[12]); - - /* output 13 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[13]); SQRADDAC(a[1], a[12]); SQRADDAC(a[2], a[11]); SQRADDAC(a[3], a[10]); SQRADDAC(a[4], a[9]); SQRADDAC(a[5], a[8]); SQRADDAC(a[6], a[7]); SQRADDDB; - COMBA_STORE(b[13]); - - /* output 14 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[14]); SQRADDAC(a[1], a[13]); SQRADDAC(a[2], a[12]); SQRADDAC(a[3], a[11]); SQRADDAC(a[4], a[10]); SQRADDAC(a[5], a[9]); SQRADDAC(a[6], a[8]); SQRADDDB; SQRADD(a[7], a[7]); - COMBA_STORE(b[14]); - - /* output 15 */ - CARRY_FORWARD; - SQRADDSC(a[0], a[15]); SQRADDAC(a[1], a[14]); SQRADDAC(a[2], a[13]); SQRADDAC(a[3], a[12]); SQRADDAC(a[4], a[11]); SQRADDAC(a[5], a[10]); SQRADDAC(a[6], a[9]); SQRADDAC(a[7], a[8]); SQRADDDB; - COMBA_STORE(b[15]); - - /* output 16 */ - CARRY_FORWARD; - SQRADDSC(a[1], a[15]); SQRADDAC(a[2], a[14]); SQRADDAC(a[3], a[13]); SQRADDAC(a[4], a[12]); SQRADDAC(a[5], a[11]); SQRADDAC(a[6], a[10]); SQRADDAC(a[7], a[9]); SQRADDDB; SQRADD(a[8], a[8]); - COMBA_STORE(b[16]); - - /* output 17 */ - CARRY_FORWARD; - SQRADDSC(a[2], a[15]); SQRADDAC(a[3], a[14]); SQRADDAC(a[4], a[13]); SQRADDAC(a[5], a[12]); SQRADDAC(a[6], a[11]); SQRADDAC(a[7], a[10]); SQRADDAC(a[8], a[9]); SQRADDDB; - COMBA_STORE(b[17]); - - /* output 18 */ - CARRY_FORWARD; - SQRADDSC(a[3], a[15]); SQRADDAC(a[4], a[14]); SQRADDAC(a[5], a[13]); SQRADDAC(a[6], a[12]); SQRADDAC(a[7], a[11]); SQRADDAC(a[8], a[10]); SQRADDDB; SQRADD(a[9], a[9]); - COMBA_STORE(b[18]); - - /* output 19 */ - CARRY_FORWARD; - SQRADDSC(a[4], a[15]); SQRADDAC(a[5], a[14]); SQRADDAC(a[6], a[13]); SQRADDAC(a[7], a[12]); SQRADDAC(a[8], a[11]); SQRADDAC(a[9], a[10]); SQRADDDB; - COMBA_STORE(b[19]); - - /* output 20 */ - CARRY_FORWARD; - SQRADDSC(a[5], a[15]); SQRADDAC(a[6], a[14]); SQRADDAC(a[7], a[13]); SQRADDAC(a[8], a[12]); SQRADDAC(a[9], a[11]); SQRADDDB; SQRADD(a[10], a[10]); - COMBA_STORE(b[20]); - - /* output 21 */ - CARRY_FORWARD; - SQRADDSC(a[6], a[15]); SQRADDAC(a[7], a[14]); SQRADDAC(a[8], a[13]); SQRADDAC(a[9], a[12]); SQRADDAC(a[10], a[11]); SQRADDDB; - COMBA_STORE(b[21]); - - /* output 22 */ - CARRY_FORWARD; - SQRADDSC(a[7], a[15]); SQRADDAC(a[8], a[14]); SQRADDAC(a[9], a[13]); SQRADDAC(a[10], a[12]); SQRADDDB; SQRADD(a[11], a[11]); - COMBA_STORE(b[22]); - - /* output 23 */ - CARRY_FORWARD; - SQRADDSC(a[8], a[15]); SQRADDAC(a[9], a[14]); SQRADDAC(a[10], a[13]); SQRADDAC(a[11], a[12]); SQRADDDB; - COMBA_STORE(b[23]); - - /* output 24 */ - CARRY_FORWARD; - SQRADDSC(a[9], a[15]); SQRADDAC(a[10], a[14]); SQRADDAC(a[11], a[13]); SQRADDDB; SQRADD(a[12], a[12]); - COMBA_STORE(b[24]); - - /* output 25 */ - CARRY_FORWARD; - SQRADDSC(a[10], a[15]); SQRADDAC(a[11], a[14]); SQRADDAC(a[12], a[13]); SQRADDDB; - COMBA_STORE(b[25]); - - /* output 26 */ - CARRY_FORWARD; - SQRADD2(a[11], a[15]); SQRADD2(a[12], a[14]); SQRADD(a[13], a[13]); - COMBA_STORE(b[26]); - - /* output 27 */ - CARRY_FORWARD; - SQRADD2(a[12], a[15]); SQRADD2(a[13], a[14]); - COMBA_STORE(b[27]); - - /* output 28 */ - CARRY_FORWARD; - SQRADD2(a[13], a[15]); SQRADD(a[14], a[14]); - COMBA_STORE(b[28]); - - /* output 29 */ - CARRY_FORWARD; - SQRADD2(a[14], a[15]); - COMBA_STORE(b[29]); - - /* output 30 */ - CARRY_FORWARD; - SQRADD(a[15], a[15]); - COMBA_STORE(b[30]); - COMBA_STORE2(b[31]); - COMBA_FINI; - - B->used = 32; - B->sign = FP_ZPOS; - memcpy(B->dp, b, 32 * sizeof(fp_digit)); - fp_clamp(B); - break; -} -} - -#endif /* TFM_SMALL_SET */ - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqr_comba_small_set.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2007/02/15 00:31:32 $ */ diff --git a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqrmod.c b/lib/hcrypto/tomsfastmath/src/sqr/fp_sqrmod.c deleted file mode 100644 index cdf9754b0..000000000 --- a/lib/hcrypto/tomsfastmath/src/sqr/fp_sqrmod.c +++ /dev/null @@ -1,23 +0,0 @@ -/* TomsFastMath, a fast ISO C bignum library. - * - * This project is meant to fill in where LibTomMath - * falls short. That is speed ;-) - * - * This project is public domain and free for all purposes. - * - * Tom St Denis, tomstdenis@gmail.com - */ -#include - -/* c = a * a (mod b) */ -int fp_sqrmod(fp_int *a, fp_int *b, fp_int *c) -{ - fp_int tmp; - fp_zero(&tmp); - fp_sqr(a, &tmp); - return fp_mod(&tmp, b, c); -} - -/* $Source: /cvs/libtom/tomsfastmath/src/sqr/fp_sqrmod.c,v $ */ -/* $Revision: 1.1 $ */ -/* $Date: 2006/12/31 21:25:53 $ */ diff --git a/lib/hcrypto/tomsfastmath/tfm.tex b/lib/hcrypto/tomsfastmath/tfm.tex deleted file mode 100644 index 384d0064e..000000000 --- a/lib/hcrypto/tomsfastmath/tfm.tex +++ /dev/null @@ -1,659 +0,0 @@ -\documentclass[b5paper]{book} -\usepackage{hyperref} -\usepackage{makeidx} -\usepackage{amssymb} -\usepackage{color} -\usepackage{alltt} -\usepackage{graphicx} -\usepackage{layout} -\def\union{\cup} -\def\intersect{\cap} -\def\getsrandom{\stackrel{\rm R}{\gets}} -\def\cross{\times} -\def\cat{\hspace{0.5em} \| \hspace{0.5em}} -\def\catn{$\|$} -\def\divides{\hspace{0.3em} | \hspace{0.3em}} -\def\nequiv{\not\equiv} -\def\approx{\raisebox{0.2ex}{\mbox{\small $\sim$}}} -\def\lcm{{\rm lcm}} -\def\gcd{{\rm gcd}} -\def\log{{\rm log}} -\def\ord{{\rm ord}} -\def\abs{{\mathit abs}} -\def\rep{{\mathit rep}} -\def\mod{{\mathit\ mod\ }} -\renewcommand{\pmod}[1]{\ ({\rm mod\ }{#1})} -\newcommand{\floor}[1]{\left\lfloor{#1}\right\rfloor} -\newcommand{\ceil}[1]{\left\lceil{#1}\right\rceil} -\def\Or{{\rm\ or\ }} -\def\And{{\rm\ and\ }} -\def\iff{\hspace{1em}\Longleftrightarrow\hspace{1em}} -\def\implies{\Rightarrow} -\def\undefined{{\rm ``undefined"}} -\def\Proof{\vspace{1ex}\noindent {\bf Proof:}\hspace{1em}} -\let\oldphi\phi -\def\phi{\varphi} -\def\Pr{{\rm Pr}} -\newcommand{\str}[1]{{\mathbf{#1}}} -\def\F{{\mathbb F}} -\def\N{{\mathbb N}} -\def\Z{{\mathbb Z}} -\def\R{{\mathbb R}} -\def\C{{\mathbb C}} -\def\Q{{\mathbb Q}} -\definecolor{DGray}{gray}{0.5} -\newcommand{\emailaddr}[1]{\mbox{$<${#1}$>$}} -\def\twiddle{\raisebox{0.3ex}{\mbox{\tiny $\sim$}}} -\def\gap{\vspace{0.5ex}} -\makeindex -\begin{document} -\frontmatter -\pagestyle{empty} -\title{TomsFastMath User Manual \\ v0.12} -\author{Tom St Denis \\ tomstdenis@gmail.com} -\maketitle -This text and library are all hereby placed in the public domain. This book has been formatted for B5 -[176x250] paper using the \LaTeX{} {\em book} macro package. - -\vspace{13cm} - -\begin{flushleft}This project was sponsored in part by - -Secure Science Corporation \url{http://www.securescience.net}. -\end{flushleft} - -\tableofcontents -\listoffigures -\mainmatter -\pagestyle{headings} -\chapter{Introduction} -\section{What is TomsFastMath?} - -TomsFastMath is meant to be a very fast yet still fairly portable and easy to port large -integer arithmetic library written in ISO C. The goal specifically is to be able to perform -very fast modular exponentiations and other related functions required for ECC, DH and RSA -cryptosystems. - -Most of the library is pure ISO C portable source code while a small portion (three files) contain -a mixture of ISO C and assembler inline fragments. Compared to LibTomMath this new library is -meant to be much faster while sacrificing flexibiltiy. This is accomplished through several means. - -\begin{enumerate} - \item The new code is slightly messier and contains asm blocks. - \item This uses fixed not multiple precision integers. - \item It is designed only for fast modular exponentiations [e.g. less flexibility]. -\end{enumerate} - -To mitigate some of the problems that arise from using assembler it has been carefully and -appropriately used where it would make the most gain in performance. Also we use macro's -for assembler code which allows new ports to be inserted easily. - -The new code uses fixed precision arithmetic which means at compile time you choose a maximum -precision and all numbers are limited to that. This has the benefit of not requiring any -memory heap operations (which are slow) in any of the functions. It has the downside that -integers that are too large are truncated. - -The goal of this library is to be able to perform modular exponentiations (with an odd modulus) very -fast. This is what takes the most time in systems such as RSA and DH. This also requires -fast multiplication and squaring and has the side effect of speeding up ECC operations as well. - -\section{License} -TomsFastMath is public domain. - -\section{Building} -To build the library simply type ``make''. Or to install in typical *unix like directories use -``make install''. Similarly a shared library can be built with ``make -f makefile.shared install''. - -You can build the test program with ``make test''. To perform simple static testing (useful to -test out new assembly ports) use the stest program. Type ``make stest'' and run it on your -target. The program will perform three multiplications, squarings and montgomery reductions. -Likely if your assembly code is invalid this code will exhibit the bug. - -\subsection{Intel CC} -In theory you should be able to build the library with - -\begin{verbatim} -CFLAGS="-O3 -ip" CC=icc make IGNORE_SPEED=1 -\end{verbatim} - -However, Intels inline assembler is way less advanced than GCCs. As a result it doesn't compile. -Fortunately it doesn't really matter. - -\subsection{MSVC} -The library doesn't build with MSVC. Imagine that. - -\subsection{Build Limitations} -TomsFastMath has the following build requirements which are non--portable but under most -circumstances not problematic. - -\begin{enumerate} -\item ``CHAR\_BIT'' must be eight. -\item The ``fp\_digit'' type must be a multiple of eight bits long. -\item The ``fp\_word'' must be at least twice the length of fp\_digit. -\end{enumerate} - -\subsection{Optimization Configuration} -By default TFM is configured for 32--bit digits using ISO C source code. This mode while portable -is not very efficient. While building the library (from scratch) you can define one of -several ``CFLAGS'' defines. - -For example, to build with with SSE2 optimizations type - -\begin{verbatim} -CFLAGS=-DTFM_SSE2 make clean libtfm.a -\end{verbatim} - -\subsubsection{x86--32} The ``x86--32'' mode is defined by ``TFM\_X86'' and covers all -i386 and beyond processors. It requires GCC to build and only works with 32--bit digits. In this -mode fp\_digit is 32--bits and fp\_word is 64--bits. This mode will be autodetected when building -with GCC to an ``i386'' target. You can override this behaviour by defining TFM\_NO\_ASM or -another optimization mode (such as SSE2). - -\subsubsection{SSE2} The ``SSE2'' mode is defined by ``TFM\_SSE2'' and requires a Pentium 4, Pentium -M or Athlon64 processor. It requires GCC to build. Note that you shouldn't define both -TFM\_X86 and TFM\_SSE2 at the same time. This mode only works with 32--bit digits. In this -mode fp\_digit is 32--bits and fp\_word is 64--bits. While this mode will work on the AMD Athlon64 -series of processors it is less efficient than the native ``x86--64'' mode and not recommended. - -There is an additional ``TFM\_PRESCOTT'' flag that you can define for P4 Prescott processors. This causes -the mul/sqr functions to use x86\_32 and the montgomery reduction to use SSE2 which is (so far) the fastest -combination. If you are using an older (e.g. Northwood) generation P4 don't define this. - -\subsubsection{x86--64} The ``x86--64'' mode is defined by ``TFM\_X86\_64'' and requires a -``x86--64'' capable processor (Athlon64 and future Pentium processors). It requires GCC to -build and only works with 64--bit digits. Note that by enabling this mode it will automatically -enable 64--bit digits. In this mode fp\_digit is 64--bits and fp\_word is 128--bits. This mode will -be autodetected when building with GCC to an ``x86--64'' target. You can override this behaviour by defining -TFM\_NO\_ASM. - -\subsubsection{ARM} The ``ARM'' mode is defined by ``TFM\_ARM'' and requires a ARMv4 with the M instructions (enhanced -multipliers) or higher processor. It requires GCC and works with 32--bit digits. In this mode fp\_digit is 32--bits and -fp\_word is 64--bits. - -\subsubsection{PPC32} The ``PPC32'' mode is defined by ``TFM\_PPC32'' and requires a standard PPC processor. It doesn't -use altivec or other extensions so it should work on all compliant implementations of PPC. It requires GCC and works -with 32--bit digits. In this mode fp\_digit is 32--bits and fp\_word is 64--bits. - -\subsubsection{PPC64} The ``PPC64'' mode is defined by ``TFM\_PPC64'' and requires a 64--bit PPC processor. - -\subsubsection{AVR32} The ``AVR32'' mode is defined by ``TFM\_AVR32'' and requires an Atmel AVR32 processor. - -\subsubsection{Future Releases} Future releases will support additional platform optimizations. -Developers of MIPS and SPARC platforms are encouraged to submit GCC asm inline patches -(see chapter \ref{chap:asmops} for more information). - -\begin{figure}[here] -\begin{small} -\begin{center} -\begin{tabular}{|l|l|} -\hline \textbf{Processor} & \textbf{Recommended Mode} \\ -\hline All 32--bit x86 platforms & TFM\_X86 \\ -\hline Pentium 4 & TFM\_SSE2 \\ -\hline Pentium 4 Prescott & TFM\_SSE2 + TFM\_PRESCOTT \\ -\hline Athlon64 & TFM\_X86\_64 \\ -\hline ARMv4 or higher with M & TFM\_ARM \\ -\hline G3/G4 (32-bit PPC) & TFM\_PPC32 \\ -\hline G5 (64-bit PPC) & TFM\_PPC64 \\ -\hline Atmel AVR32 & TFM\_AVR32 \\ -\hline &\\ -\hline x86--32 or x86--64 (with GCC) & Leave blank and let autodetect work \\ -\hline -\end{tabular} -\caption{Recommended Build Modes} -\end{center} -\end{small} -\end{figure} - -\subsection{Build Configurations} -TomsFastMath is configurable in terms of which unrolled code (if any) is included. By default, the majority of the code is included which -results in large binaries. The first flag to try out is TFM\_ALREADY\_SET which tells TFM to turn off \textbf{all} unrolled code. This will -result in a smaller library but also a much slower library. - -From this clean state, you can start enabling unrolled code for given cryptographic tasks at hand. A series of TFM\_MULXYZ and TFM\_SQRXYZ macros -exist to enable specific unrolled code. For instance, TFM\_MUL32 will enable a 32 digit unrolled multiplier. For a complete list see the tfm.h header -file. Keep in mind this is for digits not bits. For example, you should enable TFM\_MUL16 if you are doing 1024-bit exptmods on a 64--bit platform, enable -TFM\_MUL32 on 32--bit platforms. - -To help developers use ECC there are a set of defines for the five NIST curve sizes. They are named TFM\_ECCXYZ where XYZ is one of 192, 224, 256, 384, or 521. These -enable the multipliers and squaring code for a given curve, autodetecting 64--bit platforms as well. - -\subsection{Precision Configuration} -The precision of all integers in this library are fixed to a limited precision. Essentially -the rule of setting the precision is if you plan on doing modular exponentiation with $k$--bit -numbers than the precision must be fixed to $2k$--bits plus four digits. - -This is changed by altering the value of ``FP\_MAX\_SIZE'' in tfm.h to your desired size. By default, -the library is configured to handle upto 2048--bit inputs to the modular exponentiator. - -\chapter{Getting Started} -\section{Data Types} -TomsFastMath is a large fixed precision integer library. It provides the functionality to -manipulate large signed integers through a relatively trivial api and a single data type. - -The ``fp\_int'' or fixed precision integer is the data type that the functions operate with. - -\begin{verbatim} -typedef struct { - fp_digit dp[FP_SIZE]; - int used, - sign; -} fp_int; -\end{verbatim} - -The \textbf{dp} member is the array of digits that forms the number. It must always be zero -padded. The \textbf{used} member is the count of digits used in the array. Although the -precision is fixed the algorithms are still tuned to not process the entire array if it -does not have to. The \textbf{sign} indicates the sign of the integer. It is \textbf{FP\_ZPOS} (0) -if the integer is zero or positive and \textbf{FP\_NEG} (1) otherwise. - -\section{Initialization} -\subsection{Simple Initialization} -To initialize an integer to the default state of zero use the fp\_init() function. - -\index{fp\_init} -\begin{verbatim} -void fp_init(fp_int *a); -\end{verbatim} - -This will initialize the fp\_int $a$ to zero. Note that the function fp\_zero() is an alias -for fp\_init(). - -\subsection{Initialize Small Constants} -To initialize an integer with a small single digit value use the fp\_set() function. - -\index{fp\_set} -\begin{verbatim} -void fp_set(fp_int *a, fp_digit b); -\end{verbatim} - -This will initialize $a$ and set it equal to the digit $b$. - -\subsection{Initialize Copy} -To initialize an integer with a copy of another integer use the fp\_init\_copy() function. - -\index{fp\_init\_copy} -\begin{verbatim} -void fp_init_copy(fp_int *a, fp_int *b) -\end{verbatim} - -This will initialize $a$ as a copy of $b$. Note that for compatibility with LibTomMath the function -fp\_copy() is also provided. - -\chapter{Arithmetic Operations} -\section{Odds and Evens} -To quickly and easily tell if an integer is zero, odd or even use the following functions. - -\index{fp\_iszero} \index{fp\_iseven} \index{fp\_isodd} -\begin{verbatim} -int fp_iszero(fp_int *a); -int fp_iseven(fp_int *a); -int fp_isodd(fp_int *a); -\end{verbatim} - -These will return \textbf{FP\_YES} if the answer to their respective questions is yes. Otherwise they -return \textbf{FP\_NO}. Note that these are implemented as macros and as such you should avoid using -++ or --~-- operators on the input operand. - -\section{Sign Manipulation} -To negate or compute the absolute of an integer use the following functions. - -\index{fp\_neg} \index{fp\_abs} -\begin{verbatim} -void fp_neg(fp_int *a, fp_int *b); -void fp_abs(fp_int *a, fp_int *b); -\end{verbatim} -This will compute the negation (or absolute) of $a$ and store the result in $b$. Note that these -are implemented as macros and as such you should avoid using ++ or --~-- operators on the input -operand. - -\section{Comparisons} -To perform signed or unsigned comparisons use following functions. - -\index{fp\_cmp} \index{fp\_cmp\_mag} -\begin{verbatim} -int fp_cmp(fp_int *a, fp_int *b); -int fp_cmp_mag(fp_int *a, fp_int *b); -\end{verbatim} -These will compare $a$ to $b$. They will return \textbf{FP\_GT} if $a$ is larger than $b$, -\textbf{FP\_EQ} if they are equal and \textbf{FP\_LT} if $a$ is less than $b$. - -The function fp\_cmp performs signed comparisons while the other performs unsigned comparisons. - -\section{Shifting} -To shift the digits of an fp\_int left or right use the following functions. - -\index{fp\_lshd} \index{fp\_rshd} -\begin{verbatim} -void fp_lshd(fp_int *a, int x); -void fp_rshd(fp_int *a, int x); -\end{verbatim} - -These will shift the digits of $a$ left (or right respectively) $x$ digits. - -To shift individual bits of an fp\_int use the following functions. - -\index{fp\_div\_2d} \index{fp\_mod\_2d} \index{fp\_mul\_2d} \index{fp\_div\_2} \index{fp\_mul\_2} -\begin{verbatim} -void fp_div_2d(fp_int *a, int b, fp_int *c, fp_int *d); -void fp_mod_2d(fp_int *a, int b, fp_int *c); -void fp_mul_2d(fp_int *a, int b, fp_int *c); -void fp_mul_2(fp_int *a, fp_int *c); -void fp_div_2(fp_int *a, fp_int *c); -void fp_2expt(fp_int *a, int b); -\end{verbatim} -fp\_div\_2d() will divide $a$ by $2^b$ and store the quotient in $c$ and remainder in $d$. Either of -$c$ or $d$ can be \textbf{NULL} if their value is not required. fp\_mod\_2d() is a shortcut to -compute the remainder directly. fp\_mul\_2d() will multiply $a$ by $2^b$ and store the result in $c$. - -The fp\_mul\_2() and fp\_div\_2() functions are optimized multiplication and divisions by two. The -function fp\_2expt() will compute $a = 2^b$ quickly. - -To quickly count the number of least significant bits that are zero use the following function. - -\index{fp\_cnt\_lsb} -\begin{verbatim} -int fp_cnt_lsb(fp_int *a); -\end{verbatim} -This will return the number of adjacent least significant bits that are zero. This is equivalent -to the number of times two evenly divides $a$. - -\section{Basic Algebra} - -The following functions round out the basic algebraic functionality of the library. - -\index{fp\_add} \index{fp\_sub} \index{fp\_mul} \index{fp\_sqr} \index{fp\_div} \index{fp\_mod} -\begin{verbatim} -void fp_add(fp_int *a, fp_int *b, fp_int *c); -void fp_sub(fp_int *a, fp_int *b, fp_int *c); -void fp_mul(fp_int *a, fp_int *b, fp_int *c); -void fp_sqr(fp_int *a, fp_int *b); -int fp_div(fp_int *a, fp_int *b, fp_int *c, fp_int *d); -int fp_mod(fp_int *a, fp_int *b, fp_int *c); -\end{verbatim} - -The functions fp\_add(), fp\_sub() and fp\_mul() perform their respective operations on $a$ and -$b$ and store the result in $c$. The function fp\_sqr() computes $b = a^2$ and is faster than -using fp\_mul() to perform the same operation. - -The function fp\_div() divides $a$ by $b$ and stores the quotient in $c$ and remainder in $d$. Either -of $c$ and $d$ can be \textbf{NULL} if the result is not required. The function fp\_mod() is a simple -shortcut to find the remainder. - -\section{Modular Exponentiation} -To compute a modular exponentiation use the following function. - -\index{fp\_exptmod} -\begin{verbatim} -int fp_exptmod(fp_int *a, fp_int *b, fp_int *c, fp_int *d); -\end{verbatim} -This computes $d \equiv a^b \mbox{ (mod }c\mbox{)}$ for any odd $c$ and $b$. $b$ may be negative so long as -$a^{-1} \mbox{ (mod }c\mbox{)}$ exists. The initial value of $a$ may be larger than $c$. The size of $c$ must be -half of the maximum precision used during the build of the library. For example, by default $c$ must be less -than $2^{2048}$. - -\section{Number Theoretic} - -To perform modular inverses, greatest common divisor or least common multiples use the following -functions. - -\index{fp\_invmod} \index{fp\_gcd} \index{fp\_lcm} -\begin{verbatim} -int fp_invmod(fp_int *a, fp_int *b, fp_int *c); -void fp_gcd(fp_int *a, fp_int *b, fp_int *c); -void fp_lcm(fp_int *a, fp_int *b, fp_int *c); -\end{verbatim} - -The fp\_invmod() function will find the modular inverse of $a$ modulo an odd modulus $b$ and store -it in $c$ (provided it exists). The function fp\_gcd() will compute the greatest common -divisor of $a$ and $b$ and store it in $c$. Similarly the fp\_lcm() function will compute -the least common multiple of $a$ and $b$ and store it in $c$. - -\section{Prime Numbers} -To quickly test a number for primality call this function. - -\index{fp\_isprime} -\begin{verbatim} -int fp_isprime(fp_int *a); -\end{verbatim} -This will return \textbf{FP\_YES} if $a$ is probably prime. It uses 256 trial divisions and -eight rounds of Rabin-Miller testing. Note that this routine performs modular exponentiations -which means that $a$ must be in a valid range of precision. - -\chapter{Porting TomsFastMath} -\label{chap:asmops} -\section{Getting Started} -Porting TomsFastMath to a given processor target is usually a simple procedure. For the most part -assembly is used to get around the lack of a ``add with carry'' operation in the C language. To -make matters simpler the use of assembler is through macro blocks. - -Each ``port'' is defined by a block of code that re-defines the portable ISO C macros with assembler -inline blocks. To add a new port you must designate a TFM\_XXX define that will enable your -port when built. - -\section{Multiply with Comba} -The file ``fp\_mul\_comba.c'' is responsible for providing the fast multiplication within the -library. This comba multiplication is fairly simple. It uses a sliding three digit carry -system with the variables $c0$, $c1$, $c2$. For every digit of output $c0$ is the what will -be that digit, $c1$ will carry into the next digit and $c2$ will be the ``c1'' carry for -the next digit. For every ``next'' digit effectively $c0$ is stored as output, $c1$ moves into -$c0$, $c2$ into $c1$ and zero into $c2$. - -The following macros define the assmebler interface to the code. - -\begin{verbatim} -#define COMBA_START -\end{verbatim} - -This is issued at the beginning of the multiplication function. This is in place to allow you to -initialize any registers or machine words required. You can leave it blank if you do not need -it. - -\begin{verbatim} -#define COMBA_CLEAR \ - c0 = c1 = c2 = 0; -\end{verbatim} - -This clears the three comba carries. If you are going to place carries in registers then -zero the appropriate registers. Note that the functions do not use $c0$, $c1$ or $c2$ directly -so you are free to ignore these varibles and use registers directly. - -\begin{verbatim} -#define COMBA_FORWARD \ - c0 = c1; c1 = c2; c2 = 0; -\end{verbatim} - -This propagates the carries after a digit has been produced. - -\begin{verbatim} -#define COMBA_STORE(x) \ - x = c0; -\end{verbatim} - -This stores the $c0$ digit in the memory location specified by $x$. Note that if you manually -aliased $c0$ with a register than just store that register in $x$. - -\begin{verbatim} -#define COMBA_STORE2(x) \ - x = c1; -\end{verbatim} - -This stores the $c1$ digit in the memory location specified by $x$. Note that if you manually -aliased $c1$ with a register than just store that register in $x$. - -\begin{verbatim} -#define COMBA_FINI -\end{verbatim} - -If at the end of the function you need to perform some action fill this macro in. - -\begin{verbatim} -#define MULADD(i, j) \ - t = ((fp_word)i) * ((fp_word)j); \ - c0 = (c0 + t); if (c0 < ((fp_digit)t)) ++c1; \ - c1 = (c1 + (t>>DIGIT_BIT)); if (c1 < (t>>DIGIT_BIT)) ++c2; -\end{verbatim} - -This macro performs the ``multiply and add'' step that is central to the comba -multiplier. It multiplies the fp\_digits $i$ and $j$ to produce a fp\_word result. Effectively -the double--digit value is added to the three-digit carry formed by $c0$, $c1$, $c2$ where $c0$ -is the least significant digit. - -\section{Squaring with Comba} -Squaring is similar to multiplication except that it uses a special ``multiply and add twice'' macro -that replaces multiplications that are not required. - -\begin{verbatim} -#define COMBA_START -\end{verbatim} - -This allows for any initialization code you might have. - -\begin{verbatim} -#define CLEAR_CARRY \ - c0 = c1 = c2 = 0; -\end{verbatim} - -This will clear the carries. Like multiplication you can safely alias the three carry variables -to registers if you can/want to. - -\begin{verbatim} -#define COMBA_STORE(x) \ - x = c0; -\end{verbatim} - -Store the $c0$ carry to a given memory location. - -\begin{verbatim} -#define COMBA_STORE2(x) \ - x = c1; -\end{verbatim} - -Store the $c1$ carry to a given memory location. - -\begin{verbatim} -#define CARRY_FORWARD \ - c0 = c1; c1 = c2; c2 = 0; -\end{verbatim} - -Forward propagate all three carry variables. - -\begin{verbatim} -#define COMBA_FINI -\end{verbatim} - -If you need to clean up at the end of the function. - -\begin{verbatim} -/* multiplies point i and j, updates carry "c1" and digit c2 */ -#define SQRADD(i, j) \ - t = ((fp_word)i) * ((fp_word)j); \ - c0 = (c0 + t); if (c0 < ((fp_digit)t)) ++c1; \ - c1 = (c1 + (t>>DIGIT_BIT)); if (c1 < (t>>DIGIT_BIT)) ++c2; -\end{verbatim} - -This is essentially the MULADD macro from the multiplication code. - -\begin{verbatim} -/* for squaring some of the terms are doubled... */ -#define SQRADD2(i, j) \ - t = ((fp_word)i) * ((fp_word)j); \ - c0 = (c0 + t); if (c0 < ((fp_digit)t)) ++c1; \ - c1 = (c1 + (t>>DIGIT_BIT)); if (c1 < (t>>DIGIT_BIT)) ++c2; \ - c0 = (c0 + t); if (c0 < ((fp_digit)t)) ++c1; \ - c1 = (c1 + (t>>DIGIT_BIT)); if (c1 < (t>>DIGIT_BIT)) ++c2; -\end{verbatim} - -This is like SQRADD except it adds the produce twice. It's similar to -computing SQRADD(i, j*2). - -To further make things interesting the squaring code also has ``doubles'' (see my LTM book chapter five...) which are -handled with these macros. - -\begin{verbatim} -#define SQRADDSC(i, j) \ - do { fp_word t; \ - t = ((fp_word)i) * ((fp_word)j); \ - sc0 = (fp_digit)t; sc1 = (t >> DIGIT_BIT); sc2 = 0; \ - } while (0); -\end{verbatim} -This computes a product and stores it in the ``secondary'' carry registers $\left < sc0, sc1, sc2 \right >$. - -\begin{verbatim} -#define SQRADDAC(i, j) \ - do { fp_word t; \ - t = sc0 + ((fp_word)i) * ((fp_word)j); sc0 = t; \ - t = sc1 + (t >> DIGIT_BIT); sc1 = t; sc2 += t >> DIGIT_BIT; \ - } while (0); -\end{verbatim} -This computes a product and adds it to the ``secondary'' carry registers. - -\begin{verbatim} -#define SQRADDDB \ - do { fp_word t; \ - t = ((fp_word)sc0) + ((fp_word)sc0) + c0; c0 = t; \ - t = ((fp_word)sc1) + ((fp_word)sc1) + c1 + (t >> DIGIT_BIT); c1 = t; \ - c2 = c2 + ((fp_word)sc2) + ((fp_word)sc2) + (t >> DIGIT_BIT); \ - } while (0); -\end{verbatim} -This doubles the ``secondary'' carry registers and adds the sum to the main carry registers. Really complicated. - -\section{Montgomery with Comba} -Montgomery reduction is used in modular exponentiation and is most called function during -that operation. It's important to make sure this routine is very fast or all is lost. - -Unlike the two other comba routines this one does not use a single three--digit carry -system. It does have three--digit carries except that the routine steps through them -in the inner loop. This means you cannot alias them to registers (at all). - -To make matters simple though the three arrays of carries are stored in one array. The -``c0'' array resides in $c[0 \ldots OFF1-1]$, ``c1'' in $c[OFF1 \ldots OFF2-1]$ and ``c2'' in -$c[OFF2 \ldots OFF2+FP\_SIZE-1]$. - -\begin{verbatim} -#define MONT_START -\end{verbatim} - -This allows you to insert anything at the start that you need. - -\begin{verbatim} -#define MONT_FINI -\end{verbatim} - -This allows you to insert anything at the end that you need. - -\begin{verbatim} -#define LOOP_START \ - mu = c[x] * mp; -\end{verbatim} - -This computes the $\mu$ value for the inner loop. You can safely alias $mu$ and $mp$ to -a register if you want. - -\begin{verbatim} -#define INNERMUL \ - do { fp_word t; \ - _c[0] = t = ((fp_word)_c[0] + (fp_word)cy) + \ - (((fp_word)mu) * ((fp_word)*tmpm++)); \ - cy = (t >> DIGIT_BIT); \ - } while (0) -\end{verbatim} - -This computes the inner product and adds it to the destination and carry variable $cy$. -This uses the $mu$ value computed above (can be in a register already) and the -$cy$ which is a chaining carry. Inside the INNERMUL loop the $cy$ value can be kept -inside a register (hint: it always starts as $cy = 0$ in the first iteration). - -Upon completion of the inner loop the macro LOOP\_END is called which is used to fetch -$cy$ into the variable the C program can see. This is where, if you cached $cy$ in a -register you would copy it to the locally accessible C variable. - -\begin{verbatim} -#define PROPCARRY \ - do { fp_digit t = _c[0] += cy; cy = (t < cy); } while (0) -\end{verbatim} - -This propagates the carry upwards by one digit. - -\input{tfm.ind} - -\end{document} diff --git a/lib/hcrypto/tomsfastmath/updatemakes.sh b/lib/hcrypto/tomsfastmath/updatemakes.sh deleted file mode 100644 index 757aa9bfe..000000000 --- a/lib/hcrypto/tomsfastmath/updatemakes.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash - -bash genlist.sh > tmplist - -perl filter.pl makefile tmplist -mv -f tmp.delme makefile - -perl filter.pl makefile.shared tmplist -mv -f tmp.delme makefile.shared - -rm -f tmplist -rm -f tmp.delme diff --git a/lib/hcrypto/version-script.map b/lib/hcrypto/version-script.map index 058fc2386..438a35bad 100644 --- a/lib/hcrypto/version-script.map +++ b/lib/hcrypto/version-script.map @@ -3,6 +3,7 @@ HEIMDAL_CRYPTO_1.0 { global: hc_AES_cbc_encrypt; + hc_AES_cfb8_encrypt; hc_AES_decrypt; hc_AES_decrypt_key; hc_BN_CTX_end; @@ -69,7 +70,6 @@ HEIMDAL_CRYPTO_1.0 { hc_DH_get_default_method; hc_DH_get_ex_data; hc_DH_imath_method; - hc_DH_tfm_method; hc_DH_ltm_method; hc_DH_gmp_method; hc_DH_new; @@ -251,7 +251,6 @@ HEIMDAL_CRYPTO_1.0 { hc_RSA_get_default_method; hc_RSA_get_method; hc_RSA_imath_method; - hc_RSA_tfm_method; hc_RSA_new; hc_RSA_new_method; hc_RSA_null_method;