@coti-io/coti-contracts 1.0.3 → 1.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/contracts/access/DataPrivacyFramework/extensions/DataPrivacyFrameworkMpc.sol +6 -6
  2. package/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol +309 -0
  3. package/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage.sol +15 -0
  4. package/contracts/token/PrivateERC721/extensions/PrivateERC721URIStorage.sol +27 -1
  5. package/contracts/utils/mpc/MpcCore.sol +527 -18
  6. package/contracts/utils/mpc/MpcInterface.sol +1 -2
  7. package/package.json +1 -1
  8. package/test/utils/mpc/CheckedArithmetic.test.ts +41 -0
  9. package/typechain-types/contracts/mocks/utils/mpc/{ArithmeticTestsContract.sol → ArithmeticWithOverflowBitTestsContract.sol}/ArithmeticTestsContract.ts +52 -43
  10. package/typechain-types/contracts/mocks/utils/mpc/{ArithmeticTestsContract.sol → ArithmeticWithOverflowBitTestsContract.sol}/index.ts +0 -1
  11. package/typechain-types/contracts/mocks/utils/mpc/{ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract.ts → CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract.ts} +73 -60
  12. package/typechain-types/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/index.ts +4 -0
  13. package/typechain-types/contracts/mocks/utils/mpc/index.ts +4 -0
  14. package/typechain-types/contracts/{GasTest.ts → token/PrivateERC721/extensions/IPrivateERC721URIStorage.ts} +27 -18
  15. package/typechain-types/contracts/token/PrivateERC721/extensions/index.ts +1 -0
  16. package/typechain-types/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations.ts +43 -18
  17. package/typechain-types/factories/contracts/mocks/token/PrivateERC20/PrivateERC20Mock__factory.ts +1 -1
  18. package/typechain-types/factories/contracts/mocks/token/PrivateERC721/PrivateERC721URIStorageMock__factory.ts +1 -1
  19. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract__factory.ts +1 -1
  20. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticWithOverflowBitTestsContract.sol/ArithmeticTestsContract__factory.ts +387 -0
  21. package/typechain-types/factories/contracts/mocks/utils/mpc/{ArithmeticTestsContract.sol → ArithmeticWithOverflowBitTestsContract.sol}/index.ts +0 -1
  22. package/typechain-types/factories/contracts/mocks/utils/mpc/BitwiseTestsContract__factory.ts +1 -1
  23. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/CheckedArithmeticWithOverflowBitTestsContract__factory.ts +397 -0
  24. package/typechain-types/factories/contracts/mocks/utils/mpc/CheckedArithmeticWIthOverflowBitTestsContract.sol/index.ts +4 -0
  25. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1TestsContract__factory.ts +1 -1
  26. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison2TestsContract__factory.ts +1 -1
  27. package/typechain-types/factories/contracts/mocks/utils/mpc/MinMaxTestsContract__factory.ts +1 -1
  28. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous1TestsContract__factory.ts +1 -1
  29. package/typechain-types/factories/contracts/mocks/utils/mpc/MiscellaneousTestsContract__factory.ts +1 -1
  30. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestContract__factory.ts +1 -1
  31. package/typechain-types/factories/contracts/mocks/utils/mpc/ShiftTestsContract__factory.ts +1 -1
  32. package/typechain-types/factories/contracts/mocks/utils/mpc/StringTestsContract__factory.ts +1 -1
  33. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferScalarTestsContract__factory.ts +1 -1
  34. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferTestsContract__factory.ts +1 -1
  35. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_16TestsContract__factory.ts +1 -1
  36. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_32TestsContract__factory.ts +1 -1
  37. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract__factory.ts +1 -1
  38. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_8TestsContract__factory.ts +1 -1
  39. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceScalarTestsContract__factory.ts +1 -1
  40. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract__factory.ts +1 -1
  41. package/typechain-types/factories/contracts/mocks/utils/mpc/index.ts +2 -0
  42. package/typechain-types/factories/contracts/mocks/wallet/PrivateERC20Wallet/PrivateERC20WalletMock__factory.ts +1 -1
  43. package/typechain-types/factories/contracts/onboard/AccountOnboard__factory.ts +1 -1
  44. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/IPrivateERC721URIStorage__factory.ts +55 -0
  45. package/typechain-types/factories/contracts/token/PrivateERC721/extensions/index.ts +1 -0
  46. package/typechain-types/factories/contracts/utils/mpc/MpcCore__factory.ts +1 -1
  47. package/typechain-types/factories/contracts/utils/mpc/MpcInterface.sol/ExtendedOperations__factory.ts +44 -19
  48. package/typechain-types/hardhat.d.ts +54 -0
  49. package/typechain-types/index.ts +4 -0
  50. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors.ts +0 -69
  51. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors.ts +0 -69
  52. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors.ts +0 -69
  53. package/typechain-types/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +0 -6
  54. package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract.ts +0 -340
  55. package/typechain-types/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +0 -4
  56. package/typechain-types/contracts/mocks/utils/mpc/Miscellaneous2TestsContract.ts +0 -384
  57. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract.ts +0 -221
  58. package/typechain-types/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +0 -4
  59. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract.ts +0 -251
  60. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract.ts +0 -250
  61. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +0 -5
  62. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.ts +0 -389
  63. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract.ts +0 -391
  64. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract.ts +0 -391
  65. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +0 -5
  66. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract.ts +0 -125
  67. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract.ts +0 -125
  68. package/typechain-types/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +0 -5
  69. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC1155Errors__factory.ts +0 -127
  70. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC20Errors__factory.ts +0 -111
  71. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/IERC721Errors__factory.ts +0 -128
  72. package/typechain-types/factories/@openzeppelin/contracts/interfaces/draft-IERC6093.sol/index.ts +0 -6
  73. package/typechain-types/factories/contracts/GasTest__factory.ts +0 -75
  74. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/ArithmeticTestsContract__factory.ts +0 -387
  75. package/typechain-types/factories/contracts/mocks/utils/mpc/ArithmeticTestsContract.sol/PrecompilesArythmeticTestsContract__factory.ts +0 -388
  76. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/Comparison1TestsContract__factory.ts +0 -361
  77. package/typechain-types/factories/contracts/mocks/utils/mpc/Comparison1Tests.Contract.sol/index.ts +0 -4
  78. package/typechain-types/factories/contracts/mocks/utils/mpc/Miscellaneous2TestsContract__factory.ts +0 -432
  79. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/OffboardToUserKeyTestContract__factory.ts +0 -261
  80. package/typechain-types/factories/contracts/mocks/utils/mpc/OffboardToUserKeyTestsContract.sol/index.ts +0 -4
  81. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowance64TestsContract__factory.ts +0 -294
  82. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +0 -292
  83. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract.sol/index.ts +0 -5
  84. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64TestsContract__factory.ts +0 -720
  85. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_64TestsContract__factory.ts +0 -724
  86. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/TransferWithAllowance64_8TestsContract__factory.ts +0 -724
  87. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowance64_64TestsContract.sol/index.ts +0 -5
  88. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferTestsContract__factory.ts +0 -150
  89. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/TransferWithAllowanceTestsContract__factory.ts +0 -150
  90. package/typechain-types/factories/contracts/mocks/utils/mpc/TransferWithAllowanceTestsContract.sol/index.ts +0 -5
@@ -103,8 +103,18 @@ library MpcCore {
103
103
  }
104
104
 
105
105
  function checkOverflow(gtBool bit) private {
106
+ // To revert on overflow, the require statement must fail when the overflow bit is set.
107
+ // Naturally, we would check that the overflow bit is 0.
108
+ // However, directly requiring the bit to be 0 causes gas estimation to fail, as it always returns 1.
109
+ // To handle this, we apply a NOT operation to the bit and require the result to be 1.
110
+ //
111
+ // Summary of all cases:
112
+ // 1. **Overflow scenario**: The overflow bit is 1 → NOT operation returns 0 → require fails → transaction reverts.
113
+ // 2. **No overflow**: The overflow bit is 0 → NOT operation returns 1 → require passes → transaction proceeds.
114
+ // 3. **Gas estimation**: Decrypt always returns 1 during gas estimation → require passes → no impact on actual execution.
115
+ gtBool notBit = not(bit);
106
116
  // revert on overflow
107
- require(decrypt(bit) == false, "overflow error");
117
+ require(decrypt(notBit) == true, "overflow error");
108
118
  }
109
119
 
110
120
  function checkRes8(gtBool bit, gtUint8 res) private returns (gtUint8) {
@@ -167,10 +177,6 @@ library MpcCore {
167
177
  return (share0, share1);
168
178
  }
169
179
 
170
- function deleteUserKey(bytes calldata signature) internal{
171
- ExtendedOperations(address(MPC_PRECOMPILE)).DeleteUserKey(signature);
172
- }
173
-
174
180
 
175
181
 
176
182
  // =========== 1 bit operations ==============
@@ -305,6 +311,13 @@ library MpcCore {
305
311
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
306
312
  }
307
313
 
314
+ function checkedAddWithOverflowBit(gtUint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
315
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
316
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b));
317
+
318
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
319
+ }
320
+
308
321
  function sub(gtUint8 a, gtUint8 b) internal returns (gtUint8) {
309
322
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
310
323
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b)));
@@ -317,6 +330,13 @@ library MpcCore {
317
330
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
318
331
  }
319
332
 
333
+ function checkedSubWithOverflowBit(gtUint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
334
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
335
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b));
336
+
337
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
338
+ }
339
+
320
340
  function mul(gtUint8 a, gtUint8 b) internal returns (gtUint8) {
321
341
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
322
342
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b)));
@@ -328,6 +348,12 @@ library MpcCore {
328
348
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
329
349
  }
330
350
 
351
+ function checkedMulWithOverflowBit(gtUint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
352
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
353
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b));
354
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
355
+ }
356
+
331
357
  function div(gtUint8 a, gtUint8 b) internal returns (gtUint8) {
332
358
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
333
359
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint8.unwrap(b)));
@@ -460,7 +486,7 @@ library MpcCore {
460
486
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
461
487
  Add(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b)));
462
488
  }
463
-
489
+
464
490
  function checkedAdd(gtUint16 a, gtUint16 b) internal returns (gtUint16) {
465
491
  (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
466
492
  CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b));
@@ -468,6 +494,13 @@ library MpcCore {
468
494
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
469
495
  }
470
496
 
497
+ function checkedAddWithOverflowBit(gtUint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
498
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
499
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b));
500
+
501
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
502
+ }
503
+
471
504
  function sub(gtUint16 a, gtUint16 b) internal returns (gtUint16) {
472
505
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
473
506
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b)));
@@ -480,6 +513,13 @@ library MpcCore {
480
513
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
481
514
  }
482
515
 
516
+ function checkedSubWithOverflowBit(gtUint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
517
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
518
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b));
519
+
520
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
521
+ }
522
+
483
523
  function mul(gtUint16 a, gtUint16 b) internal returns (gtUint16) {
484
524
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
485
525
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b)));
@@ -492,6 +532,13 @@ library MpcCore {
492
532
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
493
533
  }
494
534
 
535
+ function checkedMulWithOverflowBit(gtUint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
536
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
537
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b));
538
+
539
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
540
+ }
541
+
495
542
  function div(gtUint16 a, gtUint16 b) internal returns (gtUint16) {
496
543
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
497
544
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint16.unwrap(b)));
@@ -632,6 +679,13 @@ library MpcCore {
632
679
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
633
680
  }
634
681
 
682
+ function checkedAddWithOverflowBit(gtUint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
683
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
684
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b));
685
+
686
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
687
+ }
688
+
635
689
  function sub(gtUint32 a, gtUint32 b) internal returns (gtUint32) {
636
690
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
637
691
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b)));
@@ -644,6 +698,13 @@ library MpcCore {
644
698
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
645
699
  }
646
700
 
701
+ function checkedSubWithOverflowBit(gtUint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
702
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
703
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b));
704
+
705
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
706
+ }
707
+
647
708
  function mul(gtUint32 a, gtUint32 b) internal returns (gtUint32) {
648
709
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
649
710
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b)));
@@ -652,10 +713,17 @@ library MpcCore {
652
713
  function checkedMul(gtUint32 a, gtUint32 b) internal returns (gtUint32) {
653
714
  (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
654
715
  CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b));
655
-
716
+
656
717
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
657
718
  }
658
719
 
720
+ function checkedMulWithOverflowBit(gtUint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
721
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
722
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b));
723
+
724
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
725
+ }
726
+
659
727
  function div(gtUint32 a, gtUint32 b) internal returns (gtUint32) {
660
728
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
661
729
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint32.unwrap(b)));
@@ -797,6 +865,13 @@ library MpcCore {
797
865
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
798
866
  }
799
867
 
868
+ function checkedAddWithOverflowBit(gtUint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
869
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
870
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b));
871
+
872
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
873
+ }
874
+
800
875
  function sub(gtUint64 a, gtUint64 b) internal returns (gtUint64) {
801
876
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
802
877
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b)));
@@ -809,6 +884,13 @@ library MpcCore {
809
884
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
810
885
  }
811
886
 
887
+ function checkedSubWithOverflowBit(gtUint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
888
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
889
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b));
890
+
891
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
892
+ }
893
+
812
894
  function mul(gtUint64 a, gtUint64 b) internal returns (gtUint64) {
813
895
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
814
896
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b)));
@@ -821,6 +903,13 @@ library MpcCore {
821
903
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
822
904
  }
823
905
 
906
+ function checkedMulWithOverflowBit(gtUint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
907
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
908
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b));
909
+
910
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
911
+ }
912
+
824
913
  function div(gtUint64 a, gtUint64 b) internal returns (gtUint64) {
825
914
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
826
915
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint64.unwrap(b)));
@@ -1067,6 +1156,13 @@ library MpcCore {
1067
1156
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1068
1157
  }
1069
1158
 
1159
+ function checkedAddWithOverflowBit(uint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
1160
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1161
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b));
1162
+
1163
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1164
+ }
1165
+
1070
1166
  function sub(uint8 a, gtUint8 b) internal returns (gtUint8) {
1071
1167
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1072
1168
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b)));
@@ -1079,6 +1175,13 @@ library MpcCore {
1079
1175
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1080
1176
  }
1081
1177
 
1178
+ function checkedSubWithOverflowBit(uint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
1179
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1180
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b));
1181
+
1182
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1183
+ }
1184
+
1082
1185
  function mul(uint8 a, gtUint8 b) internal returns (gtUint8) {
1083
1186
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1084
1187
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b)));
@@ -1091,6 +1194,13 @@ library MpcCore {
1091
1194
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1092
1195
  }
1093
1196
 
1197
+ function checkedMulWithOverflowBit(uint8 a, gtUint8 b) internal returns (gtBool, gtUint8) {
1198
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1199
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b));
1200
+
1201
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1202
+ }
1203
+
1094
1204
  function div(uint8 a, gtUint8 b) internal returns (gtUint8) {
1095
1205
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1096
1206
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.LHS_PUBLIC), uint256(a), gtUint8.unwrap(b)));
@@ -1176,6 +1286,13 @@ library MpcCore {
1176
1286
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1177
1287
  }
1178
1288
 
1289
+ function checkedAddWithOverflowBit(uint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
1290
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1291
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b));
1292
+
1293
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1294
+ }
1295
+
1179
1296
  function sub(uint16 a, gtUint16 b) internal returns (gtUint16) {
1180
1297
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1181
1298
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b)));
@@ -1188,6 +1305,13 @@ library MpcCore {
1188
1305
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1189
1306
  }
1190
1307
 
1308
+ function checkedSubWithOverflowBit(uint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
1309
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1310
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b));
1311
+
1312
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1313
+ }
1314
+
1191
1315
  function mul(uint16 a, gtUint16 b) internal returns (gtUint16) {
1192
1316
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1193
1317
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b)));
@@ -1200,6 +1324,13 @@ library MpcCore {
1200
1324
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1201
1325
  }
1202
1326
 
1327
+ function checkedMulWithOverflowBit(uint16 a, gtUint16 b) internal returns (gtBool, gtUint16) {
1328
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1329
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b));
1330
+
1331
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1332
+ }
1333
+
1203
1334
  function div(uint16 a, gtUint16 b) internal returns (gtUint16) {
1204
1335
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1205
1336
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.LHS_PUBLIC), uint256(a), gtUint16.unwrap(b)));
@@ -1285,6 +1416,13 @@ library MpcCore {
1285
1416
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1286
1417
  }
1287
1418
 
1419
+ function checkedAddWithOverflowBit(uint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
1420
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1421
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b));
1422
+
1423
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
1424
+ }
1425
+
1288
1426
  function sub(uint32 a, gtUint32 b) internal returns (gtUint32) {
1289
1427
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1290
1428
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b)));
@@ -1297,6 +1435,13 @@ library MpcCore {
1297
1435
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1298
1436
  }
1299
1437
 
1438
+ function checkedSubWithOverflowBit(uint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
1439
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1440
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b));
1441
+
1442
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
1443
+ }
1444
+
1300
1445
  function mul(uint32 a, gtUint32 b) internal returns (gtUint32) {
1301
1446
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1302
1447
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b)));
@@ -1309,6 +1454,13 @@ library MpcCore {
1309
1454
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1310
1455
  }
1311
1456
 
1457
+ function checkedMulWithOverflowBit(uint32 a, gtUint32 b) internal returns (gtBool, gtUint32) {
1458
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1459
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b));
1460
+
1461
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
1462
+ }
1463
+
1312
1464
  function div(uint32 a, gtUint32 b) internal returns (gtUint32) {
1313
1465
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1314
1466
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.LHS_PUBLIC), uint256(a), gtUint32.unwrap(b)));
@@ -1394,6 +1546,13 @@ library MpcCore {
1394
1546
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1395
1547
  }
1396
1548
 
1549
+ function checkedAddWithOverflowBit(uint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
1550
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1551
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b));
1552
+
1553
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
1554
+ }
1555
+
1397
1556
  function sub(uint64 a, gtUint64 b) internal returns (gtUint64) {
1398
1557
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1399
1558
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b)));
@@ -1406,6 +1565,13 @@ library MpcCore {
1406
1565
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1407
1566
  }
1408
1567
 
1568
+ function checkedSubWithOverflowBit(uint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
1569
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1570
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b));
1571
+
1572
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
1573
+ }
1574
+
1409
1575
  function mul(uint64 a, gtUint64 b) internal returns (gtUint64) {
1410
1576
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1411
1577
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b)));
@@ -1418,6 +1584,13 @@ library MpcCore {
1418
1584
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1419
1585
  }
1420
1586
 
1587
+ function checkedMulWithOverflowBit(uint64 a, gtUint64 b) internal returns (gtBool, gtUint64) {
1588
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1589
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b));
1590
+
1591
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
1592
+ }
1593
+
1421
1594
  function div(uint64 a, gtUint64 b) internal returns (gtUint64) {
1422
1595
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1423
1596
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.LHS_PUBLIC), uint256(a), gtUint64.unwrap(b)));
@@ -1504,6 +1677,13 @@ library MpcCore {
1504
1677
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1505
1678
  }
1506
1679
 
1680
+ function checkedAddWithOverflowBit(gtUint8 a, uint8 b) internal returns (gtBool, gtUint8) {
1681
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1682
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b));
1683
+
1684
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1685
+ }
1686
+
1507
1687
  function sub(gtUint8 a, uint8 b) internal returns (gtUint8) {
1508
1688
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1509
1689
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
@@ -1516,6 +1696,13 @@ library MpcCore {
1516
1696
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1517
1697
  }
1518
1698
 
1699
+ function checkedSubWithOverflowBit(gtUint8 a, uint8 b) internal returns (gtBool, gtUint8) {
1700
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1701
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b));
1702
+
1703
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1704
+ }
1705
+
1519
1706
  function mul(gtUint8 a, uint8 b) internal returns (gtUint8) {
1520
1707
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1521
1708
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
@@ -1528,6 +1715,13 @@ library MpcCore {
1528
1715
  return checkRes8(gtBool.wrap(bit), gtUint8.wrap(res));
1529
1716
  }
1530
1717
 
1718
+ function checkedMulWithOverflowBit(gtUint8 a, uint8 b) internal returns (gtBool, gtUint8) {
1719
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1720
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b));
1721
+
1722
+ return (gtBool.wrap(bit), gtUint8.wrap(res));
1723
+ }
1724
+
1531
1725
  function div(gtUint8 a, uint8 b) internal returns (gtUint8) {
1532
1726
  return gtUint8.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1533
1727
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint8.unwrap(a), uint256(b)));
@@ -1622,6 +1816,13 @@ library MpcCore {
1622
1816
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1623
1817
  }
1624
1818
 
1819
+ function checkedAddWithOverflowBit(gtUint16 a, uint16 b) internal returns (gtBool, gtUint16) {
1820
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1821
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b));
1822
+
1823
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1824
+ }
1825
+
1625
1826
  function sub(gtUint16 a, uint16 b) internal returns (gtUint16) {
1626
1827
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1627
1828
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
@@ -1634,6 +1835,13 @@ library MpcCore {
1634
1835
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1635
1836
  }
1636
1837
 
1838
+ function checkedSubWithOverflowBit(gtUint16 a, uint16 b) internal returns (gtBool, gtUint16) {
1839
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1840
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b));
1841
+
1842
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1843
+ }
1844
+
1637
1845
  function mul(gtUint16 a, uint16 b) internal returns (gtUint16) {
1638
1846
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1639
1847
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
@@ -1646,6 +1854,13 @@ library MpcCore {
1646
1854
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
1647
1855
  }
1648
1856
 
1857
+ function checkedMulWithOverflowBit(gtUint16 a, uint16 b) internal returns (gtBool, gtUint16) {
1858
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1859
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b));
1860
+
1861
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
1862
+ }
1863
+
1649
1864
  function div(gtUint16 a, uint16 b) internal returns (gtUint16) {
1650
1865
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1651
1866
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
@@ -1671,12 +1886,12 @@ library MpcCore {
1671
1886
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT16_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1672
1887
  }
1673
1888
 
1674
- function shl(gtUint16 a, uint16 b) internal returns (gtUint16) {
1889
+ function shl(gtUint16 a, uint8 b) internal returns (gtUint16) {
1675
1890
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1676
1891
  Shl(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1677
1892
  }
1678
1893
 
1679
- function shr(gtUint16 a, uint16 b) internal returns (gtUint16) {
1894
+ function shr(gtUint16 a, uint8 b) internal returns (gtUint16) {
1680
1895
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1681
1896
  Shr(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint16.unwrap(a), uint256(b)));
1682
1897
  }
@@ -1741,6 +1956,13 @@ library MpcCore {
1741
1956
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1742
1957
  }
1743
1958
 
1959
+ function checkedAddWithOverflowBit(gtUint32 a, uint32 b) internal returns (gtBool, gtUint32) {
1960
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1961
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b));
1962
+
1963
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
1964
+ }
1965
+
1744
1966
  function sub(gtUint32 a, uint32 b) internal returns (gtUint32) {
1745
1967
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1746
1968
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
@@ -1753,6 +1975,13 @@ library MpcCore {
1753
1975
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1754
1976
  }
1755
1977
 
1978
+ function checkedSubWithOverflowBit(gtUint32 a, uint32 b) internal returns (gtBool, gtUint32) {
1979
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1980
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b));
1981
+
1982
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
1983
+ }
1984
+
1756
1985
  function mul(gtUint32 a, uint32 b) internal returns (gtUint32) {
1757
1986
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1758
1987
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
@@ -1765,6 +1994,13 @@ library MpcCore {
1765
1994
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
1766
1995
  }
1767
1996
 
1997
+ function checkedMulWithOverflowBit(gtUint32 a, uint32 b) internal returns (gtBool, gtUint32) {
1998
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
1999
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b));
2000
+
2001
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
2002
+ }
2003
+
1768
2004
  function div(gtUint32 a, uint32 b) internal returns (gtUint32) {
1769
2005
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1770
2006
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
@@ -1789,14 +2025,14 @@ library MpcCore {
1789
2025
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1790
2026
  }
1791
2027
 
1792
- function shl(gtUint32 a, uint32 b) internal returns (gtUint32) {
2028
+ function shl(gtUint32 a, uint8 b) internal returns (gtUint32) {
1793
2029
  return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
1794
- Shl(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
2030
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1795
2031
  }
1796
2032
 
1797
- function shr(gtUint32 a, uint32 b) internal returns (gtUint32) {
2033
+ function shr(gtUint32 a, uint8 b) internal returns (gtUint32) {
1798
2034
  return gtUint32.wrap(ExtendedOperations(MPC_PRECOMPILE).
1799
- Shr(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT32_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
2035
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint32.unwrap(a), uint256(b)));
1800
2036
  }
1801
2037
 
1802
2038
  function eq(gtUint32 a, uint32 b) internal returns (gtBool) {
@@ -1845,7 +2081,7 @@ library MpcCore {
1845
2081
  }
1846
2082
 
1847
2083
 
1848
- // =========== 64 bit operations ==============
2084
+ // =========== 64 bit operations ==============
1849
2085
 
1850
2086
  function add(gtUint64 a, uint64 b) internal returns (gtUint64) {
1851
2087
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
@@ -1859,6 +2095,13 @@ library MpcCore {
1859
2095
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1860
2096
  }
1861
2097
 
2098
+ function checkedAddWithOverflowBit(gtUint64 a, uint64 b) internal returns (gtBool, gtUint64) {
2099
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2100
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b));
2101
+
2102
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
2103
+ }
2104
+
1862
2105
  function sub(gtUint64 a, uint64 b) internal returns (gtUint64) {
1863
2106
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1864
2107
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
@@ -1871,6 +2114,13 @@ library MpcCore {
1871
2114
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1872
2115
  }
1873
2116
 
2117
+ function checkedSubWithOverflowBit(gtUint64 a, uint64 b) internal returns (gtBool, gtUint64) {
2118
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2119
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b));
2120
+
2121
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
2122
+ }
2123
+
1874
2124
  function mul(gtUint64 a, uint64 b) internal returns (gtUint64) {
1875
2125
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1876
2126
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
@@ -1883,6 +2133,13 @@ library MpcCore {
1883
2133
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
1884
2134
  }
1885
2135
 
2136
+ function checkedMulWithOverflowBit(gtUint64 a, uint64 b) internal returns (gtBool, gtUint64) {
2137
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2138
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b));
2139
+
2140
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
2141
+ }
2142
+
1886
2143
  function div(gtUint64 a, uint64 b) internal returns (gtUint64) {
1887
2144
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1888
2145
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
@@ -1908,14 +2165,14 @@ library MpcCore {
1908
2165
  Xor(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1909
2166
  }
1910
2167
 
1911
- function shl(gtUint64 a, uint64 b) internal returns (gtUint64) {
2168
+ function shl(gtUint64 a, uint8 b) internal returns (gtUint64) {
1912
2169
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1913
- Shl(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
2170
+ Shl(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1914
2171
  }
1915
2172
 
1916
- function shr(gtUint64 a, uint64 b) internal returns (gtUint64) {
2173
+ function shr(gtUint64 a, uint8 b) internal returns (gtUint64) {
1917
2174
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
1918
- Shr(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT64_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
2175
+ Shr(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT8_T, ARGS.RHS_PUBLIC), gtUint64.unwrap(a), uint256(b)));
1919
2176
  }
1920
2177
 
1921
2178
  function eq(gtUint64 a, uint64 b) internal returns (gtBool) {
@@ -2397,6 +2654,20 @@ library MpcCore {
2397
2654
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
2398
2655
  }
2399
2656
 
2657
+ function checkedAddWithOverflowBit(gtUint8 a, gtUint16 b) internal returns (gtBool, gtUint16) {
2658
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2659
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b));
2660
+
2661
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2662
+ }
2663
+
2664
+ function checkedAddWithOverflowBit(gtUint16 a, gtUint8 b) internal returns (gtBool, gtUint16) {
2665
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2666
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint8.unwrap(b));
2667
+
2668
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2669
+ }
2670
+
2400
2671
  function sub(gtUint8 a, gtUint16 b) internal returns (gtUint16) {
2401
2672
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2402
2673
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b)));
@@ -2421,6 +2692,20 @@ library MpcCore {
2421
2692
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
2422
2693
  }
2423
2694
 
2695
+ function checkedSubWithOverflowBit(gtUint8 a, gtUint16 b) internal returns (gtBool, gtUint16) {
2696
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2697
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b));
2698
+
2699
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2700
+ }
2701
+
2702
+ function checkedSubWithOverflowBit(gtUint16 a, gtUint8 b) internal returns (gtBool, gtUint16) {
2703
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2704
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint8.unwrap(b));
2705
+
2706
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2707
+ }
2708
+
2424
2709
  function mul(gtUint8 a, gtUint16 b) internal returns (gtUint16) {
2425
2710
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2426
2711
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b)));
@@ -2445,6 +2730,20 @@ library MpcCore {
2445
2730
  return checkRes16(gtBool.wrap(bit), gtUint16.wrap(res));
2446
2731
  }
2447
2732
 
2733
+ function checkedMulWithOverflowBit(gtUint8 a, gtUint16 b) internal returns (gtBool, gtUint16) {
2734
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2735
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b));
2736
+
2737
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2738
+ }
2739
+
2740
+ function checkedMulWithOverflowBit(gtUint16 a, gtUint8 b) internal returns (gtBool, gtUint16) {
2741
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
2742
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint8.unwrap(b));
2743
+
2744
+ return (gtBool.wrap(bit), gtUint16.wrap(res));
2745
+ }
2746
+
2448
2747
  function div(gtUint8 a, gtUint16 b) internal returns (gtUint16) {
2449
2748
  return gtUint16.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2450
2749
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint16.unwrap(b)));
@@ -2715,6 +3014,20 @@ library MpcCore {
2715
3014
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
2716
3015
  }
2717
3016
 
3017
+ function checkedAddWithOverflowBit(gtUint8 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3018
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3019
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b));
3020
+
3021
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3022
+ }
3023
+
3024
+ function checkedAddWithOverflowBit(gtUint32 a, gtUint8 b) internal returns (gtBool, gtUint32) {
3025
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3026
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint8.unwrap(b));
3027
+
3028
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3029
+ }
3030
+
2718
3031
  function sub(gtUint8 a, gtUint32 b) internal returns (gtUint32) {
2719
3032
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2720
3033
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b)));
@@ -2739,6 +3052,20 @@ library MpcCore {
2739
3052
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
2740
3053
  }
2741
3054
 
3055
+ function checkedSubWithOverflowBit(gtUint8 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3056
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3057
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b));
3058
+
3059
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3060
+ }
3061
+
3062
+ function checkedSubWithOverflowBit(gtUint32 a, gtUint8 b) internal returns (gtBool, gtUint32) {
3063
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3064
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint8.unwrap(b));
3065
+
3066
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3067
+ }
3068
+
2742
3069
  function mul(gtUint8 a, gtUint32 b) internal returns (gtUint32) {
2743
3070
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2744
3071
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b)));
@@ -2763,6 +3090,20 @@ library MpcCore {
2763
3090
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
2764
3091
  }
2765
3092
 
3093
+ function checkedMulWithOverflowBit(gtUint8 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3094
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3095
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b));
3096
+
3097
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3098
+ }
3099
+
3100
+ function checkedMulWithOverflowBit(gtUint32 a, gtUint8 b) internal returns (gtBool, gtUint32) {
3101
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3102
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint8.unwrap(b));
3103
+
3104
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3105
+ }
3106
+
2766
3107
  function div(gtUint8 a, gtUint32 b) internal returns (gtUint32) {
2767
3108
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
2768
3109
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint32.unwrap(b)));
@@ -3119,6 +3460,20 @@ library MpcCore {
3119
3460
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
3120
3461
  }
3121
3462
 
3463
+ function checkedAddWithOverflowBit(gtUint16 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3464
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3465
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b));
3466
+
3467
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3468
+ }
3469
+
3470
+ function checkedAddWithOverflowBit(gtUint32 a, gtUint16 b) internal returns (gtBool, gtUint32) {
3471
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3472
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint16.unwrap(b));
3473
+
3474
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3475
+ }
3476
+
3122
3477
  function sub(gtUint16 a, gtUint32 b) internal returns (gtUint32) {
3123
3478
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3124
3479
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b)));
@@ -3143,6 +3498,20 @@ library MpcCore {
3143
3498
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
3144
3499
  }
3145
3500
 
3501
+ function checkedSubWithOverflowBit(gtUint16 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3502
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3503
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b));
3504
+
3505
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3506
+ }
3507
+
3508
+ function checkedSubWithOverflowBit(gtUint32 a, gtUint16 b) internal returns (gtBool, gtUint32) {
3509
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3510
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint16.unwrap(b));
3511
+
3512
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3513
+ }
3514
+
3146
3515
  function mul(gtUint16 a, gtUint32 b) internal returns (gtUint32) {
3147
3516
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3148
3517
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b)));
@@ -3167,6 +3536,20 @@ library MpcCore {
3167
3536
  return checkRes32(gtBool.wrap(bit), gtUint32.wrap(res));
3168
3537
  }
3169
3538
 
3539
+ function checkedMulWithOverflowBit(gtUint16 a, gtUint32 b) internal returns (gtBool, gtUint32) {
3540
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3541
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b));
3542
+
3543
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3544
+ }
3545
+
3546
+ function checkedMulWithOverflowBit(gtUint32 a, gtUint16 b) internal returns (gtBool, gtUint32) {
3547
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3548
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint16.unwrap(b));
3549
+
3550
+ return (gtBool.wrap(bit), gtUint32.wrap(res));
3551
+ }
3552
+
3170
3553
  function div(gtUint16 a, gtUint32 b) internal returns (gtUint32) {
3171
3554
  return gtUint32.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3172
3555
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint32.unwrap(b)));
@@ -3532,6 +3915,20 @@ library MpcCore {
3532
3915
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
3533
3916
  }
3534
3917
 
3918
+ function checkedAddWithOverflowBit(gtUint8 a, gtUint64 b) internal returns (gtBool, gtUint64) {
3919
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3920
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b));
3921
+
3922
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
3923
+ }
3924
+
3925
+ function checkedAddWithOverflowBit(gtUint64 a, gtUint8 b) internal returns (gtBool, gtUint64) {
3926
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3927
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint8.unwrap(b));
3928
+
3929
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
3930
+ }
3931
+
3535
3932
  function sub(gtUint8 a, gtUint64 b) internal returns (gtUint64) {
3536
3933
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3537
3934
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b)));
@@ -3556,6 +3953,20 @@ library MpcCore {
3556
3953
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
3557
3954
  }
3558
3955
 
3956
+ function checkedSubWithOverflowBit(gtUint8 a, gtUint64 b) internal returns (gtBool, gtUint64) {
3957
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3958
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b));
3959
+
3960
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
3961
+ }
3962
+
3963
+ function checkedSubWithOverflowBit(gtUint64 a, gtUint8 b) internal returns (gtBool, gtUint64) {
3964
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3965
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint8.unwrap(b));
3966
+
3967
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
3968
+ }
3969
+
3559
3970
  function mul(gtUint8 a, gtUint64 b) internal returns (gtUint64) {
3560
3971
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3561
3972
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b)));
@@ -3580,6 +3991,20 @@ library MpcCore {
3580
3991
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
3581
3992
  }
3582
3993
 
3994
+ function checkedMulWithOverflowBit(gtUint8 a, gtUint64 b) internal returns (gtBool, gtUint64) {
3995
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
3996
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b));
3997
+
3998
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
3999
+ }
4000
+
4001
+ function checkedMulWithOverflowBit(gtUint64 a, gtUint8 b) internal returns (gtBool, gtUint64) {
4002
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4003
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT8_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint8.unwrap(b));
4004
+
4005
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4006
+ }
4007
+
3583
4008
  function div(gtUint8 a, gtUint64 b) internal returns (gtUint64) {
3584
4009
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
3585
4010
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT8_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint8.unwrap(a), gtUint64.unwrap(b)));
@@ -4078,6 +4503,20 @@ library MpcCore {
4078
4503
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4079
4504
  }
4080
4505
 
4506
+ function checkedAddWithOverflowBit(gtUint16 a, gtUint64 b) internal returns (gtBool, gtUint64) {
4507
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4508
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b));
4509
+
4510
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4511
+ }
4512
+
4513
+ function checkedAddWithOverflowBit(gtUint64 a, gtUint16 b) internal returns (gtBool, gtUint64) {
4514
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4515
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint16.unwrap(b));
4516
+
4517
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4518
+ }
4519
+
4081
4520
  function sub(gtUint16 a, gtUint64 b) internal returns (gtUint64) {
4082
4521
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4083
4522
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b)));
@@ -4102,6 +4541,20 @@ library MpcCore {
4102
4541
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4103
4542
  }
4104
4543
 
4544
+ function checkedSubWithOverflowBit(gtUint16 a, gtUint64 b) internal returns (gtBool, gtUint64) {
4545
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4546
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b));
4547
+
4548
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4549
+ }
4550
+
4551
+ function checkedSubWithOverflowBit(gtUint64 a, gtUint16 b) internal returns (gtBool, gtUint64) {
4552
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4553
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint16.unwrap(b));
4554
+
4555
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4556
+ }
4557
+
4105
4558
  function mul(gtUint16 a, gtUint64 b) internal returns (gtUint64) {
4106
4559
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4107
4560
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b)));
@@ -4126,6 +4579,20 @@ library MpcCore {
4126
4579
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4127
4580
  }
4128
4581
 
4582
+ function checkedMulWithOverflowBit(gtUint16 a, gtUint64 b) internal returns (gtBool, gtUint64) {
4583
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4584
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b));
4585
+
4586
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4587
+ }
4588
+
4589
+ function checkedMulWithOverflowBit(gtUint64 a, gtUint16 b) internal returns (gtBool, gtUint64) {
4590
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
4591
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT16_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint16.unwrap(b));
4592
+
4593
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
4594
+ }
4595
+
4129
4596
  function div(gtUint16 a, gtUint64 b) internal returns (gtUint64) {
4130
4597
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4131
4598
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT16_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint16.unwrap(a), gtUint64.unwrap(b)));
@@ -4603,6 +5070,20 @@ library MpcCore {
4603
5070
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4604
5071
  }
4605
5072
 
5073
+ function checkedAddWithOverflowBit(gtUint32 a, gtUint64 b) internal returns (gtBool, gtUint64) {
5074
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5075
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b));
5076
+
5077
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5078
+ }
5079
+
5080
+ function checkedAddWithOverflowBit(gtUint64 a, gtUint32 b) internal returns (gtBool, gtUint64) {
5081
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5082
+ CheckedAdd(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint32.unwrap(b));
5083
+
5084
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5085
+ }
5086
+
4606
5087
  function sub(gtUint32 a, gtUint64 b) internal returns (gtUint64) {
4607
5088
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4608
5089
  Sub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b)));
@@ -4627,6 +5108,20 @@ library MpcCore {
4627
5108
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4628
5109
  }
4629
5110
 
5111
+ function checkedSubWithOverflowBit(gtUint32 a, gtUint64 b) internal returns (gtBool, gtUint64) {
5112
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5113
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b));
5114
+
5115
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5116
+ }
5117
+
5118
+ function checkedSubWithOverflowBit(gtUint64 a, gtUint32 b) internal returns (gtBool, gtUint64) {
5119
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5120
+ CheckedSub(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint32.unwrap(b));
5121
+
5122
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5123
+ }
5124
+
4630
5125
  function mul(gtUint32 a, gtUint64 b) internal returns (gtUint64) {
4631
5126
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4632
5127
  Mul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b)));
@@ -4651,6 +5146,20 @@ library MpcCore {
4651
5146
  return checkRes64(gtBool.wrap(bit), gtUint64.wrap(res));
4652
5147
  }
4653
5148
 
5149
+ function checkedMulWithOverflowBit(gtUint32 a, gtUint64 b) internal returns (gtBool, gtUint64) {
5150
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5151
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b));
5152
+
5153
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5154
+ }
5155
+
5156
+ function checkedMulWithOverflowBit(gtUint64 a, gtUint32 b) internal returns (gtBool, gtUint64) {
5157
+ (uint256 bit, uint256 res) = ExtendedOperations(address(MPC_PRECOMPILE)).
5158
+ CheckedMul(combineEnumsToBytes3(MPC_TYPE.SUINT64_T, MPC_TYPE.SUINT32_T, ARGS.BOTH_SECRET), gtUint64.unwrap(a), gtUint32.unwrap(b));
5159
+
5160
+ return (gtBool.wrap(bit), gtUint64.wrap(res));
5161
+ }
5162
+
4654
5163
  function div(gtUint32 a, gtUint64 b) internal returns (gtUint64) {
4655
5164
  return gtUint64.wrap(ExtendedOperations(address(MPC_PRECOMPILE)).
4656
5165
  Div(combineEnumsToBytes3(MPC_TYPE.SUINT32_T, MPC_TYPE.SUINT64_T, ARGS.BOTH_SECRET), gtUint32.unwrap(a), gtUint64.unwrap(b)));