aboutsummaryrefslogtreecommitdiffstats
path: root/src/math/numbertheory/blinding.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/math/numbertheory/blinding.cpp')
-rw-r--r--src/math/numbertheory/blinding.cpp47
1 files changed, 47 insertions, 0 deletions
diff --git a/src/math/numbertheory/blinding.cpp b/src/math/numbertheory/blinding.cpp
new file mode 100644
index 000000000..740904d10
--- /dev/null
+++ b/src/math/numbertheory/blinding.cpp
@@ -0,0 +1,47 @@
+/*************************************************
+* Blinder Source File *
+* (C) 1999-2007 Jack Lloyd *
+*************************************************/
+
+#include <botan/blinding.h>
+#include <botan/numthry.h>
+
+namespace Botan {
+
+/*************************************************
+* Blinder Constructor *
+*************************************************/
+Blinder::Blinder(const BigInt& e, const BigInt& d, const BigInt& n)
+ {
+ if(e < 1 || d < 1 || n < 1)
+ throw Invalid_Argument("Blinder: Arguments too small");
+
+ reducer = Modular_Reducer(n);
+ this->e = e;
+ this->d = d;
+ }
+
+/*************************************************
+* Blind a number *
+*************************************************/
+BigInt Blinder::blind(const BigInt& i) const
+ {
+ if(!reducer.initialized())
+ return i;
+
+ e = reducer.square(e);
+ d = reducer.square(d);
+ return reducer.multiply(i, e);
+ }
+
+/*************************************************
+* Unblind a number *
+*************************************************/
+BigInt Blinder::unblind(const BigInt& i) const
+ {
+ if(!reducer.initialized())
+ return i;
+ return reducer.multiply(i, d);
+ }
+
+}