MCPcopy Create free account
hub / github.com/Tripwire/tripwire-open-source / PositiveSubtract

Function PositiveSubtract

src/cryptlib/integer.cpp:1671–1707  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1669}
1670
1671void PositiveSubtract(Integer &diff, const Integer &a, const Integer& b)
1672{
1673 unsigned aSize = a.WordCount();
1674 aSize += aSize%2;
1675 unsigned bSize = b.WordCount();
1676 bSize += bSize%2;
1677
1678 if (aSize == bSize)
1679 {
1680 if (Compare(a.reg, b.reg, aSize) >= 0)
1681 {
1682 Subtract(diff.reg, a.reg, b.reg, aSize);
1683 diff.sign = Integer::POSITIVE;
1684 }
1685 else
1686 {
1687 Subtract(diff.reg, b.reg, a.reg, aSize);
1688 diff.sign = Integer::NEGATIVE;
1689 }
1690 }
1691 else if (aSize > bSize)
1692 {
1693 word borrow = Subtract(diff.reg, a.reg, b.reg, bSize);
1694 CopyWords(diff.reg+bSize, a.reg+bSize, aSize-bSize);
1695 borrow = Decrement(diff.reg+bSize, aSize-bSize, borrow);
1696 assert(!borrow);
1697 diff.sign = Integer::POSITIVE;
1698 }
1699 else
1700 {
1701 word borrow = Subtract(diff.reg, b.reg, a.reg, aSize);
1702 CopyWords(diff.reg+aSize, b.reg+aSize, bSize-aSize);
1703 borrow = Decrement(diff.reg+aSize, bSize-aSize, borrow);
1704 assert(!borrow);
1705 diff.sign = Integer::NEGATIVE;
1706 }
1707}
1708
1709Integer operator+(const Integer &a, const Integer& b)
1710{

Callers 3

operator+Function · 0.85
integer.cppFile · 0.85
operator-Function · 0.85

Calls 5

SubtractFunction · 0.85
CopyWordsFunction · 0.85
DecrementFunction · 0.85
WordCountMethod · 0.80
CompareFunction · 0.70

Tested by

no test coverage detected