diff --git a/include/decaf.hxx b/include/decaf.hxx index d3b09bd..e7f9962 100644 --- a/include/decaf.hxx +++ b/include/decaf.hxx @@ -258,14 +258,14 @@ template struct EcGroup { friend class Precomputed; typedef typename WrappedTypes::Scalar Wrapped; static const Wrapped &ZERO, &ONE; - static inline void add3(Wrapped, const Wrapped, const Wrapped) NOEXCEPT; - static inline void setu(Wrapped, decaf_word_t) NOEXCEPT; - static inline void sub3(Wrapped, const Wrapped, const Wrapped) NOEXCEPT; - static inline void mul3(Wrapped, const Wrapped, const Wrapped) NOEXCEPT; - static inline void dl3(Wrapped, const unsigned char *buffer, size_t size) NOEXCEPT; - static inline decaf_word_t eq2(const Wrapped, const Wrapped) NOEXCEPT; - static inline void assign2(Wrapped, const Wrapped) NOEXCEPT; - static inline void inv2(Wrapped, const Wrapped) NOEXCEPT; + static inline void add3(Wrapped&, const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void setu(Wrapped&, decaf_word_t) NOEXCEPT; + static inline void sub3(Wrapped&, const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void mul3(Wrapped&, const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void dl3(Wrapped&, const unsigned char *buffer, size_t size) NOEXCEPT; + static inline decaf_word_t eq2(const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void assign2(Wrapped&, const Wrapped&) NOEXCEPT; + static inline void inv2(Wrapped&, const Wrapped&) NOEXCEPT; /** @endcond */ public: @@ -402,22 +402,22 @@ template struct EcGroup { friend class Scalar; friend class Precomputed; static const Wrapped &IDENTITY, &GENERATOR; - static inline void add3(Wrapped, const Wrapped, const Wrapped) NOEXCEPT; - static inline void sub3(Wrapped, const Wrapped, const Wrapped) NOEXCEPT; - static inline void dbl2(Wrapped, const Wrapped) NOEXCEPT; - static inline void neg2(Wrapped, const Wrapped) NOEXCEPT; - static inline decaf_word_t eq2(const Wrapped, const Wrapped) NOEXCEPT; - static inline void assign2(Wrapped, const Wrapped) NOEXCEPT; - static inline void sm3(Wrapped, const Wrapped, const typename Scalar::Wrapped) NOEXCEPT; + static inline void add3(Wrapped&, const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void sub3(Wrapped&, const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void dbl2(Wrapped&, const Wrapped&) NOEXCEPT; + static inline void neg2(Wrapped&, const Wrapped&) NOEXCEPT; + static inline decaf_word_t eq2(const Wrapped&, const Wrapped&) NOEXCEPT; + static inline void assign2(Wrapped&, const Wrapped&) NOEXCEPT; + static inline void sm3(Wrapped&, const Wrapped&, const typename Scalar::Wrapped&) NOEXCEPT; static inline void dsm5( - Wrapped, - const Wrapped, const typename Scalar::Wrapped, - const Wrapped, const typename Scalar::Wrapped + Wrapped&, + const Wrapped&, const typename Scalar::Wrapped&, + const Wrapped&, const typename Scalar::Wrapped& ) NOEXCEPT; static inline void dsmns( - Wrapped, - const typename Scalar::Wrapped, - const Wrapped, const typename Scalar::Wrapped + Wrapped&, + const typename Scalar::Wrapped&, + const Wrapped&, const typename Scalar::Wrapped& ) NOEXCEPT; /** @endcond */ @@ -435,7 +435,7 @@ template struct EcGroup { inline Point(const NOINIT &) {} /** @brief Constructor sets to identity by default. */ - inline Point(const decaf_448_point_t &q = IDENTITY) { *this = q; } + inline Point(const decaf_448_point_s &q = IDENTITY) { *this = q; } /** @brief Copy constructor. */ inline Point(const Point &q) { *this = q; } @@ -443,7 +443,7 @@ template struct EcGroup { /** @brief Assignment. */ inline Point& operator=(const Point &q) NOEXCEPT { assign2(p,q.p); return *this; } - /** @brief Assignment from wrapped. */ + /** @brief Assignment from Wrapped. */ inline Point& operator=(const Wrapped &q) NOEXCEPT { assign2(p,q); return *this; } /** @brief Destructor securely erases the point. */ @@ -621,8 +621,8 @@ template struct EcGroup { typedef typename WrappedTypes::Precomputed Wrapped; static const Wrapped *GENERATOR; static inline void destroy(Wrapped*) NOEXCEPT; - static inline void precompute(Wrapped*, const typename Point::Wrapped) NOEXCEPT; - static inline void psmul3(typename Point::Wrapped, const Wrapped*, const typename Scalar::Wrapped) NOEXCEPT; + static inline void precompute(Wrapped*, const typename Point::Wrapped&) NOEXCEPT; + static inline void psmul3(typename Point::Wrapped&, const Wrapped*, const typename Scalar::Wrapped&) NOEXCEPT; union { Wrapped *mine; @@ -735,8 +735,8 @@ template struct EcGroup { /** @cond internal */ template<> struct WrappedTypes { - typedef decaf_448_point_t Point; - typedef decaf_448_scalar_t Scalar; + typedef decaf_448_point_s Point; + typedef decaf_448_scalar_s Scalar; typedef decaf_448_precomputed_s Precomputed; }; @@ -744,43 +744,43 @@ template<> struct WrappedTypes { template<> const size_t EcGroup::Scalar::SER_BYTES = 56; template<> inline void EcGroup::Scalar::add3( - Wrapped a, const Wrapped b, const Wrapped c -) NOEXCEPT { decaf_448_scalar_add(a,b,c); } + Wrapped& a, const Wrapped& b, const Wrapped& c +) NOEXCEPT { decaf_448_scalar_add(&a,&b,&c); } template<> inline void EcGroup::Scalar::sub3( - Wrapped a, const Wrapped b, const Wrapped c -) NOEXCEPT { decaf_448_scalar_sub(a,b,c); } + Wrapped& a, const Wrapped& b, const Wrapped& c +) NOEXCEPT { decaf_448_scalar_sub(&a,&b,&c); } template<> inline void EcGroup::Scalar::mul3( - Wrapped a, const Wrapped b, const Wrapped c -) NOEXCEPT { decaf_448_scalar_mul(a,b,c); } + Wrapped& a, const Wrapped& b, const Wrapped& c +) NOEXCEPT { decaf_448_scalar_mul(&a,&b,&c); } template<> inline void EcGroup::Scalar::dl3( - Wrapped a, const unsigned char *b, size_t c -) NOEXCEPT { decaf_448_scalar_decode_long(a,b,c); } + Wrapped& a, const unsigned char *b, size_t c +) NOEXCEPT { decaf_448_scalar_decode_long(&a,b,c); } template<> inline void EcGroup::Scalar::assign2( - Wrapped a, const Wrapped b -) NOEXCEPT { decaf_448_scalar_copy(a,b); } + Wrapped& a, const Wrapped& b +) NOEXCEPT { decaf_448_scalar_copy(&a,&b); } template<> inline void EcGroup::Scalar::setu( - Wrapped a, decaf_word_t w -) NOEXCEPT { decaf_448_scalar_set(a,w); } + Wrapped& a, decaf_word_t w +) NOEXCEPT { decaf_448_scalar_set(&a,w); } template<> inline void EcGroup::Scalar::inv2( - Wrapped a, const Wrapped b -) NOEXCEPT { decaf_448_scalar_invert(a,b); } + Wrapped& a, const Wrapped& b +) NOEXCEPT { decaf_448_scalar_invert(&a,&b); } template<> inline decaf_word_t EcGroup::Scalar::eq2( - const Wrapped a, const Wrapped b -) NOEXCEPT { return decaf_448_scalar_eq(a,b); } + const Wrapped& a, const Wrapped& b +) NOEXCEPT { return decaf_448_scalar_eq(&a,&b); } /* CLASSY */ template<> inline SecureBuffer EcGroup::Scalar::direct_scalarmul( const Block &in, decaf_bool_t allow_identity, decaf_bool_t short_circuit ) const throw(CryptoException) { SecureBuffer out(SER_BYTES); - if (!decaf_448_direct_scalarmul(out, in.data(), s, allow_identity, short_circuit)) + if (!decaf_448_direct_scalarmul(out, in.data(), &s, allow_identity, short_circuit)) throw CryptoException(); return out; } @@ -788,22 +788,22 @@ template<> inline SecureBuffer EcGroup::Scalar::direct_scalarmu template<> inline void EcGroup::Scalar::encode( unsigned char buffer[SER_BYTES] ) const NOEXCEPT { - decaf_448_scalar_encode(buffer,s); + decaf_448_scalar_encode(buffer,&s); } template<> inline decaf_bool_t __attribute__((warn_unused_result)) EcGroup::Scalar::decode ( Scalar &s, const unsigned char buffer[SER_BYTES] ) NOEXCEPT { - return decaf_448_scalar_decode(s.s,buffer); + return decaf_448_scalar_decode(&s.s,buffer); } /* CLASSY */ -template<> inline EcGroup::Scalar::~Scalar() NOEXCEPT { decaf_448_scalar_destroy(s); } +template<> inline EcGroup::Scalar::~Scalar() NOEXCEPT { decaf_448_scalar_destroy(&s); } template<> const EcGroup::Scalar::Wrapped& - EcGroup::Scalar::ZERO = decaf_448_scalar_zero; + EcGroup::Scalar::ZERO = decaf_448_scalar_zero[0]; template<> const EcGroup::Scalar::Wrapped& - EcGroup::Scalar::ONE = decaf_448_scalar_one; + EcGroup::Scalar::ONE = decaf_448_scalar_one[0]; @@ -812,64 +812,64 @@ template<> const size_t EcGroup::Point::SER_BYTES = 56; template<> const size_t EcGroup::Point::HASH_BYTES = 56; /* CLASSY */ -template<> inline EcGroup::Point::~Point() NOEXCEPT { decaf_448_point_destroy(p); } +template<> inline EcGroup::Point::~Point() NOEXCEPT { decaf_448_point_destroy(&p); } template<> inline void EcGroup::Point::add3( - Wrapped a, const Wrapped b, const Wrapped c -) NOEXCEPT { decaf_448_point_add(a,b,c); } + Wrapped& a, const Wrapped& b, const Wrapped& c +) NOEXCEPT { decaf_448_point_add(&a,&b,&c); } template<> inline void EcGroup::Point::sub3( - Wrapped a, const Wrapped b, const Wrapped c -) NOEXCEPT { decaf_448_point_sub(a,b,c); } + Wrapped& a, const Wrapped& b, const Wrapped& c +) NOEXCEPT { decaf_448_point_sub(&a,&b,&c); } template<> inline void EcGroup::Point::assign2( - Wrapped a, const Wrapped b -) NOEXCEPT { decaf_448_point_copy(a,b); } + Wrapped& a, const Wrapped& b +) NOEXCEPT { decaf_448_point_copy(&a,&b); } template<> inline void EcGroup::Point::dbl2( - Wrapped a, const Wrapped b -) NOEXCEPT { decaf_448_point_double(a,b); } + Wrapped& a, const Wrapped& b +) NOEXCEPT { decaf_448_point_double(&a,&b); } template<> inline decaf_word_t EcGroup::Point::eq2( - const Wrapped a, const Wrapped b -) NOEXCEPT { return decaf_448_point_eq(a,b); } + const Wrapped& a, const Wrapped& b +) NOEXCEPT { return decaf_448_point_eq(&a,&b); } /* CLASSY */ -template<> inline bool EcGroup::Point::validate() const NOEXCEPT { return !!decaf_448_point_valid(p); } +template<> inline bool EcGroup::Point::validate() const NOEXCEPT { return !!decaf_448_point_valid(&p); } template<> inline void EcGroup::Point::sm3( - Wrapped a, const Wrapped b, const decaf_448_scalar_t c -) NOEXCEPT { decaf_448_point_scalarmul(a,b,c); } + Wrapped& a, const Wrapped& b, const Scalar::Wrapped &c +) NOEXCEPT { decaf_448_point_scalarmul(&a,&b,&c); } template<> inline void EcGroup::Point::dsm5( - Wrapped a, const Wrapped b, const decaf_448_scalar_t c, const Wrapped d, const decaf_448_scalar_t e -) NOEXCEPT { decaf_448_point_double_scalarmul(a,b,c,d,e); } + Wrapped& a, const Wrapped& b, const Scalar::Wrapped &c, const Wrapped& d, const Scalar::Wrapped &e +) NOEXCEPT { decaf_448_point_double_scalarmul(&a,&b,&c,&d,&e); } template<> inline void EcGroup::Point::dsmns( - Wrapped a, const decaf_448_scalar_t b, const Wrapped c, const decaf_448_scalar_t d -) NOEXCEPT { decaf_448_base_double_scalarmul_non_secret(a,b,c,d); } + Wrapped& a, const Scalar::Wrapped &b, const Wrapped& c, const Scalar::Wrapped &d +) NOEXCEPT { decaf_448_base_double_scalarmul_non_secret(&a,&b,&c,&d); } /* CLASSY */ template<> inline decaf_bool_t __attribute__((warn_unused_result)) EcGroup::Point::decode ( Point &p, const unsigned char buffer[SER_BYTES], decaf_bool_t allow_identity ) NOEXCEPT { - return decaf_448_point_decode(p.p,buffer,allow_identity); + return decaf_448_point_decode(&p.p,buffer,allow_identity); } /* CLASSY */ template<> inline void EcGroup::Point::set_to_hash( const Block &s ) NOEXCEPT { if (s.size() < HASH_BYTES) { SecureBuffer b(HASH_BYTES); memcpy(b.data(), s.data(), s.size()); - decaf_448_point_from_hash_nonuniform(p,b); + decaf_448_point_from_hash_nonuniform(&p,b); } else if (s.size() == HASH_BYTES) { - decaf_448_point_from_hash_nonuniform(p,s); + decaf_448_point_from_hash_nonuniform(&p,s); } else if (s.size() < 2*HASH_BYTES) { SecureBuffer b(2*HASH_BYTES); memcpy(b.data(), s.data(), s.size()); - decaf_448_point_from_hash_uniform(p,b); + decaf_448_point_from_hash_uniform(&p,b); } else { - decaf_448_point_from_hash_uniform(p,s); + decaf_448_point_from_hash_uniform(&p,s); } } @@ -877,13 +877,13 @@ template<> inline void EcGroup::Point::set_to_hash( const Block template<> inline void EcGroup::Point::encode( unsigned char buffer[SER_BYTES] ) const NOEXCEPT { - decaf_448_point_encode(buffer,p); + decaf_448_point_encode(buffer,&p); } template<> const EcGroup::Point::Wrapped& - EcGroup::Point::IDENTITY = decaf_448_point_identity; + EcGroup::Point::IDENTITY = decaf_448_point_identity[0]; template<> const EcGroup::Point::Wrapped& - EcGroup::Point::GENERATOR = decaf_448_point_base; + EcGroup::Point::GENERATOR = decaf_448_point_base[0]; /* Precomputed instantiation */ template<> inline void EcGroup::Precomputed::destroy( @@ -894,15 +894,15 @@ template<> inline void EcGroup::Precomputed::destroy( /* Precomputed instantiation */ template<> inline void EcGroup::Precomputed::precompute( - Wrapped *pre, const decaf_448_point_t point + Wrapped *pre, const Point::Wrapped &point ) NOEXCEPT { - decaf_448_precompute(pre,point); + decaf_448_precompute(pre,&point); } template<> inline void EcGroup::Precomputed::psmul3( - decaf_448_point_t out, const Wrapped *pre, const decaf_448_scalar_t sc + Point::Wrapped &out, const Wrapped *pre, const Scalar::Wrapped &sc ) NOEXCEPT { - decaf_448_precomputed_scalarmul(out,pre,sc); + decaf_448_precomputed_scalarmul(&out,pre,&sc); } template<> const size_t EcGroup::Precomputed:: sizeof_this = sizeof_decaf_448_precomputed_s;