Browse Source

make ED*_NO_CONTEXT actually a pointer

master
Michael Hamburg 8 years ago
parent
commit
638f5560f8
8 changed files with 56 additions and 20 deletions
  1. +5
    -0
      src/GENERATED/c/curve25519/eddsa.c
  2. +5
    -0
      src/GENERATED/c/ed448goldilocks/eddsa.c
  3. +1
    -1
      src/GENERATED/include/decaf/ed255.h
  4. +13
    -6
      src/GENERATED/include/decaf/ed255.hxx
  5. +13
    -6
      src/GENERATED/include/decaf/ed448.hxx
  6. +5
    -0
      src/per_curve/eddsa.tmpl.c
  7. +1
    -1
      src/per_curve/eddsa.tmpl.h
  8. +13
    -6
      src/per_curve/eddsa.tmpl.hxx

+ 5
- 0
src/GENERATED/c/curve25519/eddsa.c View File

@@ -32,6 +32,11 @@
#define EDDSA_USE_SIGMA_ISOGENY 1 #define EDDSA_USE_SIGMA_ISOGENY 1
#define COFACTOR 8 #define COFACTOR 8


#if NO_CONTEXT
const uint8_t NO_CONTEXT_POINTS_HERE = 0;
const uint8_t * const ED25519_NO_CONTEXT = &NO_CONTEXT_POINTS_HERE;
#endif

/* EDDSA_BASE_POINT_RATIO = 1 or 2 /* EDDSA_BASE_POINT_RATIO = 1 or 2
* Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d, * Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d,
* its base point is twice ours. * its base point is twice ours.


+ 5
- 0
src/GENERATED/c/ed448goldilocks/eddsa.c View File

@@ -32,6 +32,11 @@
#define EDDSA_USE_SIGMA_ISOGENY 0 #define EDDSA_USE_SIGMA_ISOGENY 0
#define COFACTOR 4 #define COFACTOR 4


#if NO_CONTEXT
const uint8_t NO_CONTEXT_POINTS_HERE = 0;
const uint8_t * const ED448_NO_CONTEXT = &NO_CONTEXT_POINTS_HERE;
#endif

/* EDDSA_BASE_POINT_RATIO = 1 or 2 /* EDDSA_BASE_POINT_RATIO = 1 or 2
* Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d, * Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d,
* its base point is twice ours. * its base point is twice ours.


+ 1
- 1
src/GENERATED/include/decaf/ed255.h View File

@@ -34,7 +34,7 @@ extern "C" {


/** Does EdDSA support non-contextual signatures? */ /** Does EdDSA support non-contextual signatures? */
#define DECAF_EDDSA_25519_NO_CONTEXT 1 #define DECAF_EDDSA_25519_NO_CONTEXT 1
const uint8_t * const ED25519_NO_CONTEXT = (const uint8_t * const)(25519);
extern const uint8_t * const ED25519_NO_CONTEXT API_VIS;


/** Prehash context renaming macros. */ /** Prehash context renaming macros. */
#define decaf_ed25519_prehash_ctx_s decaf_sha512_ctx_s #define decaf_ed25519_prehash_ctx_s decaf_sha512_ctx_s


+ 13
- 6
src/GENERATED/include/decaf/ed255.hxx View File

@@ -55,6 +55,13 @@ typedef class PrivateKeyBase PrivateKey, PrivateKeyPure, PrivateKeyPh;
typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh; typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh;
/** @endcond */ /** @endcond */



#if DECAF_EDDSA_25519_NO_CONTEXT
static inline const Block NO_CONTEXT() { return Block(ED25519_NO_CONTEXT,0); }
#else
static inline const Block NO_CONTEXT() { return Block(NULL,0); }
#endif

/** Prehash context for EdDSA. */ /** Prehash context for EdDSA. */
class Prehash : public SHA512 { class Prehash : public SHA512 {
private: private:
@@ -78,7 +85,7 @@ public:
static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES; static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES;
/** Create the prehash */ /** Create the prehash */
Prehash(Block context = Block(NULL,0)) throw(LengthException) {
Prehash(const Block &context = NO_CONTEXT()) throw(LengthException) {
context_ = context; context_ = context;
init(); init();
} }
@@ -122,7 +129,7 @@ public:
/* Sign a message using the prehasher */ /* Sign a message using the prehasher */
inline SecureBuffer sign_with_prehash ( inline SecureBuffer sign_with_prehash (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;
@@ -141,7 +148,7 @@ public:
*/ */
inline SecureBuffer sign ( inline SecureBuffer sign (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /* TODO: this exn spec tickles a Clang bug? ) const /* TODO: this exn spec tickles a Clang bug?
* throw(LengthException, std::bad_alloc) * throw(LengthException, std::bad_alloc)
*/ { */ {
@@ -245,7 +252,7 @@ public:
inline decaf_error_t WARN_UNUSED verify_noexcept ( inline decaf_error_t WARN_UNUSED verify_noexcept (
const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*NOEXCEPT*/ { ) const /*NOEXCEPT*/ {
if (context.size() > 255) { if (context.size() > 255) {
return DECAF_FAILURE; return DECAF_FAILURE;
@@ -272,7 +279,7 @@ public:
inline void verify ( inline void verify (
const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
if (context.size() > 255) { if (context.size() > 255) {
throw LengthException(); throw LengthException();
@@ -321,7 +328,7 @@ public:
inline void verify_with_prehash ( inline void verify_with_prehash (
const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_25519_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;


+ 13
- 6
src/GENERATED/include/decaf/ed448.hxx View File

@@ -55,6 +55,13 @@ typedef class PrivateKeyBase PrivateKey, PrivateKeyPure, PrivateKeyPh;
typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh; typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh;
/** @endcond */ /** @endcond */



#if DECAF_EDDSA_448_NO_CONTEXT
static inline const Block NO_CONTEXT() { return Block(ED448_NO_CONTEXT,0); }
#else
static inline const Block NO_CONTEXT() { return Block(NULL,0); }
#endif

/** Prehash context for EdDSA. */ /** Prehash context for EdDSA. */
class Prehash : public SHAKE<256> { class Prehash : public SHAKE<256> {
private: private:
@@ -78,7 +85,7 @@ public:
static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES; static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES;
/** Create the prehash */ /** Create the prehash */
Prehash(Block context = Block(NULL,0)) throw(LengthException) {
Prehash(const Block &context = NO_CONTEXT()) throw(LengthException) {
context_ = context; context_ = context;
init(); init();
} }
@@ -122,7 +129,7 @@ public:
/* Sign a message using the prehasher */ /* Sign a message using the prehasher */
inline SecureBuffer sign_with_prehash ( inline SecureBuffer sign_with_prehash (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;
@@ -141,7 +148,7 @@ public:
*/ */
inline SecureBuffer sign ( inline SecureBuffer sign (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /* TODO: this exn spec tickles a Clang bug? ) const /* TODO: this exn spec tickles a Clang bug?
* throw(LengthException, std::bad_alloc) * throw(LengthException, std::bad_alloc)
*/ { */ {
@@ -245,7 +252,7 @@ public:
inline decaf_error_t WARN_UNUSED verify_noexcept ( inline decaf_error_t WARN_UNUSED verify_noexcept (
const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*NOEXCEPT*/ { ) const /*NOEXCEPT*/ {
if (context.size() > 255) { if (context.size() > 255) {
return DECAF_FAILURE; return DECAF_FAILURE;
@@ -272,7 +279,7 @@ public:
inline void verify ( inline void verify (
const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
if (context.size() > 255) { if (context.size() > 255) {
throw LengthException(); throw LengthException();
@@ -321,7 +328,7 @@ public:
inline void verify_with_prehash ( inline void verify_with_prehash (
const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_448_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;


+ 5
- 0
src/per_curve/eddsa.tmpl.c View File

@@ -23,6 +23,11 @@
#define EDDSA_USE_SIGMA_ISOGENY $(eddsa_sigma_iso) #define EDDSA_USE_SIGMA_ISOGENY $(eddsa_sigma_iso)
#define COFACTOR $(cofactor) #define COFACTOR $(cofactor)


#if NO_CONTEXT
const uint8_t NO_CONTEXT_POINTS_HERE = 0;
$("const uint8_t * const ED" + gf_shortname + "_NO_CONTEXT") = &NO_CONTEXT_POINTS_HERE;
#endif

/* EDDSA_BASE_POINT_RATIO = 1 or 2 /* EDDSA_BASE_POINT_RATIO = 1 or 2
* Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d, * Because EdDSA25519 is not on E_d but on the isogenous E_sigma_d,
* its base point is twice ours. * its base point is twice ours.


+ 1
- 1
src/per_curve/eddsa.tmpl.h View File

@@ -19,7 +19,7 @@ extern "C" {


/** Does EdDSA support non-contextual signatures? */ /** Does EdDSA support non-contextual signatures? */
#define DECAF_EDDSA_$(gf_shortname)_NO_CONTEXT $(eddsa_no_context) #define DECAF_EDDSA_$(gf_shortname)_NO_CONTEXT $(eddsa_no_context)
$("const uint8_t * const ED" + gf_shortname + "_NO_CONTEXT = (const uint8_t * const)(" + gf_shortname + ");\n" if eddsa_no_context else "")
$("extern const uint8_t * const ED" + gf_shortname + "_NO_CONTEXT API_VIS;\n" if eddsa_no_context else "")
/** Prehash context renaming macros. */ /** Prehash context renaming macros. */
#define decaf_ed$(gf_shortname)_prehash_ctx_s decaf_$(eddsa_hash)_ctx_s #define decaf_ed$(gf_shortname)_prehash_ctx_s decaf_$(eddsa_hash)_ctx_s
#define decaf_ed$(gf_shortname)_prehash_ctx_t decaf_$(eddsa_hash)_ctx_t #define decaf_ed$(gf_shortname)_prehash_ctx_t decaf_$(eddsa_hash)_ctx_t


+ 13
- 6
src/per_curve/eddsa.tmpl.hxx View File

@@ -39,6 +39,13 @@ typedef class PrivateKeyBase PrivateKey, PrivateKeyPure, PrivateKeyPh;
typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh; typedef class PublicKeyBase PublicKey, PublicKeyPure, PublicKeyPh;
/** @endcond */ /** @endcond */



#if DECAF_EDDSA_$(gf_shortname)_NO_CONTEXT
static inline const Block NO_CONTEXT() { return Block(ED$(gf_shortname)_NO_CONTEXT,0); }
#else
static inline const Block NO_CONTEXT() { return Block(NULL,0); }
#endif

/** Prehash context for EdDSA. */ /** Prehash context for EdDSA. */
class Prehash : public $(re.sub(r"SHAKE(\d+)",r"SHAKE<\1>", eddsa_hash.upper())) { class Prehash : public $(re.sub(r"SHAKE(\d+)",r"SHAKE<\1>", eddsa_hash.upper())) {
private: private:
@@ -62,7 +69,7 @@ public:
static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES; static const size_t OUTPUT_BYTES = Super::DEFAULT_OUTPUT_BYTES;
/** Create the prehash */ /** Create the prehash */
Prehash(Block context = Block(NULL,0)) throw(LengthException) {
Prehash(const Block &context = NO_CONTEXT()) throw(LengthException) {
context_ = context; context_ = context;
init(); init();
} }
@@ -106,7 +113,7 @@ public:
/* Sign a message using the prehasher */ /* Sign a message using the prehasher */
inline SecureBuffer sign_with_prehash ( inline SecureBuffer sign_with_prehash (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;
@@ -125,7 +132,7 @@ public:
*/ */
inline SecureBuffer sign ( inline SecureBuffer sign (
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /* TODO: this exn spec tickles a Clang bug? ) const /* TODO: this exn spec tickles a Clang bug?
* throw(LengthException, std::bad_alloc) * throw(LengthException, std::bad_alloc)
*/ { */ {
@@ -229,7 +236,7 @@ public:
inline decaf_error_t WARN_UNUSED verify_noexcept ( inline decaf_error_t WARN_UNUSED verify_noexcept (
const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*NOEXCEPT*/ { ) const /*NOEXCEPT*/ {
if (context.size() > 255) { if (context.size() > 255) {
return DECAF_FAILURE; return DECAF_FAILURE;
@@ -256,7 +263,7 @@ public:
inline void verify ( inline void verify (
const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
if (context.size() > 255) { if (context.size() > 255) {
throw LengthException(); throw LengthException();
@@ -305,7 +312,7 @@ public:
inline void verify_with_prehash ( inline void verify_with_prehash (
const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig, const FixedBlock<DECAF_EDDSA_$(gf_shortname)_SIGNATURE_BYTES> &sig,
const Block &message, const Block &message,
const Block &context = Block(NULL,0)
const Block &context = NO_CONTEXT()
) const /*throw(LengthException,CryptoException)*/ { ) const /*throw(LengthException,CryptoException)*/ {
Prehash ph(context); Prehash ph(context);
ph += message; ph += message;


Loading…
Cancel
Save