From 7da10f5fa4ecdbf51216404a0a89aed32a141893 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Sun, 30 Dec 2018 17:51:22 -0800 Subject: [PATCH] Clean up requirements. --- src/signed/invoc.rs | 159 ++++++++++++++++++++++++++++++--- src/unsigned/invoc.rs | 105 ++++++++++++++++++++++ test-generator/Requirements.hs | 14 ++- 3 files changed, 264 insertions(+), 14 deletions(-) diff --git a/src/signed/invoc.rs b/src/signed/invoc.rs index 560ecda..2c0887e 100644 --- a/src/signed/invoc.rs +++ b/src/signed/invoc.rs @@ -3,10 +3,11 @@ signed_impls!(I192, U192); subtraction_impls!(I192, I256, U256); mul_impls!(I192, I384); div_impls!(I192, U192); +smodinv_impls!(I192, I256); conversion_impls!(I192, U192, I256, U256); conversion_impls!(I192, U192, I384, U384); conversion_impls!(I192, U192, I512, U512); -egcd_impls!(I256, U192, I192); +egcd_impls!(I256, U192, I192, I512); modinv_impls!(U192, I256, U256); moddiv_impls!(I256, I512); add_impls!(I256, I320, U320); @@ -16,10 +17,12 @@ shift_impls!(I256, U256); subtraction_impls!(I256, I320, U320); mul_impls!(I256, I512); div_impls!(I256, U256); +smodinv_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); +egcd_impls!(I320, U256, I256, I640); modinv_impls!(U256, I320, U320); add_impls!(I320, I384, U384); signed_impls!(I320, U320); @@ -27,17 +30,20 @@ cmp_impls!(I320); shift_impls!(I320, U320); subtraction_impls!(I320, I384, U384); mul_impls!(I320, I640); +div_impls!(I320, U320); conversion_impls!(I320, U320, I384, U384); conversion_impls!(I320, U320, I640, U640); +conversion_impls!(I320, U320, I704, U704); moddiv_impls!(I384, I768); signed_impls!(I384, U384); subtraction_impls!(I384, I448, U448); mul_impls!(I384, I768); div_impls!(I384, U384); +smodinv_impls!(I384, I448); conversion_impls!(I384, U384, I448, U448); conversion_impls!(I384, U384, I768, U768); conversion_impls!(I384, U384, I896, U896); -egcd_impls!(I448, U384, I384); +egcd_impls!(I448, U384, I384, I896); modinv_impls!(U384, I448, U448); add_impls!(I448, I512, U512); signed_impls!(I448, U448); @@ -45,15 +51,17 @@ cmp_impls!(I448); shift_impls!(I448, U448); subtraction_impls!(I448, I512, U512); mul_impls!(I448, I896); +div_impls!(I448, U448); conversion_impls!(I448, U448, I512, U512); conversion_impls!(I448, U448, I896, U896); +conversion_impls!(I448, U448, I960, U960); signed_impls!(I512, U512); subtraction_impls!(I512, I576, U576); mul_impls!(I512, I1024); div_impls!(I512, U512); conversion_impls!(I512, U512, I576, U576); conversion_impls!(I512, U512, I1024, U1024); -egcd_impls!(I576, U512, I512); +egcd_impls!(I576, U512, I512, I1152); modinv_impls!(U512, I576, U576); moddiv_impls!(I576, I1152); add_impls!(I576, I640, U640); @@ -63,10 +71,12 @@ shift_impls!(I576, U576); subtraction_impls!(I576, I640, U640); mul_impls!(I576, I1152); div_impls!(I576, U576); +smodinv_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); +egcd_impls!(I640, U576, I576, I1280); modinv_impls!(U576, I640, U640); add_impls!(I640, I704, U704); signed_impls!(I640, U640); @@ -77,6 +87,7 @@ mul_impls!(I640, I1280); div_impls!(I640, U640); conversion_impls!(I640, U640, I704, U704); conversion_impls!(I640, U640, I1280, U1280); +conversion_impls!(I640, U640, I1344, U1344); signed_impls!(I704, U704); signed_impls!(I768, U768); div_impls!(I768, U768); @@ -89,16 +100,23 @@ conversion_impls!(I896, U896, I1792, U1792); signed_impls!(I960, U960); signed_impls!(I1024, U1024); conversion_impls!(I1024, U1024, I1088, U1088); -egcd_impls!(I1088, U1024, I1024); +egcd_impls!(I1088, U1024, I1024, I2176); modinv_impls!(U1024, I1088, U1088); add_impls!(I1088, I1152, U1152); signed_impls!(I1088, U1088); cmp_impls!(I1088); shift_impls!(I1088, U1088); subtraction_impls!(I1088, I1152, U1152); +mul_impls!(I1088, I2176); +div_impls!(I1088, U1088); conversion_impls!(I1088, U1088, I1152, U1152); +conversion_impls!(I1088, U1088, I2176, U2176); +conversion_impls!(I1088, U1088, I2240, U2240); signed_impls!(I1152, U1152); +subtraction_impls!(I1152, I1216, U1216); div_impls!(I1152, U1152); +conversion_impls!(I1152, U1152, I1216, U1216); +signed_impls!(I1216, U1216); signed_impls!(I1280, U1280); subtraction_impls!(I1280, I1344, U1344); mul_impls!(I1280, I2560); @@ -108,81 +126,136 @@ conversion_impls!(I1280, U1280, I2560, U2560); signed_impls!(I1344, U1344); signed_impls!(I1536, U1536); conversion_impls!(I1536, U1536, I1600, U1600); -egcd_impls!(I1600, U1536, I1536); +egcd_impls!(I1600, U1536, I1536, I3200); add_impls!(I1600, I1664, U1664); signed_impls!(I1600, U1600); cmp_impls!(I1600); shift_impls!(I1600, U1600); subtraction_impls!(I1600, I1664, U1664); +mul_impls!(I1600, I3200); +div_impls!(I1600, U1600); conversion_impls!(I1600, U1600, I1664, U1664); +conversion_impls!(I1600, U1600, I3200, U3200); +conversion_impls!(I1600, U1600, I3264, U3264); signed_impls!(I1664, U1664); signed_impls!(I1792, U1792); signed_impls!(I2048, U2048); conversion_impls!(I2048, U2048, I2112, U2112); -egcd_impls!(I2112, U2048, I2048); +egcd_impls!(I2112, U2048, I2048, I4224); modinv_impls!(U2048, I2112, U2112); add_impls!(I2112, I2176, U2176); signed_impls!(I2112, U2112); cmp_impls!(I2112); shift_impls!(I2112, U2112); subtraction_impls!(I2112, I2176, U2176); +mul_impls!(I2112, I4224); +div_impls!(I2112, U2112); conversion_impls!(I2112, U2112, I2176, U2176); +conversion_impls!(I2112, U2112, I4224, U4224); +conversion_impls!(I2112, U2112, I4288, U4288); signed_impls!(I2176, U2176); +subtraction_impls!(I2176, I2240, U2240); +conversion_impls!(I2176, U2176, I2240, U2240); +signed_impls!(I2240, U2240); signed_impls!(I2560, U2560); signed_impls!(I3072, U3072); conversion_impls!(I3072, U3072, I3136, U3136); -egcd_impls!(I3136, U3072, I3072); +egcd_impls!(I3136, U3072, I3072, I6272); modinv_impls!(U3072, I3136, U3136); add_impls!(I3136, I3200, U3200); signed_impls!(I3136, U3136); cmp_impls!(I3136); shift_impls!(I3136, U3136); subtraction_impls!(I3136, I3200, U3200); +mul_impls!(I3136, I6272); +div_impls!(I3136, U3136); conversion_impls!(I3136, U3136, I3200, U3200); +conversion_impls!(I3136, U3136, I6272, U6272); +conversion_impls!(I3136, U3136, I6336, U6336); signed_impls!(I3200, U3200); +subtraction_impls!(I3200, I3264, U3264); +conversion_impls!(I3200, U3200, I3264, U3264); +signed_impls!(I3264, U3264); signed_impls!(I4096, U4096); conversion_impls!(I4096, U4096, I4160, U4160); -egcd_impls!(I4160, U4096, I4096); +egcd_impls!(I4160, U4096, I4096, I8320); modinv_impls!(U4096, I4160, U4160); add_impls!(I4160, I4224, U4224); signed_impls!(I4160, U4160); cmp_impls!(I4160); shift_impls!(I4160, U4160); subtraction_impls!(I4160, I4224, U4224); +mul_impls!(I4160, I8320); +div_impls!(I4160, U4160); conversion_impls!(I4160, U4160, I4224, U4224); +conversion_impls!(I4160, U4160, I8320, U8320); +conversion_impls!(I4160, U4160, I8384, U8384); signed_impls!(I4224, U4224); +subtraction_impls!(I4224, I4288, U4288); +conversion_impls!(I4224, U4224, I4288, U4288); +signed_impls!(I4288, U4288); +signed_impls!(I6272, U6272); +subtraction_impls!(I6272, I6336, U6336); +conversion_impls!(I6272, U6272, I6336, U6336); +signed_impls!(I6336, U6336); signed_impls!(I7680, U7680); conversion_impls!(I7680, U7680, I7744, U7744); -egcd_impls!(I7744, U7680, I7680); +egcd_impls!(I7744, U7680, I7680, I15488); add_impls!(I7744, I7808, U7808); signed_impls!(I7744, U7744); cmp_impls!(I7744); shift_impls!(I7744, U7744); subtraction_impls!(I7744, I7808, U7808); +mul_impls!(I7744, I15488); +div_impls!(I7744, U7744); conversion_impls!(I7744, U7744, I7808, U7808); +conversion_impls!(I7744, U7744, I15488, U15488); +conversion_impls!(I7744, U7744, I15552, U15552); signed_impls!(I7808, U7808); signed_impls!(I8192, U8192); conversion_impls!(I8192, U8192, I8256, U8256); -egcd_impls!(I8256, U8192, I8192); +egcd_impls!(I8256, U8192, I8192, I16512); modinv_impls!(U8192, I8256, U8256); add_impls!(I8256, I8320, U8320); signed_impls!(I8256, U8256); cmp_impls!(I8256); shift_impls!(I8256, U8256); subtraction_impls!(I8256, I8320, U8320); +mul_impls!(I8256, I16512); +div_impls!(I8256, U8256); conversion_impls!(I8256, U8256, I8320, U8320); +conversion_impls!(I8256, U8256, I16512, U16512); +conversion_impls!(I8256, U8256, I16576, U16576); signed_impls!(I8320, U8320); +subtraction_impls!(I8320, I8384, U8384); +conversion_impls!(I8320, U8320, I8384, U8384); +signed_impls!(I8384, U8384); signed_impls!(I15360, U15360); conversion_impls!(I15360, U15360, I15424, U15424); -egcd_impls!(I15424, U15360, I15360); +egcd_impls!(I15424, U15360, I15360, I30848); modinv_impls!(U15360, I15424, U15424); add_impls!(I15424, I15488, U15488); signed_impls!(I15424, U15424); cmp_impls!(I15424); shift_impls!(I15424, U15424); subtraction_impls!(I15424, I15488, U15488); +mul_impls!(I15424, I30848); +div_impls!(I15424, U15424); conversion_impls!(I15424, U15424, I15488, U15488); +conversion_impls!(I15424, U15424, I30848, U30848); +conversion_impls!(I15424, U15424, I30912, U30912); signed_impls!(I15488, U15488); +subtraction_impls!(I15488, I15552, U15552); +conversion_impls!(I15488, U15488, I15552, U15552); +signed_impls!(I15552, U15552); +signed_impls!(I16512, U16512); +subtraction_impls!(I16512, I16576, U16576); +conversion_impls!(I16512, U16512, I16576, U16576); +signed_impls!(I16576, U16576); +signed_impls!(I30848, U30848); +subtraction_impls!(I30848, I30912, U30912); +conversion_impls!(I30848, U30848, I30912, U30912); +signed_impls!(I30912, U30912); #[cfg(test)] @@ -219,14 +292,23 @@ mod tests { generate_sigsub_tests!(I640, U640, i640, I704, U704); generate_sigsub_tests!(I896, U896, i896, I960, U960); 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!(I2112, U2112, i2112, I2176, U2176); + generate_sigsub_tests!(I2176, U2176, i2176, I2240, U2240); generate_sigsub_tests!(I3136, U3136, i3136, I3200, U3200); + generate_sigsub_tests!(I3200, U3200, i3200, I3264, U3264); generate_sigsub_tests!(I4160, U4160, i4160, I4224, U4224); + generate_sigsub_tests!(I4224, U4224, i4224, I4288, U4288); + generate_sigsub_tests!(I6272, U6272, i6272, I6336, U6336); generate_sigsub_tests!(I7744, U7744, i7744, I7808, U7808); generate_sigsub_tests!(I8256, U8256, i8256, I8320, U8320); + generate_sigsub_tests!(I8320, U8320, i8320, I8384, U8384); generate_sigsub_tests!(I15424, U15424, i15424, I15488, U15488); + generate_sigsub_tests!(I15488, U15488, i15488, I15552, U15552); + generate_sigsub_tests!(ignore I16512, U16512, i16512, I16576, U16576); + generate_sigsub_tests!(ignore I30848, U30848, i30848, I30912, U30912); } mod signed { use super::super::*; @@ -247,6 +329,7 @@ mod tests { generate_signed_tests!(I1024, U1024, i1024); generate_signed_tests!(I1088, U1088, i1088); generate_signed_tests!(I1152, U1152, i1152); + generate_signed_tests!(I1216, U1216, i1216); generate_signed_tests!(I1280, U1280, i1280); generate_signed_tests!(I1344, U1344, i1344); generate_signed_tests!(I1536, U1536, i1536); @@ -256,22 +339,33 @@ mod tests { 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!(I2560, U2560, i2560); generate_signed_tests!(I3072, U3072, i3072); generate_signed_tests!(I3136, U3136, i3136); generate_signed_tests!(I3200, U3200, i3200); + generate_signed_tests!(I3264, U3264, i3264); generate_signed_tests!(I4096, U4096, i4096); generate_signed_tests!(I4160, U4160, i4160); generate_signed_tests!(I4224, U4224, i4224); + generate_signed_tests!(I4288, U4288, i4288); + generate_signed_tests!(I6272, U6272, i6272); + generate_signed_tests!(I6336, U6336, i6336); generate_signed_tests!(I7680, U7680, i7680); generate_signed_tests!(I7744, U7744, i7744); generate_signed_tests!(I7808, U7808, i7808); generate_signed_tests!(I8192, U8192, i8192); generate_signed_tests!(I8256, U8256, i8256); generate_signed_tests!(I8320, U8320, i8320); + generate_signed_tests!(I8384, U8384, i8384); generate_signed_tests!(I15360, U15360, i15360); generate_signed_tests!(I15424, U15424, i15424); generate_signed_tests!(I15488, U15488, i15488); + generate_signed_tests!(I15552, U15552, i15552); + generate_signed_tests!(I16512, U16512, i16512); + generate_signed_tests!(I16576, U16576, i16576); + generate_signed_tests!(I30848, U30848, i30848); + generate_signed_tests!(I30912, U30912, i30912); } mod sigconversion { generate_sigconversion_tests!(I192, U192, i192); @@ -289,6 +383,7 @@ mod tests { generate_sigconversion_tests!(I1024, U1024, i1024); generate_sigconversion_tests!(I1088, U1088, i1088); generate_sigconversion_tests!(I1152, U1152, i1152); + generate_sigconversion_tests!(I1216, U1216, i1216); generate_sigconversion_tests!(I1280, U1280, i1280); generate_sigconversion_tests!(I1344, U1344, i1344); generate_sigconversion_tests!(I1536, U1536, i1536); @@ -298,22 +393,33 @@ mod tests { 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!(I2560, U2560, i2560); generate_sigconversion_tests!(I3072, U3072, i3072); generate_sigconversion_tests!(I3136, U3136, i3136); generate_sigconversion_tests!(I3200, U3200, i3200); + generate_sigconversion_tests!(I3264, U3264, i3264); generate_sigconversion_tests!(I4096, U4096, i4096); generate_sigconversion_tests!(I4160, U4160, i4160); generate_sigconversion_tests!(I4224, U4224, i4224); + generate_sigconversion_tests!(I4288, U4288, i4288); + generate_sigconversion_tests!(I6272, U6272, i6272); + generate_sigconversion_tests!(I6336, U6336, i6336); generate_sigconversion_tests!(I7680, U7680, i7680); generate_sigconversion_tests!(I7744, U7744, i7744); generate_sigconversion_tests!(I7808, U7808, i7808); generate_sigconversion_tests!(I8192, U8192, i8192); generate_sigconversion_tests!(I8256, U8256, i8256); generate_sigconversion_tests!(I8320, U8320, i8320); + generate_sigconversion_tests!(I8384, U8384, i8384); generate_sigconversion_tests!(I15360, U15360, i15360); generate_sigconversion_tests!(I15424, U15424, i15424); generate_sigconversion_tests!(I15488, U15488, i15488); + generate_sigconversion_tests!(I15552, U15552, i15552); + generate_sigconversion_tests!(I16512, U16512, i16512); + generate_sigconversion_tests!(I16576, U16576, i16576); + generate_sigconversion_tests!(I30848, U30848, i30848); + generate_sigconversion_tests!(I30912, U30912, i30912); } mod sigcmp { use super::super::*; @@ -346,7 +452,15 @@ mod tests { generate_sigmul_tests!(I576, U576, i576, I1152, U1152); generate_sigmul_tests!(I640, U640, i640, I1280, U1280); generate_sigmul_tests!(I896, U896, i896, I1792, U1792); + generate_sigmul_tests!(I1088, U1088, i1088, I2176, U2176); generate_sigmul_tests!(I1280, U1280, i1280, I2560, U2560); + generate_sigmul_tests!(I1600, U1600, i1600, I3200, U3200); + generate_sigmul_tests!(I2112, U2112, i2112, I4224, U4224); + generate_sigmul_tests!(I3136, U3136, i3136, I6272, U6272); + generate_sigmul_tests!(I4160, U4160, i4160, I8320, U8320); + generate_sigmul_tests!(I7744, U7744, i7744, I15488, U15488); + generate_sigmul_tests!(I8256, U8256, i8256, I16512, U16512); + generate_sigmul_tests!(ignore I15424, U15424, i15424, I30848, U30848); } mod sigdiv { use super::super::*; @@ -354,14 +468,24 @@ mod tests { generate_sigdiv_tests!(I192, U192, i192); generate_sigdiv_tests!(I256, U256, i256); + generate_sigdiv_tests!(I320, U320, i320); generate_sigdiv_tests!(I384, U384, i384); + generate_sigdiv_tests!(I448, U448, i448); generate_sigdiv_tests!(I512, U512, i512); generate_sigdiv_tests!(I576, U576, i576); generate_sigdiv_tests!(I640, U640, i640); generate_sigdiv_tests!(I768, U768, i768); generate_sigdiv_tests!(I896, U896, i896); + generate_sigdiv_tests!(I1088, U1088, i1088); generate_sigdiv_tests!(I1152, U1152, i1152); generate_sigdiv_tests!(I1280, U1280, i1280); + generate_sigdiv_tests!(I1600, U1600, i1600); + generate_sigdiv_tests!(ignore I2112, U2112, i2112); + generate_sigdiv_tests!(ignore I3136, U3136, i3136); + generate_sigdiv_tests!(ignore I4160, U4160, i4160); + generate_sigdiv_tests!(ignore I7744, U7744, i7744); + generate_sigdiv_tests!(ignore I8256, U8256, i8256); + generate_sigdiv_tests!(ignore I15424, U15424, i15424); } mod sigshiftl { use super::super::*; @@ -442,4 +566,13 @@ mod tests { generate_modinv_tests!(ignore I8192, U8192, i8192); generate_modinv_tests!(ignore I15360, U15360, i15360); } + mod smodinv { + use super::super::*; + use testing::{build_test_path,run_test}; + + generate_smodinv_tests!(I192, U192, i192); + generate_smodinv_tests!(I256, U256, i256); + generate_smodinv_tests!(I384, U384, i384); + generate_smodinv_tests!(I576, U576, i576); + } } diff --git a/src/unsigned/invoc.rs b/src/unsigned/invoc.rs index 84e7ff5..077fc67 100644 --- a/src/unsigned/invoc.rs +++ b/src/unsigned/invoc.rs @@ -47,6 +47,7 @@ prime_gen_impls!(U256); addition_impls!(U320, U384); base_impls!(U320, 5); random_impls!(U320, UniformU320); +div_impls!(U320, U640); multiply_impls!(U320, U640); shift_impls!(U320, 5); subtraction_impls!(U320, 5); @@ -54,6 +55,7 @@ conversion_impls!(U320, U384); conversion_impls!(U320, U512); conversion_impls!(U320, U576); conversion_impls!(U320, U640); +conversion_impls!(U320, U704); addition_impls!(U384, U448); base_impls!(U384, 6); random_impls!(U384, UniformU384); @@ -78,6 +80,7 @@ conversion_impls!(U448, U512); conversion_impls!(U448, U768); conversion_impls!(U448, U832); conversion_impls!(U448, U896); +conversion_impls!(U448, U960); addition_impls!(U512, U576); base_impls!(U512, 8); random_impls!(U512, UniformU512); @@ -122,6 +125,7 @@ conversion_impls!(U640, U704); conversion_impls!(U640, U1152); conversion_impls!(U640, U1216); conversion_impls!(U640, U1280); +conversion_impls!(U640, U1344); base_impls!(U704, 11); random_impls!(U704, UniformU704); subtraction_impls!(U704, 11); @@ -185,6 +189,7 @@ conversion_impls!(U1088, U1152); conversion_impls!(U1088, U2048); conversion_impls!(U1088, U2112); conversion_impls!(U1088, U2176); +conversion_impls!(U1088, U2240); addition_impls!(U1152, U1216); base_impls!(U1152, 18); random_impls!(U1152, UniformU1152); @@ -233,6 +238,7 @@ prime_gen_impls!(U1536); addition_impls!(U1600, U1664); base_impls!(U1600, 25); random_impls!(U1600, UniformU1600); +div_impls!(U1600, U3200); multiply_impls!(U1600, U3200); shift_impls!(U1600, 25); subtraction_impls!(U1600, 25); @@ -240,6 +246,7 @@ conversion_impls!(U1600, U1664); conversion_impls!(U1600, U3072); conversion_impls!(U1600, U3136); conversion_impls!(U1600, U3200); +conversion_impls!(U1600, U3264); base_impls!(U1664, 26); random_impls!(U1664, UniformU1664); subtraction_impls!(U1664, 26); @@ -277,10 +284,16 @@ conversion_impls!(U2112, U2176); conversion_impls!(U2112, U4096); conversion_impls!(U2112, U4160); conversion_impls!(U2112, U4224); +conversion_impls!(U2112, U4288); +addition_impls!(U2176, U2240); base_impls!(U2176, 34); random_impls!(U2176, UniformU2176); shift_impls!(U2176, 34); subtraction_impls!(U2176, 34); +conversion_impls!(U2176, U2240); +base_impls!(U2240, 35); +random_impls!(U2240, UniformU2240); +subtraction_impls!(U2240, 35); base_impls!(U2304, 36); random_impls!(U2304, UniformU2304); subtraction_impls!(U2304, 36); @@ -321,10 +334,16 @@ conversion_impls!(U3136, U3200); conversion_impls!(U3136, U6144); conversion_impls!(U3136, U6208); conversion_impls!(U3136, U6272); +conversion_impls!(U3136, U6336); +addition_impls!(U3200, U3264); base_impls!(U3200, 50); random_impls!(U3200, UniformU3200); shift_impls!(U3200, 50); subtraction_impls!(U3200, 50); +conversion_impls!(U3200, U3264); +base_impls!(U3264, 51); +random_impls!(U3264, UniformU3264); +subtraction_impls!(U3264, 51); addition_impls!(U4096, U4160); base_impls!(U4096, 64); random_impls!(U4096, UniformU4096); @@ -353,13 +372,19 @@ conversion_impls!(U4160, U4224); conversion_impls!(U4160, U8192); conversion_impls!(U4160, U8256); conversion_impls!(U4160, U8320); +conversion_impls!(U4160, U8384); +addition_impls!(U4224, U4288); base_impls!(U4224, 66); random_impls!(U4224, UniformU4224); div_impls!(U4224, U8448); multiply_impls!(U4224, U8448); shift_impls!(U4224, 66); subtraction_impls!(U4224, 66); +conversion_impls!(U4224, U4288); conversion_impls!(U4224, U8448); +base_impls!(U4288, 67); +random_impls!(U4288, UniformU4288); +subtraction_impls!(U4288, 67); addition_impls!(U6144, U6208); base_impls!(U6144, 96); random_impls!(U6144, UniformU6144); @@ -377,10 +402,15 @@ multiply_impls!(U6208, U12416); subtraction_impls!(U6208, 97); conversion_impls!(U6208, U6272); conversion_impls!(U6208, U12416); +addition_impls!(U6272, U6336); base_impls!(U6272, 98); random_impls!(U6272, UniformU6272); shift_impls!(U6272, 98); subtraction_impls!(U6272, 98); +conversion_impls!(U6272, U6336); +base_impls!(U6336, 99); +random_impls!(U6336, UniformU6336); +subtraction_impls!(U6336, 99); base_impls!(U7680, 120); random_impls!(U7680, UniformU7680); barrett_impl!(BarrettU7680, U7680, U7744, U15360, U15424); @@ -400,6 +430,7 @@ prime_gen_impls!(U7680); addition_impls!(U7744, U7808); base_impls!(U7744, 121); random_impls!(U7744, UniformU7744); +div_impls!(U7744, U15488); multiply_impls!(U7744, U15488); shift_impls!(U7744, 121); subtraction_impls!(U7744, 121); @@ -407,6 +438,7 @@ conversion_impls!(U7744, U7808); conversion_impls!(U7744, U15360); conversion_impls!(U7744, U15424); conversion_impls!(U7744, U15488); +conversion_impls!(U7744, U15552); base_impls!(U7808, 122); random_impls!(U7808, UniformU7808); subtraction_impls!(U7808, 122); @@ -436,13 +468,19 @@ conversion_impls!(U8256, U8320); conversion_impls!(U8256, U16384); conversion_impls!(U8256, U16448); conversion_impls!(U8256, U16512); +conversion_impls!(U8256, U16576); +addition_impls!(U8320, U8384); base_impls!(U8320, 130); random_impls!(U8320, UniformU8320); div_impls!(U8320, U16640); multiply_impls!(U8320, U16640); shift_impls!(U8320, 130); subtraction_impls!(U8320, 130); +conversion_impls!(U8320, U8384); conversion_impls!(U8320, U16640); +base_impls!(U8384, 131); +random_impls!(U8384, UniformU8384); +subtraction_impls!(U8384, 131); base_impls!(U8448, 132); random_impls!(U8448, UniformU8448); subtraction_impls!(U8448, 132); @@ -481,10 +519,16 @@ conversion_impls!(U15424, U15488); conversion_impls!(U15424, U30720); conversion_impls!(U15424, U30784); conversion_impls!(U15424, U30848); +conversion_impls!(U15424, U30912); +addition_impls!(U15488, U15552); base_impls!(U15488, 242); random_impls!(U15488, UniformU15488); shift_impls!(U15488, 242); subtraction_impls!(U15488, 242); +conversion_impls!(U15488, U15552); +base_impls!(U15552, 243); +random_impls!(U15552, UniformU15552); +subtraction_impls!(U15552, 243); base_impls!(U16384, 256); random_impls!(U16384, UniformU16384); div_impls!(U16384, U32768); @@ -501,10 +545,15 @@ multiply_impls!(U16448, U32896); subtraction_impls!(U16448, 257); conversion_impls!(U16448, U16512); conversion_impls!(U16448, U32896); +addition_impls!(U16512, U16576); base_impls!(U16512, 258); random_impls!(U16512, UniformU16512); shift_impls!(U16512, 258); subtraction_impls!(U16512, 258); +conversion_impls!(U16512, U16576); +base_impls!(U16576, 259); +random_impls!(U16576, UniformU16576); +subtraction_impls!(U16576, 259); base_impls!(U16640, 260); random_impls!(U16640, UniformU16640); subtraction_impls!(U16640, 260); @@ -527,10 +576,15 @@ multiply_impls!(U30784, U61568); subtraction_impls!(U30784, 481); conversion_impls!(U30784, U30848); conversion_impls!(U30784, U61568); +addition_impls!(U30848, U30912); base_impls!(U30848, 482); random_impls!(U30848, UniformU30848); shift_impls!(U30848, 482); subtraction_impls!(U30848, 482); +conversion_impls!(U30848, U30912); +base_impls!(U30912, 483); +random_impls!(U30912, UniformU30912); +subtraction_impls!(U30912, 483); base_impls!(U32768, 512); random_impls!(U32768, UniformU32768); subtraction_impls!(U32768, 512); @@ -577,38 +631,46 @@ mod tests { 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!(U2560, u2560); generate_base_tests!(U3072, u3072); generate_base_tests!(U3136, u3136); generate_base_tests!(U3200, u3200); + generate_base_tests!(U3264, u3264); generate_base_tests!(U4096, u4096); generate_base_tests!(U4160, u4160); generate_base_tests!(U4224, u4224); + generate_base_tests!(U4288, u4288); generate_base_tests!(U6144, u6144); generate_base_tests!(U6208, u6208); generate_base_tests!(U6272, u6272); + generate_base_tests!(U6336, u6336); generate_base_tests!(U7680, u7680); generate_base_tests!(U7744, u7744); generate_base_tests!(U7808, u7808); generate_base_tests!(U8192, u8192); generate_base_tests!(U8256, u8256); generate_base_tests!(U8320, u8320); + generate_base_tests!(U8384, u8384); generate_base_tests!(U8448, u8448); generate_base_tests!(U12288, u12288); generate_base_tests!(U12416, u12416); generate_base_tests!(U15360, u15360); generate_base_tests!(U15424, u15424); generate_base_tests!(U15488, u15488); + generate_base_tests!(U15552, u15552); generate_base_tests!(ignore U16384, u16384); generate_base_tests!(ignore U16448, u16448); generate_base_tests!(ignore U16512, u16512); + generate_base_tests!(ignore U16576, u16576); generate_base_tests!(ignore U16640, u16640); generate_base_tests!(ignore U24832, u24832); generate_base_tests!(ignore U30720, u30720); generate_base_tests!(ignore U30784, u30784); generate_base_tests!(ignore U30848, u30848); + generate_base_tests!(ignore U30912, u30912); generate_base_tests!(ignore U32768, u32768); generate_base_tests!(ignore U32896, u32896); generate_base_tests!(ignore U61440, u61440); @@ -641,38 +703,46 @@ mod tests { 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!(U2560, u2560); generate_conversion_tests!(U3072, u3072); generate_conversion_tests!(U3136, u3136); generate_conversion_tests!(U3200, u3200); + generate_conversion_tests!(U3264, u3264); generate_conversion_tests!(U4096, u4096); generate_conversion_tests!(U4160, u4160); generate_conversion_tests!(U4224, u4224); + generate_conversion_tests!(U4288, u4288); generate_conversion_tests!(U6144, u6144); generate_conversion_tests!(U6208, u6208); generate_conversion_tests!(U6272, u6272); + generate_conversion_tests!(U6336, u6336); generate_conversion_tests!(U7680, u7680); generate_conversion_tests!(U7744, u7744); generate_conversion_tests!(U7808, u7808); generate_conversion_tests!(U8192, u8192); generate_conversion_tests!(U8256, u8256); generate_conversion_tests!(U8320, u8320); + generate_conversion_tests!(U8384, u8384); generate_conversion_tests!(U8448, u8448); generate_conversion_tests!(U12288, u12288); generate_conversion_tests!(U12416, u12416); generate_conversion_tests!(U15360, u15360); generate_conversion_tests!(U15424, u15424); generate_conversion_tests!(U15488, u15488); + generate_conversion_tests!(U15552, u15552); generate_conversion_tests!(U16384, u16384); generate_conversion_tests!(U16448, u16448); generate_conversion_tests!(U16512, u16512); + generate_conversion_tests!(U16576, u16576); generate_conversion_tests!(U16640, u16640); generate_conversion_tests!(U24832, u24832); generate_conversion_tests!(U30720, u30720); generate_conversion_tests!(U30784, u30784); generate_conversion_tests!(U30848, u30848); + generate_conversion_tests!(U30912, u30912); generate_conversion_tests!(U32768, u32768); generate_conversion_tests!(U32896, u32896); generate_conversion_tests!(U61440, u61440); @@ -705,38 +775,46 @@ mod tests { 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!(U2560, u2560); generate_codec_tests!(U3072, u3072); generate_codec_tests!(U3136, u3136); generate_codec_tests!(U3200, u3200); + generate_codec_tests!(U3264, u3264); generate_codec_tests!(U4096, u4096); generate_codec_tests!(U4160, u4160); generate_codec_tests!(U4224, u4224); + generate_codec_tests!(U4288, u4288); generate_codec_tests!(U6144, u6144); generate_codec_tests!(U6208, u6208); generate_codec_tests!(U6272, u6272); + generate_codec_tests!(U6336, u6336); generate_codec_tests!(U7680, u7680); generate_codec_tests!(U7744, u7744); generate_codec_tests!(U7808, u7808); generate_codec_tests!(U8192, u8192); generate_codec_tests!(U8256, u8256); generate_codec_tests!(U8320, u8320); + generate_codec_tests!(U8384, u8384); generate_codec_tests!(U8448, u8448); generate_codec_tests!(U12288, u12288); generate_codec_tests!(U12416, u12416); generate_codec_tests!(U15360, u15360); generate_codec_tests!(U15424, u15424); generate_codec_tests!(U15488, u15488); + generate_codec_tests!(U15552, u15552); generate_codec_tests!(U16384, u16384); generate_codec_tests!(U16448, u16448); generate_codec_tests!(U16512, u16512); + generate_codec_tests!(U16576, u16576); generate_codec_tests!(U16640, u16640); generate_codec_tests!(U24832, u24832); generate_codec_tests!(U30720, u30720); generate_codec_tests!(U30784, u30784); generate_codec_tests!(U30848, u30848); + generate_codec_tests!(U30912, u30912); generate_codec_tests!(U32768, u32768); generate_codec_tests!(U32896, u32896); generate_codec_tests!(U61440, u61440); @@ -772,38 +850,46 @@ mod tests { 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!(U2560, u2560); generate_cmp_tests!(U3072, u3072); generate_cmp_tests!(U3136, u3136); generate_cmp_tests!(U3200, u3200); + generate_cmp_tests!(U3264, u3264); generate_cmp_tests!(U4096, u4096); generate_cmp_tests!(U4160, u4160); generate_cmp_tests!(U4224, u4224); + generate_cmp_tests!(U4288, u4288); generate_cmp_tests!(U6144, u6144); generate_cmp_tests!(U6208, u6208); generate_cmp_tests!(U6272, u6272); + generate_cmp_tests!(U6336, u6336); generate_cmp_tests!(U7680, u7680); generate_cmp_tests!(U7744, u7744); generate_cmp_tests!(U7808, u7808); generate_cmp_tests!(U8192, u8192); generate_cmp_tests!(U8256, u8256); generate_cmp_tests!(U8320, u8320); + generate_cmp_tests!(U8384, u8384); generate_cmp_tests!(U8448, u8448); generate_cmp_tests!(U12288, u12288); generate_cmp_tests!(U12416, u12416); generate_cmp_tests!(U15360, u15360); generate_cmp_tests!(U15424, u15424); generate_cmp_tests!(U15488, u15488); + generate_cmp_tests!(U15552, u15552); generate_cmp_tests!(ignore U16384, u16384); generate_cmp_tests!(ignore U16448, u16448); generate_cmp_tests!(ignore U16512, u16512); + generate_cmp_tests!(ignore U16576, u16576); generate_cmp_tests!(ignore U16640, u16640); generate_cmp_tests!(ignore U24832, u24832); generate_cmp_tests!(ignore U30720, u30720); generate_cmp_tests!(ignore U30784, u30784); generate_cmp_tests!(ignore U30848, u30848); + generate_cmp_tests!(ignore U30912, u30912); generate_cmp_tests!(ignore U32768, u32768); generate_cmp_tests!(ignore U32896, u32896); generate_cmp_tests!(ignore U61440, u61440); @@ -839,38 +925,46 @@ mod tests { 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!(U2560, u2560); generate_sub_tests!(U3072, u3072); generate_sub_tests!(U3136, u3136); generate_sub_tests!(U3200, u3200); + generate_sub_tests!(U3264, u3264); generate_sub_tests!(U4096, u4096); generate_sub_tests!(U4160, u4160); generate_sub_tests!(U4224, u4224); + generate_sub_tests!(U4288, u4288); generate_sub_tests!(U6144, u6144); generate_sub_tests!(U6208, u6208); generate_sub_tests!(U6272, u6272); + generate_sub_tests!(U6336, u6336); generate_sub_tests!(U7680, u7680); generate_sub_tests!(U7744, u7744); generate_sub_tests!(U7808, u7808); generate_sub_tests!(U8192, u8192); generate_sub_tests!(U8256, u8256); generate_sub_tests!(U8320, u8320); + generate_sub_tests!(U8384, u8384); generate_sub_tests!(U8448, u8448); generate_sub_tests!(ignore U12288, u12288); generate_sub_tests!(ignore U12416, u12416); generate_sub_tests!(ignore U15360, u15360); generate_sub_tests!(ignore U15424, u15424); generate_sub_tests!(ignore U15488, u15488); + generate_sub_tests!(ignore U15552, u15552); generate_sub_tests!(ignore U16384, u16384); generate_sub_tests!(ignore U16448, u16448); generate_sub_tests!(ignore U16512, u16512); + generate_sub_tests!(ignore U16576, u16576); generate_sub_tests!(ignore U16640, u16640); generate_sub_tests!(ignore U24832, u24832); generate_sub_tests!(ignore U30720, u30720); generate_sub_tests!(ignore U30784, u30784); generate_sub_tests!(ignore U30848, u30848); + generate_sub_tests!(ignore U30912, u30912); generate_sub_tests!(ignore U32768, u32768); generate_sub_tests!(ignore U32896, u32896); generate_sub_tests!(ignore U61440, u61440); @@ -987,17 +1081,25 @@ mod tests { generate_add_tests!(U1600, u1600, U1664); generate_add_tests!(U2048, u2048, U2112); generate_add_tests!(U2112, u2112, U2176); + generate_add_tests!(U2176, u2176, U2240); generate_add_tests!(U3072, u3072, U3136); generate_add_tests!(U3136, u3136, U3200); + generate_add_tests!(U3200, u3200, U3264); generate_add_tests!(U4096, u4096, U4160); generate_add_tests!(U4160, u4160, U4224); + generate_add_tests!(U4224, u4224, U4288); generate_add_tests!(U6144, u6144, U6208); generate_add_tests!(U6208, u6208, U6272); + generate_add_tests!(U6272, u6272, U6336); generate_add_tests!(U7744, u7744, U7808); generate_add_tests!(U8256, u8256, U8320); + generate_add_tests!(U8320, u8320, U8384); generate_add_tests!(ignore U15424, u15424, U15488); + generate_add_tests!(ignore U15488, u15488, U15552); generate_add_tests!(ignore U16448, u16448, U16512); + generate_add_tests!(ignore U16512, u16512, U16576); generate_add_tests!(ignore U30784, u30784, U30848); + generate_add_tests!(ignore U30848, u30848, U30912); } mod mul { use super::super::*; @@ -1049,6 +1151,7 @@ mod tests { generate_div_tests!(U192, u192); generate_div_tests!(U256, u256); + generate_div_tests!(U320, u320); generate_div_tests!(U384, u384); generate_div_tests!(U448, u448); generate_div_tests!(U512, u512); @@ -1063,6 +1166,7 @@ mod tests { generate_div_tests!(U1216, u1216); generate_div_tests!(U1280, u1280); generate_div_tests!(U1536, u1536); + generate_div_tests!(U1600, u1600); generate_div_tests!(U2048, u2048); generate_div_tests!(ignore U2112, u2112); generate_div_tests!(ignore U3072, u3072); @@ -1073,6 +1177,7 @@ mod tests { generate_div_tests!(ignore U6144, u6144); generate_div_tests!(ignore U6208, u6208); generate_div_tests!(ignore U7680, u7680); + generate_div_tests!(ignore U7744, u7744); generate_div_tests!(ignore U8192, u8192); generate_div_tests!(ignore U8256, u8256); generate_div_tests!(ignore U8320, u8320); diff --git a/test-generator/Requirements.hs b/test-generator/Requirements.hs index e89627a..3873b56 100644 --- a/test-generator/Requirements.hs +++ b/test-generator/Requirements.hs @@ -27,6 +27,7 @@ data Operation = Add | SignedSub | SignedMul | SignedDiv + | SignedModInv | SigConvert Int | SquareRoot | EGCD @@ -120,6 +121,7 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, Req size (Convert (size + 64)) ]) , Need ModDiv (\ size -> [Req size ModInv, + Req size SignedModInv, Req size SignedMul, Req size SignedDiv, Req (size * 2) SignedDiv, @@ -174,11 +176,17 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, , Need EGCD (\ size -> [Req size SignedBase, Req size BaseOps, Req (size + 64) SignedBase, + Req ((size + 64) * 2) SignedBase, Req size (SigConvert (size + 64)), Req (size + 64) SignedShift, Req (size + 64) SignedAdd, Req (size + 64) SignedSub, - Req (size + 64) SignedCmp + Req (size + 64) SignedCmp, + Req (size + 64) SignedDiv, + Req (size + 64) SignedMul, + Req ((size + 64) * 2) SignedSub, + Req (size + 64) (Convert (((size + 64) * 2) + 64)), + Req (size + 64) (SigConvert (((size + 64) * 2) + 64)) ]) , Need ModInv (\ size -> [Req size BaseOps, Req (size + 64) SignedBase, @@ -188,6 +196,10 @@ needs = [ Need RSA (\ size -> [Req (size `div` 2) Sub, Req (size + 64) SignedAdd, Req size Barretts ]) + , Need SignedModInv (\ size -> [ + Req size EGCD, + Req size SignedModInv + ]) , Need SquareRoot (\ size -> [Req size BaseOps, Req size Shifts, Req size Add,