Using the 0.8 codebase compiled with mingw and the 0.13 codebase cross compiled for Windows on Ubuntu. With some bespoke code the same values for a minus operation differ between arith_uint256 and CBigNum, I'm getting positive arith_uint256 values where as with CBigNum in older codebases returns negative. I assume that the arith_uint256 is wrapping around, CBigNum being a uint should not have gone negative.
0.8
CBigNum mathsInputOne;
CBigNum mathsInputTwo;
CBigNum mathsOne;
0.13
arith_uint256 mathsInputOne;
arith_uint256 mathsInputTwo;
arith_uint256 mathsOne;
The operation is a simple one.
mathsOne = mathsInputTwo - mathsInputOne;
Value for mathsInputOne = 00000ec639000000000000000000000000000000000000000000000000000000 Value for mathsInputTwo = 00000ec302000000000000000000000000000000000000000000000000000000
The results are below.
0.8 CBigNum (Converted to hexidecimal)
-337000000000000000000000000000000000000000000000000000000
0.13 arith_uint256
fffffffcc9000000000000000000000000000000000000000000000000000000
CBigNum used OpenSSL BN_sub for minus operations where as arith_uint256 is implemented locally in arith_uint256.h. Unfortunately the project I'm working with expects the negative values rather than the wrapped ones, not exactly sure what to do except for restore CBigNum along with OpenSSL bn.h.