forked from cheng/wallet
My too clever time code is obsolete now that C++ has long had
good support for durations. Switched everything that needed a high resolution timer to use a high resolution timer.
This commit is contained in:
parent
1b3bb9f35e
commit
2133f51ffe
@ -523,9 +523,9 @@ namespace ristretto255 {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!(singletonApp->m_quick_unit_test)){
|
if (!(singletonApp->m_quick_unit_test)){
|
||||||
ro::msec start_time{ ro::msec_since_epoch() };
|
auto start_time{ std::chrono::high_resolution_clock::now() };
|
||||||
auto s1{ DeriveStrongSecret(&text_secret[0]) };
|
auto s1{ DeriveStrongSecret(&text_secret[0]) };
|
||||||
decltype(start_time) end_time{ ro::msec_since_epoch() };
|
auto end_time{ std::chrono::high_resolution_clock::now() };
|
||||||
if (s1 == scalar({ 0x59, 0xf6, 0x73, 0xb4, 0xa0, 0xc7, 0x0d, 0x8b, 0x51, 0xe5, 0x87, 0x7c, 0xf5, 0xd7, 0x6f, 0x55, 0x31, 0xa7, 0x0b, 0x14, 0x28, 0x54, 0x97, 0x08, 0x9f, 0x27, 0x83, 0xe1, 0xc7, 0x5f, 0x55, 0x0f })) {
|
if (s1 == scalar({ 0x59, 0xf6, 0x73, 0xb4, 0xa0, 0xc7, 0x0d, 0x8b, 0x51, 0xe5, 0x87, 0x7c, 0xf5, 0xd7, 0x6f, 0x55, 0x31, 0xa7, 0x0b, 0x14, 0x28, 0x54, 0x97, 0x08, 0x9f, 0x27, 0x83, 0xe1, 0xc7, 0x5f, 0x55, 0x0f })) {
|
||||||
wxLogMessage("\t\tObtained expected strong scalar secret from scalar(7)");
|
wxLogMessage("\t\tObtained expected strong scalar secret from scalar(7)");
|
||||||
}
|
}
|
||||||
@ -534,8 +534,9 @@ namespace ristretto255 {
|
|||||||
szError = "Fail\tUnexpected strong scalar secret from text secret";
|
szError = "Fail\tUnexpected strong scalar secret from text secret";
|
||||||
ILogError(szError.c_str());
|
ILogError(szError.c_str());
|
||||||
}
|
}
|
||||||
wxLogMessage("\t\tStrong secret derivation took %d milliseconds", (end_time - start_time).count());
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds> (end_time - start_time) };
|
||||||
uintmax_t strengthening = (end_time - start_time).count() * shared_secrets_per_second / 1000;
|
wxLogMessage("\t\tStrong secret derivation took %lld microseconds", time_taken.count());
|
||||||
|
uintmax_t strengthening = time_taken.count() * shared_secrets_per_second / 1000000;
|
||||||
wxLogMessage("\t\tslows brute force password search by a factor of %ju", strengthening);
|
wxLogMessage("\t\tslows brute force password search by a factor of %ju", strengthening);
|
||||||
wxLogMessage("\t\tstrengthens password by %u bits",
|
wxLogMessage("\t\tstrengthens password by %u bits",
|
||||||
static_cast<unsigned int>(rounded_log2(static_cast<uint32_t>(strengthening))));
|
static_cast<unsigned int>(rounded_log2(static_cast<uint32_t>(strengthening))));
|
||||||
@ -571,13 +572,13 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
ILogMessage("\tTest shared secret generation speed.");
|
ILogMessage("\tTest shared secret generation speed.");
|
||||||
try {
|
try {
|
||||||
// throw MyException("fake failure to test failure handling");
|
// throw MyException("fake failure to test failure handling");
|
||||||
unsigned int secrets{ 10*(3-2*debug_mode) };
|
unsigned int secrets{ 10 };
|
||||||
scalar a{ scalar::random() };
|
scalar a{ scalar::random() };
|
||||||
scalar b{ scalar::random() };
|
scalar b{ scalar::random() };
|
||||||
scalar c;
|
scalar c;
|
||||||
auto B{ a.timesBase() };
|
auto B{ a.timesBase() };
|
||||||
decltype(B) A, C;
|
decltype(B) A, C;
|
||||||
ro::msec start_time{ ro::msec_since_epoch() };
|
auto start_time{ std::chrono::high_resolution_clock::now() };
|
||||||
for (unsigned int i{ secrets }; i; i--) {
|
for (unsigned int i{ secrets }; i; i--) {
|
||||||
c = a + b;
|
c = a + b;
|
||||||
C = c * B;
|
C = c * B;
|
||||||
@ -586,11 +587,12 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
b = c + a;
|
b = c + a;
|
||||||
B = b * A;
|
B = b * A;
|
||||||
}
|
}
|
||||||
decltype(start_time) end_time{ ro::msec_since_epoch() };
|
auto end_time{ std::chrono::high_resolution_clock::now() };
|
||||||
if (!B.valid()) { throw MyException("Unexpected invalid scalar"); }
|
if (!B.valid()) { throw MyException("Unexpected invalid scalar"); }
|
||||||
wxLogMessage("\t\t%d shared secrets from public and private keys took %d milliseconds", secrets * 3, (end_time - start_time).count());
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds> (end_time - start_time) };
|
||||||
if ((end_time - start_time).count()) {
|
wxLogMessage("\t\t%d shared secrets from public and private keys took %lld microseconds", secrets * 3, time_taken.count());
|
||||||
shared_secrets_per_second = secrets * 3000 / (end_time - start_time).count();
|
if (time_taken.count()) {
|
||||||
|
shared_secrets_per_second = secrets * 3000000 / time_taken.count();
|
||||||
wxLogMessage("\t\t in one second, can generate %ju shared secrets",
|
wxLogMessage("\t\t in one second, can generate %ju shared secrets",
|
||||||
shared_secrets_per_second
|
shared_secrets_per_second
|
||||||
);
|
);
|
||||||
@ -624,11 +626,12 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
ptAnnPublicKey, // Signer's public key
|
ptAnnPublicKey, // Signer's public key
|
||||||
szHello // Text to be signed.
|
szHello // Text to be signed.
|
||||||
);
|
);
|
||||||
ro::msec start_time{ ro::msec_since_epoch() };
|
auto start_time{ std::chrono::high_resolution_clock::now() };
|
||||||
if (sig.verify())
|
if (sig.verify())
|
||||||
{
|
{
|
||||||
decltype(start_time) end_time{ ro::msec_since_epoch() };
|
auto end_time{ std::chrono::high_resolution_clock::now() };
|
||||||
wxLogMessage("\t\tverification of Schnorr signature took %d milliseconds", (end_time - start_time).count());
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds> (end_time - start_time) };
|
||||||
|
wxLogMessage("\t\tverification of Schnorr signature took %lld microseconds", time_taken.count());
|
||||||
|
|
||||||
ILogMessage("\t\tSchnorr Signature valid");
|
ILogMessage("\t\tSchnorr Signature valid");
|
||||||
}
|
}
|
||||||
@ -760,7 +763,7 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
szError = "Fail\tInvalid test vectors.";
|
szError = "Fail\tInvalid test vectors.";
|
||||||
ILogError(szError.c_str());
|
ILogError(szError.c_str());
|
||||||
}
|
}
|
||||||
ro::msec start_time{ ro::msec_since_epoch() };
|
auto start_time{ std::chrono::high_resolution_clock::now() };
|
||||||
auto sclr_a = scalar::random();
|
auto sclr_a = scalar::random();
|
||||||
auto sclr_b = scalar::random();
|
auto sclr_b = scalar::random();
|
||||||
if (sclr_a == sclr_b)throw MyException("random not very random");
|
if (sclr_a == sclr_b)throw MyException("random not very random");
|
||||||
@ -815,11 +818,11 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
decltype(start_time) end_time{ ro::msec_since_epoch() };
|
auto end_time{ std::chrono::high_resolution_clock::now() };
|
||||||
auto time_to_do_crypto{ end_time - start_time };
|
auto time_to_do_crypto{ std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time) };
|
||||||
wxLogMessage(_T("\t\ttest of ristretto test vectors took %d milliseconds"), time_to_do_crypto.count());
|
wxLogMessage(_T("\t\ttest of ristretto test vectors took %lld microseconds"), time_to_do_crypto.count());
|
||||||
ILogMessage("\tTesting generation of shared secrets.");
|
ILogMessage("\tTesting generation of shared secrets.");
|
||||||
start_time = ro::msec_since_epoch();
|
start_time = std::chrono::high_resolution_clock::now();
|
||||||
scalar sclrAnonSessionSecretKey{ scalar::random() };
|
scalar sclrAnonSessionSecretKey{ scalar::random() };
|
||||||
point ptAnonSessionPublicKey{ sclrAnonSessionSecretKey * point::ptBase };
|
point ptAnonSessionPublicKey{ sclrAnonSessionSecretKey * point::ptBase };
|
||||||
|
|
||||||
@ -835,25 +838,27 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
ILogError(szError.c_str());
|
ILogError(szError.c_str());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
end_time = ro::msec_since_epoch();
|
end_time = std::chrono::high_resolution_clock::now();
|
||||||
wxLogMessage(_wx("\tshared secret generation both ways and comparison took %d milliseconds"), (end_time - start_time).count());
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time) };
|
||||||
|
wxLogMessage(_wx("\tshared secret generation both ways and comparison took %lld microseconds"), time_taken.count());
|
||||||
}
|
}
|
||||||
ILogMessage("\tTesting hashing speed");
|
ILogMessage("\tTesting hashing speed");
|
||||||
{
|
{
|
||||||
int hashes{ 20000 };
|
int hashes{ 20000 };
|
||||||
point sharedSecretKey = sclrAnonSessionSecretKey * ptServerPermanentPublicKey;
|
point sharedSecretKey = sclrAnonSessionSecretKey * ptServerPermanentPublicKey;
|
||||||
ServerCopyOfSharedSecret = hash<512>(sharedSecretKey, MessageTextToBeSecured);
|
ServerCopyOfSharedSecret = hash<512>(sharedSecretKey, MessageTextToBeSecured);
|
||||||
start_time = ro::msec_since_epoch();
|
start_time = std::chrono::high_resolution_clock::now();
|
||||||
for (int i{ 0 }; i < hashes; i++) {
|
for (int i{ 0 }; i < hashes; i++) {
|
||||||
sharedSecretKey.blob[3] = ServerCopyOfSharedSecret.blob[5];
|
sharedSecretKey.blob[3] = ServerCopyOfSharedSecret.blob[5];
|
||||||
ServerCopyOfSharedSecret = hash<512>(sharedSecretKey, MessageTextToBeSecured);
|
ServerCopyOfSharedSecret = hash<512>(sharedSecretKey, MessageTextToBeSecured);
|
||||||
}
|
}
|
||||||
end_time = ro::msec_since_epoch();
|
end_time = std::chrono::high_resolution_clock::now();
|
||||||
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time) };
|
||||||
{ bool f = false; //dont optimize pointless calculation
|
{ bool f = false; //dont optimize pointless calculation
|
||||||
for (auto x : ServerCopyOfSharedSecret.blob) { f = f || x; }
|
for (auto x : ServerCopyOfSharedSecret.blob) { f = f || x; }
|
||||||
if (f) {
|
if (f) {
|
||||||
wxLogMessage(_wx("\t\t%d hashes of pairs of shared secrets took %d milliseconds"), hashes, (end_time - start_time).count());
|
wxLogMessage(_wx("\t\t%d hashes of pairs of shared secrets took %lld microseconds"), hashes, time_taken.count());
|
||||||
wxLogMessage(_wx("\t\tin one millisecond, can hash %d short messages"), hashes / (end_time - start_time).count());
|
wxLogMessage(_wx("\t\tin one millisecond, can hash %lld short messages"), 1000LL*hashes / time_taken.count());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -864,31 +869,33 @@ static bool TestShareSecretGenerationSpeed(void) {
|
|||||||
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 = ro::msec_since_epoch();
|
start_time = std::chrono::high_resolution_clock::now();
|
||||||
for (int i{ 0 }; i < hashes; i++) {
|
for (int i{ 0 }; i < hashes; i++) {
|
||||||
a = hash(b, c);
|
a = hash(b, c);
|
||||||
b = hash(c, a);
|
b = hash(c, a);
|
||||||
c = hash(a, b);
|
c = hash(a, b);
|
||||||
}
|
}
|
||||||
end_time = ro::msec_since_epoch();
|
end_time = std::chrono::high_resolution_clock::now();
|
||||||
|
auto time_taken{ std::chrono::duration_cast<std::chrono::microseconds> (end_time - start_time) };
|
||||||
{ bool f = false; //dont optimize pointless calculation away
|
{ bool f = false; //dont optimize pointless calculation away
|
||||||
for (auto x : c.blob) { f = f || x; }
|
for (auto x : c.blob) { f = f || x; }
|
||||||
if (f) {
|
if (f) {
|
||||||
wxLogMessage(_wx("\t\t%d hashes of a pair of hashes took %d milliseconds"), hashes * 3, (end_time - start_time).count());
|
wxLogMessage(_wx("\t\t%d hashes of a pair of hashes took %lld microseconds"), hashes * 3, time_taken.count());
|
||||||
if ((end_time - start_time).count() > 0) {
|
if (time_taken.count() > 0) {
|
||||||
wxLogMessage(_wx("\t\tin one millisecond, can hash %d pairs of 256 bit hashes"), hashes * 3 / (end_time - start_time).count());
|
wxLogMessage(_wx("\t\tin one millisecond, can hash %lld pairs of 256 bit hashes"), hashes * 3000ll / time_taken.count());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
uint8_t buff[hashes * 3 * 64];
|
uint8_t buff[hashes * 3 * 64];
|
||||||
randombytes_buf(std::span<byte>(buff));
|
randombytes_buf(std::span<byte>(buff));
|
||||||
start_time = ro::msec_since_epoch();
|
start_time = std::chrono::high_resolution_clock::now();
|
||||||
c = hash(buff);
|
c = hash(buff);
|
||||||
end_time = ro::msec_since_epoch();
|
end_time = std::chrono::high_resolution_clock::now();
|
||||||
|
time_taken = std::chrono::duration_cast<std::chrono::microseconds> (end_time - start_time);
|
||||||
{ bool f = false; //dont optimize pointless calculation away
|
{ bool f = false; //dont optimize pointless calculation away
|
||||||
for (auto x : c.blob) { f = f || x; }
|
for (auto x : c.blob) { f = f || x; }
|
||||||
if (f) {
|
if (f) {
|
||||||
wxLogMessage(_wx("\t\tone hash of %d bytes took %d milliseconds"), hashes * 3 * 64, (end_time - start_time).count());
|
wxLogMessage(_wx("\t\tone hash of %d bytes took %lld microseconds"), hashes * 3 * 64, time_taken.count());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user