Fix the requirements for ECDSA math.

This commit is contained in:
2019-01-08 09:47:47 -08:00
parent 4114db21be
commit c5fa23c4bd
3 changed files with 352 additions and 15 deletions

View File

@@ -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);
}
}

View File

@@ -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::*;

View File

@@ -68,13 +68,25 @@ 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,
@@ -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)),