From c5fa23c4bde45118a85801776a4ccb33e7ee7143 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Tue, 8 Jan 2019 09:47:47 -0800 Subject: [PATCH] Fix the requirements for ECDSA math. --- src/signed/invoc.rs | 129 ++++++++++++++++++++- src/unsigned/invoc.rs | 206 ++++++++++++++++++++++++++++++++- test-generator/Requirements.hs | 32 +++-- 3 files changed, 352 insertions(+), 15 deletions(-) diff --git a/src/signed/invoc.rs b/src/signed/invoc.rs index 362c061..d339e9f 100644 --- a/src/signed/invoc.rs +++ b/src/signed/invoc.rs @@ -7,7 +7,7 @@ smodinv_impls!(I192, I256); scale_impls!(I192, I256); conversion_impls!(I192, U192, I256, U256); conversion_impls!(I192, U192, I384, U384); -conversion_impls!(I192, U192, I512, U512); +conversion_impls!(I192, U192, I448, U448); egcd_impls!(I256, U192, I192, I512); modinv_impls!(U192, I256, U256); moddiv_impls!(I256, I512); @@ -23,7 +23,6 @@ scale_impls!(I256, I320); conversion_impls!(I256, U256, I320, U320); conversion_impls!(I256, U256, I512, U512); conversion_impls!(I256, U256, I576, U576); -conversion_impls!(I256, U256, I640, U640); egcd_impls!(I320, U256, I256, I640); modinv_impls!(U256, I320, U320); add_impls!(I320, I384, U384); @@ -39,6 +38,7 @@ conversion_impls!(I320, U320, I640, U640); conversion_impls!(I320, U320, I704, U704); moddiv_impls!(I384, I768); signed_impls!(I384, U384); +shift_impls!(I384, U384); subtraction_impls!(I384, I448, U448); mul_impls!(I384, I768); div_impls!(I384, U384); @@ -46,9 +46,10 @@ smodinv_impls!(I384, I448); scale_impls!(I384, I448); conversion_impls!(I384, U384, I448, U448); conversion_impls!(I384, U384, I768, U768); -conversion_impls!(I384, U384, I896, U896); +conversion_impls!(I384, U384, I832, U832); egcd_impls!(I448, U384, I384, I896); modinv_impls!(U384, I448, U448); +moddiv_impls!(I448, I896); add_impls!(I448, I512, U512); signed_impls!(I448, U448); cmp_impls!(I448); @@ -56,17 +57,24 @@ shift_impls!(I448, U448); subtraction_impls!(I448, I512, U512); mul_impls!(I448, I896); div_impls!(I448, U448); +smodinv_impls!(I448, I512); scale_impls!(I448, I512); conversion_impls!(I448, U448, I512, U512); conversion_impls!(I448, U448, I896, U896); conversion_impls!(I448, U448, I960, U960); +egcd_impls!(I512, U448, I448, I1024); +modinv_impls!(U448, I512, U512); +add_impls!(I512, I576, U576); signed_impls!(I512, U512); +cmp_impls!(I512); +shift_impls!(I512, U512); subtraction_impls!(I512, I576, U576); mul_impls!(I512, I1024); div_impls!(I512, U512); scale_impls!(I512, I576); conversion_impls!(I512, U512, I576, U576); conversion_impls!(I512, U512, I1024, U1024); +conversion_impls!(I512, U512, I1088, U1088); egcd_impls!(I576, U512, I512, I1152); modinv_impls!(U512, I576, U576); moddiv_impls!(I576, I1152); @@ -82,7 +90,6 @@ scale_impls!(I576, I640); conversion_impls!(I576, U576, I640, U640); conversion_impls!(I576, U576, I1152, U1152); conversion_impls!(I576, U576, I1216, U1216); -conversion_impls!(I576, U576, I1280, U1280); egcd_impls!(I640, U576, I576, I1280); modinv_impls!(U576, I640, U640); add_impls!(I640, I704, U704); @@ -98,16 +105,39 @@ conversion_impls!(I640, U640, I1280, U1280); conversion_impls!(I640, U640, I1344, U1344); signed_impls!(I704, U704); signed_impls!(I768, U768); +shift_impls!(I768, U768); +subtraction_impls!(I768, I832, U832); +mul_impls!(I768, I1536); div_impls!(I768, U768); +scale_impls!(I768, I832); +conversion_impls!(I768, U768, I832, U832); +conversion_impls!(I768, U768, I1536, U1536); +moddiv_impls!(I832, I1664); +add_impls!(I832, I896, U896); +signed_impls!(I832, U832); +shift_impls!(I832, U832); +mul_impls!(I832, I1664); +div_impls!(I832, U832); +smodinv_impls!(I832, I896); +scale_impls!(I832, I896); +conversion_impls!(I832, U832, I896, U896); +conversion_impls!(I832, U832, I1664, U1664); +egcd_impls!(I896, U832, I832, I1792); +modinv_impls!(U832, I896, U896); +add_impls!(I896, I960, U960); signed_impls!(I896, U896); +cmp_impls!(I896); +shift_impls!(I896, U896); subtraction_impls!(I896, I960, U960); mul_impls!(I896, I1792); div_impls!(I896, U896); scale_impls!(I896, I960); conversion_impls!(I896, U896, I960, U960); conversion_impls!(I896, U896, I1792, U1792); +conversion_impls!(I896, U896, I1856, U1856); signed_impls!(I960, U960); signed_impls!(I1024, U1024); +subtraction_impls!(I1024, I1088, U1088); conversion_impls!(I1024, U1024, I1088, U1088); egcd_impls!(I1088, U1024, I1024, I2176); modinv_impls!(U1024, I1088, U1088); @@ -123,17 +153,36 @@ conversion_impls!(I1088, U1088, I1152, U1152); conversion_impls!(I1088, U1088, I2176, U2176); conversion_impls!(I1088, U1088, I2240, U2240); signed_impls!(I1152, U1152); +shift_impls!(I1152, U1152); subtraction_impls!(I1152, I1216, U1216); +mul_impls!(I1152, I2304); div_impls!(I1152, U1152); +scale_impls!(I1152, I1216); conversion_impls!(I1152, U1152, I1216, U1216); +conversion_impls!(I1152, U1152, I2304, U2304); +moddiv_impls!(I1216, I2432); +add_impls!(I1216, I1280, U1280); signed_impls!(I1216, U1216); +shift_impls!(I1216, U1216); +mul_impls!(I1216, I2432); +div_impls!(I1216, U1216); +smodinv_impls!(I1216, I1280); +scale_impls!(I1216, I1280); +conversion_impls!(I1216, U1216, I1280, U1280); +conversion_impls!(I1216, U1216, I2432, U2432); +egcd_impls!(I1280, U1216, I1216, I2560); +modinv_impls!(U1216, I1280, U1280); +add_impls!(I1280, I1344, U1344); signed_impls!(I1280, U1280); +cmp_impls!(I1280); +shift_impls!(I1280, U1280); subtraction_impls!(I1280, I1344, U1344); mul_impls!(I1280, I2560); div_impls!(I1280, U1280); scale_impls!(I1280, I1344); conversion_impls!(I1280, U1280, I1344, U1344); conversion_impls!(I1280, U1280, I2560, U2560); +conversion_impls!(I1280, U1280, I2624, U2624); signed_impls!(I1344, U1344); signed_impls!(I1536, U1536); conversion_impls!(I1536, U1536, I1600, U1600); @@ -150,7 +199,11 @@ conversion_impls!(I1600, U1600, I1664, U1664); conversion_impls!(I1600, U1600, I3200, U3200); conversion_impls!(I1600, U1600, I3264, U3264); signed_impls!(I1664, U1664); +div_impls!(I1664, U1664); signed_impls!(I1792, U1792); +subtraction_impls!(I1792, I1856, U1856); +conversion_impls!(I1792, U1792, I1856, U1856); +signed_impls!(I1856, U1856); signed_impls!(I2048, U2048); conversion_impls!(I2048, U2048, I2112, U2112); egcd_impls!(I2112, U2048, I2048, I4224); @@ -170,7 +223,13 @@ signed_impls!(I2176, U2176); subtraction_impls!(I2176, I2240, U2240); conversion_impls!(I2176, U2176, I2240, U2240); signed_impls!(I2240, U2240); +signed_impls!(I2304, U2304); +signed_impls!(I2432, U2432); +div_impls!(I2432, U2432); signed_impls!(I2560, U2560); +subtraction_impls!(I2560, I2624, U2624); +conversion_impls!(I2560, U2560, I2624, U2624); +signed_impls!(I2624, U2624); signed_impls!(I3072, U3072); conversion_impls!(I3072, U3072, I3136, U3136); egcd_impls!(I3136, U3072, I3072, I6272); @@ -285,9 +344,14 @@ mod tests { generate_sigadd_tests!(I256, U256, i256, I320, U320); generate_sigadd_tests!(I320, U320, i320, I384, U384); generate_sigadd_tests!(I448, U448, i448, I512, U512); + generate_sigadd_tests!(I512, U512, i512, I576, U576); generate_sigadd_tests!(I576, U576, i576, I640, U640); generate_sigadd_tests!(I640, U640, i640, I704, U704); + generate_sigadd_tests!(I832, U832, i832, I896, U896); + generate_sigadd_tests!(I896, U896, i896, I960, U960); generate_sigadd_tests!(I1088, U1088, i1088, I1152, U1152); + generate_sigadd_tests!(I1216, U1216, i1216, I1280, U1280); + generate_sigadd_tests!(I1280, U1280, i1280, I1344, U1344); generate_sigadd_tests!(I1600, U1600, i1600, I1664, U1664); generate_sigadd_tests!(I2112, U2112, i2112, I2176, U2176); generate_sigadd_tests!(I3136, U3136, i3136, I3200, U3200); @@ -308,13 +372,17 @@ mod tests { generate_sigsub_tests!(I512, U512, i512, I576, U576); generate_sigsub_tests!(I576, U576, i576, I640, U640); generate_sigsub_tests!(I640, U640, i640, I704, U704); + generate_sigsub_tests!(I768, U768, i768, I832, U832); generate_sigsub_tests!(I896, U896, i896, I960, U960); + generate_sigsub_tests!(I1024, U1024, i1024, I1088, U1088); generate_sigsub_tests!(I1088, U1088, i1088, I1152, U1152); generate_sigsub_tests!(I1152, U1152, i1152, I1216, U1216); generate_sigsub_tests!(I1280, U1280, i1280, I1344, U1344); generate_sigsub_tests!(I1600, U1600, i1600, I1664, U1664); + generate_sigsub_tests!(I1792, U1792, i1792, I1856, U1856); generate_sigsub_tests!(I2112, U2112, i2112, I2176, U2176); generate_sigsub_tests!(I2176, U2176, i2176, I2240, U2240); + generate_sigsub_tests!(I2560, U2560, i2560, I2624, U2624); generate_sigsub_tests!(I3136, U3136, i3136, I3200, U3200); generate_sigsub_tests!(I3200, U3200, i3200, I3264, U3264); generate_sigsub_tests!(I4160, U4160, i4160, I4224, U4224); @@ -342,6 +410,7 @@ mod tests { generate_signed_tests!(I640, U640, i640); generate_signed_tests!(I704, U704, i704); generate_signed_tests!(I768, U768, i768); + generate_signed_tests!(I832, U832, i832); generate_signed_tests!(I896, U896, i896); generate_signed_tests!(I960, U960, i960); generate_signed_tests!(I1024, U1024, i1024); @@ -354,11 +423,15 @@ mod tests { generate_signed_tests!(I1600, U1600, i1600); generate_signed_tests!(I1664, U1664, i1664); generate_signed_tests!(I1792, U1792, i1792); + generate_signed_tests!(I1856, U1856, i1856); generate_signed_tests!(I2048, U2048, i2048); generate_signed_tests!(I2112, U2112, i2112); generate_signed_tests!(I2176, U2176, i2176); generate_signed_tests!(I2240, U2240, i2240); + generate_signed_tests!(I2304, U2304, i2304); + generate_signed_tests!(I2432, U2432, i2432); generate_signed_tests!(I2560, U2560, i2560); + generate_signed_tests!(I2624, U2624, i2624); generate_signed_tests!(I3072, U3072, i3072); generate_signed_tests!(I3136, U3136, i3136); generate_signed_tests!(I3200, U3200, i3200); @@ -396,6 +469,7 @@ mod tests { generate_sigconversion_tests!(I640, U640, i640); generate_sigconversion_tests!(I704, U704, i704); generate_sigconversion_tests!(I768, U768, i768); + generate_sigconversion_tests!(I832, U832, i832); generate_sigconversion_tests!(I896, U896, i896); generate_sigconversion_tests!(I960, U960, i960); generate_sigconversion_tests!(I1024, U1024, i1024); @@ -408,11 +482,15 @@ mod tests { generate_sigconversion_tests!(I1600, U1600, i1600); generate_sigconversion_tests!(I1664, U1664, i1664); generate_sigconversion_tests!(I1792, U1792, i1792); + generate_sigconversion_tests!(I1856, U1856, i1856); generate_sigconversion_tests!(I2048, U2048, i2048); generate_sigconversion_tests!(I2112, U2112, i2112); generate_sigconversion_tests!(I2176, U2176, i2176); generate_sigconversion_tests!(I2240, U2240, i2240); + generate_sigconversion_tests!(I2304, U2304, i2304); + generate_sigconversion_tests!(I2432, U2432, i2432); generate_sigconversion_tests!(I2560, U2560, i2560); + generate_sigconversion_tests!(I2624, U2624, i2624); generate_sigconversion_tests!(I3072, U3072, i3072); generate_sigconversion_tests!(I3136, U3136, i3136); generate_sigconversion_tests!(I3200, U3200, i3200); @@ -446,9 +524,12 @@ mod tests { generate_sigcmp_tests!(I256, U256, i256); generate_sigcmp_tests!(I320, U320, i320); generate_sigcmp_tests!(I448, U448, i448); + generate_sigcmp_tests!(I512, U512, i512); generate_sigcmp_tests!(I576, U576, i576); generate_sigcmp_tests!(I640, U640, i640); + generate_sigcmp_tests!(I896, U896, i896); generate_sigcmp_tests!(I1088, U1088, i1088); + generate_sigcmp_tests!(I1280, U1280, i1280); generate_sigcmp_tests!(I1600, U1600, i1600); generate_sigcmp_tests!(I2112, U2112, i2112); generate_sigcmp_tests!(I3136, U3136, i3136); @@ -469,8 +550,12 @@ mod tests { generate_sigmul_tests!(I512, U512, i512, I1024, U1024); generate_sigmul_tests!(I576, U576, i576, I1152, U1152); generate_sigmul_tests!(I640, U640, i640, I1280, U1280); + generate_sigmul_tests!(I768, U768, i768, I1536, U1536); + generate_sigmul_tests!(I832, U832, i832, I1664, U1664); generate_sigmul_tests!(I896, U896, i896, I1792, U1792); generate_sigmul_tests!(I1088, U1088, i1088, I2176, U2176); + generate_sigmul_tests!(I1152, U1152, i1152, I2304, U2304); + generate_sigmul_tests!(I1216, U1216, i1216, I2432, U2432); generate_sigmul_tests!(I1280, U1280, i1280, I2560, U2560); generate_sigmul_tests!(I1600, U1600, i1600, I3200, U3200); generate_sigmul_tests!(I2112, U2112, i2112, I4224, U4224); @@ -493,12 +578,16 @@ mod tests { generate_sigdiv_tests!(I576, U576, i576); generate_sigdiv_tests!(I640, U640, i640); generate_sigdiv_tests!(I768, U768, i768); + generate_sigdiv_tests!(I832, U832, i832); generate_sigdiv_tests!(I896, U896, i896); generate_sigdiv_tests!(I1088, U1088, i1088); generate_sigdiv_tests!(I1152, U1152, i1152); + generate_sigdiv_tests!(I1216, U1216, i1216); generate_sigdiv_tests!(I1280, U1280, i1280); generate_sigdiv_tests!(I1600, U1600, i1600); + generate_sigdiv_tests!(I1664, U1664, i1664); generate_sigdiv_tests!(ignore I2112, U2112, i2112); + generate_sigdiv_tests!(ignore I2432, U2432, i2432); generate_sigdiv_tests!(ignore I3136, U3136, i3136); generate_sigdiv_tests!(ignore I4160, U4160, i4160); generate_sigdiv_tests!(ignore I7744, U7744, i7744); @@ -511,10 +600,18 @@ mod tests { generate_sigshiftl_tests!(I256, U256, i256); generate_sigshiftl_tests!(I320, U320, i320); + generate_sigshiftl_tests!(I384, U384, i384); generate_sigshiftl_tests!(I448, U448, i448); + generate_sigshiftl_tests!(I512, U512, i512); generate_sigshiftl_tests!(I576, U576, i576); generate_sigshiftl_tests!(I640, U640, i640); + generate_sigshiftl_tests!(I768, U768, i768); + generate_sigshiftl_tests!(I832, U832, i832); + generate_sigshiftl_tests!(I896, U896, i896); generate_sigshiftl_tests!(I1088, U1088, i1088); + generate_sigshiftl_tests!(I1152, U1152, i1152); + generate_sigshiftl_tests!(I1216, U1216, i1216); + generate_sigshiftl_tests!(I1280, U1280, i1280); generate_sigshiftl_tests!(I1600, U1600, i1600); generate_sigshiftl_tests!(I2112, U2112, i2112); generate_sigshiftl_tests!(I3136, U3136, i3136); @@ -529,10 +626,18 @@ mod tests { generate_sigshiftr_tests!(I256, U256, i256); generate_sigshiftr_tests!(I320, U320, i320); + generate_sigshiftr_tests!(I384, U384, i384); generate_sigshiftr_tests!(I448, U448, i448); + generate_sigshiftr_tests!(I512, U512, i512); generate_sigshiftr_tests!(I576, U576, i576); generate_sigshiftr_tests!(I640, U640, i640); + generate_sigshiftr_tests!(I768, U768, i768); + generate_sigshiftr_tests!(I832, U832, i832); + generate_sigshiftr_tests!(I896, U896, i896); generate_sigshiftr_tests!(I1088, U1088, i1088); + generate_sigshiftr_tests!(I1152, U1152, i1152); + generate_sigshiftr_tests!(I1216, U1216, i1216); + generate_sigshiftr_tests!(I1280, U1280, i1280); generate_sigshiftr_tests!(I1600, U1600, i1600); generate_sigshiftr_tests!(I2112, U2112, i2112); generate_sigshiftr_tests!(I3136, U3136, i3136); @@ -553,8 +658,12 @@ mod tests { generate_sigscale_tests!(I512, U512, i512, I576, U576); generate_sigscale_tests!(I576, U576, i576, I640, U640); generate_sigscale_tests!(I640, U640, i640, I704, U704); + generate_sigscale_tests!(I768, U768, i768, I832, U832); + generate_sigscale_tests!(I832, U832, i832, I896, U896); generate_sigscale_tests!(I896, U896, i896, I960, U960); generate_sigscale_tests!(I1088, U1088, i1088, I1152, U1152); + generate_sigscale_tests!(I1152, U1152, i1152, I1216, U1216); + generate_sigscale_tests!(I1216, U1216, i1216, I1280, U1280); generate_sigscale_tests!(I1280, U1280, i1280, I1344, U1344); generate_sigscale_tests!(I1600, U1600, i1600, I1664, U1664); generate_sigscale_tests!(I2112, U2112, i2112, I2176, U2176); @@ -571,9 +680,12 @@ mod tests { generate_egcd_tests!(I192, U192, i192, I256, U256); generate_egcd_tests!(I256, U256, i256, I320, U320); generate_egcd_tests!(I384, U384, i384, I448, U448); + generate_egcd_tests!(I448, U448, i448, I512, U512); generate_egcd_tests!(I512, U512, i512, I576, U576); generate_egcd_tests!(I576, U576, i576, I640, U640); + generate_egcd_tests!(I832, U832, i832, I896, U896); generate_egcd_tests!(ignore I1024, U1024, i1024, I1088, U1088); + generate_egcd_tests!(ignore I1216, U1216, i1216, I1280, U1280); generate_egcd_tests!(ignore I1536, U1536, i1536, I1600, U1600); generate_egcd_tests!(ignore I2048, U2048, i2048, I2112, U2112); generate_egcd_tests!(ignore I3072, U3072, i3072, I3136, U3136); @@ -589,7 +701,10 @@ mod tests { generate_moddiv_tests!(I192, U192, i192); generate_moddiv_tests!(I256, U256, i256); generate_moddiv_tests!(I384, U384, i384); + generate_moddiv_tests!(I448, U448, i448); generate_moddiv_tests!(I576, U576, i576); + generate_moddiv_tests!(I832, U832, i832); + generate_moddiv_tests!(I1216, U1216, i1216); } mod modinv { use super::super::*; @@ -598,9 +713,12 @@ mod tests { generate_modinv_tests!(I192, U192, i192); generate_modinv_tests!(I256, U256, i256); generate_modinv_tests!(I384, U384, i384); + generate_modinv_tests!(I448, U448, i448); generate_modinv_tests!(I512, U512, i512); generate_modinv_tests!(I576, U576, i576); + generate_modinv_tests!(I832, U832, i832); generate_modinv_tests!(I1024, U1024, i1024); + generate_modinv_tests!(I1216, U1216, i1216); generate_modinv_tests!(ignore I2048, U2048, i2048); generate_modinv_tests!(ignore I3072, U3072, i3072); generate_modinv_tests!(ignore I4096, U4096, i4096); @@ -614,6 +732,9 @@ mod tests { generate_smodinv_tests!(I192, U192, i192); generate_smodinv_tests!(I256, U256, i256); generate_smodinv_tests!(I384, U384, i384); + generate_smodinv_tests!(I448, U448, i448); generate_smodinv_tests!(I576, U576, i576); + generate_smodinv_tests!(I832, U832, i832); + generate_smodinv_tests!(I1216, U1216, i1216); } } diff --git a/src/unsigned/invoc.rs b/src/unsigned/invoc.rs index a578593..d1a2a6f 100644 --- a/src/unsigned/invoc.rs +++ b/src/unsigned/invoc.rs @@ -40,7 +40,6 @@ conversion_impls!(U256, U384); conversion_impls!(U256, U448); conversion_impls!(U256, U512); conversion_impls!(U256, U576); -conversion_impls!(U256, U640); conversion_impls!(U256, U1152); conversion_impls!(U256, U2048); conversion_impls!(U256, U3072); @@ -53,6 +52,7 @@ div_impls!(U320, U640); multiply_impls!(U320, U640); scale_impls!(U320, U384); shift_impls!(U320, 5); +square_impls!(U320, U640, 320); subtraction_impls!(U320, 5); conversion_impls!(U320, U384); conversion_impls!(U320, U512); @@ -67,19 +67,21 @@ div_impls!(U384, U768); multiply_impls!(U384, U768); scale_impls!(U384, U448); shift_impls!(U384, 6); +square_impls!(U384, U768, 384); subtraction_impls!(U384, 6); conversion_impls!(U384, U448); conversion_impls!(U384, U768); conversion_impls!(U384, U832); -conversion_impls!(U384, U896); conversion_impls!(U384, U1024); addition_impls!(U448, U512); base_impls!(U448, 7); random_impls!(U448, UniformU448); +barrett_impl!(BarrettU448, U448, U512, U896, U960); div_impls!(U448, U896); multiply_impls!(U448, U896); scale_impls!(U448, U512); shift_impls!(U448, 7); +square_impls!(U448, U896, 448); subtraction_impls!(U448, 7); conversion_impls!(U448, U512); conversion_impls!(U448, U768); @@ -101,6 +103,8 @@ shift_impls!(U512, 8); square_impls!(U512, U1024, 512); subtraction_impls!(U512, 8); conversion_impls!(U512, U576); +conversion_impls!(U512, U896); +conversion_impls!(U512, U960); conversion_impls!(U512, U1024); conversion_impls!(U512, U1088); conversion_impls!(U512, U2048); @@ -114,13 +118,13 @@ div_impls!(U576, U1152); multiply_impls!(U576, U1152); scale_impls!(U576, U640); shift_impls!(U576, 9); +square_impls!(U576, U1152, 576); subtraction_impls!(U576, 9); conversion_impls!(U576, U640); conversion_impls!(U576, U1024); conversion_impls!(U576, U1088); conversion_impls!(U576, U1152); conversion_impls!(U576, U1216); -conversion_impls!(U576, U1280); addition_impls!(U640, U704); base_impls!(U640, 10); random_impls!(U640, UniformU640); @@ -128,6 +132,7 @@ div_impls!(U640, U1280); multiply_impls!(U640, U1280); scale_impls!(U640, U704); shift_impls!(U640, 10); +square_impls!(U640, U1280, 640); subtraction_impls!(U640, 10); conversion_impls!(U640, U704); conversion_impls!(U640, U1152); @@ -144,18 +149,23 @@ div_impls!(U768, U1536); multiply_impls!(U768, U1536); scale_impls!(U768, U832); shift_impls!(U768, 12); +square_impls!(U768, U1536, 768); subtraction_impls!(U768, 12); conversion_impls!(U768, U832); conversion_impls!(U768, U1536); addition_impls!(U832, U896); base_impls!(U832, 13); random_impls!(U832, UniformU832); +barrett_impl!(BarrettU832, U832, U896, U1664, U1728); div_impls!(U832, U1664); multiply_impls!(U832, U1664); scale_impls!(U832, U896); +shift_impls!(U832, 13); +square_impls!(U832, U1664, 832); subtraction_impls!(U832, 13); conversion_impls!(U832, U896); conversion_impls!(U832, U1664); +conversion_impls!(U832, U1728); addition_impls!(U896, U960); base_impls!(U896, 14); random_impls!(U896, UniformU896); @@ -163,12 +173,22 @@ div_impls!(U896, U1792); multiply_impls!(U896, U1792); scale_impls!(U896, U960); shift_impls!(U896, 14); +square_impls!(U896, U1792, 896); subtraction_impls!(U896, 14); conversion_impls!(U896, U960); +conversion_impls!(U896, U1664); +conversion_impls!(U896, U1728); conversion_impls!(U896, U1792); +conversion_impls!(U896, U1856); +addition_impls!(U960, U1024); base_impls!(U960, 15); random_impls!(U960, UniformU960); +div_impls!(U960, U1920); +multiply_impls!(U960, U1920); +scale_impls!(U960, U1024); subtraction_impls!(U960, 15); +conversion_impls!(U960, U1024); +conversion_impls!(U960, U1920); addition_impls!(U1024, U1088); base_impls!(U1024, 16); random_impls!(U1024, UniformU1024); @@ -197,6 +217,7 @@ div_impls!(U1088, U2176); multiply_impls!(U1088, U2176); scale_impls!(U1088, U1152); shift_impls!(U1088, 17); +square_impls!(U1088, U2176, 1088); subtraction_impls!(U1088, 17); conversion_impls!(U1088, U1152); conversion_impls!(U1088, U2048); @@ -210,18 +231,23 @@ div_impls!(U1152, U2304); multiply_impls!(U1152, U2304); scale_impls!(U1152, U1216); shift_impls!(U1152, 18); +square_impls!(U1152, U2304, 1152); subtraction_impls!(U1152, 18); conversion_impls!(U1152, U1216); conversion_impls!(U1152, U2304); addition_impls!(U1216, U1280); base_impls!(U1216, 19); random_impls!(U1216, UniformU1216); +barrett_impl!(BarrettU1216, U1216, U1280, U2432, U2496); div_impls!(U1216, U2432); multiply_impls!(U1216, U2432); scale_impls!(U1216, U1280); +shift_impls!(U1216, 19); +square_impls!(U1216, U2432, 1216); subtraction_impls!(U1216, 19); conversion_impls!(U1216, U1280); conversion_impls!(U1216, U2432); +conversion_impls!(U1216, U2496); addition_impls!(U1280, U1344); base_impls!(U1280, 20); random_impls!(U1280, UniformU1280); @@ -229,9 +255,13 @@ div_impls!(U1280, U2560); multiply_impls!(U1280, U2560); scale_impls!(U1280, U1344); shift_impls!(U1280, 20); +square_impls!(U1280, U2560, 1280); subtraction_impls!(U1280, 20); conversion_impls!(U1280, U1344); +conversion_impls!(U1280, U2432); +conversion_impls!(U1280, U2496); conversion_impls!(U1280, U2560); +conversion_impls!(U1280, U2624); base_impls!(U1344, 21); random_impls!(U1344, UniformU1344); subtraction_impls!(U1344, 21); @@ -259,18 +289,44 @@ div_impls!(U1600, U3200); multiply_impls!(U1600, U3200); scale_impls!(U1600, U1664); shift_impls!(U1600, 25); +square_impls!(U1600, U3200, 1600); subtraction_impls!(U1600, 25); conversion_impls!(U1600, U1664); conversion_impls!(U1600, U3072); conversion_impls!(U1600, U3136); conversion_impls!(U1600, U3200); conversion_impls!(U1600, U3264); +addition_impls!(U1664, U1728); base_impls!(U1664, 26); random_impls!(U1664, UniformU1664); +div_impls!(U1664, U3328); +multiply_impls!(U1664, U3328); +scale_impls!(U1664, U1728); +shift_impls!(U1664, 26); subtraction_impls!(U1664, 26); +conversion_impls!(U1664, U1728); +conversion_impls!(U1664, U3328); +addition_impls!(U1728, U1792); +base_impls!(U1728, 27); +random_impls!(U1728, UniformU1728); +div_impls!(U1728, U3456); +multiply_impls!(U1728, U3456); +scale_impls!(U1728, U1792); +subtraction_impls!(U1728, 27); +conversion_impls!(U1728, U1792); +conversion_impls!(U1728, U3456); +addition_impls!(U1792, U1856); base_impls!(U1792, 28); random_impls!(U1792, UniformU1792); +shift_impls!(U1792, 28); subtraction_impls!(U1792, 28); +conversion_impls!(U1792, U1856); +base_impls!(U1856, 29); +random_impls!(U1856, UniformU1856); +subtraction_impls!(U1856, 29); +base_impls!(U1920, 30); +random_impls!(U1920, UniformU1920); +subtraction_impls!(U1920, 30); addition_impls!(U2048, U2112); base_impls!(U2048, 32); random_impls!(U2048, UniformU2048); @@ -299,6 +355,7 @@ div_impls!(U2112, U4224); multiply_impls!(U2112, U4224); scale_impls!(U2112, U2176); shift_impls!(U2112, 33); +square_impls!(U2112, U4224, 2112); subtraction_impls!(U2112, 33); conversion_impls!(U2112, U2176); conversion_impls!(U2112, U4096); @@ -317,12 +374,34 @@ subtraction_impls!(U2240, 35); base_impls!(U2304, 36); random_impls!(U2304, UniformU2304); subtraction_impls!(U2304, 36); +addition_impls!(U2432, U2496); base_impls!(U2432, 38); random_impls!(U2432, UniformU2432); +div_impls!(U2432, U4864); +multiply_impls!(U2432, U4864); +scale_impls!(U2432, U2496); +shift_impls!(U2432, 38); subtraction_impls!(U2432, 38); +conversion_impls!(U2432, U2496); +conversion_impls!(U2432, U4864); +addition_impls!(U2496, U2560); +base_impls!(U2496, 39); +random_impls!(U2496, UniformU2496); +div_impls!(U2496, U4992); +multiply_impls!(U2496, U4992); +scale_impls!(U2496, U2560); +subtraction_impls!(U2496, 39); +conversion_impls!(U2496, U2560); +conversion_impls!(U2496, U4992); +addition_impls!(U2560, U2624); base_impls!(U2560, 40); random_impls!(U2560, UniformU2560); +shift_impls!(U2560, 40); subtraction_impls!(U2560, 40); +conversion_impls!(U2560, U2624); +base_impls!(U2624, 41); +random_impls!(U2624, UniformU2624); +subtraction_impls!(U2624, 41); addition_impls!(U3072, U3136); base_impls!(U3072, 48); random_impls!(U3072, UniformU3072); @@ -351,6 +430,7 @@ div_impls!(U3136, U6272); multiply_impls!(U3136, U6272); scale_impls!(U3136, U3200); shift_impls!(U3136, 49); +square_impls!(U3136, U6272, 3136); subtraction_impls!(U3136, 49); conversion_impls!(U3136, U3200); conversion_impls!(U3136, U6144); @@ -366,6 +446,12 @@ conversion_impls!(U3200, U3264); base_impls!(U3264, 51); random_impls!(U3264, UniformU3264); subtraction_impls!(U3264, 51); +base_impls!(U3328, 52); +random_impls!(U3328, UniformU3328); +subtraction_impls!(U3328, 52); +base_impls!(U3456, 54); +random_impls!(U3456, UniformU3456); +subtraction_impls!(U3456, 54); addition_impls!(U4096, U4160); base_impls!(U4096, 64); random_impls!(U4096, UniformU4096); @@ -391,6 +477,7 @@ div_impls!(U4160, U8320); multiply_impls!(U4160, U8320); scale_impls!(U4160, U4224); shift_impls!(U4160, 65); +square_impls!(U4160, U8320, 4160); subtraction_impls!(U4160, 65); conversion_impls!(U4160, U4224); conversion_impls!(U4160, U8192); @@ -410,6 +497,12 @@ conversion_impls!(U4224, U8448); base_impls!(U4288, 67); random_impls!(U4288, UniformU4288); subtraction_impls!(U4288, 67); +base_impls!(U4864, 76); +random_impls!(U4864, UniformU4864); +subtraction_impls!(U4864, 76); +base_impls!(U4992, 78); +random_impls!(U4992, UniformU4992); +subtraction_impls!(U4992, 78); addition_impls!(U6144, U6208); base_impls!(U6144, 96); random_impls!(U6144, UniformU6144); @@ -462,6 +555,7 @@ div_impls!(U7744, U15488); multiply_impls!(U7744, U15488); scale_impls!(U7744, U7808); shift_impls!(U7744, 121); +square_impls!(U7744, U15488, 7744); subtraction_impls!(U7744, 121); conversion_impls!(U7744, U7808); conversion_impls!(U7744, U15360); @@ -494,6 +588,7 @@ div_impls!(U8256, U16512); multiply_impls!(U8256, U16512); scale_impls!(U8256, U8320); shift_impls!(U8256, 129); +square_impls!(U8256, U16512, 8256); subtraction_impls!(U8256, 129); conversion_impls!(U8256, U8320); conversion_impls!(U8256, U16384); @@ -551,6 +646,7 @@ div_impls!(U15424, U30848); multiply_impls!(U15424, U30848); scale_impls!(U15424, U15488); shift_impls!(U15424, 241); +square_impls!(U15424, U30848, 15424); subtraction_impls!(U15424, 241); conversion_impls!(U15424, U15488); conversion_impls!(U15424, U30720); @@ -668,22 +764,31 @@ mod tests { generate_base_tests!(U1536, u1536); generate_base_tests!(U1600, u1600); generate_base_tests!(U1664, u1664); + generate_base_tests!(U1728, u1728); generate_base_tests!(U1792, u1792); + generate_base_tests!(U1856, u1856); + generate_base_tests!(U1920, u1920); generate_base_tests!(U2048, u2048); generate_base_tests!(U2112, u2112); generate_base_tests!(U2176, u2176); generate_base_tests!(U2240, u2240); generate_base_tests!(U2304, u2304); generate_base_tests!(U2432, u2432); + generate_base_tests!(U2496, u2496); generate_base_tests!(U2560, u2560); + generate_base_tests!(U2624, u2624); generate_base_tests!(U3072, u3072); generate_base_tests!(U3136, u3136); generate_base_tests!(U3200, u3200); generate_base_tests!(U3264, u3264); + generate_base_tests!(U3328, u3328); + generate_base_tests!(U3456, u3456); generate_base_tests!(U4096, u4096); generate_base_tests!(U4160, u4160); generate_base_tests!(U4224, u4224); generate_base_tests!(U4288, u4288); + generate_base_tests!(U4864, u4864); + generate_base_tests!(U4992, u4992); generate_base_tests!(U6144, u6144); generate_base_tests!(U6208, u6208); generate_base_tests!(U6272, u6272); @@ -741,22 +846,31 @@ mod tests { generate_conversion_tests!(U1536, u1536); generate_conversion_tests!(U1600, u1600); generate_conversion_tests!(U1664, u1664); + generate_conversion_tests!(U1728, u1728); generate_conversion_tests!(U1792, u1792); + generate_conversion_tests!(U1856, u1856); + generate_conversion_tests!(U1920, u1920); generate_conversion_tests!(U2048, u2048); generate_conversion_tests!(U2112, u2112); generate_conversion_tests!(U2176, u2176); generate_conversion_tests!(U2240, u2240); generate_conversion_tests!(U2304, u2304); generate_conversion_tests!(U2432, u2432); + generate_conversion_tests!(U2496, u2496); generate_conversion_tests!(U2560, u2560); + generate_conversion_tests!(U2624, u2624); generate_conversion_tests!(U3072, u3072); generate_conversion_tests!(U3136, u3136); generate_conversion_tests!(U3200, u3200); generate_conversion_tests!(U3264, u3264); + generate_conversion_tests!(U3328, u3328); + generate_conversion_tests!(U3456, u3456); generate_conversion_tests!(U4096, u4096); generate_conversion_tests!(U4160, u4160); generate_conversion_tests!(U4224, u4224); generate_conversion_tests!(U4288, u4288); + generate_conversion_tests!(U4864, u4864); + generate_conversion_tests!(U4992, u4992); generate_conversion_tests!(U6144, u6144); generate_conversion_tests!(U6208, u6208); generate_conversion_tests!(U6272, u6272); @@ -814,22 +928,31 @@ mod tests { generate_codec_tests!(U1536, u1536); generate_codec_tests!(U1600, u1600); generate_codec_tests!(U1664, u1664); + generate_codec_tests!(U1728, u1728); generate_codec_tests!(U1792, u1792); + generate_codec_tests!(U1856, u1856); + generate_codec_tests!(U1920, u1920); generate_codec_tests!(U2048, u2048); generate_codec_tests!(U2112, u2112); generate_codec_tests!(U2176, u2176); generate_codec_tests!(U2240, u2240); generate_codec_tests!(U2304, u2304); generate_codec_tests!(U2432, u2432); + generate_codec_tests!(U2496, u2496); generate_codec_tests!(U2560, u2560); + generate_codec_tests!(U2624, u2624); generate_codec_tests!(U3072, u3072); generate_codec_tests!(U3136, u3136); generate_codec_tests!(U3200, u3200); generate_codec_tests!(U3264, u3264); + generate_codec_tests!(U3328, u3328); + generate_codec_tests!(U3456, u3456); generate_codec_tests!(U4096, u4096); generate_codec_tests!(U4160, u4160); generate_codec_tests!(U4224, u4224); generate_codec_tests!(U4288, u4288); + generate_codec_tests!(U4864, u4864); + generate_codec_tests!(U4992, u4992); generate_codec_tests!(U6144, u6144); generate_codec_tests!(U6208, u6208); generate_codec_tests!(U6272, u6272); @@ -890,22 +1013,31 @@ mod tests { generate_cmp_tests!(U1536, u1536); generate_cmp_tests!(U1600, u1600); generate_cmp_tests!(U1664, u1664); + generate_cmp_tests!(U1728, u1728); generate_cmp_tests!(U1792, u1792); + generate_cmp_tests!(U1856, u1856); + generate_cmp_tests!(U1920, u1920); generate_cmp_tests!(U2048, u2048); generate_cmp_tests!(U2112, u2112); generate_cmp_tests!(U2176, u2176); generate_cmp_tests!(U2240, u2240); generate_cmp_tests!(U2304, u2304); generate_cmp_tests!(U2432, u2432); + generate_cmp_tests!(U2496, u2496); generate_cmp_tests!(U2560, u2560); + generate_cmp_tests!(U2624, u2624); generate_cmp_tests!(U3072, u3072); generate_cmp_tests!(U3136, u3136); generate_cmp_tests!(U3200, u3200); generate_cmp_tests!(U3264, u3264); + generate_cmp_tests!(U3328, u3328); + generate_cmp_tests!(U3456, u3456); generate_cmp_tests!(U4096, u4096); generate_cmp_tests!(U4160, u4160); generate_cmp_tests!(U4224, u4224); generate_cmp_tests!(U4288, u4288); + generate_cmp_tests!(U4864, u4864); + generate_cmp_tests!(U4992, u4992); generate_cmp_tests!(U6144, u6144); generate_cmp_tests!(U6208, u6208); generate_cmp_tests!(U6272, u6272); @@ -966,22 +1098,31 @@ mod tests { generate_sub_tests!(U1536, u1536); generate_sub_tests!(U1600, u1600); generate_sub_tests!(U1664, u1664); + generate_sub_tests!(U1728, u1728); generate_sub_tests!(U1792, u1792); + generate_sub_tests!(U1856, u1856); + generate_sub_tests!(U1920, u1920); generate_sub_tests!(U2048, u2048); generate_sub_tests!(U2112, u2112); generate_sub_tests!(U2176, u2176); generate_sub_tests!(U2240, u2240); generate_sub_tests!(U2304, u2304); generate_sub_tests!(U2432, u2432); + generate_sub_tests!(U2496, u2496); generate_sub_tests!(U2560, u2560); + generate_sub_tests!(U2624, u2624); generate_sub_tests!(U3072, u3072); generate_sub_tests!(U3136, u3136); generate_sub_tests!(U3200, u3200); generate_sub_tests!(U3264, u3264); + generate_sub_tests!(U3328, u3328); + generate_sub_tests!(U3456, u3456); generate_sub_tests!(U4096, u4096); generate_sub_tests!(U4160, u4160); generate_sub_tests!(U4224, u4224); generate_sub_tests!(U4288, u4288); + generate_sub_tests!(U4864, u4864); + generate_sub_tests!(U4992, u4992); generate_sub_tests!(U6144, u6144); generate_sub_tests!(U6208, u6208); generate_sub_tests!(U6272, u6272); @@ -1028,16 +1169,22 @@ mod tests { generate_shiftl_tests!(U576, u576); generate_shiftl_tests!(U640, u640); generate_shiftl_tests!(U768, u768); + generate_shiftl_tests!(U832, u832); generate_shiftl_tests!(U896, u896); generate_shiftl_tests!(U1024, u1024); generate_shiftl_tests!(U1088, u1088); generate_shiftl_tests!(U1152, u1152); + generate_shiftl_tests!(U1216, u1216); generate_shiftl_tests!(U1280, u1280); generate_shiftl_tests!(U1536, u1536); generate_shiftl_tests!(U1600, u1600); + generate_shiftl_tests!(U1664, u1664); + generate_shiftl_tests!(U1792, u1792); generate_shiftl_tests!(U2048, u2048); generate_shiftl_tests!(U2112, u2112); generate_shiftl_tests!(U2176, u2176); + generate_shiftl_tests!(U2432, u2432); + generate_shiftl_tests!(U2560, u2560); generate_shiftl_tests!(U3072, u3072); generate_shiftl_tests!(U3136, u3136); generate_shiftl_tests!(U3200, u3200); @@ -1072,16 +1219,22 @@ mod tests { generate_shiftr_tests!(U576, u576); generate_shiftr_tests!(U640, u640); generate_shiftr_tests!(U768, u768); + generate_shiftr_tests!(U832, u832); generate_shiftr_tests!(U896, u896); generate_shiftr_tests!(U1024, u1024); generate_shiftr_tests!(U1088, u1088); generate_shiftr_tests!(U1152, u1152); + generate_shiftr_tests!(U1216, u1216); generate_shiftr_tests!(U1280, u1280); generate_shiftr_tests!(U1536, u1536); generate_shiftr_tests!(U1600, u1600); + generate_shiftr_tests!(U1664, u1664); + generate_shiftr_tests!(U1792, u1792); generate_shiftr_tests!(U2048, u2048); generate_shiftr_tests!(U2112, u2112); generate_shiftr_tests!(U2176, u2176); + generate_shiftr_tests!(U2432, u2432); + generate_shiftr_tests!(U2560, u2560); generate_shiftr_tests!(U3072, u3072); generate_shiftr_tests!(U3136, u3136); generate_shiftr_tests!(U3200, u3200); @@ -1118,15 +1271,22 @@ mod tests { generate_add_tests!(U768, u768, U832); generate_add_tests!(U832, u832, U896); generate_add_tests!(U896, u896, U960); + generate_add_tests!(U960, u960, U1024); generate_add_tests!(U1024, u1024, U1088); generate_add_tests!(U1088, u1088, U1152); generate_add_tests!(U1152, u1152, U1216); generate_add_tests!(U1216, u1216, U1280); generate_add_tests!(U1280, u1280, U1344); generate_add_tests!(U1600, u1600, U1664); + generate_add_tests!(U1664, u1664, U1728); + generate_add_tests!(U1728, u1728, U1792); + generate_add_tests!(U1792, u1792, U1856); generate_add_tests!(U2048, u2048, U2112); generate_add_tests!(U2112, u2112, U2176); generate_add_tests!(U2176, u2176, U2240); + generate_add_tests!(U2432, u2432, U2496); + generate_add_tests!(U2496, u2496, U2560); + generate_add_tests!(U2560, u2560, U2624); generate_add_tests!(U3072, u3072, U3136); generate_add_tests!(U3136, u3136, U3200); generate_add_tests!(U3200, u3200, U3264); @@ -1161,6 +1321,7 @@ mod tests { generate_mul_tests!(U768, u768, U1536); generate_mul_tests!(U832, u832, U1664); generate_mul_tests!(U896, u896, U1792); + generate_mul_tests!(U960, u960, U1920); generate_mul_tests!(U1024, u1024, U2048); generate_mul_tests!(U1088, u1088, U2176); generate_mul_tests!(U1152, u1152, U2304); @@ -1168,8 +1329,12 @@ mod tests { generate_mul_tests!(U1280, u1280, U2560); generate_mul_tests!(U1536, u1536, U3072); generate_mul_tests!(U1600, u1600, U3200); + generate_mul_tests!(U1664, u1664, U3328); + generate_mul_tests!(U1728, u1728, U3456); generate_mul_tests!(U2048, u2048, U4096); generate_mul_tests!(U2112, u2112, U4224); + generate_mul_tests!(U2432, u2432, U4864); + generate_mul_tests!(U2496, u2496, U4992); generate_mul_tests!(U3072, u3072, U6144); generate_mul_tests!(U3136, u3136, U6272); generate_mul_tests!(U4096, u4096, U8192); @@ -1205,6 +1370,7 @@ mod tests { generate_scale_tests!(U768, u768, U832); generate_scale_tests!(U832, u832, U896); generate_scale_tests!(U896, u896, U960); + generate_scale_tests!(U960, u960, U1024); generate_scale_tests!(U1024, u1024, U1088); generate_scale_tests!(U1088, u1088, U1152); generate_scale_tests!(U1152, u1152, U1216); @@ -1212,8 +1378,12 @@ mod tests { generate_scale_tests!(U1280, u1280, U1344); generate_scale_tests!(U1536, u1536, U1600); generate_scale_tests!(U1600, u1600, U1664); + generate_scale_tests!(U1664, u1664, U1728); + generate_scale_tests!(U1728, u1728, U1792); generate_scale_tests!(U2048, u2048, U2112); generate_scale_tests!(U2112, u2112, U2176); + generate_scale_tests!(U2432, u2432, U2496); + generate_scale_tests!(U2496, u2496, U2560); generate_scale_tests!(U3072, u3072, U3136); generate_scale_tests!(U3136, u3136, U3200); generate_scale_tests!(U4096, u4096, U4160); @@ -1249,6 +1419,7 @@ mod tests { generate_div_tests!(U768, u768); generate_div_tests!(U832, u832); generate_div_tests!(U896, u896); + generate_div_tests!(U960, u960); generate_div_tests!(U1024, u1024); generate_div_tests!(U1088, u1088); generate_div_tests!(U1152, u1152); @@ -1256,8 +1427,12 @@ mod tests { generate_div_tests!(U1280, u1280); generate_div_tests!(U1536, u1536); generate_div_tests!(U1600, u1600); + generate_div_tests!(U1664, u1664); + generate_div_tests!(U1728, u1728); generate_div_tests!(U2048, u2048); generate_div_tests!(ignore U2112, u2112); + generate_div_tests!(ignore U2432, u2432); + generate_div_tests!(ignore U2496, u2496); generate_div_tests!(ignore U3072, u3072); generate_div_tests!(ignore U3136, u3136); generate_div_tests!(ignore U4096, u4096); @@ -1285,9 +1460,12 @@ mod tests { generate_barrett_gen_tests!(U192, u192, U256); generate_barrett_gen_tests!(U256, u256, U320); generate_barrett_gen_tests!(U384, u384, U448); + generate_barrett_gen_tests!(U448, u448, U512); generate_barrett_gen_tests!(U512, u512, U576); generate_barrett_gen_tests!(U576, u576, U640); + generate_barrett_gen_tests!(U832, u832, U896); generate_barrett_gen_tests!(U1024, u1024, U1088); + generate_barrett_gen_tests!(U1216, u1216, U1280); generate_barrett_gen_tests!(U1536, u1536, U1600); generate_barrett_gen_tests!(ignore U2048, u2048, U2112); generate_barrett_gen_tests!(ignore U3072, u3072, U3136); @@ -1303,9 +1481,12 @@ mod tests { generate_barrett_red_tests!(U192, u192, U256, U384); generate_barrett_red_tests!(U256, u256, U320, U512); generate_barrett_red_tests!(U384, u384, U448, U768); + generate_barrett_red_tests!(U448, u448, U512, U896); generate_barrett_red_tests!(U512, u512, U576, U1024); generate_barrett_red_tests!(U576, u576, U640, U1152); + generate_barrett_red_tests!(U832, u832, U896, U1664); generate_barrett_red_tests!(U1024, u1024, U1088, U2048); + generate_barrett_red_tests!(U1216, u1216, U1280, U2432); generate_barrett_red_tests!(U1536, u1536, U1600, U3072); generate_barrett_red_tests!(U2048, u2048, U2112, U4096); generate_barrett_red_tests!(U3072, u3072, U3136, U6144); @@ -1368,15 +1549,34 @@ mod tests { generate_square_tests!(U192, u192, U384); generate_square_tests!(U256, u256, U512); + generate_square_tests!(U320, u320, U640); + generate_square_tests!(U384, u384, U768); + generate_square_tests!(U448, u448, U896); generate_square_tests!(U512, u512, U1024); + generate_square_tests!(U576, u576, U1152); + generate_square_tests!(U640, u640, U1280); + generate_square_tests!(U768, u768, U1536); + generate_square_tests!(U832, u832, U1664); + generate_square_tests!(U896, u896, U1792); generate_square_tests!(U1024, u1024, U2048); + generate_square_tests!(U1088, u1088, U2176); + generate_square_tests!(U1152, u1152, U2304); + generate_square_tests!(U1216, u1216, U2432); + generate_square_tests!(U1280, u1280, U2560); generate_square_tests!(U1536, u1536, U3072); + generate_square_tests!(U1600, u1600, U3200); generate_square_tests!(U2048, u2048, U4096); + generate_square_tests!(U2112, u2112, U4224); generate_square_tests!(U3072, u3072, U6144); + generate_square_tests!(U3136, u3136, U6272); generate_square_tests!(ignore U4096, u4096, U8192); + generate_square_tests!(ignore U4160, u4160, U8320); generate_square_tests!(ignore U7680, u7680, U15360); + generate_square_tests!(ignore U7744, u7744, U15488); generate_square_tests!(ignore U8192, u8192, U16384); + generate_square_tests!(ignore U8256, u8256, U16512); generate_square_tests!(ignore U15360, u15360, U30720); + generate_square_tests!(ignore U15424, u15424, U30848); } mod sqrt { use super::super::*; diff --git a/test-generator/Requirements.hs b/test-generator/Requirements.hs index 8d53f8d..f79abdc 100644 --- a/test-generator/Requirements.hs +++ b/test-generator/Requirements.hs @@ -68,14 +68,26 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, Req size (Convert (((size * 2) + 64) * 2)) ]) , Need ECDSA (\ size -> [Req size SignedSub, + Req size SignedMul, Req size ModDiv, - Req (size + 64) SignedMul, - Req ((size + 64) * 2) SignedSub, - Req ((size + 64) * 2) SignedDiv, - Req ((size + 64) * 2) SignedMul, - Req size (Convert ((size + 64) * 2)), - Req size (SigConvert ((size + 64) * 2)) - ]) + Req (size * 2) BaseOps, + Req (size * 2) SignedBase, + Req (size * 2) SignedShift, + Req (size * 2) SignedSub, + Req (size * 2) SignedMul, + Req (size * 2) SignedDiv, + Req ((size * 2) + 64) SignedBase, + Req ((size * 2) + 64) BaseOps, + Req ((size * 2) + 64) SignedAdd, + Req ((size * 2) + 64) SignedShift, + Req ((size * 2) + 64) ModDiv, + Req size (Convert (size * 2)), + Req size (SigConvert (size * 2)), + Req size (Convert ((size * 2) + 64)), + Req size (SigConvert ((size * 2) + 64)), + Req (size * 2) (Convert ((size * 2) + 64)), + Req (size * 2) (SigConvert ((size * 2) + 64)) + ]) , Need PrimeGen (\ size -> [Req size Div, Req size Shifts, Req size ModExp, @@ -151,6 +163,8 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, , Need Sub (\ size -> [Req size BaseOps ]) , Need SignedAdd (\ size -> [Req size SignedBase, + Req size Add, + Req size Sub, Req (size + 64) SignedBase, Req (size + 64) BaseOps ]) @@ -173,13 +187,15 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, , Need SignedMul (\ size -> [Req size Mul, Req size SignedScale, Req (size * 2) SignedBase, - Req size (SigConvert (size * 2)) + Req size (SigConvert (size * 2)), + Req size Square ]) , Need SignedDiv (\ size -> [Req size Div, Req size Add ]) , Need EGCD (\ size -> [Req size SignedBase, Req size BaseOps, + Req size Shifts, Req (size + 64) SignedBase, Req ((size + 64) * 2) SignedBase, Req size (SigConvert (size + 64)),