Commit 98bfcb01 authored by Michael Hamburg's avatar Michael Hamburg
Browse files

IsoE25519 is now better known as Ristretto

parent 4de924c7
......@@ -21,7 +21,7 @@
namespace decaf {
template <template<typename Group> class Run>
void run_for_all_curves() {
Run<IsoEd25519>::run();
Run<Ristretto>::run();
Run<Ed448Goldilocks>::run();
}
}
......
......@@ -43,8 +43,8 @@ namespace decaf {
/** A public key for crypto over some Group */
template <typename Group> struct EdDSA;
/** A public key for crypto over Iso-Ed25519 */
template<> struct EdDSA<IsoEd25519> {
/** A public key for crypto over Ristretto */
template<> struct EdDSA<Ristretto> {
/** @cond internal */
template<class CRTP, Prehashed> class Signing;
......@@ -190,7 +190,7 @@ private:
public:
/** Underlying group */
typedef IsoEd25519 Group;
typedef Ristretto Group;
/** Signature size. */
static const size_t SIG_BYTES = DECAF_EDDSA_25519_SIGNATURE_BYTES;
......@@ -364,7 +364,7 @@ public:
/* PERF FUTURE: Pre-cached decoding? Precomputed table?? */
/** Underlying group */
typedef IsoEd25519 Group;
typedef Ristretto Group;
/** Signature size. */
static const size_t SIG_BYTES = DECAF_EDDSA_25519_SIGNATURE_BYTES;
......@@ -417,7 +417,7 @@ public:
}
}; /* class PublicKey */
}; /* template<> struct EdDSA<IsoEd25519> */
}; /* template<> struct EdDSA<Ristretto> */
#undef DECAF_NOEXCEPT
} /* namespace decaf */
......
......@@ -53,10 +53,10 @@ namespace decaf {
/**
* Curve25519/Decaf instantiation of group.
*/
struct IsoEd25519 {
struct Ristretto {
/** The name of the curve */
static inline const char *name() { return "Iso-Ed25519"; }
static inline const char *name() { return "Ristretto"; }
/** The name of the curve */
static inline int bits() { return 255; }
......@@ -756,15 +756,15 @@ public:
}
};
}; /* struct IsoEd25519 */
}; /* struct Ristretto */
/** @cond internal */
inline SecureBuffer IsoEd25519::Scalar::direct_scalarmul (
const FixedBlock<IsoEd25519::Point::SER_BYTES> &in,
inline SecureBuffer Ristretto::Scalar::direct_scalarmul (
const FixedBlock<Ristretto::Point::SER_BYTES> &in,
decaf_bool_t allow_identity,
decaf_bool_t short_circuit
) const /*throw(CryptoException)*/ {
SecureBuffer out(IsoEd25519::Point::SER_BYTES);
SecureBuffer out(Ristretto::Point::SER_BYTES);
if (DECAF_SUCCESS !=
decaf_255_direct_scalarmul(out.data(), in.data(), s, allow_identity, short_circuit)
) {
......@@ -773,9 +773,9 @@ inline SecureBuffer IsoEd25519::Scalar::direct_scalarmul (
return out;
}
inline decaf_error_t IsoEd25519::Scalar::direct_scalarmul_noexcept (
FixedBuffer<IsoEd25519::Point::SER_BYTES> &out,
const FixedBlock<IsoEd25519::Point::SER_BYTES> &in,
inline decaf_error_t Ristretto::Scalar::direct_scalarmul_noexcept (
FixedBuffer<Ristretto::Point::SER_BYTES> &out,
const FixedBlock<Ristretto::Point::SER_BYTES> &in,
decaf_bool_t allow_identity,
decaf_bool_t short_circuit
) const DECAF_NOEXCEPT {
......@@ -783,6 +783,9 @@ inline decaf_error_t IsoEd25519::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
typedef Ristretto IsoEd25519;
#undef DECAF_NOEXCEPT
} /* namespace decaf */
......
......@@ -783,6 +783,8 @@ inline decaf_error_t Ed448Goldilocks::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
#undef DECAF_NOEXCEPT
} /* namespace decaf */
......
......@@ -23,8 +23,9 @@ field_data = {
curve_data = {
"curve25519" : {
"altname" : "IsoEd25519",
"iso_to" : "Curve25519",
"name" : "Iso-Ed25519",
"name" : "Ristretto",
"cofactor" : 8,
"field" : "p25519",
"scalar_bits" : 253,
......@@ -43,6 +44,7 @@ curve_data = {
"eddsa_sigma_iso": 1
},
"ed448goldilocks" : {
"altname": None,
"name" : "Ed448-Goldilocks",
"cofactor" : 4,
"field" : "p448",
......
......@@ -770,5 +770,7 @@ inline decaf_error_t $(cxx_ns)::Scalar::direct_scalarmul_noexcept (
}
/** @endcond */
$("typedef %s %s;\n" % (cxx_ns,altname) if altname else "")
#undef DECAF_NOEXCEPT
} /* namespace decaf */
template <typename Group> struct base_multiples;
/* Examples for multiples of base point */
template <> struct base_multiples<IsoEd25519> {
template <> struct base_multiples<Ristretto> {
static const int count = 16;
static const uint8_t values[count][IsoEd25519::Point::SER_BYTES];
static const uint8_t values[count][Ristretto::Point::SER_BYTES];
};
const uint8_t base_multiples<IsoEd25519>::values
[base_multiples<IsoEd25519>::count][IsoEd25519::Point::SER_BYTES] = {
const uint8_t base_multiples<Ristretto>::values
[base_multiples<Ristretto>::count][Ristretto::Point::SER_BYTES] = {
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{226, 242, 174, 10, 106, 188, 78, 113, 168, 132, 169, 97, 197, 0, 81, 95, 88, 227, 11, 106, 165, 130, 221, 141, 182, 166, 89, 69, 224, 141, 45, 118},
......@@ -101,13 +101,13 @@ const uint8_t base_multiples<Ed448Goldilocks>::values[][Ed448Goldilocks::Point::
template <typename Group> struct elligator_examples;
/* Examples for Elligator */
template <> struct elligator_examples<IsoEd25519> {
template <> struct elligator_examples<Ristretto> {
static const int count = 16;
static const uint8_t inputs[count][IsoEd25519::Point::HASH_BYTES];
static const uint8_t outputs[count][IsoEd25519::Point::SER_BYTES];
static const uint8_t inputs[count][Ristretto::Point::HASH_BYTES];
static const uint8_t outputs[count][Ristretto::Point::SER_BYTES];
};
const uint8_t elligator_examples<IsoEd25519>::inputs
[elligator_examples<IsoEd25519>::count][IsoEd25519::Point::HASH_BYTES] = {
const uint8_t elligator_examples<Ristretto>::inputs
[elligator_examples<Ristretto>::count][Ristretto::Point::HASH_BYTES] = {
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{184, 249, 135, 49, 253, 123, 89, 113, 67, 160, 6, 239, 7, 105, 211, 41, 192, 249, 185, 57, 9, 102, 70, 198, 15, 127, 7, 26, 160, 102, 134, 71},
{229, 14, 241, 227, 75, 9, 118, 60, 128, 153, 226, 21, 183, 217, 91, 136, 98, 0, 231, 156, 124, 77, 82, 139, 142, 134, 164, 169, 169, 62, 250, 52},
......@@ -126,8 +126,8 @@ const uint8_t elligator_examples<IsoEd25519>::inputs
{210, 207, 228, 56, 155, 116, 207, 54, 84, 195, 251, 215, 249, 199, 116, 75, 109, 239, 196, 251, 194, 246, 252, 228, 70, 146, 156, 35, 25, 39, 241, 4},
{34, 116, 123, 9, 8, 40, 93, 189, 9, 103, 57, 103, 66, 227, 3, 2, 157, 107, 134, 219, 202, 74, 230, 154, 78, 107, 219, 195, 214, 14, 84, 80}
};
const uint8_t elligator_examples<IsoEd25519>::outputs
[elligator_examples<IsoEd25519>::count][IsoEd25519::Point::SER_BYTES] = {
const uint8_t elligator_examples<Ristretto>::outputs
[elligator_examples<Ristretto>::count][Ristretto::Point::SER_BYTES] = {
/* Copy-pasted from Dalek, thanks Isis Lovecruft and Henry de Valence */
{176, 157, 237, 97, 66, 29, 140, 166, 168, 94, 26, 157, 212, 216, 229, 160, 195, 246, 232, 239, 169, 112, 63, 193, 64, 32, 152, 69, 11, 190, 246, 86},
{234, 141, 77, 203, 181, 225, 250, 74, 171, 62, 15, 118, 78, 212, 150, 19, 131, 14, 188, 238, 194, 244, 141, 138, 166, 162, 83, 122, 228, 201, 19, 26},
......
/* X25519, X448 test vectors */
template<> const uint8_t Tests<IsoEd25519>::rfc7748_1[32] = {
template<> const uint8_t Tests<Ristretto>::rfc7748_1[32] = {
0x42,0x2c,0x8e,0x7a,0x62,0x27,0xd7,0xbc,
0xa1,0x35,0x0b,0x3e,0x2b,0xb7,0x27,0x9f,
0x78,0x97,0xb8,0x7b,0xb6,0x85,0x4b,0x78,
0x3c,0x60,0xe8,0x03,0x11,0xae,0x30,0x79
};
template<> const uint8_t Tests<IsoEd25519>::rfc7748_1000[32] = {
template<> const uint8_t Tests<Ristretto>::rfc7748_1000[32] = {
0x68,0x4c,0xf5,0x9b,0xa8,0x33,0x09,0x55,
0x28,0x00,0xef,0x56,0x6f,0x2f,0x4d,0x3c,
0x1c,0x38,0x87,0xc4,0x93,0x60,0xe3,0x87,
0x5f,0x2e,0xb9,0x4d,0x99,0x53,0x2c,0x51
};
template<> const uint8_t Tests<IsoEd25519>::rfc7748_1000000[32] = {
template<> const uint8_t Tests<Ristretto>::rfc7748_1000000[32] = {
0x7c,0x39,0x11,0xe0,0xab,0x25,0x86,0xfd,
0x86,0x44,0x97,0x29,0x7e,0x57,0x5e,0x6f,
0x3b,0xc6,0x01,0xc0,0x88,0x3c,0x30,0xdf,
......@@ -53,7 +53,7 @@ const uint8_t sm1_25519[32] = {
0xa7,0xd7,0xfb,0x3d,0x99,0x00,0x4d,0x2b,
0x0b,0xdf,0xc1,0x4f,0x80,0x24,0x83,0x2b
};
template<> const Block Tests<IsoEd25519>::sqrt_minus_one(sm1_25519,32);
template<> const Block Tests<Ristretto>::sqrt_minus_one(sm1_25519,32);
template<> const Block Tests<Ed448Goldilocks>::minus_sqrt_minus_one(NULL,0);
const uint8_t msm1_25519[32] = {
......@@ -62,7 +62,7 @@ const uint8_t msm1_25519[32] = {
0x58,0x28,0x04,0xc2,0x66,0xff,0xb2,0xd4,
0xf4,0x20,0x3e,0xb0,0x7f,0xdb,0x7c,0x54
};
template<> const Block Tests<IsoEd25519>::minus_sqrt_minus_one(msm1_25519,32);
template<> const Block Tests<Ristretto>::minus_sqrt_minus_one(msm1_25519,32);
const uint8_t elli_patho_448[56] = {
0x14,0xf0,0x70,0x58,0x41,0xc7,0xf9,0xa5,
......@@ -74,7 +74,7 @@ const uint8_t elli_patho_448[56] = {
0x86,0xa9,0x2e,0xc9,0x17,0x68,0x9b,0x20
};
template<> const Block Tests<Ed448Goldilocks>::elli_patho(elli_patho_448,56);
template<> const Block Tests<IsoEd25519>::elli_patho(NULL,0);
template<> const Block Tests<Ristretto>::elli_patho(NULL,0);
/* EdDSA test vectors */
const uint8_t ed448_eddsa_sk[][57] = {{
......@@ -481,7 +481,7 @@ const uint8_t ed25519_eddsa_sig[][64] = {{
0x91,0xc2,0x04,0x3d,0x4e,0xb3,0xe9,0x0d
}};
template<> const bool Tests<IsoEd25519>::eddsa_prehashed[] = {
template<> const bool Tests<Ristretto>::eddsa_prehashed[] = {
false,
false,
false,
......@@ -489,7 +489,7 @@ template<> const bool Tests<IsoEd25519>::eddsa_prehashed[] = {
false,
false
};
template<> const Block Tests<IsoEd25519>::eddsa_sk[] = {
template<> const Block Tests<Ristretto>::eddsa_sk[] = {
Block(ed25519_eddsa_sk[0],32),
Block(ed25519_eddsa_sk[1],32),
Block(ed25519_eddsa_sk[2],32),
......@@ -498,7 +498,7 @@ template<> const Block Tests<IsoEd25519>::eddsa_sk[] = {
Block(ed25519_eddsa_sk[4],32),
Block(NULL,0)
};
template<> const Block Tests<IsoEd25519>::eddsa_pk[] = {
template<> const Block Tests<Ristretto>::eddsa_pk[] = {
Block(ed25519_eddsa_pk[0],32),
Block(ed25519_eddsa_pk[1],32),
Block(ed25519_eddsa_pk[2],32),
......@@ -506,15 +506,15 @@ template<> const Block Tests<IsoEd25519>::eddsa_pk[] = {
Block(ed25519_eddsa_pk[4],32),
Block(ed25519_eddsa_pk[4],32)
};
template<> const Block Tests<IsoEd25519>::eddsa_context[] = {
EdDSA<IsoEd25519>::NO_CONTEXT(),
EdDSA<IsoEd25519>::NO_CONTEXT(),
EdDSA<IsoEd25519>::NO_CONTEXT(),
template<> const Block Tests<Ristretto>::eddsa_context[] = {
EdDSA<Ristretto>::NO_CONTEXT(),
EdDSA<Ristretto>::NO_CONTEXT(),
EdDSA<Ristretto>::NO_CONTEXT(),
Block(NULL,0),
Block(ed25519_eddsa_context[0],3),
Block(ed25519_eddsa_context[1],3)
};
template<> const Block Tests<IsoEd25519>::eddsa_message[] = {
template<> const Block Tests<Ristretto>::eddsa_message[] = {
Block(ed25519_eddsa_message[0],0),
Block(ed25519_eddsa_message[1],1),
Block(ed25519_eddsa_message[2],2),
......@@ -522,7 +522,7 @@ template<> const Block Tests<IsoEd25519>::eddsa_message[] = {
Block(ed25519_eddsa_message[4],16),
Block(ed25519_eddsa_message[4],16)
};
template<> const Block Tests<IsoEd25519>::eddsa_sig[] = {
template<> const Block Tests<Ristretto>::eddsa_sig[] = {
Block(ed25519_eddsa_sig[0],64),
Block(ed25519_eddsa_sig[1],64),
Block(ed25519_eddsa_sig[2],64),
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment