summaryrefslogtreecommitdiff
path: root/src/BigInt.cc
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-08-11 18:26:11 +0200
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2013-08-11 18:26:11 +0200
commita9e588bd1a90175f411c7bda93969a9bec090af7 (patch)
treec912f15f43be3d32fb447a91982c0dddaffc595b /src/BigInt.cc
parent5f866c4a4b44d39b827a99d82006fa2d375c0ba9 (diff)
Finishing up the BigInt class.
Diffstat (limited to 'src/BigInt.cc')
-rw-r--r--src/BigInt.cc78
1 files changed, 78 insertions, 0 deletions
diff --git a/src/BigInt.cc b/src/BigInt.cc
index 7a30e7e..04d5c1e 100644
--- a/src/BigInt.cc
+++ b/src/BigInt.cc
@@ -365,6 +365,84 @@ bool Balau::BigInt::operator>(const BigInt & a) const {
return r == GT;
}
+Balau::BigInt Balau::BigInt::modadd(const BigInt & a, const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_addmod(m_bi, a.m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_addmod");
+ return r;
+}
+
+Balau::BigInt Balau::BigInt::modsub(const BigInt & a, const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_submod(m_bi, a.m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_submod");
+ return r;
+}
+
+Balau::BigInt Balau::BigInt::modmul(const BigInt & a, const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_mulmod(m_bi, a.m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_mulmod");
+ return r;
+}
+
+Balau::BigInt Balau::BigInt::modsqr(const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_sqrmod(m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_sqrmod");
+ return r;
+}
+
+Balau::BigInt Balau::BigInt::modinv(const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_invmod(m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_invmod");
+ return r;
+}
+
+Balau::BigInt Balau::BigInt::modpow(const BigInt & a, const BigInt & m) const throw (GeneralException) {
+ BigInt r;
+ if (mp_exptmod(m_bi, a.m_bi, m.m_bi, r.m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_exptmod");
+ return r;
+}
+
+Balau::BigInt & Balau::BigInt::do_modadd(const BigInt & a, const BigInt & m) throw (GeneralException) {
+ if (mp_addmod(m_bi, a.m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_addmod");
+ return *this;
+}
+
+Balau::BigInt & Balau::BigInt::do_modsub(const BigInt & a, const BigInt & m) throw (GeneralException) {
+ if (mp_submod(m_bi, a.m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_submod");
+ return *this;
+}
+
+Balau::BigInt & Balau::BigInt::do_modmul(const BigInt & a, const BigInt & m) throw (GeneralException) {
+ if (mp_mulmod(m_bi, a.m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_mulmod");
+ return *this;
+}
+
+Balau::BigInt & Balau::BigInt::do_modsqr(const BigInt & m) throw (GeneralException) {
+ if (mp_sqrmod(m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_sqrmod");
+ return *this;
+}
+
+Balau::BigInt & Balau::BigInt::do_modinv(const BigInt & m) throw (GeneralException) {
+ if (mp_invmod(m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_invmod");
+ return *this;
+}
+
+Balau::BigInt & Balau::BigInt::do_modpow(const BigInt & a, const BigInt & m) throw (GeneralException) {
+ if (mp_exptmod(m_bi, a.m_bi, m.m_bi, m_bi) != CRYPT_OK)
+ throw GeneralException("Error while calling mp_exptmod");
+ return *this;
+}
+
Balau::String Balau::BigInt::toString(int radix) const {
char * out = (char *) alloca(mp_count_bits(m_bi) / (radix >= 10 ? 3 : 1) + 3);
mp_toradix(m_bi, out, radix);