forked from cheng/wallet
Visual studio became stuffier about template code, making it harder
to use procedural code in templates. Cannot have a static_assert(false) in a template. Got into a tizzy about integer types, instead of cheerfully casting anything to anything.
This commit is contained in:
parent
78a14309e5
commit
fccefe3a97
2
.gitmodules
vendored
2
.gitmodules
vendored
@ -8,4 +8,4 @@
|
|||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "mpir"]
|
[submodule "mpir"]
|
||||||
path = mpir
|
path = mpir
|
||||||
url = git://github.com/BrianGladman/mpir.git
|
url = https://github.com/BrianGladman/mpir.git
|
||||||
|
@ -62,7 +62,8 @@ namespace ro {
|
|||||||
return sz;
|
return sz;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
static_assert(false, "Don't know how to read this datatype from database");
|
assert(false);
|
||||||
|
//, "Don't know how to read this datatype from database");
|
||||||
return null();
|
return null();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +91,8 @@ namespace ro {
|
|||||||
j = (*this)->Isqlite3_column_text(i);
|
j = (*this)->Isqlite3_column_text(i);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
static_assert(false, "Don't know how to read this datatype from database");
|
assert(false);
|
||||||
|
//, "Don't know how to read this datatype from database");
|
||||||
}
|
}
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
@ -27,14 +27,14 @@ namespace ristretto255 {
|
|||||||
bool scalar::constant_time_required{ true };
|
bool scalar::constant_time_required{ true };
|
||||||
bool point::constant_time_required{ true };
|
bool point::constant_time_required{ true };
|
||||||
|
|
||||||
constexpr scalar::scalar(int i) {
|
constexpr scalar::scalar(int64_t i) {
|
||||||
if (i >= 0) {
|
if (i >= 0) {
|
||||||
auto k{ unsigned int(i) };
|
auto k{ uint64_t(i) };
|
||||||
for (auto& j : blob) { j = k; k = k >> 8; }
|
for (auto& j : blob) { j = k; k = k >> 8; }
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
std::array<uint8_t, crypto_core_ristretto255_BYTES> absdata;
|
std::array<uint8_t, crypto_core_ristretto255_BYTES> absdata;
|
||||||
auto k{ unsigned int(-i) };
|
auto k{ uint64_t(-i) };
|
||||||
for (auto& j : absdata) { j = k; k = k >> 8; }
|
for (auto& j : absdata) { j = k; k = k >> 8; }
|
||||||
crypto_core_ristretto255_scalar_negate(&blob[0], &absdata[0]);
|
crypto_core_ristretto255_scalar_negate(&blob[0], &absdata[0]);
|
||||||
}
|
}
|
||||||
|
@ -653,7 +653,10 @@ namespace ristretto255 {
|
|||||||
~scalar() = default;
|
~scalar() = default;
|
||||||
explicit constexpr scalar(std::array<uint8_t, crypto_core_ristretto255_BYTES>&& in) : blob{ in } {};
|
explicit constexpr scalar(std::array<uint8_t, crypto_core_ristretto255_BYTES>&& in) : blob{ in } {};
|
||||||
explicit constexpr scalar(std::array<uint8_t, crypto_core_ristretto255_BYTES>* in) :blob(*in) {};
|
explicit constexpr scalar(std::array<uint8_t, crypto_core_ristretto255_BYTES>* in) :blob(*in) {};
|
||||||
explicit constexpr scalar(int);
|
explicit constexpr scalar(int64_t);
|
||||||
|
explicit constexpr scalar(int i):scalar(int64_t(i)){}
|
||||||
|
explicit constexpr scalar(uint64_t k){ for (auto& j : blob) { j = k; k = k >> 8; } }
|
||||||
|
explicit constexpr scalar(unsigned int i) :scalar(uint64_t(i)) {}
|
||||||
scalar(scalar&&) = default; // Move constructor
|
scalar(scalar&&) = default; // Move constructor
|
||||||
scalar(const scalar&) = default; // Copy constructor
|
scalar(const scalar&) = default; // Copy constructor
|
||||||
scalar& operator=(scalar&&) = default; // Move assignment.
|
scalar& operator=(scalar&&) = default; // Move assignment.
|
||||||
@ -705,7 +708,7 @@ namespace ristretto255 {
|
|||||||
return operator*(sclr.multiplicative_inverse());
|
return operator*(sclr.multiplicative_inverse());
|
||||||
}
|
}
|
||||||
|
|
||||||
scalar operator*(int i) const& {
|
scalar operator*(int64_t i) const& {
|
||||||
return operator * (scalar(i));
|
return operator * (scalar(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user