forked from cheng/wallet
crash worked around
But the way I fixed it proves it is a visual studio bug, not my bug
This commit is contained in:
parent
5a9296e529
commit
003d671c25
@ -446,6 +446,38 @@ namespace ristretto255 {
|
|||||||
};
|
};
|
||||||
assert(i == 0);
|
assert(i == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename T>
|
||||||
|
ristretto255::hsh<hashsize>& operator << (const T& j) {
|
||||||
|
if constexpr (std::is_same_v<std::remove_cvref_t<T>, std::span<const byte> >) {
|
||||||
|
int i = crypto_generichash_blake2b_update(
|
||||||
|
&(this->st),
|
||||||
|
&j[0],
|
||||||
|
j.size()
|
||||||
|
);
|
||||||
|
if (i) throw HashReuseException();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
else if constexpr (std::is_same_v<std::remove_cvref_t<T>, const char*>) {
|
||||||
|
int i = crypto_generichash_blake2b_update(
|
||||||
|
&(this->st),
|
||||||
|
(const unsigned char*)(j),
|
||||||
|
strlen(j) + 1
|
||||||
|
);
|
||||||
|
if (i) throw HashReuseException();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
auto sj = ro::serialize(j);
|
||||||
|
int i = crypto_generichash_blake2b_update(
|
||||||
|
&(this->st),
|
||||||
|
(const unsigned char*)&sj[0],
|
||||||
|
sj.size()
|
||||||
|
);
|
||||||
|
if (i) throw HashReuseException();
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
}
|
||||||
template<typename T, typename... Args,
|
template<typename T, typename... Args,
|
||||||
typename std::enable_if< is_serializable<const T, Args...>::value, int >::type dummy_arg = 0
|
typename std::enable_if< is_serializable<const T, Args...>::value, int >::type dummy_arg = 0
|
||||||
>explicit hsh(const T first, Args... args) {
|
>explicit hsh(const T first, Args... args) {
|
||||||
@ -470,9 +502,9 @@ namespace ristretto255 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
/*
|
||||||
template<unsigned int hashsize, typename T>
|
template<unsigned int hashsize, typename T>
|
||||||
ristretto255::hsh<hashsize>& operator <<(ristretto255::hsh<hashsize> u, const T& j) {
|
ristretto255::hsh<hashsize>& operator <<(ristretto255::hsh<hashsize> &u, const T& j) {
|
||||||
if constexpr (std::is_same_v<std::remove_cvref_t<T>, std::span<const byte> >) {
|
if constexpr (std::is_same_v<std::remove_cvref_t<T>, std::span<const byte> >) {
|
||||||
int i = crypto_generichash_blake2b_update(
|
int i = crypto_generichash_blake2b_update(
|
||||||
&u.st,
|
&u.st,
|
||||||
@ -502,18 +534,7 @@ namespace ristretto255 {
|
|||||||
return u;
|
return u;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
template<unsigned int hashsize, const char *>
|
|
||||||
ristretto255::hsh<hashsize>& operator <<(ristretto255::hsh<hashsize> u, const char* sz) {
|
|
||||||
int i = crypto_generichash_blake2b_update(
|
|
||||||
&u.st,
|
|
||||||
static_cast<std::nullptr_t>(sz),
|
|
||||||
// (unsigned char*)(sz),
|
|
||||||
strlen(sz) + 1
|
|
||||||
);
|
|
||||||
if (i) throw HashReuseException();
|
|
||||||
return u;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// This constructs a finalized hash.
|
// This constructs a finalized hash.
|
||||||
|
@ -885,11 +885,20 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ILogMessage("\tTesting hashing speed, hashes of hashes");
|
ILogMessage("\tTesting hashing speed, hashes of hashes");
|
||||||
|
auto first{ "first" };
|
||||||
|
auto second{ "second" };
|
||||||
|
if ( hash(first, second)
|
||||||
|
!=
|
||||||
|
hash(
|
||||||
|
hsh() << first << second
|
||||||
|
)
|
||||||
|
) throw MyException("inconsistent hashes generated on strings");
|
||||||
const char* _ = "hello";
|
const char* _ = "hello";
|
||||||
hash a(_);
|
hash a(_);
|
||||||
hash b(a);
|
hash b(a);
|
||||||
hash c(b);
|
hash c(b);
|
||||||
if(hash(b, c) != hash(hsh() << b << c)) throw MyException("inconsistent hashes generated");
|
if (hash(b, c) != hash(hsh() << b << c)
|
||||||
|
) throw MyException("inconsistent hashes generated");
|
||||||
constexpr int hashes{ 3000 };
|
constexpr int hashes{ 3000 };
|
||||||
start_time = std::chrono::high_resolution_clock::now();
|
start_time = std::chrono::high_resolution_clock::now();
|
||||||
for (int i{ 0 }; i < hashes; i++) {
|
for (int i{ 0 }; i < hashes; i++) {
|
||||||
|
Loading…
Reference in New Issue
Block a user