1
0
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:
Cheng 2022-03-26 20:39:41 +11:00
parent 78a14309e5
commit fccefe3a97
No known key found for this signature in database
GPG Key ID: D51301E176B31828
4 changed files with 14 additions and 9 deletions

2
.gitmodules vendored
View File

@ -8,4 +8,4 @@
ignore = dirty
[submodule "mpir"]
path = mpir
url = git://github.com/BrianGladman/mpir.git
url = https://github.com/BrianGladman/mpir.git

View File

@ -62,7 +62,8 @@ namespace ro {
return sz;
}
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();
}
}
@ -90,7 +91,8 @@ namespace ro {
j = (*this)->Isqlite3_column_text(i);
}
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;
}

View File

@ -27,14 +27,14 @@ namespace ristretto255 {
bool scalar::constant_time_required{ true };
bool point::constant_time_required{ true };
constexpr scalar::scalar(int i) {
constexpr scalar::scalar(int64_t i) {
if (i >= 0) {
auto k{ unsigned int(i) };
auto k{ uint64_t(i) };
for (auto& j : blob) { j = k; k = k >> 8; }
}
else{
else {
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; }
crypto_core_ristretto255_scalar_negate(&blob[0], &absdata[0]);
}

View File

@ -653,7 +653,10 @@ namespace ristretto255 {
~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(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(const scalar&) = default; // Copy constructor
scalar& operator=(scalar&&) = default; // Move assignment.
@ -705,7 +708,7 @@ namespace ristretto255 {
return operator*(sclr.multiplicative_inverse());
}
scalar operator*(int i) const& {
scalar operator*(int64_t i) const& {
return operator * (scalar(i));
}