Quick trial of HMAC-MD5 auth + timings

This commit is contained in:
Simon Walton 2018-03-16 11:50:03 -07:00
parent 82b68fce8d
commit 480f76c21a
3 changed files with 33 additions and 3 deletions

View file

@ -13,6 +13,12 @@
#include "HmacAuth.h"
#define HIFI_HASH_TIMINGS
#ifdef HIFI_HASH_TIMINGS
#include "NetworkLogging.h"
#include "SharedUtil.h"
#endif
int NLPacket::localHeaderSize(PacketType type) {
bool nonSourced = PacketTypeEnum::getNonSourcedPackets().contains(type);
bool nonVerified = PacketTypeEnum::getNonVerifiedPackets().contains(type);
@ -230,7 +236,19 @@ void NLPacket::writeVerificationHashGivenSecret(const QUuid& connectionSecret) c
auto offset = Packet::totalHeaderSize(isPartOfMessage()) + sizeof(PacketType) + sizeof(PacketVersion)
+ NUM_BYTES_RFC4122_UUID;
#ifdef HIFI_HASH_TIMINGS
static quint64 totalTime = 0;
static int timedHashes = 0;
quint64 startTime = usecTimestampNow();
#endif
QByteArray verificationHash = hashForPacketAndSecret(*this, connectionSecret);
#ifdef HIFI_HASH_TIMINGS
quint64 endTime = usecTimestampNow();
totalTime += endTime - startTime;
if ((++timedHashes % 20) == 0) {
qCDebug(networking) << "Average packet hash time " << (totalTime / timedHashes / 1000.0f) << " ms";
}
#endif
memcpy(_packet.get() + offset, verificationHash.data(), verificationHash.size());
}

View file

@ -22,10 +22,22 @@ bool HmacAuth::setKey(const char * keyValue, int keyLen) {
switch (_authMethod)
{
case MD5:
sslStruct = EVP_md5();
break;
case SHA1:
sslStruct = EVP_sha1();
break;
case SHA224:
sslStruct = EVP_sha224();
break;
case SHA256:
sslStruct = EVP_sha256();
break;
case RIPEMD160:
sslStruct = EVP_ripemd160();
break;

View file

@ -13,10 +13,10 @@ class QUuid;
class HmacAuth {
public:
enum AuthMethod { SHA1, RIPEMD160 };
enum AuthMethod { MD5, SHA1, SHA224, SHA256, RIPEMD160 };
typedef std::vector<unsigned char> HmacHash;
HmacAuth(AuthMethod authMethod = SHA1);
explicit HmacAuth(AuthMethod authMethod = MD5);
~HmacAuth();
bool setKey(const char * keyValue, int keyLen);
@ -26,7 +26,7 @@ public:
private:
std::unique_ptr<hmac_ctx_st> _hmacContext;
AuthMethod _authMethod { SHA1 };
AuthMethod _authMethod { MD5 };
};
#endif // hifi_HmacAuth_h