Base implementation of signed numbers and EGCD, with tests.
This commit is contained in:
@@ -9,6 +9,7 @@ square_impls!(U192, U384, 192);
|
||||
conversion_impls!(U192, U256);
|
||||
conversion_impls!(U192, U384);
|
||||
conversion_impls!(U192, U448);
|
||||
addition_impls!(U256, U320);
|
||||
base_impls!(U256, 4);
|
||||
barrett_impl!(BarrettU256, U256, U320, U512, U576);
|
||||
modexp_impls!(U256, U256);
|
||||
@@ -16,17 +17,24 @@ modexp_impls!(U256, BarrettU256);
|
||||
modmul_impls!(U256, U512, BarrettU256);
|
||||
modsq_impls!(U256, U512, BarrettU256);
|
||||
multiply_impls!(U256, U512);
|
||||
shift_impls!(U256, 4);
|
||||
square_impls!(U256, U512, 256);
|
||||
subtraction_impls!(U256, 4);
|
||||
conversion_impls!(U256, U320);
|
||||
conversion_impls!(U256, U384);
|
||||
conversion_impls!(U256, U448);
|
||||
conversion_impls!(U256, U512);
|
||||
conversion_impls!(U256, U576);
|
||||
addition_impls!(U320, U384);
|
||||
base_impls!(U320, 5);
|
||||
multiply_impls!(U320, U640);
|
||||
shift_impls!(U320, 5);
|
||||
subtraction_impls!(U320, 5);
|
||||
conversion_impls!(U320, U384);
|
||||
conversion_impls!(U320, U512);
|
||||
conversion_impls!(U320, U576);
|
||||
conversion_impls!(U320, U640);
|
||||
addition_impls!(U384, U448);
|
||||
base_impls!(U384, 6);
|
||||
barrett_impl!(BarrettU384, U384, U448, U768, U832);
|
||||
div_impls!(U384, U768);
|
||||
@@ -50,6 +58,7 @@ conversion_impls!(U448, U512);
|
||||
conversion_impls!(U448, U768);
|
||||
conversion_impls!(U448, U832);
|
||||
conversion_impls!(U448, U896);
|
||||
addition_impls!(U512, U576);
|
||||
base_impls!(U512, 8);
|
||||
barrett_impl!(BarrettU512, U512, U576, U1024, U1088);
|
||||
div_impls!(U512, U1024);
|
||||
@@ -80,12 +89,18 @@ conversion_impls!(U576, U1024);
|
||||
conversion_impls!(U576, U1088);
|
||||
conversion_impls!(U576, U1152);
|
||||
conversion_impls!(U576, U1216);
|
||||
addition_impls!(U640, U704);
|
||||
base_impls!(U640, 10);
|
||||
multiply_impls!(U640, U1280);
|
||||
shift_impls!(U640, 10);
|
||||
subtraction_impls!(U640, 10);
|
||||
conversion_impls!(U640, U704);
|
||||
conversion_impls!(U640, U1152);
|
||||
conversion_impls!(U640, U1216);
|
||||
conversion_impls!(U640, U1280);
|
||||
addition_impls!(U704, U768);
|
||||
base_impls!(U704, 11);
|
||||
conversion_impls!(U704, U768);
|
||||
addition_impls!(U768, U832);
|
||||
base_impls!(U768, 12);
|
||||
div_impls!(U768, U1536);
|
||||
@@ -213,11 +228,19 @@ square_impls!(U3072, U6144, 3072);
|
||||
conversion_impls!(U3072, U3136);
|
||||
conversion_impls!(U3072, U6144);
|
||||
conversion_impls!(U3072, U6208);
|
||||
addition_impls!(U3136, U3200);
|
||||
base_impls!(U3136, 49);
|
||||
multiply_impls!(U3136, U6272);
|
||||
shift_impls!(U3136, 49);
|
||||
subtraction_impls!(U3136, 49);
|
||||
conversion_impls!(U3136, U3200);
|
||||
conversion_impls!(U3136, U6144);
|
||||
conversion_impls!(U3136, U6208);
|
||||
conversion_impls!(U3136, U6272);
|
||||
addition_impls!(U3200, U3264);
|
||||
base_impls!(U3200, 50);
|
||||
conversion_impls!(U3200, U3264);
|
||||
base_impls!(U3264, 51);
|
||||
addition_impls!(U4096, U4160);
|
||||
base_impls!(U4096, 64);
|
||||
barrett_impl!(BarrettU4096, U4096, U4160, U8192, U8256);
|
||||
@@ -276,11 +299,19 @@ square_impls!(U7680, U15360, 7680);
|
||||
conversion_impls!(U7680, U7744);
|
||||
conversion_impls!(U7680, U15360);
|
||||
conversion_impls!(U7680, U15424);
|
||||
addition_impls!(U7744, U7808);
|
||||
base_impls!(U7744, 121);
|
||||
multiply_impls!(U7744, U15488);
|
||||
shift_impls!(U7744, 121);
|
||||
subtraction_impls!(U7744, 121);
|
||||
conversion_impls!(U7744, U7808);
|
||||
conversion_impls!(U7744, U15360);
|
||||
conversion_impls!(U7744, U15424);
|
||||
conversion_impls!(U7744, U15488);
|
||||
addition_impls!(U7808, U7872);
|
||||
base_impls!(U7808, 122);
|
||||
conversion_impls!(U7808, U7872);
|
||||
base_impls!(U7872, 123);
|
||||
addition_impls!(U8192, U8256);
|
||||
base_impls!(U8192, 128);
|
||||
barrett_impl!(BarrettU8192, U8192, U8256, U16384, U16448);
|
||||
@@ -345,8 +376,11 @@ conversion_impls!(U15424, U15488);
|
||||
conversion_impls!(U15424, U30720);
|
||||
conversion_impls!(U15424, U30784);
|
||||
conversion_impls!(U15424, U30848);
|
||||
addition_impls!(U15488, U15552);
|
||||
base_impls!(U15488, 242);
|
||||
shift_impls!(U15488, 242);
|
||||
conversion_impls!(U15488, U15552);
|
||||
base_impls!(U15552, 243);
|
||||
addition_impls!(U16384, U16448);
|
||||
base_impls!(U16384, 256);
|
||||
div_impls!(U16384, U32768);
|
||||
@@ -427,6 +461,7 @@ mod tests {
|
||||
generate_base_tests!(U512, u512);
|
||||
generate_base_tests!(U576, u576);
|
||||
generate_base_tests!(U640, u640);
|
||||
generate_base_tests!(U704, u704);
|
||||
generate_base_tests!(U768, u768);
|
||||
generate_base_tests!(U832, u832);
|
||||
generate_base_tests!(U896, u896);
|
||||
@@ -450,6 +485,8 @@ mod tests {
|
||||
generate_base_tests!(U2496, u2496);
|
||||
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);
|
||||
@@ -459,6 +496,8 @@ mod tests {
|
||||
generate_base_tests!(U6272, u6272);
|
||||
generate_base_tests!(U7680, u7680);
|
||||
generate_base_tests!(U7744, u7744);
|
||||
generate_base_tests!(U7808, u7808);
|
||||
generate_base_tests!(U7872, u7872);
|
||||
generate_base_tests!(U8192, u8192);
|
||||
generate_base_tests!(U8256, u8256);
|
||||
generate_base_tests!(U8320, u8320);
|
||||
@@ -470,6 +509,7 @@ mod tests {
|
||||
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);
|
||||
@@ -496,6 +536,7 @@ mod tests {
|
||||
generate_conversion_tests!(U512, u512);
|
||||
generate_conversion_tests!(U576, u576);
|
||||
generate_conversion_tests!(U640, u640);
|
||||
generate_conversion_tests!(U704, u704);
|
||||
generate_conversion_tests!(U768, u768);
|
||||
generate_conversion_tests!(U832, u832);
|
||||
generate_conversion_tests!(U896, u896);
|
||||
@@ -519,6 +560,8 @@ mod tests {
|
||||
generate_conversion_tests!(U2496, u2496);
|
||||
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);
|
||||
@@ -528,6 +571,8 @@ mod tests {
|
||||
generate_conversion_tests!(U6272, u6272);
|
||||
generate_conversion_tests!(U7680, u7680);
|
||||
generate_conversion_tests!(U7744, u7744);
|
||||
generate_conversion_tests!(U7808, u7808);
|
||||
generate_conversion_tests!(U7872, u7872);
|
||||
generate_conversion_tests!(U8192, u8192);
|
||||
generate_conversion_tests!(U8256, u8256);
|
||||
generate_conversion_tests!(U8320, u8320);
|
||||
@@ -539,6 +584,7 @@ mod tests {
|
||||
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);
|
||||
@@ -565,6 +611,7 @@ mod tests {
|
||||
generate_codec_tests!(U512, u512);
|
||||
generate_codec_tests!(U576, u576);
|
||||
generate_codec_tests!(U640, u640);
|
||||
generate_codec_tests!(U704, u704);
|
||||
generate_codec_tests!(U768, u768);
|
||||
generate_codec_tests!(U832, u832);
|
||||
generate_codec_tests!(U896, u896);
|
||||
@@ -588,6 +635,8 @@ mod tests {
|
||||
generate_codec_tests!(U2496, u2496);
|
||||
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);
|
||||
@@ -597,6 +646,8 @@ mod tests {
|
||||
generate_codec_tests!(U6272, u6272);
|
||||
generate_codec_tests!(U7680, u7680);
|
||||
generate_codec_tests!(U7744, u7744);
|
||||
generate_codec_tests!(U7808, u7808);
|
||||
generate_codec_tests!(U7872, u7872);
|
||||
generate_codec_tests!(U8192, u8192);
|
||||
generate_codec_tests!(U8256, u8256);
|
||||
generate_codec_tests!(U8320, u8320);
|
||||
@@ -608,6 +659,7 @@ mod tests {
|
||||
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);
|
||||
@@ -637,6 +689,7 @@ mod tests {
|
||||
generate_cmp_tests!(U512, u512);
|
||||
generate_cmp_tests!(U576, u576);
|
||||
generate_cmp_tests!(U640, u640);
|
||||
generate_cmp_tests!(U704, u704);
|
||||
generate_cmp_tests!(U768, u768);
|
||||
generate_cmp_tests!(U832, u832);
|
||||
generate_cmp_tests!(U896, u896);
|
||||
@@ -660,6 +713,8 @@ mod tests {
|
||||
generate_cmp_tests!(U2496, u2496);
|
||||
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);
|
||||
@@ -669,6 +724,8 @@ mod tests {
|
||||
generate_cmp_tests!(U6272, u6272);
|
||||
generate_cmp_tests!(U7680, u7680);
|
||||
generate_cmp_tests!(U7744, u7744);
|
||||
generate_cmp_tests!(U7808, u7808);
|
||||
generate_cmp_tests!(U7872, u7872);
|
||||
generate_cmp_tests!(U8192, u8192);
|
||||
generate_cmp_tests!(U8256, u8256);
|
||||
generate_cmp_tests!(U8320, u8320);
|
||||
@@ -680,6 +737,7 @@ mod tests {
|
||||
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);
|
||||
@@ -701,8 +759,11 @@ mod tests {
|
||||
use super::super::*;
|
||||
use testing::run_test;
|
||||
|
||||
generate_sub_tests!(U256, u256);
|
||||
generate_sub_tests!(U320, u320);
|
||||
generate_sub_tests!(U448, u448);
|
||||
generate_sub_tests!(U576, u576);
|
||||
generate_sub_tests!(U640, u640);
|
||||
generate_sub_tests!(U768, u768);
|
||||
generate_sub_tests!(U832, u832);
|
||||
generate_sub_tests!(U896, u896);
|
||||
@@ -717,10 +778,12 @@ mod tests {
|
||||
generate_sub_tests!(U2176, u2176);
|
||||
generate_sub_tests!(U2304, u2304);
|
||||
generate_sub_tests!(U2432, u2432);
|
||||
generate_sub_tests!(U3136, u3136);
|
||||
generate_sub_tests!(U4096, u4096);
|
||||
generate_sub_tests!(U4160, u4160);
|
||||
generate_sub_tests!(U4224, u4224);
|
||||
generate_sub_tests!(U6208, u6208);
|
||||
generate_sub_tests!(U7744, u7744);
|
||||
generate_sub_tests!(U8192, u8192);
|
||||
generate_sub_tests!(U8256, u8256);
|
||||
generate_sub_tests!(U8320, u8320);
|
||||
@@ -742,6 +805,8 @@ mod tests {
|
||||
use super::super::*;
|
||||
use testing::run_test;
|
||||
|
||||
generate_shiftl_tests!(U256, u256);
|
||||
generate_shiftl_tests!(U320, u320);
|
||||
generate_shiftl_tests!(U384, u384);
|
||||
generate_shiftl_tests!(U448, u448);
|
||||
generate_shiftl_tests!(U512, u512);
|
||||
@@ -758,12 +823,14 @@ mod tests {
|
||||
generate_shiftl_tests!(U2048, u2048);
|
||||
generate_shiftl_tests!(U2112, u2112);
|
||||
generate_shiftl_tests!(U2176, u2176);
|
||||
generate_shiftl_tests!(U3136, u3136);
|
||||
generate_shiftl_tests!(U4096, u4096);
|
||||
generate_shiftl_tests!(U4160, u4160);
|
||||
generate_shiftl_tests!(U4224, u4224);
|
||||
generate_shiftl_tests!(U6144, u6144);
|
||||
generate_shiftl_tests!(U6208, u6208);
|
||||
generate_shiftl_tests!(U6272, u6272);
|
||||
generate_shiftl_tests!(U7744, u7744);
|
||||
generate_shiftl_tests!(U8192, u8192);
|
||||
generate_shiftl_tests!(U8256, u8256);
|
||||
generate_shiftl_tests!(U8320, u8320);
|
||||
@@ -781,6 +848,8 @@ mod tests {
|
||||
use super::super::*;
|
||||
use testing::run_test;
|
||||
|
||||
generate_shiftr_tests!(U256, u256);
|
||||
generate_shiftr_tests!(U320, u320);
|
||||
generate_shiftr_tests!(U384, u384);
|
||||
generate_shiftr_tests!(U448, u448);
|
||||
generate_shiftr_tests!(U512, u512);
|
||||
@@ -797,12 +866,14 @@ mod tests {
|
||||
generate_shiftr_tests!(U2048, u2048);
|
||||
generate_shiftr_tests!(U2112, u2112);
|
||||
generate_shiftr_tests!(U2176, u2176);
|
||||
generate_shiftr_tests!(U3136, u3136);
|
||||
generate_shiftr_tests!(U4096, u4096);
|
||||
generate_shiftr_tests!(U4160, u4160);
|
||||
generate_shiftr_tests!(U4224, u4224);
|
||||
generate_shiftr_tests!(U6144, u6144);
|
||||
generate_shiftr_tests!(U6208, u6208);
|
||||
generate_shiftr_tests!(U6272, u6272);
|
||||
generate_shiftr_tests!(U7744, u7744);
|
||||
generate_shiftr_tests!(U8192, u8192);
|
||||
generate_shiftr_tests!(U8256, u8256);
|
||||
generate_shiftr_tests!(U8320, u8320);
|
||||
@@ -820,8 +891,14 @@ mod tests {
|
||||
use super::super::*;
|
||||
use testing::run_test;
|
||||
|
||||
generate_add_tests!(U256, u256, U320);
|
||||
generate_add_tests!(U320, u320, U384);
|
||||
generate_add_tests!(U384, u384, U448);
|
||||
generate_add_tests!(U448, u448, U512);
|
||||
generate_add_tests!(U512, u512, U576);
|
||||
generate_add_tests!(U576, u576, U640);
|
||||
generate_add_tests!(U640, u640, U704);
|
||||
generate_add_tests!(U704, u704, U768);
|
||||
generate_add_tests!(U768, u768, U832);
|
||||
generate_add_tests!(U832, u832, U896);
|
||||
generate_add_tests!(U896, u896, U960);
|
||||
@@ -836,16 +913,21 @@ mod tests {
|
||||
generate_add_tests!(U2176, u2176, U2240);
|
||||
generate_add_tests!(U2304, u2304, U2368);
|
||||
generate_add_tests!(U2432, u2432, U2496);
|
||||
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!(U6208, u6208, U6272);
|
||||
generate_add_tests!(U7744, u7744, U7808);
|
||||
generate_add_tests!(U7808, u7808, U7872);
|
||||
generate_add_tests!(U8192, u8192, U8256);
|
||||
generate_add_tests!(U8256, u8256, U8320);
|
||||
generate_add_tests!(U8320, u8320, U8384);
|
||||
generate_add_tests!(ignore U12288, u12288, U12352);
|
||||
generate_add_tests!(ignore U12416, u12416, U12480);
|
||||
generate_add_tests!(ignore U15424, u15424, U15488);
|
||||
generate_add_tests!(ignore U15488, u15488, U15552);
|
||||
generate_add_tests!(ignore U16384, u16384, U16448);
|
||||
generate_add_tests!(ignore U16448, u16448, U16512);
|
||||
generate_add_tests!(ignore U16512, u16512, U16576);
|
||||
|
||||
Reference in New Issue
Block a user