aboutsummaryrefslogtreecommitdiffstats
path: root/src/math
diff options
context:
space:
mode:
Diffstat (limited to 'src/math')
-rw-r--r--src/math/bigint/bigint.cpp2
-rw-r--r--src/math/bigint/mp_amd64/mp_asmi.h8
-rw-r--r--src/math/bigint/mp_ia32/mp_asmi.h8
-rw-r--r--src/math/gfpmath/curve_gfp.cpp10
-rw-r--r--src/math/gfpmath/gfp_element.cpp28
-rw-r--r--src/math/gfpmath/gfp_element.h60
-rw-r--r--src/math/gfpmath/gfp_modulus.h47
-rw-r--r--src/math/gfpmath/point_gfp.cpp15
-rw-r--r--src/math/gfpmath/point_gfp.h8
-rw-r--r--src/math/numbertheory/mp_numth.cpp2
10 files changed, 85 insertions, 103 deletions
diff --git a/src/math/bigint/bigint.cpp b/src/math/bigint/bigint.cpp
index 926bedc02..63bdc3605 100644
--- a/src/math/bigint/bigint.cpp
+++ b/src/math/bigint/bigint.cpp
@@ -9,7 +9,7 @@
#include <botan/mp_core.h>
#include <botan/loadstor.h>
#include <botan/parsing.h>
-#include <botan/util.h>
+#include <botan/rounding.h>
namespace Botan {
diff --git a/src/math/bigint/mp_amd64/mp_asmi.h b/src/math/bigint/mp_amd64/mp_asmi.h
index 8bccbaaf4..1a3ac1aaa 100644
--- a/src/math/bigint/mp_amd64/mp_asmi.h
+++ b/src/math/bigint/mp_amd64/mp_asmi.h
@@ -70,20 +70,12 @@ extern "C" {
*/
inline word word_add(word x, word y, word* carry)
{
-#if 0
asm(
ADD_OR_SUBTRACT(ASM("adcq %[y],%[x]"))
: [x]"=r"(x), [carry]"=r"(*carry)
: "0"(x), [y]"rm"(y), "1"(*carry)
: "cc");
return x;
-#else
- word z = x + y;
- word c1 = (z < x);
- z += *carry;
- *carry = c1 | (z < *carry);
- return z;
-#endif
}
/*
diff --git a/src/math/bigint/mp_ia32/mp_asmi.h b/src/math/bigint/mp_ia32/mp_asmi.h
index 28b99abcc..46bf302d5 100644
--- a/src/math/bigint/mp_ia32/mp_asmi.h
+++ b/src/math/bigint/mp_ia32/mp_asmi.h
@@ -70,20 +70,12 @@ extern "C" {
*/
inline word word_add(word x, word y, word* carry)
{
-#if 0
asm(
ADD_OR_SUBTRACT(ASM("adcl %[y],%[x]"))
: [x]"=r"(x), [carry]"=r"(*carry)
: "0"(x), [y]"rm"(y), "1"(*carry)
: "cc");
return x;
-#else
- word z = x + y;
- word c1 = (z < x);
- z += *carry;
- *carry = c1 | (z < *carry);
- return z;
-#endif
}
/*
diff --git a/src/math/gfpmath/curve_gfp.cpp b/src/math/gfpmath/curve_gfp.cpp
index e12ade081..9a3ffd482 100644
--- a/src/math/gfpmath/curve_gfp.cpp
+++ b/src/math/gfpmath/curve_gfp.cpp
@@ -1,11 +1,11 @@
-/******
+/*
* Elliptic curves over GF(p)
*
-* (C) 2007 Martin Doering
-* Christoph Ludwig
-* Falko Strenzke
+* (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke
* 2008 Jack Lloyd
-******/
+*
+* Distributed under the terms of the Botan license
+*/
#include <botan/curve_gfp.h>
#include <botan/bigint.h>
diff --git a/src/math/gfpmath/gfp_element.cpp b/src/math/gfpmath/gfp_element.cpp
index b71809301..8ae9b3c3a 100644
--- a/src/math/gfpmath/gfp_element.cpp
+++ b/src/math/gfpmath/gfp_element.cpp
@@ -1,13 +1,15 @@
-/******
- * Arithmetic for prime fields GF(p) (source file)
- *
- * (C) 2007 Martin Doering
- * Christoph Ludwig
- * Falko Strenzke
- ******/
+/*
+* Arithmetic for prime fields GF(p)
+*
+* (C) 2007 Martin Doering
+* Christoph Ludwig
+* Falko Strenzke
+*
+* Distributed under the terms of the Botan license
+*/
#include <botan/gfp_element.h>
#include <botan/numthry.h>
@@ -15,8 +17,8 @@
#include <botan/mp_types.h>
#include <botan/mp_asm.h>
#include <botan/mp_asmi.h>
-#include <assert.h>
#include <ostream>
+#include <assert.h>
namespace Botan {
@@ -66,7 +68,9 @@ void inner_montg_mult_sos(word result[], const word* a_bar, const word* b_bar, c
while (C > 0)
{
// we need not worry here about C > 1, because the other operand is zero
- word tmp = word_add(t[i+s+cnt], 0, &C);
+
+ word tmp = t[i+s+cnt] + C;
+ C = (tmp < t[i+s+cnt]);
t[i+s+cnt] = tmp;
cnt++;
}
diff --git a/src/math/gfpmath/gfp_element.h b/src/math/gfpmath/gfp_element.h
index 4e0ee985b..18d9e51f9 100644
--- a/src/math/gfpmath/gfp_element.h
+++ b/src/math/gfpmath/gfp_element.h
@@ -1,13 +1,15 @@
-/******
- * Arithmetic for prime fields GF(p) (header file)
- *
- * (C) 2007 Martin Doering
- * Christoph Ludwig
- * Falko Strenzke
- ******/
+/*
+* Arithmetic for prime fields GF(p)
+*
+* (C) 2007 Martin Doering
+* Christoph Ludwig
+* Falko Strenzke
+*
+* Distributed under the terms of the Botan license
+*/
#ifndef BOTAN_GFP_ELEMENT_H__
#define BOTAN_GFP_ELEMENT_H__
@@ -26,11 +28,11 @@
namespace Botan {
-struct Illegal_Transformation : public Exception
+struct BOTAN_DLL Illegal_Transformation : public Exception
{
Illegal_Transformation(const std::string& err =
- "Requested transformation is not possible")
- : Exception(err) {}
+ "Requested transformation is not possible") :
+ Exception(err) {}
};
/**
@@ -39,23 +41,6 @@ struct Illegal_Transformation : public Exception
*/
class BOTAN_DLL GFpElement
{
- private:
- std::tr1::shared_ptr<GFpModulus> mp_mod;
- mutable BigInt m_value; // ordinary residue or m-residue respectively
- mutable BigInt workspace;
-
- // *****************************************
- // data members for montgomery multiplication
- mutable bool m_use_montgm;
- //mutable BigInt m_mres;
- // this bool tells use whether the m_mres carries
- // the actual value (in this case mValue doesn´t)
- mutable bool m_is_trf;
-
- void ensure_montgm_precomp() const;
- void trf_to_mres() const;
- void trf_to_ordres() const;
-
public:
/** construct an element of GF(p) with the given value.
@@ -260,7 +245,22 @@ class BOTAN_DLL GFpElement
* @param other The value to swap with
*/
void swap(GFpElement& other);
+ private:
+ void ensure_montgm_precomp() const;
+ void trf_to_mres() const;
+ void trf_to_ordres() const;
+
+ std::tr1::shared_ptr<GFpModulus> mp_mod;
+ mutable BigInt m_value; // ordinary residue or m-residue respectively
+ mutable BigInt workspace;
+ // *****************************************
+ // data members for montgomery multiplication
+ mutable bool m_use_montgm;
+ //mutable BigInt m_mres;
+ // this bool tells use whether the m_mres carries
+ // the actual value (in this case mValue doesn´t)
+ mutable bool m_is_trf;
};
// relational operators
diff --git a/src/math/gfpmath/gfp_modulus.h b/src/math/gfpmath/gfp_modulus.h
index b5c085775..8e37e9a73 100644
--- a/src/math/gfpmath/gfp_modulus.h
+++ b/src/math/gfpmath/gfp_modulus.h
@@ -1,39 +1,33 @@
-/******
- * Modulus and related data for a specific
- * implementation of GF(p) (header file)
- *
- * (C) 2008 Martin Döring
- * Christoph Ludwig
- * Falko Strenzke
- ******/
+/*
+* Modulus and related data for a specific implementation of GF(p)
+*
+* (C) 2008 Martin Döring
+* Christoph Ludwig
+* Falko Strenzke
+*
+* Distributed under the terms of the Botan license
+*/
#ifndef BOTAN_GFP_MODULUS_H__
#define BOTAN_GFP_MODULUS_H__
#include <botan/bigint.h>
-namespace Botan
-{
+namespace Botan {
class BOTAN_DLL GFpElement;
+
/**
-* This class represents a GFpElement modulus including the modulus related
-* values necessary for the montgomery multiplication.
-*
-* Distributed under the terms of the Botan license
+* This class represents a GFpElement modulus including the modulus
+* related values necessary for the montgomery multiplication.
*/
class BOTAN_DLL GFpModulus
{
- friend class GFpElement;
- private:
- BigInt m_p; // the modulus itself
- mutable BigInt m_p_dash;
- mutable BigInt m_r;
- mutable BigInt m_r_inv;
public:
+ friend class GFpElement;
/**
* Construct a GF(P)-Modulus from a BigInt
@@ -119,9 +113,14 @@ class BOTAN_DLL GFpModulus
return m_p_dash;
}
// default cp-ctor, op= are fine
+
+ private:
+ BigInt m_p; // the modulus itself
+ mutable BigInt m_p_dash;
+ mutable BigInt m_r;
+ mutable BigInt m_r_inv;
};
}
#endif
-
diff --git a/src/math/gfpmath/point_gfp.cpp b/src/math/gfpmath/point_gfp.cpp
index 9139c3ef9..b67631f7b 100644
--- a/src/math/gfpmath/point_gfp.cpp
+++ b/src/math/gfpmath/point_gfp.cpp
@@ -1,12 +1,11 @@
-/******
-* Arithmetic for point groups of elliptic curves
-* over GF(p) (source file)
+/*
+* Arithmetic for point groups of elliptic curves over GF(p)
*
-* (C) 2007 Martin Doering
-* Christoph Ludwig
-* Falko Strenzke
+* (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke
* 2008 Jack Lloyd
-******/
+*
+* Distributed under the terms of the Botan license
+*/
#include <botan/point_gfp.h>
#include <botan/numthry.h>
@@ -688,8 +687,6 @@ void PointGFp::turn_on_sp_red_mul() const
* returns a point equivalent to *this but were
* Z has value one, i.e. x and y correspond to
* their values in affine coordinates
-*
-* Distributed under the terms of the Botan license
*/
PointGFp const PointGFp::get_z_to_one() const
{
diff --git a/src/math/gfpmath/point_gfp.h b/src/math/gfpmath/point_gfp.h
index 771605efc..62b3bc7da 100644
--- a/src/math/gfpmath/point_gfp.h
+++ b/src/math/gfpmath/point_gfp.h
@@ -1,10 +1,8 @@
/*
-* Arithmetic over GF(p)
+* Arithmetic for point groups of elliptic curves over GF(p)
*
-* (C) 2007 Martin Doering
-* Christoph Ludwig
-* Falko Strenzke
-* (C) 2008 Jack Lloyd
+* (C) 2007 Martin Doering, Christoph Ludwig, Falko Strenzke
+* 2008 Jack Lloyd
*
* Distributed under the terms of the Botan license
*/
diff --git a/src/math/numbertheory/mp_numth.cpp b/src/math/numbertheory/mp_numth.cpp
index 45a398440..2cb36b8a3 100644
--- a/src/math/numbertheory/mp_numth.cpp
+++ b/src/math/numbertheory/mp_numth.cpp
@@ -7,7 +7,7 @@
#include <botan/numthry.h>
#include <botan/mp_core.h>
-#include <botan/util.h>
+#include <botan/rounding.h>
#include <algorithm>
namespace Botan {